
Đ TÀI:Ề
QU N LÝ NHÀ TRẢ Ọ
I . Mô T Đ Tài:ả ề
Gi s : chúng ta có m t nhà tr có 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 tê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 hà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

