Tải bản đầy đủ (.pdf) (16 trang)

Báo cáo lập trình hướng đối tượng

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 (277.64 KB, 16 trang )

1







BÀI TẬP LỚN
Lập trình hướng đối tượng

Đề tài: Xây dựng chương trình quản lý sinh viên

Sinh viên thực hiện:
Nguyễn Tiến Mạnh
SHSV:20091743
























2

Chương trình có các chức năng sau:
1. Bổ sung sinh viên
2. Xóa một sinh viên
3. Sửa thông tin sinh viên
4. Xem thông tin một sinh viên
5. Danh sách sinh viên
6. Danh sách sinh viên một khoa
7. Danh sách sinh viên cùng khoa với một sinh viên


Chương trình xây dựng các lớp sau:
 Lớp ngày sinh
 Lớp sinh viên
 Lớp danh sách























I. Lớp ngày sinh
Lớp ngày sinh dùng để nhập và in ngày sinh của mỗi sinh viên
class ngaysinh
{
int ngay;
int thang;
int nam;
3

public:
ngaysinh(){ngay=thang=nam=0;};
ngaysinh(int x,int y,int z)
{
ngay=x;

thang=y;
nam=z;
}
~ngaysinh()
{
ngay=thang=nam=0;
}
ngaysinh operator =(ngaysinh ns)
{
ngay=ns.ngay;
thang=ns.thang;
nam=ns.nam;
}
void nhapns();
void hienns();
};

Các hàm trong class:
1. Hàm tạo không tham số:
ngaysinh();
Dùng để khởi tạo giá trị cho đối tuợng
2. Hàm tạo có tham số:
3. Toán tử gán:
Dùng để gán thông tin của đối tượng ngaysinh này cho một đối tượng
ngaysinh khác.
4. Hàm nhập ngày sinh:
{
cout<<"\nnhap ngay thang nam sinh:";
cin>>ngay>>thang>>nam;
}

5. Hàm hiện ngày sinh:
void ngaysinh::hienns()
{
cout<<ngay<<"/"<<thang<<"/"<<nam<<endl;
}
II. Lớp sinh viên
class sinhvien
{
4

int shsv;
char hoten[30];
ngaysinh ns;
char gioitinh[4];
char khoa[30];
public:
sinhvien()
{
ngaysinh x;
shsv=0;
strcpy(hoten,"");
ns=x;
strcpy(gioitinh,"");
strcpy(khoa,"");
}
sinhvien(int x,char ten[30],ngaysinh y,char gt[4],char tenkhoa[30])
{
shsv=x;
strcpy(hoten,ten);
ns=y;

strcpy(gioitinh,gt);
strcpy(khoa,tenkhoa);
}
sinhvien operator =(sinhvien sv)
{
shsv=sv.shsv;
strcpy(hoten,sv.hoten);
ns=sv.ns;
strcpy(gioitinh,sv.gioitinh);
strcpy(khoa,sv.khoa);
}
friend void gotoxy(short x, short y);
void nhapsv(int x,char ten[30],ngaysinh y,char gt[4],char
tenkhoa[30]);
void insv(int x,int y);
int cungkhoa(sinhvien sv);
int thuockhoa(char tenkhoa[30]);
int timshsv(int msv);
};


Các hàm trong class:
1. Hàm tạo không tham số và có tham số:
5

Khởi tạo các thông tin ban đầu cho 1 đối tượng sinhvien.
2. Toán tử gán:
Dùng để gán thông tin của sinh viên này cho một sinh viên khác.
3. Hàm nhập sinh viên:
Nhập thông tin cho một sinh viên.

4. Hàm in sinh viên:
void sinhvien::insv(int x,int y)
{
gotoxy(x,++y);cout<<shsv;
gotoxy(x+10,y);cout<<hoten;
gotoxy(x+40,y);ns.hienns();
gotoxy(x+50,y);cout<<gioitinh;
gotoxy(x+54,y);cout<<khoa;
gotoxy(x,y+1);
}
Thực hiên in thông tin một sinh viên ra màn hình.
5. Hàm cungkhoa(sinhvien sv):
int sinhvien::cungkhoa(sinhvien sv)
{
if (strcmp(khoa,sv.khoa)==0) return 1;
else return 0;
}
Hàm trả về giá trị 1 nếu khoa của sinh viên gọi hàm trùng với khoa
của sv ngược lại hàm trả về giá trị 0.
6. Hàm thuockhoa(char tenkhoa[30]):
int sinhvien::thuockhoa(char tenkhoa[30])
{
if(strcmp(khoa,tenkhoa)==0) return 1;
else return 0;
}
Hàm trả về giá trị 1 nếu khoa của sinh viên trùng với tên khoa ngược
lại hàm trả về giá trị 0.
7. Hàm timshsv(int msv):
int sinhvien::timshsv(int msv)
{

if(shsv==msv) return 1;
else return 0;
}
Hàm trả về giá trị 1 nếu shsv của đối tượng sinhvien gọi hàm bằng với
msv ngược lại hàm trả về giá trị 0.
III. Lớp danh sách:
class danhsach
{
6

sinhvien *sv;
int sosv;
void inkhung(int x,int y);
public:
danhsach(int max=50,int soluong=0)
{
sv=new sinhvien[max];
sosv=soluong;
}
friend void gotoxy(short x, short y);
void indanhsach(int x,int y);
void xemsv();
void svkhoa();
void svcungkhoa();
void bosung();
void suachua();
void xoa();
};

Các hàm trong class:

1. Hàm in danh sách:
void danhsach::indanhsach(int x,int y)
{
int i;
inkhung(x,y);
for(i=0;i<sosv;i++) sv[i].insv(x,y+i);
}
In ra màn hình thông tin về các sinh viên có trong danh sách.
2. Hàm xemsv:
void danhsach::xemsv()
{
int mssv,i;
cout<<"\nNhap so hieu sinh vien can xem thong tin:";
cin>>mssv;
system("cls");
for(i=0;i<sosv;i++)
if(sv[i].timshsv(mssv)==1)
{
cout<<"Thong tin ve sinh vien:";
inkhung(1,2);
sv[i].insv(1,2);
}
if(i>sosv) cout<<"\nKhong co sinh vien nay trong danh sach\n";
7

}
Thực hiên xem thông tin của một sinh viên với shsv được nhập từ bàn
phím. Đầu tiên duyệt danh sách để tìm sinh viên có shsv giống với
shsv vừa nhập, nếu tìm thấy thì in ra màn hình thông tin của sinh viên
đó, ngược lại thông báo không có sinh viên này trong danh sách.

3. Ham svkhoa:
void danhsach::svkhoa()
{
char tenkhoa[30];
int i,k,x,y;
x=1;y=2;
cout<<"Nhap ten khoa muon xem danh sach sinh vien:";
fflush(stdin);gets(tenkhoa);
system("cls");
cout<<"Danh sach sinh vien cua khoa "<<tenkhoa<<":";
inkhung(1,2);
for(i=0;i<sosv;i++)
if(sv[i].thuockhoa(tenkhoa)==1)
{
sv[i].insv(x,y);
y++;
}
cout<<"\n";
}
Thực hiên in ra màn hình danh sách sinh viên của một khoa với tên
khoa được nhập từ bàn phím. Tiến hành duyệt danh sách, nếu sinh
viên nào có khoa trùng với tên khoa thì in thông tin của sinh viên đó ra
màn hình.
4. Hàm svcungkhoa:
void danhsach::svcungkhoa()
{
sinhvien s;
int mssv;
int i,kt=0,x=1,y=2;
cout<<"Nhap so hieu sinh vien can xem danh sach sinh vien cung

khoa voi minh:";
cin>>mssv;
for(i=0;i<sosv;i++)
if(sv[i].timshsv(mssv)==1)
{
s=sv[i];
kt=1;
break;
8

}
if(kt==0) cout<<"\nKhong co sinh vien nay trong danh sach";
else
{
system("cls");
cout<<"Danh sach sinh vien cung khoa voi sinh vien co
SHHV "<<mssv<<":";
inkhung(1,2);
for(i=0;i<sosv;i++)
if(sv[i].cungkhoa(s)==1)
{
sv[i].insv(x,y);
y++;
}
}
cout<<"\n";
}
Thực hiên in ra màn hình danh sách những sinh viên cùng khoa với
một sinh viên co shsv được nhập từ bàn phím.
5. Hàm bosung:

void danhsach::bosung()
{
int mssv,i,kt=0,x;
char ten[30],gt[4],tenkhoa[30];
ngaysinh y;
while(1)
{
x=0;kt=0;
system("cls");
cout<<"\nSo hieu sinh vien:";
cin>>mssv;
for(i=0;i<sosv;i++)
if(sv[i].timshsv(mssv)==1)
{
cout<<"sinh vien nay da co";
kt=1;
}
if(kt==0)
{
cout<<"\nHo ten:";
fflush(stdin);gets(ten);
y.nhapns();
cout<<"\nGioi tinh:";
9

fflush(stdin);gets(gt);
cout<<"\nKhoa:";
fflush(stdin);gets(tenkhoa);
sv[sosv].nhapsv(mssv,ten,y,gt,tenkhoa);
sosv++;

}
cout<<"\nBan co muon bo sung tiep khong(1/0)?";
cin>>x;
if(x==0) break;
}
}
Thêm một sinh viên vào danh sách. Đầu tiên nhập shsv của sinh viên
mới, kiểm tra xem sinh viên này đã có trong danh sách chưa nếu chưa
có thì bắt đầu nhập thông tin cho sinh viên này và lưu vào danh sách,
ngược lại thông báo đã có sinh viên này trong danh sách.
6. Hàm suachua:
void danhsach::suachua()
{
int mssv,i,k=0;
char hoten[30],gioitinh[4],khoa[30];
ngaysinh ns;
cout<<"\nnhap so hieu sinh vien can sua:";
cin>>mssv;
for(i=0;i<sosv;i++)
if(sv[i].timshsv(mssv)==1)
{
k=1;
break;
}
if(k==1)
{
cout<<"\nnhap thong tin moi cho sinh vien";
cout<<"\nho ten:";
fflush(stdin);gets(hoten);
ns.nhapns();

cout<<"\ngioi tinh:";
fflush(stdin);gets(gioitinh);
cout<<"\nkhoa:";
fflush(stdin);gets(khoa);
sv[i].nhapsv(mssv,hoten,ns,gioitinh,khoa);
}
else cout<<"khong tim thay sinh vien trong danh sach\n";
}
10

Thay đổi thông tin của một sinh viên có shsv được nhập từ bàn phím.
Duyệt danh sách để tìm sinh viên co shsv như đã nhập, nếu không tìm
thấy thì thông báo không có sinh viên này trong danh sách, ngược lại
nhập thông tin mới cho sinh viên này.
7. Hàm xoa:
void danhsach::xoa()
{
int i,k,mssv;
cout<<"\nnhap so hieu sinh vien muon xoa:";
cin>>mssv;
for(i=0;i<sosv;i++)
if(sv[i].timshsv(mssv)==1)
{
k=i;
break;
}
if(i>sosv) cout<<"\nkhong co sinh vien can xoa trong danh
sach\n";
else
{

for(i=k;i<sosv;i++) sv[i]=sv[i+1];
sosv=sosv-1;
cout<<"\nDa xoa\n";
}
}
Xóa một sinh viên trong danh sách có shsv được nhập từ bàn phím.
Duyệt danh sách để tìm sinh viên co shsv đã nhập nếu tìm thấy thì xóa
sinh viên khỏi danh sách và giảm sosv đi 1 đơn vị, ngược lại thông
báo không có sinh viên cần xóa trong danh sách.







IV. Các hàm khác trong chương trình
1. Hàm textcolor:
void textcolor(WORD color)
{
HANDLE hConsoleOutput;
hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);

11

CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info;
GetConsoleScreenBufferInfo(hConsoleOutput,
&screen_buffer_info);

WORD wAttributes = screen_buffer_info.wAttributes;

color &= 0x000f;
wAttributes &= 0xfff0;
wAttributes |= color;

SetConsoleTextAttribute(hConsoleOutput, wAttributes);
}
Dùng để đổi màu chữ.
2. Hàm textbackground:
void textbackground(WORD color)
{
HANDLE hConsoleOutput;
hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_SCREEN_BUFFER_INFO screen_buffer_info;
GetConsoleScreenBufferInfo(hConsoleOutput,
&screen_buffer_info);

WORD wAttributes = screen_buffer_info.wAttributes;
color &= 0x000f;
color <<= 4;
wAttributes &= 0xff0f;
wAttributes |= color;

SetConsoleTextAttribute(hConsoleOutput, wAttributes);
}
Dùng để đổi màu nền.
3. Hàm gotoxy:
void gotoxy(short x, short y)
{
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);

COORD pos;
pos.X = x-1;
pos.Y = y-1;
SetConsoleCursorPosition(hCon, pos);
}
Dùng để di chuyển con trỏ dến vi trí có tọa độ (x,y) trên màn hình.
V. Hàm menu
1. Hàm menu :
12

void menu(int x,int y)
{
textbackground(1);
textcolor(15);
gotoxy(x,y+1); cout<<"HAY CHON MOT CHUC NANG:";
textcolor(12);
gotoxy(x,y+3); cout<<"1.BO SUNG SINH VIEN ";
gotoxy(x,y+5); cout<<"2.XOA MOT SINH VIEN ";
gotoxy(x,y+7); cout<<"3.SUA THONG TIN SINH VIEN ";
gotoxy(x,y+9); cout<<"4.XEM THONG TIN MOT SINH VIEN ";
gotoxy(x,y+11);cout<<"5.DANH SACH SINH VIEN ";
gotoxy(x,y+13);cout<<"6.DANH SACH SINH VIEN MOT KHOA";
gotoxy(x,y+15);cout<<"7.DANH SACH SINH VIEN CUNG KHOA
VOI MOT SINH VIEN";
gotoxy(x,y+17);cout<<"8.THOAT";
}
In ra màn hình các chức năng của chương trình.
2. Hàm menuchon :
Hàm có chức năng thay đổi màu nền của dòng tên chức năng của chương
trình khi con trỏ ở dòng đó.

void menuchon(int x,int y,int chon)
{
switch(chon)
{
case 1:
{
menu(x,y);
textbackground(6);
textcolor(14);
gotoxy(x,y+3);cout<<"1.BO SUNG SINH VIEN";
}break;
case 2:
{
menu(x,y);
textbackground(6);
textcolor(14);
gotoxy(x,y+5);cout<<"2.XOA MOT SINH VIEN";
}break;
case 3:
{
menu(x,y);
textbackground(6);
textcolor(14);
13

gotoxy(x,y+7);cout<<"3.SUA THONG TIN SINH
VIEN";
}break;
case 4:
{

menu(x,y);
textbackground(6);
textcolor(14);
gotoxy(x,y+9);cout<<"4.XEM THONG TIN MOT
SINH VIEN";
}break;
case 5:
{
menu(x,y);
textbackground(6);
textcolor(14);
gotoxy(x,y+11);cout<<"5.DANH SACH SINH
VIEN";
}break;
case 6:
{
menu(x,y);
textbackground(6);
textcolor(14);
gotoxy(x,y+13);cout<<"6.DANH SACH SINH VIEN
MOT KHOA";
}break;
case 7:
{
menu(x,y);
textbackground(6);
textcolor(14);
gotoxy(x,y+15);cout<<"7.DANH SACH SINH VIEN
CUNG KHOA VOI MOT SINH VIEN";
}break;

case 8:
{
menu(x,y);
textbackground(6);
textcolor(14);
gotoxy(x,y+17);cout<<"8.THOAT";
}break;
}
14

}
3. Hàm luachon :
Hàm trả về giá trị là vị trí hiện tại của con trỏ khi ấn phím enter.Khi sử
dụng mũi tên lên xuống giá trị của biến i cung sẽ tăng giảm theo, và khi
ấn phím enter hàm sẽ trả về giá trị của biến i lúc đó.
int luachon(int x,int y)
{
int thoat=0;
int i=1;
while(!thoat)
{
menuchon(x,y,i);
char c=getch();
if(c==1) c=getch();
switch(c)
{
case 13:
{
thoat=1;
return i;

}
case 80:
{
if(i==8) i=1;
else i++;
menuchon(x,y,i);
}break;
case 72:
{
if(i==1) i=8;
else i ;
menuchon(x,y,i);
}break;
}
}
}
VI. Một số hình ảnh về chương trình


15



Hình 1 : Giao diện của chương trình.



Hình 2 : Chức năng thêm 1 sinh viên vào danh sách.





Hình 3 : Danh sách sinh viên


Hình 4 : Xóa sinh viên.

16



Hình 5 : Danh sách sinh viên sau khi xóa.



Hình 6: Sửa thông tin của sinh viên.




Hình 7: Danh sách sinh viên khoa toán tin.



Hình 8: Danh sách sinh viên cùng khoa với sinh viên có shsv 20091743


×