I.Introduction :
Cài đặt các lớp Người, Sinh Viên, Giảng Viên theo mô hình sau:
Xây dựng chương trình quản lý một danh sách các đối tượng sinh viên, giảng viên. Chương trình có các chức năng:
- Nhập thông tin các đối tượng.
- Xuất thông tin các đối tượng có trong danh sách.
- Liệt kê mã số các sinh viên có trong danh sách.
- Liệt kê tên các giảng viên theo học vị.
Ý Tưởng :
-Đối tượng người có thuộc tính là Họ Tên và Địa Chỉ . Đối tượng Sinh Viên và Giảng Viên sẽ kế thừa từ đối tượng người theo quan hệ “là một” tương ứng , Sinh Viên “là một” người và một người có thể là Sinh Viên, cũng có thể là giảng viên .Với mỗi Sinh Viên và Giang Viên có thuộc tính riêng như MSSV hay Học Vị.
– Các đối tượng có thao tác chung là
+Nhap(),
+ Xuat(),
+ InstanceOf("classname”): Thao tác này sẽ trả về giá trị là True nếu như classname đưa vào đúng với đói tượng So Sánh EX: Sinh Vien A; A.InstanceOf(“SinhVien”)=> true .
-Ngoài ra chúng ta có lớp Ứng Dụng để vận hành các thao tác nhập xuất . Lớp ứng dụng có dử liệu là một Array<Nguoi*,So_Phan_Tu>, hay một List.
Trong bài này mình dùng Array để làm dữ liệu cho lớp Ứng Dụng .
Về lớp Array và String mình co đính kèm phía dưới.
II.Coding :
Chúng Ta tạo Project Win32 Application và tạo các lớp sau :
-Nguoi
-SinhVien
-GiangVien
-UngDung
Bây Giờ chúng ta định nghĩa từng lớp và từng thao tác cho lớp đó :
1.Lớp Người :
-Nguoi.h
1: // Nguoi.h: interface for the Nguoi class.
2: //
3: //////////////////////////////////////////////////////////////////////
4:
5: #if !defined(AFX_NGUOI_H__9E7388F5_4EE7_4945_BDB2_B99F596677EA__INCLUDED_)
6: #define AFX_NGUOI_H__9E7388F5_4EE7_4945_BDB2_B99F596677EA__INCLUDED_
7:
8: #if _MSC_VER > 1000
9: #pragma once
10: #endif // _MSC_VER > 1000
11: #include "iostream.h"
12: #include "String.h"
13:
14: class Nguoi
15: {
16: public:
17: virtual bool InstanceOf(const String& classname)const {return classname == "Nguoi";};
18: virtual void Xuat() const;
19: virtual void Nhap();
20: Nguoi(const String& hoten="",const String& diachi="");
21: virtual ~Nguoi();
22: protected :
23: String m_sHoTen,m_sDiaChi ;
24: };
25:
26: #endif // !defined(AFX_NGUOI_H__9E7388F5_4EE7_4945_BDB2_B99F596677EA__INCLUDED_)
-Nguoi.cpp
1: // Nguoi.cpp: implementation of the Nguoi class.
2: //
3: //////////////////////////////////////////////////////////////////////
4:
5: #include "Nguoi.h"
6:
7: //////////////////////////////////////////////////////////////////////
8: // Construction/Destruction
9: //////////////////////////////////////////////////////////////////////
10:
11: Nguoi::Nguoi(const String& hoten, const String& diachi)
12: {
13: m_sHoTen = hoten ;
14: m_sDiaChi = diachi ;
15: }
16:
17: Nguoi::~Nguoi()
18: {
19:
20: }
21: void Nguoi::Nhap()
22: {
23: cout << "Ho Ten: "; cin >> m_sHoTen ;
24: cout << "Dia Chi : "; cin >> m_sDiaChi;
25: }
26:
27: void Nguoi::Xuat() const
28: {
29: cout << "Ho Ten: "<< m_sHoTen << endl ;
30: cout << "Dia Chi: "<< m_sDiaChi << endl ;
31: }
2.Lớp Sinh Viên :
-SinhVien.h:
1: // SinhVien.h: interface for the SinhVien class.
2: //
3: //////////////////////////////////////////////////////////////////////
4:
5: #if !defined(AFX_SINHVIEN_H__8EFC9472_5E3B_45B0_B3EE_1A29C16F153A__INCLUDED_)
6: #define AFX_SINHVIEN_H__8EFC9472_5E3B_45B0_B3EE_1A29C16F153A__INCLUDED_
7:
8: #if _MSC_VER > 1000
9: #pragma once
10: #endif // _MSC_VER > 1000
11:
12: #include "Nguoi.h"
13: #include "String.h" // Added by ClassView
14:
15: class SinhVien : public Nguoi
16: {
17: public:
18: String MaSo() const;
19: virtual bool InstanceOf(const String& classname) const
20: {
21: return classname == "SinhVien" || Nguoi::InstanceOf(classname);
22: };
23: virtual void Nhap();
24: virtual void Xuat() const;
25: SinhVien(const String& hoten="",const String& diachi="",const String& maso="");
26: virtual ~SinhVien();
27: protected :
28: String m_sMaSo;
29: };
30:
31: #endif // !defined(AFX_SINHVIEN_H__8EFC9472_5E3B_45B0_B3EE_1A29C16F153A__INCLUDED_)
-SinhVien.cpp
1: // SinhVien.cpp: implementation of the SinhVien class.
2: //
3: //////////////////////////////////////////////////////////////////////
4:
5: #include "SinhVien.h"
6:
7: //////////////////////////////////////////////////////////////////////
8: // Construction/Destruction
9: //////////////////////////////////////////////////////////////////////
10:
11: SinhVien::SinhVien(const String& hoten,const String& diachi,const String& maso):Nguoi(hoten,diachi)
12: {
13: m_sMaSo = maso ;
14: }
15:
16: SinhVien::~SinhVien()
17: {
18:
19: }
20:
21: void SinhVien::Xuat() const
22: {
23: Nguoi::Xuat();
24: cout << "MSSV: "<< m_sMaSo << endl ;
25: }
26:
27: void SinhVien::Nhap()
28: {
29: Nguoi::Nhap();
30: cout << "MSSV: " ; cin >> m_sMaSo;
31: }
32: String SinhVien::MaSo() const
33: {
34: return m_sMaSo;
35: }
3.Lớp Giảng Viên :
-GiangVien.h
1: // GiangVien.h: interface for the GiangVien class.
2: //
3: //////////////////////////////////////////////////////////////////////
4:
5: #if !defined(AFX_GIANGVIEN_H__2A5D1E6C_CA2B_42C5_9970_57214FBEB795__INCLUDED_)
6: #define AFX_GIANGVIEN_H__2A5D1E6C_CA2B_42C5_9970_57214FBEB795__INCLUDED_
7:
8: #include "String.h" // Added by ClassView
9: #if _MSC_VER > 1000
10: #pragma once
11: #endif // _MSC_VER > 1000
12:
13: #include "Nguoi.h"
14:
15: class GiangVien : public Nguoi
16: {
17: public:
18: String HocVi() const;
19: virtual bool InstanceOf(const String& classname) const;
20: virtual void Xuat() const;
21: virtual void Nhap();
22: GiangVien(const String& hoten="",const String& diachi="",const String& hocvi="");
23: virtual ~GiangVien();
24: protected:
25: String m_sHocVi ;
26: };
27:
28: #endif // !defined(AFX_GIANGVIEN_H__2A5D1E6C_CA2B_42C5_9970_57214FBEB795__INCLUDED_)
-GiangVien.cpp
1: // GiangVien.cpp: implementation of the GiangVien class.
2: //
3: //////////////////////////////////////////////////////////////////////
4:
5: #include "GiangVien.h"
6:
7: //////////////////////////////////////////////////////////////////////
8: // Construction/Destruction
9: //////////////////////////////////////////////////////////////////////
10:
11: GiangVien::GiangVien(const String& hoten,const String& diachi, const String& hocvi):Nguoi(hoten,diachi)
12: {
13: m_sHocVi = hocvi ;
14: }
15:
16: GiangVien::~GiangVien()
17: {
18:
19: }
20:
21: void GiangVien::Nhap()
22: {
23: Nguoi::Nhap();
24: cout << "Hoc Vi :" ; cin >> m_sHocVi;
25: }
26:
27: void GiangVien::Xuat() const
28: {
29: Nguoi::Xuat();
30: cout << "Hoc Vi: " << m_sHocVi << endl ;
31: }
32:
33: bool GiangVien::InstanceOf(const String &classname) const
34: {
35: return classname == "GiangVien" || Nguoi::InstanceOf(classname);
36: }
37:
38: String GiangVien::HocVi() const
39: {
40: return m_sHocVi;
41: }
4.Lớp Ứng Dụng:
-UngDung.h
1: // UngDung.h: interface for the UngDung class.
2: //
3: //////////////////////////////////////////////////////////////////////
4:
5: #if !defined(AFX_UNGDUNG_H__F6E48142_9737_4E26_8372_17C545976922__INCLUDED_)
6: #define AFX_UNGDUNG_H__F6E48142_9737_4E26_8372_17C545976922__INCLUDED_
7:
8: #if _MSC_VER > 1000
9: #pragma once
10: #endif // _MSC_VER > 1000
11: #include "Nguoi.h"
12: #include "SinhVien.h"
13: #include "GiangVien.h"
14: #include "Array.h"
15: class UngDung
16: {
17: public:
18: UngDung();
19: virtual ~UngDung();
20: private:
21: void XuatGiangVienTheoHocVi(const String& HocVi="")const;
22: void XuatDanhSachMaSo() const;
23: void XuatTheoLoai(const String& classname) const;
24: void Nhap();
25: void Xuat() const;
26: void VanHanh();
27: Array<Nguoi*,50> m_pNguoi;
28: };
29:
30: #endif // !defined(AFX_UNGDUNG_H__F6E48142_9737_4E26_8372_17C545976922__INCLUDED_)
-UngDung.cpp:
1: // UngDung.cpp: implementation of the UngDung class.
2: //
3: //////////////////////////////////////////////////////////////////////
4: #include <stdlib.h>
5: #include "UngDung.h"
6:
7: //////////////////////////////////////////////////////////////////////
8: // Construction/Destruction
9: //////////////////////////////////////////////////////////////////////
10:
11: UngDung::UngDung()
12: {
13: m_pNguoi.Add(new SinhVien("Pham Nguyen","Viet Nam","SV1"));
14: m_pNguoi.Add(new Nguoi("Binh Nguyen","Viet Nam"));
15: m_pNguoi.Add(new GiangVien("Luong Vinh Trung","Viet Nam","Thac Sy"));
16: VanHanh();
17: }
18:
19: UngDung::~UngDung()
20: {
21:
22: }
23:
24: void UngDung::VanHanh()
25: {
26: int chon ;
27: for(;;)
28: {
29: system("cls");
30: cout << "1. Nhap\n2. Xuat\n0. Thoat \n" ;
31: cout << "Ban Chon: " ; cin >> chon ; cin.ignore();
32: switch (chon)
33: {
34: case 1:
35: Nhap();
36: break;
37: case 2:
38: Xuat();
39: break;
40: case 3:
41: return ;
42: }
43: }
44: }
45:
46: void UngDung::Xuat() const
47: {
48: int chon ;
49: int i = 0;
50: String hv ;
51: for(;;)
52: {
53: system("cls");
54: cout << "1. Xuat Tat Ca Nguoi \n2. Xuat Tat Ca SV \n3. Xuat Tat Ca Giang Vien"
55: << "\n4. Xuat Tat Giang Vien Theo Hoc Vi \n5. Liet Ke Danh Sach MSSV \n0. Thoat \n" ;
56: cout << "Ban Chon: " ;
57: cin >> chon ;cin.ignore();
58: switch(chon)
59: {
60: case 1 :
61: for(i = 0; i < m_pNguoi.NumOfElements();i ++)
62: m_pNguoi[i]->Xuat() ;
63: break;
64: case 2:
65: XuatTheoLoai("SinhVien");
66: break;
67: case 3:
68: XuatTheoLoai("GiangVien");
69: break;
70: case 5:
71: XuatDanhSachMaSo();
72: break;
73: case 4:
74: cout << "Nhap Hoc Vi: " ;
75: cin >> hv ;
76: XuatGiangVienTheoHocVi(hv);
77: break;
78: case 0:
79: return ;
80: }
81: cin.get();
82: }
83: }
84:
85: void UngDung::Nhap()
86: {
87: int chon ;
88: Nguoi* pNg = NULL ;
89: for(;;)
90: {
91: system("cls");
92: cout << "1. Nhap Sinh Vien \n2. Nhap Giang Vien \n0. Thoat \n";
93: cout << "Ban Chon :" ; cin >> chon ;cin.ignore();
94: switch (chon)
95: {
96: case 1:
97: pNg = new SinhVien ;
98: break;
99: case 2:
100: pNg = new GiangVien ;
101: break;
102: case 0:
103: return ;
104: }
105: pNg->Nhap();
106: m_pNguoi.Add(pNg);
107: }
108: }
109:
110: void UngDung::XuatTheoLoai(const String& classname) const
111: {
112: for(int i = 0 ; i < m_pNguoi.NumOfElements(); i ++)
113: {
114: if(m_pNguoi[i]->InstanceOf(classname))
115: {
116: m_pNguoi[i]->Xuat();
117: }
118: }
119: }
120:
121: void UngDung::XuatDanhSachMaSo() const
122: {
123: for(int i = 0 ; i < m_pNguoi.NumOfElements() ; i ++)
124: {
125: if(m_pNguoi[i]->InstanceOf("SinhVien"))
126: {
127: SinhVien* pSv = (SinhVien*) m_pNguoi[i];
128: cout << pSv->MaSo() << endl ;
129: }
130: }
131: }
132:
133: void UngDung::XuatGiangVienTheoHocVi(const String& HocVi)const
134: {
135: for(int i = 0; i < m_pNguoi.NumOfElements(); i ++)
136: {
137: if(m_pNguoi[i]->InstanceOf("GiangVien"))
138: {
139: GiangVien* pGv = (GiangVien*)m_pNguoi[i];
140: if(pGv->HocVi() == HocVi)
141: {
142: pGv->Xuat();
143: }
144: }
145: }
146: }
Bây giờ chúng ta tạo một file Main.cpp để chạy chương trình
1: #include <iostream.h>
2: #include "UngDung.h"
3: void main()
4: {
5: UngDung p;
6: }
Bây Giờ Chúng Ta Thử Chạy Chương Trình :