You are on page 1of 20

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

KHOA MẠNG MÁY TÍNH



----------------------------------------------------------

----------------------------------------------------------

BÁO CÁO SEMINAR


LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
ĐỀ TÀI: CHƯƠNG TRÌNH BIÊN SOẠN NHẠC

Sinh Viên Thực Hiện:


Trần Ngọc Long 22520822
Nguyễn Văn Nam 22520922
Nguyễn Hoàng Phúc 22521127
2

MỤC LỤC

MỤC LỤC.............................................................................................................2
YÊU CẦU BÀI TOÁN..........................................................................................4
CÁC LỚP TRONG BÀI TOÁN............................................................................5
1. LỚP KiTu.....................................................................................................................................5
2. LỚP NotNhac KẾ THỪA LỚP KiTu...............................................................................................5
3. LỚP DauLang KẾ THỪA LỚP KiTu...............................................................................................5
4. LỚP BaiNhac...............................................................................................................................5
5. SƠ ĐỒ CÁC LỚP ĐỐI TƯỢNG.....................................................................................................6
GIẢI QUYẾT YÊU CẦU BÀI TOÁN..................................................................7
1. Soạn một bản nhạc......................................................................................................................7
1.1 Nhập 1 bài nhạc...................................................................................................................7
1.1 Xuất 1 bài nhạc...................................................................................................................7
2. Tìm và đếm có bao nhiêu dấu lặng đen trong bản nhạc................................................................7
3. Cho biết nốt nhạc có cao độ cao nhất, thấp nhất trong bản nhạc.................................................7
CÀI ĐẶT BÀI TOÁN............................................................................................9
1.LỚP KiTu..........................................................................................................................................9
1.1 Constructor.........................................................................................................................9
1.2 Hàm nhap().........................................................................................................................9
1.3 Hàm play().........................................................................................................................10
1.4 Các hàm lấy giá trị..............................................................................................................10
1.5 Hàm checkLangDen()........................................................................................................10
1.6 Hàm hỗ trợ màu sắc...........................................................................................................11
2. LỚP NotNhac............................................................................................................................11
2.1 Constructor........................................................................................................................11
2.2 Hàm nhap()........................................................................................................................12
2.3 Các hàm trả về giá trị.........................................................................................................12
2.4 Hàm play().........................................................................................................................12
2.5 Hàm hỗ trợ playSound(const string& filename)..................................................................13
3. LỚP DauLang............................................................................................................................13
3

3.1 Constructor........................................................................................................................13
3.2 Hàm checkLangDen()........................................................................................................13
3.3 Hàm play().........................................................................................................................14
4. LỚP BaiNhac.............................................................................................................................14
4.1 Constructor và destructor..................................................................................................14
4.2 Hàm thembainhac()...........................................................................................................14
4.3 Hàm demDauLang()..........................................................................................................15
4.4 Hàm getNotecaonhat()......................................................................................................15
4.5 Hàm getNotethapnhat()....................................................................................................16
4.6 Hàm hỗ trợ playbainhaccho(const vector<KiTu*>& bainhac) ngoài lớp BaiNhac................16
4.7 Hàm playbainhac().............................................................................................................16
5. HÀM main()...............................................................................................................................17
CHẠY CHƯƠNG TRÌNH...................................................................................18
4

YÊU CẦU BÀI TOÁN


Xây dựng chương trình mô phỏng biên soạn nhạc với các ký kiệu âm nhạc:
+ Nốt nhạc: là ký hiệu để xác định cao độ (độ cao), trường độ (độ dài, độ ngân
vang) của từng âm thanh
- Có 7 ký hiệu nốt nhạc để xác định cao độ từ thấp đến cao, đó là Đô (C),
Rê (D), Mi (E), Fa (F), Sol (G), La (A), và Si (B)
+Trường độ: dùng 7 hình nốt để thể hiện:
- Nốt tròn có trường độ bằng 4 nốt đen
- Nốt trắng có trường độ bằng 2 nốt đen
- Nốt đen có trường độ bằng 1 phách (đơn vị thời gian trong âm nhạc)
- Nốt móc đơn có trường độ bằng 1/2 nốt đen
- Nốt móc đôi có trường độ bằng 1/4 nốt đen
- Nốt móc tam có trường độ bằng 1/8 nốt đen
- Nốt móc tứ có trường độ bằng 1/16 nốt đen
+ Dấu lặng (Z - Zero) là ký hiệu cho biết phải ngưng, không diễn tấu âm thanh
(không có cao độ) trong một khoảng thời gian. Các dấu lặng trong thời gian tương
ứng (giá trị trường độ) với dạng dấu nhạc nào, thì cũng có tên gọi tương tự:

Trường 4 2 1 1/2 1/4 1/8 1/16


độ

Áp dụng kiến thức lập trình hướng đối tượng (kế thừa, đa hình) thiết kế sơ đồ chi
tiết các lớp đối tượng và xây dựng chương trình thực hiện các yêu cầu sau:

1. Soạn một bản nhạc.

2. Tìm và đếm có bao nhiêu dấu lặng đen (Q) trong bản nhạc.

3. Cho biết nốt nhạc có cao độ cao nhất, thấp nhất trong bản nhạc.
5

CÁC LỚP TRONG BÀI TOÁN


1. LỚP KiTu
 Thuộc tính:
 truongDo: double
 tenKitu: string
 Phương thức:
 nhap() :void :Nhập vào giá trị của truongDo
 play() :void :Xuất ra kí tự của nốt nhạc
 getCaoDo(): int : trả về giá trị mặc định là 0
 getTruongDo(): double
 getTenKiTu(): string
 checkLangDen(): bool : trả về giá trị mặc định là false
 getSoundFile(): string : trả về tên file âm thanh
2. LỚP NotNhac KẾ THỪA LỚP KiTu
 Thuộc tính:
 caoDo: int
 tenSoundFile: string
 Phương thức:
 nhap() :void :viết lại hàm nhap() của lớp KiTu(nhập cả hai caoDo và
truongDo) và gán tenSoundFile tương ứng với tên file âm thanh của cao độ
đã nhập.
 play() :void : phát ra âm thanh với sự hỗ trợ từ playSound()
 getSoundFile(): string
 getCaoDo():int
 Hàm hỗ trợ ngoài lớp
 playSound() :void :phát ra âm thanh tương ứng với tenSoundFile
3. LỚP DauLang KẾ THỪA LỚP KiTu
 Thuộc tính: Không có
 Phương thức:
 checkLangDen(): bool :viết lại hàm checkLangDen() của lớp KiTu, trả về
giá trị True
 play(): void : hàm làm chương trình ngủ trong một khoảng thời gian
4. LỚP BaiNhac
 Thuộc tính: bainhac :vector<KiTu*>
 Phương thức:
 thembainhac(): void
 demDauLang() :void
 getNotecaonhat():void
6

 getNotethapnhat():void
 playbainhac() const:void
 Hàm hỗ trợ ngoài lớp:
 playbainhaccho(): void
5. SƠ ĐỒ CÁC LỚP ĐỐI TƯỢNG

Các lớp NotNhac và DauLang được kế thừa các phương thức và các thuộc
tính( được khai báo protected) của lớp KiTu.
 Tính kế thừa
Vector <KiTu*> bainhac dùng để quản lí cả hai đối tượng DauLang và NotNhac
trong cùng 1 vector này. Các phương thức có cùng tên gọi nhưng lại có cách sử
dụng khác nhau tùy theo đối tượng.
 Tính đa hình
7

GIẢI QUYẾT YÊU CẦU BÀI TOÁN


1. Soạn một bản nhạc
1.1 Nhập 1 bài nhạc
- Hàm main() sẽ gọi hàm thembainhac() của lớp bainhac
- Người dùng chọn có 3 lựa chọn.
+ Nhập 1 NotNhac: hàm Nhập , tạo một đối tượng NotNhac và đưa vào
vector KiTu
+ Nhập 1 DauLang: gọi hàm Nhập , tạo một đối tượng DauLang và đưa
vào vector KiTu
+Phát bài nhạc : hàm sẽ kết thúc, nếu không thì sẽ tiếp tục đưa ra các lựa
chọn nhập vào cac NotNhac và DauLang
1.1 Xuất 1 bài nhạc
- Hàm main() sẽ gọi hàm playbainhac() của lớp bainhac
- Hàm sẽ kết thúc nếu vector bainhac rỗng
- Nếu không rỗng hàm sẽ gọi hàm playbainhaccho(const vector<KiTu*>&
bainhac) để vừa phát ra âm thanh, vừa xuất kí hiệu âm thanh.
2. Tìm và đếm có bao nhiêu dấu lặng đen trong bản nhạc
- Hàm main() sẽ gọi hàm demdaulang() của lớp bainhac
- Nếu vector bainhac rỗng thì hàm sẽ kết thúc.
- Nếu vector bainhac không rỗng thì vòng lặp for sẽ duyệt quá các phần
tử của vector bainhac để kiểm tra dấu lặng đen. Nếu có, biến
countlangden được tăng thêm một.
- Khi vòng lặp kết thúc, xuất ra giá trị biến countlangden tương ứng với số
dấu lặng đen trong bài nhạc.
3. Cho biết nốt nhạc có cao độ cao nhất, thấp nhất trong bản
nhạc
- Hàm main() sẽ gọi hàm getNotecaonhat() của lớp bainhac
- Nếu vector bainhac rỗng thì hàm sẽ kết thúc.
- Nếu không thì hàm sẽ tạo ra biến hasNote có kiểu bool (dùng để kiểm tra
xem bainhac có nốt nhạc hay không), biến max được gán bằng -1 và biến
temp(vị trí của kí hiệu trong vector bainhac) được gán bằng 0.
- Một vòng lặp for duyệt qua các phần tử của vector bainhac. Nếu cao độ
bằng 0( Dấu Lặng) thì sẽ chuyển sang vòng lặp tiếp theo. Nếu cao độ
khác 0 và lớn hơn max thì gán cao độ đó cho max, lưu lại vị trí của kí
hiệu vào biến temp, đồng thời sẽ thay đổi giá trị hasNote sang true.
8

- Sau khi vòng lặp kết thúc, nếu hasNote có giá trị false thì sẽ cho biết bài
nhạc chỉ có dấu lăng, ngược lại thì hàm sẽ xuất ra nốt có cao độ cao nhất
- Tương tự với hàm tìm nốt thấp nhất
9

CÀI ĐẶT BÀI TOÁN


1.LỚP KiTu

1.1 Constructor

1.2 Hàm nhap()


10

1.3 Hàm play()

1.4 Các hàm lấy giá trị

1.5 Hàm checkLangDen()


11

1.6 Hàm hỗ trợ màu sắc

2. LỚP NotNhac

2.1 Constructor
12

2.2 Hàm nhap()

2.3 Các hàm trả về giá trị

2.4 Hàm play()


13

2.5 Hàm hỗ trợ playSound(const string& filename)

3. LỚP DauLang

3.1 Constructor

3.2 Hàm checkLangDen()


14

3.3 Hàm play()

4. LỚP BaiNhac

4.1 Constructor và destructor

4.2 Hàm thembainhac()


15

4.3 Hàm demDauLang()

4.4 Hàm getNotecaonhat()


16

4.5 Hàm getNotethapnhat()

4.6 Hàm hỗ trợ playbainhaccho(const vector<KiTu*>& bainhac)


ngoài lớp BaiNhac

4.7 Hàm playbainhac()


17

5. HÀM main()
18

CHẠY CHƯƠNG TRÌNH

- Nhập vào Note:

- Nhập vào dấu lặng

- Nhập liên tục các nốt nhạc và dấu lặng


19

- Kết quả: Một dãy kí hiệu âm thanh xuất hiện lần lượt cùng âm thanh
được phát ra. Sau đó, chương trình xuất ra số lượng dấu lặng đen, nốt
cao nhất và nốt thấp nhất.

- Đếm số dấu lặng đen:

- Xuất ra nốt có cao độ lớn nhất và thấp nhất

- Phát lại bài nhạc


20

- Kết thúc chương trình:

You might also like