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

LẬP TRÌNH C ++ QUẢN LÝ NHÀ TRỌ

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 (106.82 KB, 12 trang )

ĐỀ 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ọ

1

Sinh Viên : Nguyễn Trung Trí


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ố:
0.

Các thuộc tính masv,hoten,quequan được gán bằng NULL,stt gán bắng
Vd:

Đề Tài Quản Lý Nhà Trọ

2

Sinh Viên : Nguyễn Trung Trí


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<cout<<"Ngay Sinh cua Sinh Vien nay la:"<
Đề Tài Quản Lý Nhà Trọ


3

Sinh Viên : Nguyễn Trung Trí


ngaysinh.In();//hoặc cout<cout<+ 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ọ

4

Sinh Viên : Nguyễn Trung Trí


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"<os<\t"<cout<<"Ngay Sinh cua Sinh Vien nay
la:"<cout<

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ọ

5

Sinh Viên : Nguyễn Trung Trí


hoten=S.hoten;
quequan=S.quequan;
ngaysinh=S.ngaysinh;
stt=S.stt;

c./Class Phongtro:
Gồm có các thuộc tính:số lượng sinh viên đang trọ trong phòng(sosv) , số
điện(sodien) , số nước(sonuoc),số thứ tự của phòng(sttphong),ngày vào của
phòng(ngayvao) và danh sách các sinh viên dó(dssv)
#include "Sinhvien.h"
#include "Date.h"

class Phongtro
{
private:
char *maphong;

int sosv,sodien,sonuoc,sttphong;
Sinhvien *dssv;
Date ngayvao;
public:
Phongtro();
Phongtro(char*,int,int,int,int,Sinhvien*,Date);
Phongtro(const Phongtro&);
~Phongtro();
void Nhap();
void Nhapptt();
void In();
void Inptt();
char* get_maphong()const;
Sinhvien* get_dssv()const;
int get_sosv()const;
int get_sodien()const;
int get_sonuoc()const;
int get_sttphong() const;
Date get_ngayvao()const;
Date get_ngaydongtien();
void set_maphong(char*);
void set_sosv(int);
void set_sodien(int);
void set_sonuoc(int);
void set_sttphong(int);
void set_ngayvao(Date);
void set_dssv(Sinhvien*);
void insert_sv(const Sinhvien&);
void delete_sv(char*);
friend istream& operator>>(istream& is,Phongtro&);

friend ostream& operator<<(ostream& os,Phongtro&);
void operator=(const Phongtro&);
void capphat(int);
Sinhvien & operator [](int );
};

Thiết kế:

+Phongtro::Phongtro():ngayvao()//phương thức khởi tạo không đối số
+ Phongtro::Phongtro(char*st,int ssv,int sd,int sn,int
sttp,Sinhvien *ds,Date d):ngayvao(d)//phương thức khởi tao có đối
số.

Đề Tài Quản Lý Nhà Trọ

6

Sinh Viên : Nguyễn Trung Trí


Giải thuật cũng giống như Class Sinhvien.Nhưng điểm cần chú ý là
dssv của chúng ta phải được cấp phát với số phần tử là số lượng
sv.
Vd:
dssv=new Sinhvien[sosv+1];
f(sosv>0){
for(int i=0;itam=new char[strlen(ds[i].get_masv())+1];
strcpy(tam,ds[i].get_masv());
dssv[i].set_masv(tam);

tam=new char[strlen(ds[i].get_hoten())+1];
strcpy(tam,ds[i].get_hoten());
dssv[i].set_hoten(tam);
tam=new char[strlen(ds[i].get_quequan())+1];
strcpy(tam,ds[i].get_quequan());
dssv[i].set_quequan(tam);
dssv[i].set_ngaysinh(ds[i].get_ngaysinh());
}
+ Phongtro::Phongtro(const Phongtro &p):ngayvao(p.ngayvao)//hàm
copy
+ Phongtro::~Phongtro()//hàm hủy
+ void Phongtro::Nhap()//phương thức nhập từ bàn phím
Giải thuật cũng tương tự như class Sinhvien,điểm cần chú ý là là
khi nhập dssv thì ta phải cấp phát bộ nhớ và gọi lại phương thức
nhập của từng Sinhvien được hỗ trợ bên class Sinhvien
Vd:
if(sosv>0){
this->dssv=new Sinhvien[sosv+1];
for(i=0;icout<flushall();
cout<<"Nhap ma so Sinh vien thu "<dssv[i].Nhap();
}
+ void Phongtro::Nhapptt()//phương thức nhập từ file nhappt.inp
+ void Phongtro::In()//phương thức xuất ra màn hình
+ void Phongtro::Inptt()//phương thức xuẩt ra file xuatpt.out
+ Các phương thức get và set giãi thuật cũng khơng khác gì
class Sinhvien .
vd:

Sinhvien* Phongtro::get_dssv()const{
Sinhvien *tam;
tam=new Sinhvien[100];
for(int i=0;itam[i]=dssv[i];
}
return tam;
}
+ istream& operator>>(std::istream& is,Phongtro &P)//phương thức
nạp chống phương thức nhập từ bàn phím.

Đề Tài Quản Lý Nhà Trọ

7

Sinh Viên : Nguyễn Trung Trí


+ ostream& operator<<(std::ostream& os,Phongtro &P)//nạp chống
phương thức xuất ra màn hình.
+ void Phongtro::operator =(const Phongtro &p)//nạp chồng phương
thức copy.
+ Date Phongtro::get_ngaydongtien()//phương thức lấy ngày đống
tiền của phòng.
Ta chỉ cần lấy ngày vào của phòng và cộng cho 30 ngày.
Vd:
ngayvao+30;
return ngayvao;
+ void Phongtro::insert_sv(const Sinhvien& S)//phương thức chèn
một sinh viên vào phòng tro.

Giải thuật là:ta dùng một danh sách sinh viên tạm để lưu lại những
sinh viên trong phòng trọ.Số phần tử của danh sách sinh viên tạm
này chính là số sinh viên có trong phịn trọ.
Vd:
Sinhvien *svtam;
svtam=new Sinhvien[sosv+1];
for(int i=0;isvtam[i].set_masv(dssv[i].get_masv());
svtam[i].set_hoten(dssv[i].get_hoten());
svtam[i].set_quequan(dssv[i].get_quequan());
svtam[i].set_stt(dssv[i].get_stt());
svtam[i].set_ngaysinh(dssv[i].get_ngaysinh());
}
Tiếp theo ta tăng số lượng sinh viên của phòng trọ lên một đơn
vị,thực hiện xóa danh sách sinh viên của,cấp phát bộ nhớ lại cho
danh sách sinh viên mới với số lượng sinh viên là số lượng sinh
viên viên vừa tăng lên ,copy sinh viên từ svtam qua dssv mới,
ta thực hiện công việc này đến sinh viên thứ sosv-1.
Vd:
sosv=sosv+1;
delete[] dssv;
dssv=new Sinhvien[sosv+1];
for(int i=0;idssv[i].set_masv(svtam[i].get_masv());
dssv[i].set_hoten(svtam[i].get_hoten());
dssv[i].set_quequan(svtam[i].get_quequan());
dssv[i].set_stt(svtam[i].get_stt());
dssv[i].set_ngaysinh(svtam[i].get_ngaysinh());
}
Cống việc còn lại là thực hiện đưa sinh viên cần thêm vào vị trí

thứ sosv-1 là ta đã hồng thành công việc thêm vào một sinh viên.
Vd:
dssv[sosv-1].set_masv(S.get_masv());
dssv[sosv-1].set_hoten(S.get_hoten());
dssv[sosv-1].set_quequan(S.get_quequan());
dssv[sosv-1].set_stt(S.get_stt());
dssv[sosv-1].set_ngaysinh(S.get_ngaysinh());
+ void Phongtro::delete_sv(char *ma)//phương thức xóa một sinh
viên có mã số là ma.
Trước tiên ta khai báo một danh sách sinh viên tam.Cấp phát bộ nhớ
cho danh sách sinh viên này với số lượng phần tử là sosv.Tiếp đến
ta thực hiện công việc dị xem sinh viên có mã số là ma có trong
phịng trọ hay khơng.Những sinh viên đã được tìm qua chúng ta sẽ
đưa vào trong danh sách sinh viên tam.

Đề Tài Quản Lý Nhà Trọ

8

Sinh Viên : Nguyễn Trung Trí


Vd:

int i=0,j,k;
Sinhvien *svtam;
svtam=new Sinhvien[sosv+1];
while((strcmp(dssv[i].get_masv(),ma)!=0)&&isvtam[i].set_masv(dssv[i].get_masv());
svtam[i].set_hoten(dssv[i].get_hoten());

svtam[i].set_quequan(dssv[i].get_quequan());
svtam[i].set_stt(dssv[i].get_stt());
svtam[i].set_ngaysinh(dssv[i].get_ngaysinh());
i++;
}
Nếu thốt khỏi vịng lập while mà số i của chúng ta nhỏ hơn sosv
thì có nghĩa là ta đã tìm được sinh viên có mã số là ma.Chúng ta
tiếp tục thực hiện công việc copy sinh viên thứ i+1 từ dssv vào
svtam.
Vd:
if(ifor(j=i+1;jsvtam[j-1].set_masv(dssv[j].get_masv());
svtam[j-1].set_hoten(dssv[j].get_hoten());
svtam[j-1].set_quequan(dssv[j].get_quequan());
svtam[j-1].set_stt(dssv[j].get_stt());
svtam[j-1].set_ngaysinh(dssv[j].get_ngaysinh());
}
}
Nếu thốt khỏi vịng lập mà số i bằng với sosv thì ta kết luận là
khơng tồn tại sinh viên có mã số là ma , và thực hiện
thoát
giải thuật.
Vd:
if(i==sosv){
cout<<"Khong co sinh vien ngay trong danh sach"<return;
}
Cơng việc tiếp theo là xóa danh sách sinh viên của , giảm sosv
xuống một đơn vị,cấp phát lại cho dssv mới với số lượng sinh viên

là sosv.
Sau đó thực hiện copy từ svtam qua là xong.
Vd:

delete[] dssv;
sosv=sosv-1;
dssv=new Sinhvien[sosv];
for(k=0;kdssv[k].set_masv(svtam[k].get_masv());
dssv[k].set_hoten(svtam[k].get_hoten());
dssv[k].set_quequan(svtam[k].get_quequan());
dssv[k].set_stt(svtam[k].get_stt());
dssv[k].set_ngaysinh(svtam[k].get_ngaysinh());
}

Đề Tài Quản Lý Nhà Trọ

9

Sinh Viên : Nguyễn Trung Trí


+ void Phongtro::capphat(int a)//phương thức cấp phát bộ nhớ cho
dssv với số lượng phần tử là a.
Vd:
delete[] dssv;
dssv=new Sinhvien[a+1];
+Sinhvien & Phongtro::operator [](int i)//phương thức lấy sinh
viên thứ i của phòng trọ
{

if(i>0&&i<this->sosv)
return dssv[i];
}

d./Class Nhatro:

Gồm có các thuộc tính như mã nhà trọ(mant),tên nhà trọ(tennt),địa chỉ của
nhà trọ(diachint),tổng số sinh viên đang tro(tgsosv),số phòng trong nhà
trọ(sophong), tiền điện (tiendien) , tiền nước(tiennuoc),tiền phịng(tienphong) và
danh sách các phịng có trong nhà trọ(dspt).
#include "Phongtro.h"

class Nhatro
{
private:
char *mant,*tennt,*diachint;
int tgsosv,sophong;
float tiendien,tiennuoc,tienphong;
Phongtro *dspt;
public:
Nhatro();
Nhatro(char*,char*,char*,int,int,float,float,float,Phongtro*);
Nhatro(const Nhatro&);
~Nhatro();
void Nhap();
void Nhapntt();
void In();
void Inntt();
char* get_mant()const;
char* get_tennt()const;

char* get_diachi()const;
int get_tgsosv()const;
int get_sophong()const;
float get_tiendien()const;
float get_tiennuoc()const;
float get_tienphong()const;
Phongtro* get_dspt()const;
void set_mant(char*);
void set_tennt(char*);
void set_diachi(char*);
void set_tgsosv(int);
void set_sophong(int);
void set_tiendien(float);
void set_tiennuoc(float);
void set_tienphong(float);
void set_dspt(Phongtro*);
float get_tienmoiphong(int);
float get_tienmoisv(int);

Đề Tài Quản Lý Nhà Trọ

10

Sinh Viên : Nguyễn Trung Trí


};

void nhapsv(Sinhvien,int);
void xoasv(char*);

void search(char *);
Date ngaydongtien(int);
friend istream& operator>>(istream& is,Nhatro&);
friend ostream& operator<<(ostream& os,Nhatro&);
Phongtro & operator[](int );

Thiết kế:
+Những phương thức khởi tạo,phương thức hủy,phương thức nhập từ bàn
phím,phương thức nhập từ tập tin,phương thức xuất ra màn hình,phương thức xuất ra
tập tin,phương thức get và set đều có giải thuật giống như các lớp trên.Ở class này ta
chỉ cần quan tâm đến các phương thức sau.
+void Nhatro::set_sophong(int sp)//đặc lại số phòng cho nhà trọ
Ta phải thực hiện copy qua một mãng Phongtro và sau đó xóa đi dspt
cũ,cấp phát lại bộ nhớ và thực hiện copy.
{
Phongtro p[100];
for(int i=0;ip[i]=dspt[i];
delete[]dspt;
this->sophong=sp;
dspt=new Phongtro[sophong+1];
for(int i=0;idspt[i]=p[i];
}
+float Nhatro::get_tienmoiphong(int i)//phương thức lấy tiền mà
mỗi phòng phải trả
Ta sẽ lấy tiền phòng cộng với số điện của phòng thứ i nhân với
tiền điện và cộng với số nước của phòng thứ i nhân với tiền nước sẽ
ra số tiền tổng cộng mà phịng đó phải trả.
Vd:

return(tienphong+(float(dspt[i].get_sodien()*tiendien))+
(float(dspt[i].get_sonuoc()*tiennuoc)));
+ float Nhatro::get_tienmoisv(int i)//phương thức lấy tiền mà mỗi
sinh viên phải trả trong phòng i.
Ta chỉ việc lấy số tiền tổng cộng của phòng và chia cho số sinh
viên đang trọ trong phòng thứ i.
+ void Nhatro::nhapsv(Sinhvien sv,int i)//phương thức nhập sinh
vien sv vào phòng tro thứ i
Ta cho biến đếm d tăng như sau:ta dùng hàm strcmp dùng để so sánh
mã sinh viên được đưa vào sv có trùng với sinh viên đã có trong
nhà trọ hay không,mỗi sinh viên được so sánh mà không trùng thì ta
tăng biến d lên một đơn vi.
Vd:
int j,k,d=0;
Sinhvien *svtam;
for(j=0;jfor(k=0;kif(strcmp(sv.get_masv(),dspt[j].get_dssv()[k].get_masv())!
=0)
d++;
Nếu kết thúc vòng lập mà d bắng với tổng số sinh viên có trong nhà
trọ thì ta thêm sinh viên đó vào phịng trọ thứ i,và tổng số sinh
viên phải tăng lên một đơn vị.

Đề Tài Quản Lý Nhà Trọ

11

Sinh Viên : Nguyễn Trung Trí



Vd:

if(d==tgsosv){
dspt[i].insert_sv(sv);
tgsosv+=1;
}
Ngược lại là sinh viên đã có trong phịng trọ.
Vd:
else{
cout<<"Sinh Vien Nhap Vao Trung Ma So Voi Sinh Vien Da
Co"<getch();
}
+ void Nhatro::xoasv(char *ma)//phương thức xóa sinh viên có mã số
là ma ra khổi phòng trọ.
Ta thực hiện kiểm tra mã sinh viên đưa vào có trùng với sinh viên
đang trọ trong phịng trọ hay khơng,nếu gập thì ta thực hiện
xóa,nếu khơng thì tăng biến đếm lên một đơn vị.
Vd:
int i,j,k,d=0;
for(j=0;jfor(k=0;kif(strcmp(ma,dspt[j].get_dssv()[k].get_masv())==0)
dspt[j].delete_sv(ma);
else
d+=1;
}
Nếu thốt khổi vịng lập mà d băng tổng số sinh viên trong phịng
trọ thì ta kết luận là khơng tìm thấy sinh viên có mã là ma để

xóa.
Vd:
if(d==tgsosv){
cout<<"Khong Co Sinh Vien Nay Trong Phong Tro"<getch();
}
Ngược lại thì ta giảm tổng số sinh viên xuống 1 đơn vị.
else{
cout<<"Da Thuc Xoa Sinh Vien Co Ma So:"<tgsosv-=1;
getch();
}
+ void Nhatro::search(char *tam)//phương thức tìm một sinh viên có
mã là tam.
Giải thuật khơng khác gì các phương thức trên.
+ Date Nhatro::ngaydongtien(int i)//phương thức lấy ngày hết hạng
đống tiền của sinh viên.

Hết
Đề Tài Quản Lý Nhà Trọ

12

Sinh Viên : Nguyễn Trung Trí



×