You are on page 1of 10

Họ và tên: NGUYỄN QUANG DŨNG

Lớp: 64KTPM5
Mã sinh viên: 2251172303

BÀI 6: QUẢN LÝ DỰ ÁN

Khai bảo lớp Nhân viên (mã NV, Họ tên, Địa chỉ, Số ĐT, chuyên môn), mã NV là một số
nguyên có 5 chữ số, tự động tăng.

Khai bảo lớp Dự án gồm các thuộc tính (mã dự án, Tên dự án, Kiểu dự án, Tổng kinh phí)
– trong đó kiểu dự án có thể gồm: nhỏ, trung bình hoặc lớn. Mã dự án là một số nguyên có 5
chữ số, tự động tăng.

Khai bảo lớp Bảng phân công có quan hệ kết hợp (association) với lớp Nhân viên và lớp
Dự án trong đó một nhân viên có thể được gán cho một hoặc nhiều dự án một lúc với số
ngày tham gia khác nhau và vị trí công việc khác nhau.

Viết chương trình thực hiện các yêu cầu sau:

1. Nhập danh sách dự án. In ra danh sách dự án đã có.

2. Nhập danh sách nhân viên. In ra danh sách nhân viên đã có.

3. Nhập danh sách phân công dự án cho mỗi nhân viên đã có và in danh sách ra màn hình.
(chú ý: cũng một nhân viên thì không thể tham gia cũng một dự án với hai vị trí khác
nhau nhưng có thể tham gia cùng lúc vào nhiều dự án).

4. Sắp xếp danh sách phân công:

a. Theo Họ tên nhân viên.

b. Theo Số ngày tham gia (giảm dần).

5. Tìm kiếm và hiển thị danh sách phân công theo tên nhân viên.
SOURCE CODE
XỬ LÝ CÁC YÊU CẦU ĐỀ BÀI

# main.cpp
1. #include <vector>
2. #include <algorithm>
3. #include "HamPhu.h"
4.
5. int main()
6. {
7. // 1. BANG DANH SACH DU AN
8. vector<DuAn> ListDA;
9. int SLDA;
10. cout << "Nhap so luong du an: "; cin >> SLDA; cin.ignore();
11. ListDA.resize(SLDA);
12. for (int i = 0; i < SLDA; i++)
13. {
14. cout << "Du an thu " << i+1 << ": " << endl;
15. ListDA[i].NhapDA();
16. }
17. if (SLDA > 0) XuatDuAn();
18. for (int i = 0; i < SLDA; i++)
19. {
20. ListDA[i].XuatDA();
21. }
22. system("pause");
23. system("cls");
24.
25.
26. // 2. BANG DANH SACH SINH VIEN
27. vector<NhanVien> ListNV;
28. int SLNV;
29. cout << "Nhap so luong nhan vien: "; cin >> SLNV; cin.ignore();
30. ListNV.resize(SLNV);
31. for (int i = 0; i < SLNV; i++)
32. {
33. cout << "Nhan vien thu" << i + 1 << ": " << endl;
34. ListNV[i].NhapNV();
35. }
36. if (SLNV > 0) XuatNhanVien();
37. for (int i = 0; i < SLNV; i++)
38. {
39. ListNV[i].XuatNV();
40. }
41. system("pause");
42. system("cls");
43.
44.
45. // 3. BANG PHAN CONG
46. vector<PhanCong> ListPC(0);
47. for (int i = 0; i < SLNV; i++)
48. {
49. cout << "Phan cong viec cho " << ListNV[i].getHoTenNV() << endl;
50. for (int j = 0; j < SLDA; j++)
51. {
52. cout << "Du an " << ListDA[j].getTenDA() << endl;
53. int x;
54. cout << "Neu chon du an thi bam 1, huy thi bam 2: "; cin >> x; cin.ignore();

55. if (x == 1)
56. {
57. PhanCong PC;
58. PC.NhapPC(ListNV[i], ListDA[j]);
59. PC.NhapCV();
60. ListPC.push_back(PC);
61. }
62. }
63. }
64. if (ListPC.size() > 0) XuatPhanCong();
65. for (int i = 0; i < ListPC.size(); i++)
66. {
67. ListPC[i].getDL();
68. }
69. system("pause");
70. system("cls");
71.
72.
73. // 4.a Sap xep theo ten nhan vien
74. cout << "Sap xep Bang phan cong theo ten nhan vien: " << endl;
75. sort(ListPC.begin(), ListPC.end(), Tang);
76. if (ListPC.size()>0)XuatPhanCong();
77. for (int i = 0; i < ListPC.size(); i++)
78. {
79. ListPC[i].getDL();
80. }
81. system("pause");
82. system("cls");
83.
84.
85. // 4.b Sap xep theo so ngay tham gia
86. cout << "Sap xep Bang phan cong theo so ngay tham gia: " << endl;
87. sort(ListPC.begin(), ListPC.end(), Giam);
88. XuatPhanCong();
89. for (int i = 0; i < ListPC.size(); i++)
90. {
91. ListPC[i].getDL();
92. }
93. system("pause");
94. system("cls");
95.
96.
97. // 5. Tim phan cong theo ten
98. string namefind;
99. cout << "Nhap ten ban muon xem phan cong: "; getline(cin, namefind);
100. XuatPhanCong();
101. for (int i = 0; i < ListPC.size(); i++)
102. {
103. if (ListPC[i].getDLNV().getHoTenNV() == namefind)
104. {
105. ListPC[i].getDL();
106. }
107. }
108. system("pause");
109.
110.
111. return 0;
112. }

LỚP DỰ ÁN (class DuAn)

# DuAn.h
1. #include <iostream>
2. #include <string>
3. #include <iomanip>
4.
5. using namespace std;
6.
7. class DuAn
8. {
9. private:
10. static int MaDuAn_BD;
11. int MaDuAn;
12. string TenDuAn;
13. string KieuDuAn;
14. int KinhPhi;
15. public:
16. // Khoi tao gia tri ban dau
17. DuAn();
18.
19. // Nhap du lieu cho du an
20. void NhapDA();
21.
22. // Xuat cac du lieu cua du an
23. void XuatDA() const;
24.
25. // Lay ra ma du an
26. int getMaDA();
27.
28. // Lay ra ten du an
29. string getTenDA();
30.
31. };

# DuAn.cpp
1. #include "DuAn.h"
2.
3. int DuAn::MaDuAn_BD = 10000;
4.
5. DuAn::DuAn()
6. {
7. MaDuAn = MaDuAn_BD++;
8. TenDuAn = "Unknown";
9. KieuDuAn = "Unknown";
10. KinhPhi = 0;
11. }
12. void DuAn::NhapDA()
13. {
14. cout << " Ten du an: "; getline(cin, TenDuAn);
15. cout << " Kieu du an: "; getline(cin, KieuDuAn);
16. cout << " Tong kinh phi: "; cin >> KinhPhi; cin.ignore();
17. }
18. void DuAn::XuatDA() const
19. {
20. cout << setw(20) << left << MaDuAn << setw(20) << left << TenDuAn;
21. cout << setw(20) << left << KieuDuAn << setw(20) << left << KinhPhi;
22. cout << endl;
23.
24. }
25. int DuAn::getMaDA()
26. {
27. return MaDuAn;
28. }
29. string DuAn::getTenDA()
30. {
31. return TenDuAn;
32. }

LỚP NHÂN VIÊN (class NhanVien)


# NhanVien.h
1. #include <iostream>
2. #include <string>
3. #include <iomanip>
4.
5. using namespace std;
6.
7. class NhanVien
8. {
9. protected:
10. static int MaNV_BD;
11. int MaNhanVien;
12. string HoTen;
13. string DiaChi;
14. string SDT;
15. string ChuyenMon;
16. public:
17. // Khoi tao gia tri cho Nhan Vien
18. NhanVien();
19.
20. // Nhap cac gia tri cho nhan vien
21. void NhapNV();
22.
23. // Xuat du lieu cua nhan vien
24. void XuatNV() const;
25.
26. // Lay ra ma nhan vien
27. int getMaNV();
28.
29. // Lay ra ho ten nhan vien
30. string getHoTenNV();
31.
32. };

# NhanVien.cpp
1. #include "NhanVien.h"
2.
3. int NhanVien::MaNV_BD = 10000;
4.
5. NhanVien::NhanVien()
6. {
7. MaNhanVien = MaNV_BD++;
8. HoTen = "Unknown";
9. DiaChi = "Unknown";
10. SDT = "Unknown";
11. ChuyenMon = "Unkown";
12. }
13.
14. void NhanVien::NhapNV()
15. {
16.
17. cout << " Ho ten nhan vien: "; getline(cin, HoTen);
18. cout << " Dia chi: "; getline(cin, DiaChi);
19. cout << " So dien thoai: "; getline(cin, SDT);
20. cout << " Chuyen mon: "; getline(cin, ChuyenMon);
21. }
22. void NhanVien::XuatNV() const
23. {
24. cout << setw(20) << left << MaNhanVien << setw(20) << left << HoTen;
25. cout << setw(20) << left << DiaChi << setw(20) << left << SDT;
26. cout << setw(20) << left << ChuyenMon << endl;
27. }
28. int NhanVien::getMaNV()
29. {
30. return MaNhanVien;
31. }
32. string NhanVien::getHoTenNV()
33. {
34. return HoTen;
35. }
LỚP BẢNG PHÂN CÔNG (class PhanCong)
# PhanCong.h
1. #include "DuAn.h"
2. #include "NhanVien.h"
3.
4. class PhanCong
5. {
6. private:
7. NhanVien NV;
8. DuAn DA;
9. int SoNgay;
10. string ViTri;
11. public:
12. // Lay du lieu phan cong tu nhan vien a, du an b
13. void NhapPC(NhanVien a, DuAn b);
14.
15. // Them ngay lam va vi tri lam viec
16. void NhapCV();
17.
18. // Lay ra du lieu bang phan cong
19. void getDL();
20.
21. // Truy cap vao nhan vien de lay ten nhan vien
22. NhanVien getDLNV();
23.
24. // Lay ra so ngay lam
25. int getSoNgay();
26.
27. };

# PhanCong.cpp
1. #include "PhanCong.h"
2.
3. void PhanCong::NhapPC(NhanVien a, DuAn b)
4. {
5. NV = a;
6. DA = b;
7. }
8. void PhanCong::NhapCV()
9. {
10. cout << " So ngay: "; cin >> SoNgay; cin.ignore();
11. cout << " Vi tri: "; getline(cin, ViTri);
12. }
13. void PhanCong::getDL()
14. {
15. cout << setw(20) << left << NV.getMaNV() << setw(20) << left << NV.getHoTenNV();
16. cout << setw(20) << left << DA.getMaDA() << setw(20) << left << DA.getTenDA();
17. cout << setw(20) << left << SoNgay << setw(20) << left << ViTri << endl;
18. }
19. NhanVien PhanCong::getDLNV()
20. {
21. return NV;
22. }
23. int PhanCong::getSoNgay()
24. {
25. return SoNgay;
26. }

MỘT SỐ HÀM PHỤ


# HamPhu.h
1. #include "PhanCong.h"
2.
3. // Ham in ra khung DANH SACH DU AN
4. static void XuatDuAn()
5. {
6. cout << setfill('-');
7. cout << setw(80) << '-' << endl;
8. cout << setfill(' ');
9. cout << setw(45) << right << "DANH SACH DU AN" << endl;
10. cout << setfill('-');
11. cout << setw(80) << '-' << endl;
12. cout << setfill(' ');
13. cout << setw(20) << left << "Ma Du An" << setw(20) << left << "Ten Du An";
14. cout << setw(20) << left << "Kieu Du An" << setw(20) << left << "Tong kinh phi";
15. cout << endl;
16. cout << setfill('-');
17. cout << setw(80) << '-' << endl;
18. cout << setfill(' ');
19. }
20.
21. // Ham in ra khung DANH SACH NHAN VIEN
22. static void XuatNhanVien()
23. {
24. cout << setfill('-');
25. cout << setw(100) << '-' << endl;
26. cout << setfill(' ');
27. cout << setw(55) << right << "DANH SACH NHAN VIEN" << endl;
28. cout << setfill('-');
29. cout << setw(100) << '-' << endl;
30. cout << setfill(' ');
31. cout << setw(20) << left << "Ma Nhan Vien" << setw(20) << left << "Ho Ten";
32. cout << setw(20) << left << "Dia Chi" << setw(20) << left << "So Dien Thoai";
33. cout << setw(20) << left << "Chuyen Mon" << endl;
34. cout << setfill('-');
35. cout << setw(100) << '-' << endl;
36. cout << setfill(' ');
37. }
38.
39. // Ham in ra khung BANG PHAN CONG
40. static void XuatPhanCong()
41. {
42. cout << setfill('-');
43. cout << setw(120) << '-' << endl;
44. cout << setfill(' ');
45. cout << setw(65) << right << "BANG DANH SACH PHAN CONG" << endl;
46. cout << setfill('-');
47. cout << setw(120) << '-' << endl;
48. cout << setfill(' ');
49. cout << setw(20) << left << "Ma Nhan Vien" << setw(20) << left << "Ho Ten";
50. cout << setw(20) << left << "Ma Du An" << setw(20) << left << "Ten Du An";
51. cout << setw(20) << left << "So Ngay" << setw(20) << left << "Vi Tri";
52. cout << endl;
53. cout << setfill('-');
54. cout << setw(120) << '-' << endl;
55. cout << setfill(' ');
56. }
57.
58. // Dieu kien sap xep BANG PHAN CONG theo ten (tang)
59. static bool Tang(PhanCong a, PhanCong b)
60. {
61. return a.getDLNV().getHoTenNV() < b.getDLNV().getHoTenNV();
62. }
63.
64. // Dieu kien sap xep BANG PHAN CONG theo so ngay lam (giam)
65. static bool Giam(PhanCong a, PhanCong b)
66. {
67. return a.getSoNgay() > b.getSoNgay();
68. }

ĐÁP ÁN
# Nhập và in danh sách

# Nhập và in nhân viên


# Phân công nhân viên

# In danh sách phân công theo tên (tăng)

# In danh sách phân công theo ngày làm (giảm):

# Tìm phân công theo tên

You might also like