宾馆客房管理系统(必须用类)
题目描述:设计一个宾馆客房管理系统,以菜单方式工作。
功能需求:
(1) 设计一个房间类Room, 记录的客房信息包括客房号、客房类型、客房价格、空闲情况、客人姓名、客人身份证号、入住时间、退房时间,预付费用等信息。
(2)客房信息的录入功能。
(3) 客人入住登记。
(4)客房信息浏览功能,浏览全部客房的信息。 支持按照空房、姓名、身份证号、 房间号查询。
(5) 客人退房结算。
(6)使用外部文件存储相关数据。
写注释!
要符合提干要求,外部文件
宾馆客房管理系统(必须用类)
题目描述:设计一个宾馆客房管理系统,以菜单方式工作。
功能需求:
(1) 设计一个房间类Room, 记录的客房信息包括客房号、客房类型、客房价格、空闲情况、客人姓名、客人身份证号、入住时间、退房时间,预付费用等信息。
(2)客房信息的录入功能。
(3) 客人入住登记。
(4)客房信息浏览功能,浏览全部客房的信息。 支持按照空房、姓名、身份证号、 房间号查询。
(5) 客人退房结算。
(6)使用外部文件存储相关数据。
写注释!
要符合提干要求,外部文件
客房管理系统,现写的代码,运行结果如下:(有的截图中没有回车的地方,代码中已经修改了)
代码:
//酒店管理系统
/*
(1) 设计一个房间类Room, 记录的客房信息包括客房号、客房类型、客房价格、空闲情况、客人姓名、客人身份证号、入住时间、退房时间,预付费用等信息。
(2) 客房信息的录入功能。
(3) 客人入住登记。
(4) 客房信息浏览功能,浏览全部客房的信息。 支持按照空房、姓名、身份证号、 房间号查询。
(5) 客人退房结算。
(6) 使用外部文件存储相关数据。
*/
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
//定义客房类型
enum eRomeType
{
e_rome_bj, //标准间
e_rome_dcf, //大床房
e_rome_scf, //双床房
e_rome_hhdcf, //豪华大床房
e_rome_hhscf, //豪华双床房
e_rome_swdcf, //商务大床房
e_rome_zttf //总统套房
};
//定义客房状态
enum eRomeState //在低版本vs中,可以直接写成 enum eRomeState
{
e_state_using, //再用
e_state_preshoping, //已预定(尚未入住)
e_state_free //空闲
};
//定义顾客信息
class Guest
{
private:
string mName; //姓名
string mCard; //身份证号
string mPhoneNmb; //手机号
int mPrePay; //剩余预付费金额
public:
Guest(string name="", string id = "", string phone = "", int prepay = 0)
{
mName = name;
mCard = id;
mPhoneNmb = phone;
mPrePay = prepay;
}
/*getter and setter functions*/
string getName() { return mName; }
string getId() { return mCard; }
string getPhoneNmb() { return mPhoneNmb; }
int getPrePay() { return mPrePay; }
void setName(string name) { mName = name; }
void setId(string id) { mCard = id; }
void setPhoneNmb(string nmb) { mPhoneNmb = nmb; }
void setPrePay(int p) { mPrePay = p; }
/*输入输出运算符重载*/
//friend ostream& operator << (ostream& os, Guest& p);
//friend istream& operator >> (istream& is, Guest& p);
};
//定义日期类
struct MyDate
{
int year, mon, day;
MyDate()
{
year = 0;
mon = 0;
day = 0;
}
};
class Rome
{
private:
string mRomeId; //房间号
eRomeType mRomeType; //客房类型
int mPrice; //房价
eRomeState mRomeState; //客房状态
Guest mGuest; //客户信息
MyDate mStart; //入住日期
MyDate mEnd; //退房日期
public:
Rome()
{
mRomeId = "";
mRomeType = e_rome_bj;
mPrice = 0;
mRomeState = e_state_free;
mStart.year = 0;
mStart.mon = 0;
mStart.day = 0;
mEnd.year = 0;
mEnd.mon = 0;
mEnd.day = 0;
}
Rome(string id, eRomeType type, int price, eRomeState state = e_state_free)
{
mRomeId = id;
mRomeType = type;
mPrice = price;
mRomeState = state;
}
/*getter and setter functions*/
string getRomeId() { return mRomeId; }
eRomeType getRomeType() { return mRomeType; }
int getPrice() { return mPrice; }
eRomeState getRomeState() { return mRomeState; }
Guest getGuest() { return mGuest; }
MyDate getStartDate() { return mStart; }
MyDate getEndDate() { return mEnd; }
void setRomeId(string id) { mRomeId = id; }
void setRomeType(eRomeType t) { mRomeType = t; }
void setRomePrice(int p) { mPrice = p; }
void setRomeState(eRomeState s) { mRomeState = s; }
void setGuest(Guest g) { mGuest = g; }
void setStartDate(MyDate d) { mStart = d; }
void setEndDate(MyDate d) { mEnd = d; }
/*输入输出运算符重载*/
friend ostream& operator << (ostream& os, Rome& p);
friend istream& operator >> (istream& is, Rome& p);
};
ostream& operator << (ostream& os, Rome& p)
{
os << p.mRomeId << " ";
switch (p.mRomeType)
{
case e_rome_bj:
os << "1 "; break;
case e_rome_dcf:
os << "2 "; break;
case e_rome_scf: //双床房
os << "3 "; break;
case e_rome_hhdcf: //豪华大床房
os << "4 "; break;
case e_rome_hhscf: //豪华双床房
os << "5 "; break;
case e_rome_swdcf: //商务大床房
os << "6 "; break;
case e_rome_zttf: //总统套房
os << "7 "; break;
}
os << p.mPrice << " ";
switch (p.mRomeState)
{
case e_state_using:
os << "1 "; break;
case e_state_preshoping:
os << "2 "; break;
case e_state_free:
os << "3 "; break;
}
if (p.mRomeState == e_state_using)
os << p.mGuest.getName() << " " << p.mGuest.getId() << " " << p.mGuest.getPhoneNmb() << " " << p.mGuest.getPrePay() << " ";
else
os << "0 0 0 0 ";
os << p.mStart.year<<"-" << p.mStart.mon<<"-" << p.mStart.day << " ";
os << p.mEnd.year << "-" << p.mEnd.mon << "-" << p.mEnd.day << endl;
return os;
}
istream& operator >> (istream& is, Rome& p)
{
int tmp;
char ch;
string str;
is >> p.mRomeId;
is >> tmp;
switch (tmp)
{
case 1:
p.mRomeType = e_rome_bj;
break;
case 2:
p.mRomeType = e_rome_dcf;
break;
case 3:
p.mRomeType = e_rome_scf; //双床房
break;
case 4:
p.mRomeType = e_rome_hhdcf; //豪华大床房
break;
case 5:
p.mRomeType = e_rome_hhscf; //豪华双床房
break;
case 6:
p.mRomeType = e_rome_swdcf; //商务大床房
break;
case 7:
p.mRomeType = e_rome_zttf; //总统套房
break;
}
is >> p.mPrice;
is >> tmp;
switch (tmp)
{
case 1:
p.mRomeState = e_state_using;
break;
case 2:
p.mRomeState = e_state_preshoping;
break;
case 3:
p.mRomeState = e_state_free;
break;
}
is >> str;
p.mGuest.setName(str);
is >> str;
p.mGuest.setId(str);
is >> str;
p.mGuest.setPhoneNmb(str);
is >> tmp;
p.mGuest.setPrePay(tmp);
is >> p.mStart.year >> ch >> p.mStart.mon >> ch >> p.mStart.day;
is >> p.mEnd.year >> ch >> p.mEnd.mon >> ch >> p.mEnd.day;
return is;
}
//显示住房信息
void showSingleInfo(Rome p)
{
cout << p.getRomeId() << " ";
switch (p.getRomeType())
{
case e_rome_bj:
cout << "标准间 "; break;
case e_rome_dcf:
cout << "大床房 "; break;
case e_rome_scf: //双床房
cout << "双床房 "; break;
case e_rome_hhdcf: //豪华大床房
cout << "豪华大床房 "; break;
case e_rome_hhscf: //豪华双床房
cout << "豪华双床房 "; break;
case e_rome_swdcf: //商务大床房
cout << "商务大床房 "; break;
case e_rome_zttf: //总统套房
cout << "总统套房 "; break;
}
cout << p.getPrice() << " ";
switch (p.getRomeState())
{
case e_state_using:
cout << "已入住 "; break;
case e_state_preshoping:
cout << "已预定 "; break;
case e_state_free:
cout << "空闲 "; break;
}
if (p.getRomeState() == e_state_using)
{
cout << p.getGuest().getName() << " " << p.getGuest().getId() << " " << p.getGuest().getPhoneNmb() << " " << p.getGuest().getPrePay() << " ";
cout << p.getStartDate().year << "-" << p.getStartDate().mon << "-" << p.getStartDate().day << " ";
cout << p.getEndDate().year << "-" << p.getEndDate().mon << "-" << p.getEndDate().day << endl;
}
else
cout << endl;
}
//录入客房信息
void addRome(Rome romes[], int &n)
{
int flag = 1;
while (1)
{
system("cls");
Rome r;
string str;
cout << "请输入房间号:";
cin >> str;
r.setRomeId(str);
cout << "请选择房间类型:" << endl;
cout << "\t1.标准间\n";
cout << "\t2.大床房\n";
cout << "\t3.双床房\n";
cout << "\t4.豪华大床房\n";
cout << "\t5.豪华双床房\n";
cout << "\t6.商务大床房\n";
cout << "\t7.总统套房\n";
int type;
cin >> type;
switch (type)
{
case 1: r.setRomeType(e_rome_bj); break;
case 2: r.setRomeType(e_rome_dcf); break;
case 3: r.setRomeType(e_rome_scf); break;
case 4: r.setRomeType(e_rome_hhdcf); break;
case 5: r.setRomeType(e_rome_hhscf); break;
case 6: r.setRomeType(e_rome_swdcf); break;
case 7: r.setRomeType(e_rome_zttf); break;
}
int price;
cout << "请输入价格:";
cin >> price;
r.setRomePrice(price);
romes[n] = r;
n++;
cout << "添加成功,是否继续添加(1.继续 2.结束):";
cin >> flag;
if (flag == 2)
break;
}
system("pause");
}
//入住
void homeIn(Rome romes[], int n)
{
system("cls");
while (1)
{
cout << "请输入入住房间类型:\n";
int type;
cout << "\t1.标准间\n";
cout << "\t2.大床房\n";
cout << "\t3.双床房\n";
cout << "\t4.豪华大床房\n";
cout << "\t5.豪华双床房\n";
cout << "\t6.商务大床房\n";
cout << "\t7.总统套房\n";
eRomeType e = e_rome_bj;
while (1)
{
cin >> type;
if (type >= 1 && type <= 7)
break;
else
cout << "请输入1-7之间的数字:";
}
switch (type)
{
case 1: e = e_rome_bj; break;
case 2: e = e_rome_dcf; break;
case 3: e = e_rome_scf; break;
case 4: e = e_rome_hhdcf; break;
case 5: e = e_rome_hhscf; break;
case 6: e = e_rome_swdcf; break;
case 7: e = e_rome_zttf; break;
}
//查找符合条件的房间
int flag = 0;
for (int i = 0; i < n; i++)
{
if (romes[i].getRomeState() == e_state_free && romes[i].getRomeType() == e)
{
cout << romes[i].getRomeId() << " " << romes[i].getPrice() << endl;
flag = 1;
}
}
if (flag == 0)
{
cout << "目前没有该类型的房间,请重新选择\n";
continue;
}
else
{
string romeid;
cout << "请输入房间号:";
cin >> romeid;
for (int i = 0; i < n; i++)
{
if (romes[i].getRomeId().compare(romeid) == 0)
{
string name, id, phone;
int prepay;
cout << "请输入用户名:";
cin >> name;
cout << "请输入身份证号:";
cin >> id;
cout << "请输入手机号:";
cin >> phone;
cout << "请输入预付金额:";
cin >> prepay;
Guest g(name, id, phone, prepay);
romes[i].setGuest(g);
romes[i].setRomeState( e_state_using);
cout << "请输入入住日期:";
MyDate start, end;
cin >> start.year >> start.mon >> start.day;
cout << "请输入退房日期:";
cin >> end.year >> end.mon >> end.day;
romes[i].setStartDate(start);
romes[i].setEndDate(end);
cout << "入住办理成功\n";
system("pause");
return;
}
}
}
}
}
// 查询
void Search(Rome romes[], int n)
{
int op;
int type;
int i;
eRomeType e;
string str;
while (1)
{
system("cls");
cout << "1.显示所有客房信息\n";
cout << "2.按照客房类型查询\n";
cout << "3.显示所有空闲客房\n";
cout << "4.根据用户名查询\n";
cout << "5.根据房间号查询\n";
cout << "6.根据身份证号查询\n";
cout << "0.结束查询\n";
cin >> op;
switch (op)
{
case 0:
return;
case 1:
for (i = 0; i < n; i++)
showSingleInfo(romes[i]);
break;
case 2:
cout << "请选择房间类型:\n";
cout << "\t1.标准间\n";
cout << "\t2.大床房\n";
cout << "\t3.双床房\n";
cout << "\t4.豪华大床房\n";
cout << "\t5.豪华双床房\n";
cout << "\t6.商务大床房\n";
cout << "\t7.总统套房\n";
while (1)
{
cin >> type;
if (type >= 1 && type <= 7)
break;
else
cout << "请输入1-7之间的数字:";
}
switch (type)
{
case 1: e = e_rome_bj; break;
case 2: e = e_rome_dcf; break;
case 3: e = e_rome_scf; break;
case 4: e = e_rome_hhdcf; break;
case 5: e = e_rome_hhscf; break;
case 6: e = e_rome_swdcf; break;
case 7: e = e_rome_zttf; break;
}
for (i = 0; i < n; i++)
{
if (romes[i].getRomeType() == e)
cout << romes[i];
}
break;
case 3:
for (i = 0; i < n; i++)
{
if (romes[i].getRomeState() == e_state_free)
showSingleInfo(romes[i]);
}
break;
case 4:
cout << "请输入用户名:";
cin >> str;
for (i = 0; i < n; i++)
{
if (romes[i].getGuest().getName().compare(str) == 0)
showSingleInfo(romes[i]);
}
break;
case 5:
cout << "请输入房间号:";
cin >> str;
for (i = 0; i < n; i++)
{
if (romes[i].getRomeId().compare(str) == 0)
showSingleInfo(romes[i]);
}
break;
case 6:
cout << "请输入身份证号:";
cin >> str;
for (i = 0; i < n; i++)
{
if (romes[i].getGuest().getId().compare(str) == 0)
showSingleInfo(romes[i]);
}
break;
}
system("pause");
}
}
//退房结算
void Tuifang(Rome romes[], int n)
{
string romeid;
int i = 0;
system("cls");
cout << "请输入房间号:";
cin >> romeid;
for ( i = 0; i < n; i++)
{
if (romes[i].getRomeId().compare(romeid) == 0 )
{
if (romes[i].getRomeState() != e_state_using)
{
cout << "此房间尚未有客人入住" << endl;
break;
}
//居住天数(为了简便,这里让用户输入吧,否则计算比较麻烦)
int days = 1;
cout << "请输入实际居住天数:";
cin >> days;
int p, pre;
p = romes[i].getPrice();
pre = romes[i].getGuest().getPrePay();
cout << "房间价格:" << p << endl;
cout << "房客预付:" << pre << endl;
if (pre > p*days)
cout << "找零:" << pre - p << endl;
else if (pre == p*days)
cout << "预付刚好" << endl;
else
cout << "房客仍需支付" << p*days - pre << endl;
//设置客房状态
romes[i].setRomeState(e_state_free);
cout << "退房成功!" << endl;
break;
}
}
if (i == n)
cout << "查无此房" << endl;
system("pause");
}
//保存文件
void SaveFile(Rome romes[], int n)
{
ofstream os;
os.open("./Hotel.txt", ios::out);
for (int i = 0; i < n; i++)
os << romes[i];
os.close();
cout << "保存成功\n";
system("pause");
}
int main()
{
int op;
int romNmb = 0;
Rome romes[100];
int flag = 1;
while (1)
{
system("cls");
cout << "1.录入客房信息" << endl;
cout << "2.客人入住" << endl;
cout << "3.查询" << endl;
cout << "4.退房结算" << endl;
cout << "5.保存到文件" << endl;
cout << "0.退出系统" << endl;
cin >> op;
switch (op)
{
case 0: return 0;
case 1: addRome(romes, romNmb); break;
case 2: homeIn(romes, romNmb); break;
case 3: Search(romes, romNmb); break;
case 4: Tuifang(romes, romNmb); break;
case 5: SaveFile(romes,romNmb); break;
}
}
return 0;
}