Tải bản đầy đủ (.doc) (389 trang)

đồ án tốt nghiệp lập trình kỹ thuật trên máy tính visual basic & access

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.22 MB, 389 trang )

Website: Email : Tel (: 0918.775.368
LỜI NÓI ĐẦU
Thực tập tốt nghiệp là một phần quan trọng trong quá trình học tập, nó
là bước đầu làm quen với việc vận dụng kiến thức học tập được ở đại học.
Trong quá trình thực tập tốt nghiệp này em được thầy giáo hướng dẫn trực
tiếp đã tận tình giúp đỡ em trong quá trình thực tập em được làm quen với
các công nghệ mới.
Trong quá trình thực tập em được làm quen với tin học thêm mảnh lập
trình kỹ thuật trên máy tính mà điển hình là Visual Basic & Access đây là
ngôn ngữ lập trình bậc cao với các tính năng giúp đỡ cho người lập trình về
phần cấu trúc câu lệnh.
Với kiến thức nho nhỏ nắm được qua thời gian thực tập tốt nghiệp em
hy vọng nó sẽ giúp đỡ cho em phần nào trong quá trình làm đồ án tốt
nghiệp. Với kiến thức trên em có tham vọng làm được phần mền nhỏ về cơ
khí với lượng kiến thức đã học cộng với sự hiểu biết của cá nhân tuy chưa
được nhiều nhưng em hi vọng em sẽ làm tốt công việc thầy giao. Vì thời
gian có hạn, và sự hiểu biết hạn chế của bản thân cùng với sự mới mẻ của
kiến thức lập trình mà sinh viên cơ khí thường thiếu nên trong quá trình tìm
hiểu về VB & Access chưa được nhiều nên em mong muốn tiếp tục được sự
giúp đỡ của các thầy cô.


NỘI DUNG
1
Website: Email : Tel (: 0918.775.368
1.1.1 _ ĐỐI TƯỢNG VÀ PHƯƠNG THỨC
- Đối tượng: Là một phần tử dữ liệu, được khai báo là phần tử của
một lớp đã được định nghĩa trước.
Ví dụ: X x1;
Trong đó: X là một lớp đã định nghĩa trước,
x1 là một đối tượng.


Lớp X được mô tả như sau:
Class X
{
char *p;
X &q;
};
- Phương thức: Là một hàm được khai báo trong định nghĩa của một
lớp. Đơn giản, phương thức được hiểu là các thao tác trong đối tượng.
Ví dụ: Class X
{
int i;
void Nhap(int x);
};
Trong đó: hàm void Nhap(int x) là một phương thức, đưa ra một thao
tác là nhập vào một giá trị nào đó.
1.1.2 _ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Lập trình hướng đối tượng (OOP - Object Oriented Programming) là
phương pháp lập trình lấy đối tượng làm nền tảng để xây dựng chương trình.
* Lập trình hướng đối tượng liên kết cơ sở dữ liệu với thao tác, luôn
tác động qua lại với nhau và có vai trò ngang nhau trong đối tượng.
2
Website: Email : Tel (: 0918.775.368
* Một chương trình hướng đối tượng sẽ xác định hành vi cụ thể của
các kiểu dữ liệu của chúng.
Nền tảng của lập trình hướng đối tượng:
Phương thức + Dữ liệu = Đối tượng
Không ít người đặt ra câu hỏi: Tại sao phải lập trình hướng đối tượng?
Vì tính phức tạp của hệ thống phần mềm, một chương trình lớn được
lập trình theo hướng thủ tục sẽ gây ra rất nhiều khó khăn cho người lập trình.
Hướng đối tượng giải quyết được khó khăn này. Vận dụng lập trình hướng

đối tượng để giải quyết vấn đề lập trình sử dụng cho các bài toán lớn, độ
phức tạp cao, chịu được sự thay đổi liên quan đến hệ thống.
1.1.3 _ NGÔN NGỮ VÀ ỨNG DỤNG
Hiện nay có rất nhiều ngôn ngữ lập trình hướng đối tượng như: C++,
Delphi, Visual Basic, Power Builder, Java,
Một số ứng dụng của lập trình hướng đối tượng như trong Microsoft
Windows, tư tưởng hướng đối tượng được thể hiện rất rõ nét. Và Microsoft
Windows cũng là nền tảng để phương pháp lập trình hướng đối tượng phát
triển. Trong Microsoft Windows, ta có thể thực hiện nhiều lần một công
việc: "Di chuyển con chuột đến đối tượng, nhấn nút chuột trái". Ở đây, mỗi
đối tượng - có thể là Control Menu (Menu điều khiển), Title Bar (Thanh tiêu
đề), Scroll Bar (thanh cuộn), Maximize Box, Minimize Box, Button (nút
lệnh) - sẽ xử lý công việc tùy theo yêu cầu của người sử dụng.
1.1.4 _ SỰ ĐÓNG GÓI
Sự đóng gói là gom chung dữ liệu và chương trình vào trong một khối.
Ngoài ra, nó còn là sự đồng nhất giữa dữ liệu và các thao tác tác động lên dữ
liệu đó.
3
Website: Email : Tel (: 0918.775.368
Tính đóng gói được xem như là nền tảng của lập trình hướng đối
tượng, chương trình được thiết kế xoay quanh dữ liệu.
Tính đóng gói được thể hiện: tất cả các truy xuất trên dữ liệu được truy
xuất trên các hàm được bao hàm bên trong dữ liệu. Các hàm này điều khiển
những thao tác truy xuất liên quan đến dữ liệu đó.
1.1.5 _ KHÁI NIỆM LỚP
Bước đầu tiên để thiết kế một chương trình theo hướng đối tượng là
việc xây dựng các lớp.
Lớp: là một kiểu dữ liệu được định nghĩa trong chương trình, bên
trong nó là sự đóng gói của những thành phần dữ liệu (biến) và thành phần
xử lý dữ liệu (hàm) trên đó. Có thể hiểu lớp giống như một tập hợp và đối

tượng là một phần tử trong tập hợp đó.
Cách định nghĩa một lớp:
Class tên lớp
{
tên kiểu dữ liệu 1 thành phần 1;
tên kiểu dữ liệu 2 thành phần 2;

4
Website: Email : Tel (: 0918.775.368
tên kiểu dữ liệu n thành phần n;
};
Phạm vi lớp: mục đích là để kiểm soát việc truy xuất đến các tên của
biến. Các thành phần của một lớp được coi là phạm vi của lớp đó. Một thành
phần của lớp có thể tham khảo đến bất kỳ một thành phần nào khác cùng
lớp.
Hai kiểu phạm vi thường dùng nhất là phạm vi toàn cục và phạm vi
địa phương.
- Phạm vi toàn cục: Đối tượng được khai báo ở bên ngoài hàm, có thể
truy xuất bất kỳ chỗ nào trong chương trình.
- Phạm vi địa phương: Đối tượng được khai báo trong một hàm hay
một khối và chỉ truy xuất trong hàm hay khối đó.
Các thuộc tính truy cập: Có 3 thuộc tính trong thành phần lớp cơ bản:
- Thuộc tính chung (public): Mọi thành phần được liệt kê trong public
của một lớp đều có thể truy xuất ở bất kỳ phần nào của chương trình.
- Thuộc tính riêng (private): Mọi thành phần được liệt kê trong private
chỉ được truy xuất bên trong phạm vi lớp.
- Thuộc tính bảo vệ (protected): Chỉ lớp con của lớp mang thuộc tính
protected mới được truy cập đến.
- Phương thức thiết lập (contructor): Là một hàm thành phần đặc biệt
làm nhiệm vụ tạo dựng đối tượng. Một Contructor sẽ được gọi để cấp phát

bộ nhớ cho nó, gán giá trị cho các dữ liệu thành phần và thực hiện các việc
"thu xếp, dọn chỗ" khác cho đối tượng mới.
- Phương thức hủy bỏ (destructor): Có thêm phía trước dấu ngã (~).
Ngược lại với chức năng của Contructor, xóa bỏ một đối tượng khi không
còn cần thiết nữa tức là thực hiện các việc "thu xếp, dọn dẹp" khi kết thúc.
Ví dụ về cách xây dựng một lớp:
5
Website: Email : Tel (: 0918.775.368
Lớp DIEM có các thành phần:
+ Tọa độ điểm.
+ Các thao tác gán tọa độ, vẽ, di chuyển điểm.
Class Diem
{
protected:
int x,y;
contructor Diem(int a=0,int b=0)
{
x = a; y = b;
}
public:
void Ve(void);
void Dichuyen(int x, int y);
int NhapX(); // cho tọa độ X
int NhapY(); // cho tọa độ Y
};
1.1.6 _ TÍNH KẾ THỪA
6
Website: Email : Tel (: 0918.775.368
Tính kế thừa là một trong những điểm nổi bật của lập trình hướng đối
tượng. Nhờ nó, người lập trình không phải xây dựng lại từ đầu những đối

tượng mới, chỉ cần bổ sung những đặc tính cần thiết cho lớp dẫn xuất.
Tính kế thừa là cơ chế cho phép truyền dữ liệu từ những lớp đã thiết
kế trước đó đến các lớp sau.
Tìm hiểu chi tiết về tính kế thừa: ta tìm hiểu cách xây dựng lớp kế
thừa.
* Cách xây dựng lớp kế thừa:
Lớp kế thừa là lớp được xây dựng ngoài một số thành phần của lớp cơ
bản còn có thêm một số thành phần khác. Khi xây dựng lớp kế thừa, ta gặp
hai dạng kế thừa:
+ Dạng 1 - Kế thừa đơn: Là dạng thừa kế thông thường nhất, trong đó
lớp dẫn xuất chỉ có duy nhất một lớp cơ bản.
Ví dụ: Từ lớp cơ bản Điem được định nghĩa trong mục "Lớp", ta
xây dựng lớp dẫn xuất Đuong kế thừa từ Điem.
Class Đuong
{
Protected:
Điem v;
Public:
Đuong(Điem m,Điem n) : Điem(m->NhapX(), m->NhapY()),
v(n->NhapX(), n->NhapY())
{
// trống
}
void Vẽ();
void Dichuyen(int , int );
7
Website: Email : Tel (: 0918.775.368
};
+ Dạng 2 - Kế thừa bội: lớp dẫn xuất được thừa kế từ nhiều hơn một
lớp cơ bản. Vì nó được thừa kế từ nhiều lớp cơ bản nên cần sử dụng toán tử

định phạm vi (::).
Ví dụ:
Class A
{
public:
int x;
};
Class B : public A
{
};
Class D : public B, public C
{
public: int Get()
{
return B :: x;
// Trả về giá trị x thuộc class B
}
};
1.1.7 _ SỰ KẾT NỐI ĐỘNG
8
Website: Email : Tel (: 0918.775.368
* Tính đa hình: Một thông điệp có thể gởi đến các đối tượng khác
nhau mà không cần sự can thiệp của người lập trình, chương trình vẫn tìm ra
đối tượng cần thiết để điều khiển sự hoạt động. Thông điệp được gởi đi
không cần biết thực thể nhận thuộc lớp nào, chỉ cần biết tập hợp các thực thể
nhận có chung một tính chất nào đó. Đó là tính đa hình của chương trình
hướng đối tượng.
Các đối tượng được gọi thi hành có chung một hành vi giao tiếp thì
hành vi này là phương thức ảo.
Kỹ thuật cho phép một đối tượng được truy cập đến phương thức ảo

vào thời điểm chương trình hoạt động gọi là kỹ thuật kết nối động.
* Cách thể hiện một phương thức ảo:
Phương thức ảo phải có từ khóa virtual phía trước.
Ví dụ: Xây dựng các lớp Picture, Rectangle, Triangle, Circle để chỉ
hình ảnh, hình chữ nhật, hình tam giác, hình tròn. Các lớp này đều có
phương thức hiển thị gọi là Display là thông điệp chung cho các lớp trên.
* Xây dựng phương thức ảo: phương thức ảo xuất hiện để trợ giúp cho
kỹ thuật kết nối động nhưng không phải chương trình nào cũng cần đến kỹ
thuật kết nối động. Kỹ thuật này làm chương trình linh hoạt hơn, tốc độ
chậm và tốn bộ nhớ vì phải thực hiện quá nhiều việc vào thời điểm hiện
9
Website: Email : Tel (: 0918.775.368
hành. Vì vậy, cần cân nhắc khi đặt một phương thức là phương thức ảo khi
thỏa:
- Thuộc những lớp trên cùng.
- Liên quan đến bản chất của lớp.
* Kỹ thuật kết nối động:
Được thực hiện vào thời điểm chương trình hoạt động, chương trình
sẽ nhận biết đối tượng phù hợp để truy cập đến. Khi trình biên dịch gặp một
đối tượng thuộc lớp có phương thức ảo, trình biên dịch sẽ tạo ra con trỏ ảo
cho lớp này. Con trỏ ảo chứa địa chỉ của phương thức ảo. Nhờ con trỏ ảo và
bảng các phương thức ảo, chương trình mới kết nối được với các phương
thức ảo vào thời điểm thực hiện.
Ví dụ: Xây dựng chương trình quản lý các thú vật nuôi theo từng
chuồng riêng biệt.
Xây dựng lớp cơ sở cho các loại thú:
class Animal
{
protected:
char *Ten;

public:
Animal()
{
Ten = NULL;
}
Animal(char *n)
{
Ten = strdup(n);
}
10
Website: Email : Tel (: 0918.775.368
~Animal()
{
delete Ten;
}
virtual void WhoAmI()
{
printf("Con vật chung!"):
}
}
class Cat: public Animal
{
public:
Cat : Animal()
{
}
Cat (char *n) : Animal(n)
{
}
virtual void WhoAmI()

{
printf("Toi la chu meo, ten %s ",Ten)
}
}
class Dog:public Animal
{
public:
Dog : Animal()
11
Website: Email : Tel (: 0918.775.368
{
}
Dog (char *n) : Animal(n)
{
}
virtual void WhoAmI()
{
printf("Toi la chu cho, ten %s ",Ten)
}
}
1.1.8 _ HAI PHƯƠNG THỨC LẬP TRÌNH
I. Lập trình có cấu trúc:
l. Khái niệm:
Chương trình được chia nhỏ thành những thủ tục riêng rẽ, thực hiện
những công việc rời rạc thuộc một quá trình lớn hơn.
2. Đặc điểm:
- Nền tảng là sự trừu tượng hóa chức năng, tức là trong một chương
trình có cấu trúc, chỉ cần biết thủ tục này có thể làm được công việc cụ thể
gì, không cần biết đến qui cách thực hiện công việc.
- Sử dụng ba cấu trúc điều khiển chuẩn: tuần tự, rẽ nhánh, lặp.

3. Ưu - nhược điểm:
* Ưu điểm:
- Chương trình được tạo có tính cấu trúc cao.
- Cho phép tạo những chương trình lớn bằng cách chia ra thành những
chương trình nhỏ nên dễ viết và dễ bảo dưỡng.
* Nhược điểm:
12
Website: Email : Tel (: 0918.775.368
- Khi gặp những phần mềm lớn, việc kiểm soát sự liên kết là khó khăn
(do quá trình trừu tượng hóa dữ liệu còn chưa cao).
- Do ý tưởng lập trình dựa vào máy tính xử lý là chủ yếu làm cho
phần mềm tạo ra khó mở rộng, khó thay đổi (độ thích nghi thấp).
II. Lập trình hướng đối tượng:
1. Khái niệm:
Chương trình hướng đối tượng được thiết kế xoay quanh việc xử lý dữ
liệu hơn là chức năng trong chương trình, liên kết được cấu trúc dữ liệu với
các thao tác.
2. Đặc điểm:
- Nền tảng là lập trình có cấu trúc và sự trừu tượng hóa dữ liệu.
- Lập trình dựa chủ yếu là dữ liệu.
- Xây dựng những lớp dữ liệu và các phương thức xử lý kèm theo.
3. Ưu - Nhược điểm:
* Ưu điểm:
- Hệ thống phần mềm được mã hóa đúng đối tượng có thể chịu được
sự thay đổi liên quan đến hệ thống hay dữ liệu trong chu kỳ sống của phần
mềm.
- Khắc phục được tính phức tạp của hệ thống phần mềm.
* Nhược điểm:
Trong thời gian nghiên cứu về phương pháp lập trình hướng đối
tượng, các bạn có thể rút ra được ưu điểm và nhược điểm của nó. Xin dành

cho các bạn!
1.2.1 _ LẬP TRÌNH THEO HƯỚNG TOP - DOWN
13
Website: Email : Tel (: 0918.775.368
1. Khái niệm: Lập trình Top Down là phương pháp lập trình đi từ mức tổng
quát nhất của bài toán đến chi tiết. Những chi tiết phức tạp được xử lý dần
trong các giai đoạn sau.
2. Ý tưởng:
- Mức cao nhất P0 biểu thị khẳng định khái quát nhất mà có thể xác
định được bài toán.
- Các lá của cây là tập hợp những chương trình. Mỗi nhánh của nút là
tập hợp các phương án có thể lựa chọn.
- Tại mức thứ i, nếu gặp khó khăn có thể đi ngược lên nút trên để tìm
phương án khác.
3. Ví dụ:
Lớp học trải qua kỳ thi trắc nghiệm. Bạn đã biết điểm trắc nghiệm của
từng người. Tính điểm bình quân của lớp học.
Sử dụng Top Down triển khai chương trình trên:
P0
Xác định điểm trung bình của cuộc thi trắc nghiệm:
P1
14
Website: Email : Tel (: 0918.775.368
1. Khởi gán cho biến
2. Nhập số liệu và tính tổng các điểm nhập vào
3. Tính điểm trung bình và in ra kết quả
P2
1. a) Khởi gán biến tổng về 0
b) Khởi gán biến đếm về 1
2. a) Đọc vào điểm trắc nghiệm đầu tiên

b) Trong khi chưa gặp điều kiện sai (giả sử != -1)
- Cộng điểm vừa nhập vào tổng
- Tăng 1 vào biến đếm số lần điểm
c) Đọc vào điểm kế tiếp
3. a) Tính điểm trung bình bằng cách chia tổng cho biến đếm
b) In ra kết quả
1.2.2 _ LẬP TRÌNH THEO HƯỚNG BOTTOM - UP
1. Khái niệm:
Là phương pháp lập trình đi từ các vấn đề cụ thể trước, sau đó ghép
lại thành một vấn đề lớn hơn.
15
Website: Email : Tel (: 0918.775.368
Cách thiết kế này gây ra nhiều khó khăn, vì nó dễ làm người lập trình
đi lạc vào những vấn đề chi tiết và xa dần yêu cầu của chương trình cần xây
dựng.
2. Ý tưởng:
- Phương pháp phân tích lấy đối tượng đóng vai trò trung tâm nghĩa là
làm gì với một số đối tượng có sẵn.
- Mức cao nhất là mức chi tiết nhất, xuất phát từ những giả thiết, xây
dựng các kết luận từ từ, cho đến khi thỏa mãn yêu cầu.
3. Ví dụ:
Tính giai thừa của số n được nhập từ bàn phím.
- Xuất phát từ 1! = 1
- Xây dựng một kết luận kế tiếp 2!= 2*1!
- Kết luận tiếp theo 3! = 3*2! = 3*2*1!
- Tiếp tục cho đến khi số được tính bằng n.
Chương trình được viết theo ngôn ngữ mã giả như sau:
- Gán giaithừa về 1.
- Trong khi biến đếm chạy từ 2 đến n, thực hiện:
Nhân biến đếm với giaithừa

- Trả về giá trị giai thừa.
1.2.3 _ LẬP TRÌNH THEO HƯỚNG CASE
16
Website: Email : Tel (: 0918.775.368
1. Khái niệm:
Là phương pháp lập trình lựa chọn theo một điều kiện nào đó được
đặt ra trong quá trình thiết kế.
2. Ý tưởng:
- Xác định đối tượng cần lựa chọn.
- Khi giá trị của đối tượng rơi vào hàng thứ i nào đó thì dãy lệnh đằng
sau hàng i được thực hiện tuần tự.
Dạng thể hiện của Case trong C++:
switch bieuthuc
{
case truonghop_1: daylenh_1;
break;
case truonghop_2: daylenh_2;
break;
:
case truonghop_n: daylenh_n;
break;
default: daylenh_n+1;
17
Website: Email : Tel (: 0918.775.368
break;
}
3. Ví dụ:
Chương trình đếm số lần xuất hiện các nguyên âm trong một câu được
nhập từ bàn phím.
- Đối tượng lựa chọn ở đây là ký tự.

- Xác định các ký tự là nguyên âm: a, e, i, o, u.
- Lựa chọn:
+ Trường hợp "a": Tăng biến đếm của a lên 1
+ Trường hợp "e": Tăng biến đếm của e lên 1
+ Trường hợp "i": Tăng biến đếm của i lên 1
+ Trường hợp "o": Tăng biến đếm của o lên 1
+ Trường hợp "u": Tăng biến đếm của u lên 1
1.2.4 _ LẬP TRÌNH ĐƠN THỂ
1. Khái niệm:
Là phương pháp lập trình xây dựng chương trình thành những đơn vị
nhỏ, mỗi đơn vị gồm một số lệnh nào đó.
18
Website: Email : Tel (: 0918.775.368
2. Ý tưởng:
- Chương trình nên viết như một tập hợp các hàm nhỏ để dễ viết, dễ
bảo trì, sửa lỗi và cải tiến.
- Một hàm thực hiện một tác vụ. Các hàm nhỏ dễ dàng sử dụng lại.
- Một hàm cần số lượng lớn tham số nghĩa là đang cố thực hiện nhiều
tác vụ, nên chia nhỏ để thực hiện riêng biệt.
- Khai báo hàm và lời gọi hàm phải thống nhất về kiểu và trật tự các
đối số, tham số và kiểu giá trị trả về.
* Thể hiện ở hai hình thức:
+ Hàm: Hệ thống các lệnh tương ứng với một tác vụ.
+ Lớp: Hệ thống các lệnh, các hàm tương ứng với các tác vụ trên một
đối tượng.
3. Ví dụ: Tìm số lớn nhất và số nhỏ nhất trong ba số nguyên dương được
nhập vào từ bàn phím.
Phân tích ra thành từng công việc nhỏ:
a) Nhập:
+ Nhập vào ba số nguyên a, b, c (với a>0,b>0,c>0)

b) Số lớn nhất:
+ Nếu a > b và a > c thì gán số lớn nhất là a
+ Ngược lại
- Nếu b > c thì gán số lớn nhất là b
- Ngược lại số lớn nhất là c.
c) Số nhỏ nhất
+ Nếu a < b và a < c thì gán số nhỏ nhất là a
+ Ngược lại
- Nếu b < c thì gán số nhỏ nhất là b
- Ngược lại số nhỏ nhất là c.
19
Website: Email : Tel (: 0918.775.368
1.3.1 _ BÀI TOÁN MINH HỌA 1
Giả sử cuối năm học cần trao giải thưởng cho các sinh viên hoặc giáo
sư.
Ta xét cây phả hệ:
Class Người
Data: Hoten
Method: - Nhập Hoten
- Xuất Hoten
- Kiểm tra khả
năng được khen thưởng
__________________|__________________
| |
| |
Class Giáo sư Class Sinh viên
Data: Số bài báo Data: Điểm trung bình
Method: - Nhập số bài báo Method: - Nhập điểm trung
bình
- Kiểm tra khả năng - Kiểm tra khả năng

được khen thưởng được khen thưởng
20
Website: Email : Tel (: 0918.775.368
Ta nhận thấy rằng phương thức kiểm tra được khen thưởng hay không
xuất hiện trong cả ba lớp nên xây dựng chúng là phương thức ảo.
Thao tác nhập dữ liệu cũng cần thiết cho cả ba lớp nên chúng cũng là
ảo.
#include <iostream.h>
#include <stdio.h>
#include <string.h>
class Nguoi
{
char name[40];
public:
void GetName();
void PutName();
virtual void GetData() = 0;
virtual IsOutstanding() = 0;
};
void Nguoi::GetName()
{
21
Website: Email : Tel (: 0918.775.368
cout<<"Ho va ten:"; cin>>name;
}
void Nguoi::PutName()
{
cout<<"Ong/Ba:"<<name<<endl;
}
class SinhVien:public Nguoi

{
float dtb;
public:
SinhVien();
virtual void GetData();
virtual IsOutstanding();
};
SinhVien::SinhVien()
{
GetData();
}
void SinhVien::GetData()
{
GetName();
cout<<"Diem trung binh:"; cin>>dtb;
}
SinhVien::IsOutstanding()
{
return (dtb>5.0?1:0);// Nếu dtb>5.0: trả về 1, ngược lại: trả về
0
22
Website: Email : Tel (: 0918.775.368
}
class GiaoSu:public Nguoi
{
int sobaibao;
public:
GiaoSu();
virtual void GetData();
virtual IsOutstanding();

};
GiaoSu::GiaoSu()
{
GetData();
}
void GiaoSu::GetData()
{
GetName();
cout<<"So bai bao da duoc cong bo: "; cin>>sobaibao;
}
Giasu::IsOutstanding()
{
return (sobaibao>5?1:0); //nếu số bài báo >5: trả về 1, ngược
lại: trả về 0
}
main(void)
{
Nguoi *PerPtr[100];
int n=0;
23
Website: Email : Tel (: 0918.775.368
char chon;
do
{
cout<<"Sinh vien hay giao su: "; cin>>chon;
char c=cin.get(); // trong C++ cho phép khai báo biến bất kỳ vị
trí nào
if (chon=='s')
PerPTR[n+1] = new SinhVien;// cấp phát bộ nhớ cho class
SinhVien

else PerPrt[n++] = new GiaoSu;
cout<<"Nguoi khac(c/k)? "; cin>>chon;
}
while (chon=="c");
for (int j=0; j<n; j++)
{
PerPtr[j]->PutName();
if (PerPtr[j]->IsOutstanding()==1)
cout<<"Nguoi nay duoc khen thuong!"<<endl;
} return 0;
}
Trên đây là chương trình kiểm tra sinh viên hay giáo sư nào đó có
được khen thưởng hay không, được viết bằng ngôn ngữ C++.
Bạn có thể cải tiến cho chương trình sáng sủa hơn, dễ đọc hơn bằng
cách tổ chức lại chương trình chính theo hai chương trình con:
+ Nhập dữ liệu (nhập vào sinh viên hay giáo sư và điểm trung bình
hay số bài báo được công bố).
+ Xuất dữ liệu (được khen thưởng hay không).
24
Website: Email : Tel (: 0918.775.368
25

×