Tài liệu là báo cáo bài tập lớn môn lập trình hướng đối tượng dành cho sinh viên đại học có thể tham khảo để làm bài tập lớn cho riêng minh. xin cảm ơn các bạn đã sử dụng tài liệu aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Trang 1BÀ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
Trang 2Chươ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;
Trang 3public:
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
{
Trang 4int 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ố:
Trang 5Khở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
{
Trang 6sinhvien *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";
Trang 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;
Trang 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:";
Trang 9fflush(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";
}
Trang 10Thay đổ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);
Trang 11CONSOLE_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 :
Trang 12void 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);
Trang 13gotoxy(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;
}
Trang 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
Trang 15Hì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
Trang 16Hì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