Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 24

HỌ TÊN: NGUYỄN THỊ PHƯƠNG

MSV: 2251162117
LỚP: 64HTTT2

ĐỀ 1: QUẢN LÝ MƯỢN SÁCH THƯ VIỆN


Khai bảo lớp Bạn Đọc (mã bạn đọc, Họ tên, Địa chỉ, Số ĐT, loại bạn đọc), mã bạn đọc là một số nguyên có 5 chữ số, tự động tăng.
Khai bảo lớp Sách gồm các thuộc tính (mã sách, Tên sách, Tác giả, Chuyên ngành, Năm xuất bản) – trong đó chuyên ngành có thể gồm: Khoa học
tự nhiên, Văn học – Nghệ thuật, Điện tử viễn thông, Công nghệ thông tin. Mã sách là một số nguyên có 5 chữ số, tự động tăng.
Khai bảo lớp Bảng QL Mượn sách có quan hệ kết hợp (association) với lớp Bạn đọc và lớp Sách trong đó một bạn đọc sẽ được phép mượn không
quá 5 đầu sách khác nhau, mỗi đầu sách không mượn quá 3 cuốn. Ghi rõ tình trạng hiện thời của sách khi cho mượn.
Viết chương trình thực hiện các yêu cầu sau:
1. Nhập danh sách đầu sách mới. In ra danh sách các đầu sách đã có.
2. Nhập danh sách bạn đọc. In ra danh sách bạn đọc đã có.
3. Lập Bảng QL mượn sách cho mỗi bạn đọc bằng cách nhập các đầu sách mà bạn đọc đã mượn và in danh sách ra màn hình. (chú ý: cùng một
loại bạn đọc với một đầu sách thì không thể xuất hiện 2 lần trong bảng này).
4. Sắp xếp danh sách Quản lý mượn sách:
a. Theo Họ tên bạn đọc.
b. Theo Số lượng cuốn sách được mượn (giảm dần).
5. Tìm kiếm và hiển thị danh sách mượn sách theo tên bạn đọc
CLASS SACH
#Sach.h
1. #pragma once
2. #include <iostream>
3. #include <string>
4. #include <iomanip>
5.
6. using namespace std;
7. class Sach {
8. // Bien static de theo doi ID cua sach
9. static int idSach;
10. string maSach, tenSach, tacGia, chuyenNganh;
11. int namXuatBan;
12. bool daMuon; // Bien kiem tra trang thai sach da muon hay chua
13.
14. public:
15. // Ham khoi tao mac dinh, khoi tao trang thai sach chua muon
16. Sach();
17.
18. // Ham nhap thong tin sach
19. void nhapSach();
20.
21. // Getter cho ma sach
22. string get_maSach() const;
23.
24. // Getter cho ten sach
25. string get_tenSach() const;
26.
27. // Getter cho tac gia sach
28. string get_tacGia() const;
29.
30. // Getter cho chuyen nganh cua sach
31. string get_chuyenNganh() const;
32.
33. // Getter cho nam xuat ban cua sach
34. int get_namXuatBan() const;
35.
36. // Getter cho trang thai sach da muon hay chua
37. bool isDaMuon() const;
38.
39. // Setter de cap nhat trang thai sach da muon
40. void setDaMuon(bool daMuon);
41. };
42.
43. // Khoi tao gia tri cho static idSach
44. int Sach::idSach = 0;

#Sach.cpp
1. #include "Sach.h"
2.
3. using namespace std;
4.
5. Sach::Sach() : daMuon(false) {}
6.
7. void Sach::nhapSach() {
8. maSach = "";
9. maSach.insert(0, 5 - to_string(idSach).length(), '0');
10. maSach += to_string(idSach);
11. cout << "Ma sach: " << maSach << endl;
12. cout << "Nhap ten sach: ";
13. getline(cin, tenSach);
14. cout << "Nhap ten tac gia: ";
15. getline(cin, tacGia);
16. do {
17. cout << "Nhap chuyen nganh (khoa hoc tu nhien, van hoc - nghe thuat, dien tu vien thong, cong nghe thong tin): ";
18. getline(cin, chuyenNganh);
19. }while(chuyenNganh !="khoa hoc tu nhien" && chuyenNganh != "van hoc - nghe thuat" && chuyenNganh != "dien tu vien thong" && chuyenNganh
!= "cong nghe thong tin");
20.
21. cout << "Nhap nam xuat ban: ";
22. cin >> namXuatBan;
23. cin.ignore();
24. idSach++;
25. cout << "-----------------------------------------" << endl;
26. }
27.
28. string Sach::get_maSach() const {
29. return maSach;
30. }
31.
32. string Sach::get_tenSach() const {
33. return tenSach;
34. }
35.
36. string Sach::get_tacGia() const {
37. return tacGia;
38. }
39.
40. string Sach::get_chuyenNganh() const {
41. return chuyenNganh;
42. }
43.
44. int Sach::get_namXuatBan() const {
45. return namXuatBan;
46. }
47.
48. bool Sach::isDaMuon() const {
49. return daMuon;
50. }
51.
52. void Sach::setDaMuon(bool daMuon) {
53. this->daMuon = daMuon;
54. }
CLASS NGUOI
#Nguoi.h
1. #pragma once
2. #include <iostream>
3. #include <string>
4. #include <iomanip>
5.
6. using namespace std;
7.
8. class Nguoi {
9. private:
10. string hoTen, diaChi, SDT;
11. public:
12. // Ham nhap thong tin nguoi
13. void nhapTT();
14.
15. // Ham xuat thong tin nguoi
16. void xuatTT() const;
17.
18. // Getter cho ho ten nguoi
19. string get_hoTen() const;
20. };
#Nguoi.cpp
1. #include "Nguoi.h"
2.
3. using namespace std;
4.
5. void Nguoi::nhapTT() {
6. cout << "Nhap ho ten: ";
7. getline(cin, hoTen);
8. cout << "Nhap dia chi: ";
9. getline(cin, diaChi);
10. cout << "Nhap SDT: ";
11. cin >> SDT;
12. cin.ignore();
13. }
14.
15. void Nguoi::xuatTT() const {
16. cout << "Ho va ten: " << hoTen << endl;
17. cout << "Dia chi: " << diaChi << endl;
18. cout << "SDT: " << SDT << endl;
19. }
20.
21. string Nguoi::get_hoTen() const {
22. return hoTen;
23. }
CLASS BANDOC
#BanDoc.h
1. #pragma once
2. #include<bits/stdc++.h>
3. #include <vector>
4. #include "Nguoi.h"
5. #include "Sach.h"
6.
7. using namespace std;
8.
9. // Lop BanDoc ke thua tu lop Nguoi
10. class BanDoc : public Nguoi {
11. static int idDoc;
12. vector<string> maSachDaMuon;
13. string maBanDoc, loaiBanDoc;
14. int soSachMuon;
15.
16. public:
17. // Ham nhap thong tin ban doc
18. void nhapBanDoc(const vector<Sach>& SachDaCo);
19.
20. // Ham xuat thong tin ban doc
21. void xuatBanDoc() const;
22.
23. // Ham xuat thong tin sach da muon
24. void xuatSach() const;
25.
26. // Getter cho ma ban doc
27. string get_maBanDoc() const;
28.
29. // Getter cho so sach da muon
30. int get_soSachMuon() const;
31. };
32.
33. // Khởi tạo giá trị cho biến static idDoc
34. int BanDoc::idDoc = 0;

#BanDoc.cpp
1. #include "BanDoc.h"
2.
3. using namespace std;
4.
5. void BanDoc::nhapBanDoc(const vector<Sach>& SachDaCo) {
6. maBanDoc = "";
7. maBanDoc.insert(0, 5 - to_string(idDoc).length(), '0');
8. maBanDoc += to_string(idDoc);
9. cout << "Ma ban doc: " << maBanDoc << endl;
10. Nguoi::nhapTT();
11. do {
12. cout << "Nhap loai ban doc (sinh vien, hoc vien cao hoc, giao vien): ";
13. getline(cin, loaiBanDoc);
14. } while (loaiBanDoc != "sinh vien" && loaiBanDoc != "hoc vien cao hoc" && loaiBanDoc != "giao vien");
15. idDoc++;
16. cout << "-----------------------------------------" << endl;
17. }
18.
19. void BanDoc::xuatBanDoc() const {
20. cout << "Ma ban doc: " << maBanDoc << endl;
21. Nguoi::xuatTT();
22. cout << "Loai ban doc: " << loaiBanDoc << endl;
23. cout << "-----------------------------------------" << endl;
24. }
25.
26. void BanDoc::xuatSach() const {
27. cout << "So sach da muon: " << soSachMuon << endl;
28. cout << "Ma sach da muon:" << endl;
29. for (int i = 0; i < maSachDaMuon.size(); i++) {
30. cout << i + 1 << ". " << maSachDaMuon[i] << endl;
31. }
32. }
33.
34. string BanDoc::get_maBanDoc() const {
35. return maBanDoc;
36. }
37.
38. int BanDoc::get_soSachMuon() const {
39. return soSachMuon;
40. }
CLASS QUANLYMUONSACH
#QuanLyMuonSach.h
1. #pragma once
2. #include <vector>
3. #include <map>
4. #include <algorithm>
5. #include "BanDoc.h"
6. #include "Sach.h"
7.
8. using namespace std;
9.
10. class QuanLyMuonSach {
11. private:
12. vector<Sach> SachDaCo;
13. map<string, vector<string>> muonSach;
14. map<string, int> soLuongMuonSach;
15.
16. public:
17. // Setter cho danh sach sach da co
18. void setSachDaCo(const vector<Sach>& sachDaCo);
19.
20. // Muon sach cho ban doc
21. void muonSachChoBanDoc(const string& maBanDoc, const vector<string>& maSachMuon);
22.
23. // In bang quan ly muon sach
24. void inBangQuanLyMuonSach() const;
25.
26. // Sap xep danh sach ban doc theo ten
27. void sapXepTheoTenBanDoc(vector<BanDoc>& DSBanDoc);
28.
29. // Sap xep danh sach ban doc theo so luong sach muon
30. void sapXepTheoSoLuongSachMuon(vector<BanDoc>& DSBanDoc);
31.
32. // Tim kiem va in thong tin sach cua mot ban doc
33. void timBanDoc(string ma);
34. };

#QuanLyMuonSach.cpp
1. #include "QuanLyMuonSach.h"
2.
3. using namespace std;
4.
5. void QuanLyMuonSach::setSachDaCo(const vector<Sach>& sachDaCo) {
6. SachDaCo = sachDaCo;
7. }
8.
9. void QuanLyMuonSach::muonSachChoBanDoc(const string& maBanDoc, const vector<string>& maSachMuon) {
10. // Kiem tra so luong sach muon khong vuot qua quy dinh
11. if (muonSach[maBanDoc].size() + maSachMuon.size() > 5) {
12. cout << "Ban doc khong duoc muon qua 5 dau sach khac nhau." << endl;
13. return;
14. }
15.
16. // Kiem tra so luong sach moi dau sach khong vuot qua quy dinh
17. for (const string& maSach : maSachMuon) {
18. if (count(muonSach[maBanDoc].begin(), muonSach[maBanDoc].end(), maSach) >= 3) {
19. cout << "Ban doc khong duoc muon qua 3 cuon cho mot dau sach." << endl;
20. return;
21. }
22. }
23.
24. // Cap nhat trang thai sach da duoc muon
25. for (const string& maSach : maSachMuon) {
26. for (Sach& sach : SachDaCo) {
27. if (sach.get_maSach() == maSach && !sach.isDaMuon()) {
28. sach.setDaMuon(true);
29. break;
30. }
31. }
32. }
33.
34. // Cap nhat bang quan ly muon sach va so luong sach da muon cho moi ban doc
35. muonSach[maBanDoc].insert(muonSach[maBanDoc].end(), maSachMuon.begin(), maSachMuon.end());
36. for (const string& maSach : maSachMuon) {
37. soLuongMuonSach[maBanDoc]++;
38. }
39.
40. cout << "Muon sach cho ban doc " << maBanDoc << " thanh cong." << endl;
41. }
42.
43. void QuanLyMuonSach::inBangQuanLyMuonSach() const {
44. cout << "==================================\nBANG QUAN LY MUON SACH\n==================================" << endl;
45. for (auto it = muonSach.begin(); it != muonSach.end(); ++it) {
46. cout << "Ma ban doc: " << it->first << endl;
47. cout << "Danh sach ma sach da muon:" << endl;
48. for (const string& maSach : it->second) {
49. cout << maSach << endl;
50. }
51. cout << "-----------------------------------------" << endl;
52. }
53. }
54.
55. void QuanLyMuonSach::sapXepTheoTenBanDoc(vector<BanDoc>& DSBanDoc) {
56. sort(DSBanDoc.begin(), DSBanDoc.end(), [](const BanDoc& a, const BanDoc& b) {
57. return a.get_hoTen() < b.get_hoTen();
58. });
59. }
60.
61. void QuanLyMuonSach::sapXepTheoSoLuongSachMuon(vector<BanDoc>& DSBanDoc) {
62. sort(DSBanDoc.begin(), DSBanDoc.end(), [](const BanDoc& a, const BanDoc& b) {
63. return a.get_soSachMuon() > b.get_soSachMuon();
64. });
65. }
66.
67. void QuanLyMuonSach::timBanDoc(string ma) {
68. bool found = false;
69. int i = 1;
70. for (const auto& it : muonSach) {
71. if (it.first == ma) {
72. cout << "So sach da muon: " << soLuongMuonSach[it.first] << endl;
73. cout << "Ma sach da muon: " << endl;
74. for (string sach : muonSach[it.first]) {
75. cout << i++ << ". " << sach << endl;
76. }
77. found = true;
78. }
79. }
80. if (found == false)
81. cout << "Khong tim thay ban doc" << endl;
82. }
MAIN
#Main.cpp
1. #include<bits/stdc++.h>
2. #include "Sach.h"
3. #include "Nguoi.h"
4. #include "BanDoc.h"
5. #include "QuanLyMuonSach.h"
6.
7.
8. using namespace std;
9.
10. int main() {
11. Sach sach;
12. BanDoc banDoc;
13. vector<Sach> SachDaCo;
14. vector<BanDoc> DSBanDoc;
15.
16. // Nhap thong tin sach
17. int soSach;
18. cout << "Nhap so sach: ";
19. cin >> soSach;
20. cin.ignore();
21. cout << "Nhap thong tin sach" << endl;
22. for (int i = 0; i < soSach; i++) {
23. sach.nhapSach();
24. SachDaCo.push_back(sach);
25. }
26.
27. // Nhap thong tin ban doc
28. int soBanDoc;
29. cout << "Nhap so ban doc: ";
30. cin >> soBanDoc;
31. cin.ignore();
32. for (int i = 0; i < soBanDoc; i++) {
33. banDoc.nhapBanDoc(SachDaCo);
34. DSBanDoc.push_back(banDoc);
35. }
36.
37. // In thong tin ban doc
38. cout << "==================================\nTHONG TIN BAN DOC\n==================================" << endl;
39. for (const BanDoc& banDoc : DSBanDoc) {
40. banDoc.xuatBanDoc();
41. }
42. // In thong tin sach da co
43. cout << "==================================\nTHONG TIN SACH DA CO\n==================================" << endl;
44. for (const Sach& sach : SachDaCo) {
45. cout << "Ma sach: " << sach.get_maSach() << endl;
46. cout << "Ten sach: " << sach.get_tenSach() << endl;
47. cout << "Tac gia: " << sach.get_tacGia() << endl;
48. cout << "Chuyen nganh: " << sach.get_chuyenNganh() << endl;
49. cout << "Nam xuat ban: " << sach.get_namXuatBan() << endl;
50. cout << "-----------------------------------------" << endl;
51. }
52.
53. QuanLyMuonSach bangMuonSach;
54. bangMuonSach.setSachDaCo(SachDaCo);
55. // Nhap thong tin muon sach cho moi ban doc
56. cout << "==================================\nLAP BANG QUAN LY MUON SACH\n==================================" << endl;
57. for (const BanDoc& banDoc : DSBanDoc) {
58. string maBanDocMuon = banDoc.get_maBanDoc();
59. vector<string> maSachMuon;
60.
61. // Nhap ma ban doc muon muon sach
62. bool banDocTonTai = false;
63. do{
64. cout << "Nhap ma ban doc muon sach: ";
65. string maBanDoc;
66. getline(cin, maBanDoc);
67.
68. // Kiem tra xem ma ban doc co ton tai trong danh sach hay khong
69. for (const BanDoc& doc : DSBanDoc) {
70. if (doc.get_maBanDoc() == maBanDoc) {
71. banDocTonTai = true;
72. break;
73. }
74. }
75.
76. if (!banDocTonTai) {
77. cout << "Ma ban doc khong hop le, vui long nhap lai." << endl;
78. continue;
79. }
80. }while(!banDocTonTai);
81.
82. // Nhap ma sach muon muon
83. cout << "Nhap ma sach muon (nhap 'done' de ket thuc): ";
84. string maSach;
85. while (getline(cin, maSach) && maSach != "done") {
86. // Kiem tra xem ma sach co ton tai trong danh sach da co va chua duoc muon hay khong
87. bool sachTonTai = false;
88. for (const Sach& sach : SachDaCo) {
89. if (sach.get_maSach() == maSach && !sach.isDaMuon()) {
90. sachTonTai = true;
91. break;
92. }
93. }
94.
95. if (!sachTonTai) {
96. cout << "Ma sach khong hop le hoac da duoc muon, vui long nhap lai." << endl;
97. } else {
98. maSachMuon.push_back(maSach);
99. }
100.
101. cout << "Nhap ma sach muon (nhap 'done' de ket thuc): ";
102. }
103.
104. // Muon sach cho ban doc
105. bangMuonSach.muonSachChoBanDoc(maBanDocMuon, maSachMuon);
106. }
107.
108. // In dannh sach quan ly muon sach
109. bangMuonSach.inBangQuanLyMuonSach();
110.
111. // Sap xep danh sach ban doc theo ten
112. bangMuonSach.sapXepTheoTenBanDoc(DSBanDoc);
113. cout << "==================================\nDANH SACH BAN DOC SAP XEP THEO TEN\n==================================" << endl;
114. for (const BanDoc& banDoc : DSBanDoc) {
115. banDoc.xuatBanDoc();
116. }
117.
118. // Sap xep danh sach ban doc theo so luong muon
119. bangMuonSach.sapXepTheoSoLuongSachMuon(DSBanDoc);
120. cout << "==================================\nDANH SACH BAN DOC SAP XEP THEO SO LUONG MUON\n==================================" << endl;

121. for (const BanDoc& banDoc : DSBanDoc) {


122. banDoc.xuatBanDoc();
123. }
124.
125. // Tim kiem va in thong tin sach cua mot ban doc
126. cout << "==================================\nTIM KIEM VA IN THONG TIN SACH CUA MOT BAN DOC\n=================================="<<endl;
127. cout << "Nhap ten ban doc: ";
128. string tenBanDoc;
129. getline(cin, tenBanDoc);
130.
131. // Lay ma ban doc
132. string ma;
133. for(const auto &ten: DSBanDoc){
134. if(ten.get_hoTen() == tenBanDoc){
135. ma = ten.get_maBanDoc();
136. }
137. }
138. bangMuonSach.timBanDoc(ma);
139. return 0;
140. }
Ảnh chương trình:
1. Nhập thông tin
2. Xuất thông tin
3. Lập bảng quản lý
4. Sắp xếp
5. Tìm kiếm

You might also like