Đ TÀI:
QU N LÝ NHÀ TR
I . Mô T Đ i:
Gi s : chúng ta có m t nhà tr 5 phòng và 7 sinh viên.Nhi m v c a đ tài là
qu n lý danh sách siên viên có trong nhà tr ,th c hi n thêm m t sinh viên vào nhà tr ho c
xóa m t sinh viên ra kh i nhà tr ,có th xem ti n phòng c a b t c phòng nào và s ti n
mà m i sinh viên trong phòng đó ph i tr ,…
II . N i Dung Chi Ti t C a Đ Tài: ế
1.D Li u:
-D li u vào là các file text(ho c có th t bàn phím):
+ nhapsv.inp: là file text ch a thông tin sinh viên mu n đ a vào nhà tr . ư
+ nhappt.inp: là file text ch a thông tin v các sinh viên có trong phòng và nh ng
thông tin khác c a phòng.
+nhapnt.inp: là file text ch a thông tin các phòng tr ,các sinh viên,và các thông
tin khác v nhà tro.
-D li u vào là các file text(ho c có th xu t ra màn hình):
+xuatsv.out: là file text ch a thông tin sinh viên sau khi đã nh p sinh viên t file
nhapsv.inp ho c t bàn phím.
+xuatpt.inp: là file text ch a thông tin v các sinh viên có trong phòng và nh ng
thông tin khác c a phòng sau khi đã nh p phòng tr t file nhappt.inp ho c t bàn phím.
+xuatnt.out: là file text ch a thông tin các phòng tr ,các sinh viên,và các thông tin
khác v nhà tro sau khi đã nh p nhà tr t file nhapnt.inp ho c t bàn phím.
2.Các L p , Các Ph ng Th c và Các Gi Thu t T ng ng: ươ ươ
a./Class Date:
+Date.h:
G m có các thu c tính:ngày(d),tháng(m),năm(y).Dùng đ qu n lý các bi n ki u ế
Date.
#pragma once
#include "iostream"
using namespace std;
class Date
{
private:
int d,m,y;
public:
Date();//ph ng th c Kh i T o Không đ i sươ
Date(int,int,int);// ph ng th c Kh i t o có đ i sươ
Date(const Date&);// ph ng th c coppyươ
~Date();//ph ng th c h yươ
void Nhap();//ph ng th c Nh pươ
void In()const;// ph ng th c Xu tươ
bool ktNgay(int,int,int);// ph ng th c Ki m tra ngàyươ
int getDay();//ph ng th c L y ngày c a m t bi n ki u ngàyươ ế
Đ Tài Qu n Lý Nhà Tr Sinh Viên : Nguy n Trung Trí
1
int getMonth();//ph ng th c L y tháng c a m t bi n ki u ngàyươ ế
int getYear();//ph ng th c L y năm c a m t bi n ki u ngàyươ ế
void setDay(int); // ph ng th c đ a s int làm ngày ươ ư
void setMonth(int); // ph ng th c đ a s int làm ngàyươ ư
void setYear(int); // ph ng th c đ a s int làm ngày ươ ư
void cong(int n);//C ng s int n và l y ngày sau khi c ng n
void tru(int n);//Tr s int n và l y ngày sau khi c ng n
char* toString()const;//Chuy n bi n ki u ngày sang chu i ế
friend istream& operator>>(istream& is,Date&);//N p Ch ng pt Nh p
friend ostream& operator<<(ostream& os,Date&);//N p Ch ng pt xu t
void operator=(const Date&);//N p Ch ng pt copy
void operator+(int n);//N p ch ng pt c ng m t s
void operator-(int n);// N p ch ng pt tr m t s
};
b./Class Sinhvien:
G m có các thu c tính:mã sinh viên(masv),h n sinh viên(hoten),quê quán
sinh viên(quequan),s th t c a sinh viên(stt) và ngày sinh c a sinh
viên(ngaysinh).
#include "Date.h"
class Sinhvien
{
private:
char *masv,*hoten,*quequan;
int stt;
Date ngaysinh;
public:
Sinhvien();
Sinhvien(char*,char*,char*,int,Date);
Sinhvien(const Sinhvien&);
~Sinhvien();
void Nhap();
void Nhapsvt();
void In() const;
void Insvt();
char* get_masv() const;
char* get_hoten() const;
char* get_quequan() const;
int get_stt()const;
Date get_ngaysinh() const;
void set_masv(char*);
void set_hoten(char*);
void set_quequan(char*);
void set_stt(int);
void set_ngaysinh(Date);
friend istream& operator>>(istream& is,Sinhvien&);
friend ostream& operator<<(ostream& os,Sinhvien&);
void operator=(const Sinhvien&);
};
Thi t k :ế ế
+Sinhvien::Sinhvien():ngaysinh()//ph ng th c kh i t o không đ iươ
s :
Các thu c tính masv,hoten,quequan đ c gán b ng NULL,stt gán b ng ượ
0.
Vd:
Đ Tài Qu n Lý Nhà Tr Sinh Viên : Nguy n Trung Trí
2
masv=new char[1];
masv[0]=NULL;
stt=0;
+Sinhvien::Sinhvien(char* ma,char* ht,char* qq,int s,Date d)
:ngaysinh(d)//ph ng th c kh i t o có đ i s :ươ
Đ i v i thu c tính masv:Tr c h t ta ki m tra xem masv có b ng ướ ế
NULL hay không,n u b ng thì ta th c hi n công vi c xóa b ng hàmế
delete[].Sau đó ta c p phát b nh v i s ph n t b ng chi u dài
c a chu i ma đ c truy n vào. ượ
Vd:
if(masv!=NULL)
delete[] masv;
masv=new char[strlen(ma)+1];
strcpy(masv,ma);
T ng t đ i v i các thu c tính hoten và quequan.ươ
Đ i v i thu c tính stt thì ta gán tr c ti p b ng bi n s đ c ế ế ư
truy n vào.
Vd: stt=s;
Đ i v i thu c tính ngaysinh thì ta th c hi n vi c copy b ng ph ng ươ
th c copy đ c h tr bên class Date. ượ
+ Sinhvien::Sinhvien(const Sinhvien &s)//ph ng th c copyươ
Ta ch c n copy t ng thu c tính c a Sinhvien s qua là xong.
Vd:
masv=s.masv;
+Sinhvien::~Sinhvien()//ph ng th c h yươ
Đ i v i các thu c tính masv,hoten,quequan ta th c hi n vi c xóa
b ng hàm delete [].
Vd:
delete[] masv;
Đ i v i thu c tính stt thì ta gán b ng 0;
Đ i v i thu c tính ngaysinh thì ta g i l m h y bên l p ngày.
Vd:
ngaysinh.~Date();
+ void Sinhvien::Nhap()//ph ng th c nh p sinh viên t bàn phímươ
Đ i v i thu c tính masv:đ tránh d th a b nh ,tr c h t ta ư ướ ế
khai báo m t chu i char *tam,c p phát và th c hi n nh p mã sinh
viên vào tam.Sau đó ta ki m tra n u masv khác NULL thì xóa,k ti p ế ế ế
c p phát b nh v i s ph n t chính là chi u dài c a chu i tam ,
ti p theo dùng hàm strcpy(chu i đích,chu i ngu n) là xong.ế
Vd:
char *tam;
tam=new char[100];
cout<<"Nhap vao ma so Sinh Vien: ";
gets(tam);
if(masv!=NULL)
delete[] masv;
masv=new char[strlen(tam)+1];
strcpy(masv,tam);
flushall();//xóa vùng đ m
T ng t đ i v i các thu c tính hoten và quequan.ươ
Đ i v i thu c tính stt và ngaysinh ta dùng hàm cin>>{tên bi n} đ ế
nh p tr c ti p. ế
+ void Sinhvien::In() const//ph ng th c xu t ra màn hìnhươ
Ta dùng cout<<{tên bi n} đ xu t ra t ng thu c tính.ế
Vd:
cout<<masv<<"\t\t"<<hoten<<"\t\t"<<quequan<<"\t\t"<<stt<<endl;
cout<<"Ngay Sinh cua Sinh Vien nay la:"<<endl;
Đ Tài Qu n Lý Nhà Tr Sinh Viên : Nguy n Trung Trí
3
ngaysinh.In();//ho c cout<<ngaysinh
cout<<endl;
+ void Sinhvien::Nhapsvt()//ph ng th c nh p m t sinh viênươ
t file nhapsv.inp
Tr c h t ta include th viên fstream vào.Sau đó ta khai báo bi nướ ế ư ế
ki u ifstream f.Ti p theo th c hi n vi c m file nhapsv.inp đ đ c ế
d li u.
Đ i v i thu c tính masv:ta khai báo m t chu i char * matam , c p
phát và th c hi n vi c nh p vào chu i matam b ng hàm
f.get(matam,100);th c hiên l nh f.ignore() đ b qua nh ng kí t
không c n thi t và xu ng dòng.K ti p, ta c p phát b nh cho masv ế ế ế
và copy là xong.
Vd:
char *matam;
matam=new char[100];
ifstream f;
f.open("nhapsv.inp");
f.get(matam,100);
f.ignore();
if(masv!= NULL) delete[] masv;
masv=new char[strlen(matam)+1];
strcpy(masv,matam);
Đ i v i các thu c tính stt thì ta nh p tr c ti p b ng: f>>stt; ế
Đ i v i thu c tính ngaysinh thì ta nh p vào t ng bi n ki u int và ế
th c hi n nh ng ph ng th c set đ c h tr bên class Date. ươ ượ
Vd:
f>>dtam;
ngaysinh.setDay(dtam);
f>>mtam;
ngaysinh.setMonth(mtam);
f>>ytam;
ngaysinh.setYear(ytam);
Cu i cùng ta đ ng vi c nh p b ng hàm f.close(); là xong.
+ void Sinhvien::Insvt()//ph ng th c xu t ra file xuatsv.outươ
Tr c h t ta khai báo con tr FILE *f,ti p theo ta m fileướ ế ế
xuatsv.out đ ghi.Sau đó ta dùng hàm fprintf(f,”chu i”,bi n) đ ế
xu t.Cu i cùng đóng file là xong.
Vd: FILE *f;int d,y,m;
d=ngaysinh.getDay();
m=ngaysinh.getMonth();
y=ngaysinh.getYear();
f=fopen("Xuatsv.out","wt");
fprintf(f,"%s",masv);
fprintf(f,"\n");
fprintf(f,"%s",hoten);
fprintf(f,"\n");
fprintf(f,"%s",quequan);
fprintf(f,"\n");
fprintf(f,"%d",stt);
fprintf(f,"\n");
fprintf(f,"%d %d %d",d,m,y);
fclose(f);
+ char* Sinhvien::get_masv() const//ph ng th c l y masvươ
Đ tránh vi c d li u masv b thay đ i ngoài ý mu n,ta th c hi n
vi c copy masv qua chu i char *kq,sau đó tr v chu i kq.
Vd:
char *kq;
Đ Tài Qu n Lý Nhà Tr Sinh Viên : Nguy n Trung Trí
4
kq=new char[strlen(masv)+1];
strcpy(kq,masv);
return kq;
+T ng t đ i v i các ph ng th c l y hoten,quequan.ươ ươ
+ Date Sinhvien::get_ngaysinh() const//ph ng th c l y ngaysinh.ươ
Ta ch vi c tr v ngaysinh.
Vd:
return ngaysinh;
+T ng t v i ph ng th c l y stt.ươ ươ
+ void Sinhvien::set_masv(char *st)//ph ng th c đ a m t chu i stươ ư
vào làm mã s c a sinh viên.
Ta ki m tra n u masv b ng NULL thì xóa,c p phát b nh và copy ế .
Vd:
if(masv!=NULL)
delete[] masv;
masv=new char[strlen(st)+1];
strcpy(masv,st);
+T ng t v i các ph ng th c set hoten và quequan.ươ ươ
+void Sinhvien::set_stt(int s)//ph ng th c đ a m t s s vào vàươ ư
nh n giá tr c a s làm stt.
Ta ch c n gán stt=s là xong.
+T ng t v i ph ng th c set ngaysinh.ươ ươ
+istream& operator>>(std::istream &is,Sinhvien& S)//ph ng th cươ
n p ch ng ph ng th c nh p t bàn phím. ươ
Gi i thu t ta cũng làm gi ng nh ph ng th c nh p t bàn ư ươ
phím.Nh ng cu i cùng ta tr v is( return is;)ư
Vd:
char *tam;
tam=new char[100];
cout<<"Nhap vao ma so Sinh Vien: ";
gets(tam);
if(S.masv!=NULL)
delete[] S.masv;
S.masv=new char[strlen(tam)+1];
strcpy(S.masv,tam);
flushall();
+ostream& operator<<(std::ostream &os,Sinhvien& S)//n p ch ng
ph ng th c xu t ra màn hình.ươ
Gi i thu t ta cũng làm gi ng nh ph ng th c xu t ra màn hình ư ươ
.Nh ng cu i cùng ta tr v os( return os;)ư
Vd:
cout<<"Ma Sinh Vien/Ho Ten/Que Quan/So Thu TU"<<endl;
os<<S.get_masv()<<"\t"<<S.get_hoten()<<"\t"<<S.get_quequan()<<"
\t"<<S.get_stt()<<endl;
cout<<"Ngay Sinh cua Sinh Vien nay
la:"<<S.get_ngaysinh()<<endl;
cout<<endl;
return os;
+ void Sinhvien::operator=(const Sinhvien& S)//n p ch ng ph ng ươ
th c copy Sinhvien.
Ta copy t ng thu c tính c a Sinhvien S là xong.
Vd:
masv=S.masv;
Đ Tài Qu n Lý Nhà Tr Sinh Viên : Nguy n Trung Trí
5