Professional Documents
Culture Documents
Bai KT6
Bai KT6
MSV: 2251162117
LỚP: 64HTTT2
#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;