#ifdef HOTEL_H
#define HOTEL_H
///
///
int menu(); //菜单选项
void add_hotel(); //增加酒店
void add_list(); //增加定单
void sum_list(); //取消定单
void findcty(); //查找城市
///
class Hotel
{
private:
int No; //酒店编号
string name; //酒店名称
string cty; //所在城市
int total_room; //总房数
int proom; //普通房数
int proom_empty; //普通空房数
double proom_money; //普通房价
int hroom; //高级房数
int hroom_empty; //高级空房数
double hroom_money; //高级房价
public:
Hotel(); //初始化对象属性
~Hotel(); //析构函数
void input(); //输入酒店信息
int turn(bool a); //根据布尔值返回空房间数目
void Dingdan(int strct,int strnum); //来定单时,修改对象基本属性
void output(); //输出酒店信息
void unDingdan(int strct,int strnum); //取消单时,修改对象基本属性
string turnname(){return name;} //返回酒店名称
string turncty(){return cty;} //返回城市名字
int num(int number){No=number;} //生成编号
///
friend ostream&
operator << (ostream &out,Hotel &hot)
{
out <<hot.No<<" "<<hot.name<<" "<<hot.cty<<" "<<hot.total_room
<<" "<<hot.proom<<" "<<hot.proom_empty<<" "<<hot.proom_money
<<" "<<hot.hroom<<" "<<hot.hroom_empty<<" "<<hot.hroom_money
<<endl;
return out;
}
///
friend istream&
operator >> (istream &in,Hotel &hot)
{
in >> hot.No >> hot.name >> hot.cty >> hot.total_room >>hot.proom
>> hot.proom_empty >> hot.proom_money >>hot.hroom
>> hot.hroom_empty >> hot.hroom_money;
return in;
}
};
///
int loadfile(list<Hotel> &list_hot);
void savefile(list<Hotel> &list_hot);
///
class Yuding
{
private:
int No; //定单编号
int hotelNo; //酒店编号
bool strct; //房间类型
int strnum; //定房数目
string name; //订者姓名
string tel; //联系电话
string email; //email地址
public:
Yuding(); //构造函数
~Yuding(); //析构函数
void input(list<Hotel>&,int&); //定单输入
void output(); //定单输出
void num(int number){No=number;} //自动编号
int rehotelNo(){return hotelNo;} //返回酒店编号
int restrct(){return strct;} //返回酒店类型
int restrnum(){return strnum;} //返回预定房间数量
///
friend ostream&
operator << (ostream &out,Yuding &yuding)
{
out <<" "<<yuding.No<<" "<<yuding.hotelNo<<" "<<yuding.strct
<<" "<<yuding.name<<" "<<yuding.tel<<" "<<yuding.email<<endl;
return out;
}
/
friend istream&
operator >> (istream &in,Yuding &yuding)
{
in >>yuding.No>>yuding.hotelNo>>yuding.strct>>yuding.name
>>yuding.tel>>yuding.email;
return in;
}
};
/
inline int loadfile(list<Yuding> &list_hot);
inline void savefile(list<Yuding> &list_hot);
/
class Yuding
{
private:
int No; //定单编号
int hotelNo; //酒店编号
bool strct; //房间类型
int strnum; //定房数目
string name; //订者姓名
string tel; //联系电话
string email; //email地址
public:
Yuding(); //构造函数
~Yuding(); //析构函数
void input(list<Hotel> &hot,int &num) //定单输入
void output(); //定单输出
int num(int number){No=number;} //自动编号
int rehotelNo(){return hotelNo;} //返回酒店编号
int restrct(){return strct;} //返回酒店类型
int restrnum(){return strnum;} //返回预定房间数量
friend ostream&
operator << (ostream &out,Yuding &yuding)
{
out <<" "<<yuding.No<<" "<<yuding.hotelNo<<" "<<yuding.strct<<" "<<yuding.name
<<" "<<yuding.tel<<" "<<yuding.email<<endl;
return out;
}
/
friend istream&
operator >> (istream &in,Yuding &yuding)
{
in >>yuding.No>>yuding.hotelNo>>yuding.strct>>yuding.name
>>yuding.tel>>yuding.email;
return in;
}
};
/
inline int loadfile(list<Yuding> &list_hot);
inline void savefile(list<Yuding> &list_hot);
#endif
/
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <list>
using namespace std;
/
/
int menu(); //菜单选项
void add_hotel(); //增加酒店
void add_list(); //增加定单
void sum_list(); //取消定单
void findcty(); //查找城市
//
class Hotel
{
private:
int No; //酒店编号
string name; //酒店名称
string cty; //所在城市
int total_room; //总房数
int proom; //普通房数
int proom_empty; //普通空房数
double proom_money; //普通房价
int hroom; //高级房数
int hroom_empty; //高级空房数
double hroom_money; //高级房价
public:
Hotel(); //初始化对象属性
~Hotel(); //析构函数
void input(); //输入酒店信息
int turn(bool a); //根据布尔值返回空房间数目
void Dingdan(int strct,int strnum); //来定单时,修改对象基本属性
void output(); //输出酒店信息
void unDingdan(int strct,int strnum); //取消单时,修改对象基本属性
string turnname(){return name;} //返回酒店名称
string turncty(){return cty;} //返回城市名字
int num(int number){No=number;} //生成编号
/
friend ostream&
operator << (ostream &out,Hotel &hot)
{
out <<hot.No<<" "<<hot.name<<" "<<hot.cty<<" "<<hot.total_room
<<" "<<hot.proom<<" "<<hot.proom_empty<<" "<<hot.proom_money
<<" "<<hot.hroom<<" "<<hot.hroom_empty<<" "<<hot.hroom_money
<<endl;
return out;
}
/
friend istream&
operator >> (istream &in,Hotel &hot)
{
in >> hot.No >> hot.name >> hot.cty >> hot.total_room >>hot.proom
>> hot.proom_empty >> hot.proom_money >>hot.hroom
>> hot.hroom_empty >> hot.hroom_money;
return in;
}
};
///
int loadfile(list<Hotel> &list_hot);
void savefile(list<Hotel> &list_hot);
///
class Yuding
{
private:
int No; //定单编号
int hotelNo; //酒店编号
bool strct; //房间类型
int strnum; //定房数目
string name; //订者姓名
string tel; //联系电话
string email; //email地址
public:
Yuding(); //构造函数
~Yuding(); //析构函数
void input(list<Hotel>&,int&); //定单输入
void output(); //定单输出
void num(int number){No=number;} //自动编号
int rehotelNo(){return hotelNo;} //返回酒店编号
int restrct(){return strct;} //返回酒店类型
int restrnum(){return strnum;} //返回预定房间数量
friend ostream&
operator << (ostream &out,Yuding &yuding)
{
out <<" "<<yuding.No<<" "<<yuding.hotelNo<<" "<<yuding.strct
<<" "<<yuding.name<<" "<<yuding.tel<<" "<<yuding.email<<endl;
return out;
}
/
friend istream&
operator >> (istream &in,Yuding &yuding)
{
in >>yuding.No>>yuding.hotelNo>>yuding.strct>>yuding.name
>>yuding.tel>>yuding.email;
return in;
}
};
/
inline int loadfile(list<Yuding> &list_hot);
inline void savefile(list<Yuding> &list_hot);
菜单选项//
/PUTONG///
int menu()
{
const int b=85;
int a;
bool c=0;
while(!c)
{
cout <<"/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n"
<< setfill(' ') << setw(100)
<< "欢迎使用星光酒店管理系统/n/n"
<< setfill(' ') << setw(86)
<< "请按Enter继续/n"
<< "/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n"
<<endl;
cin.get();
cout <<"/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n/n"
<<setfill(' ') << setw(b)
<<"1、添加酒店资料"<<endl<<endl;
cout <<setfill(' ') << setw(b)
<<"2、增 加 订 单 "<<endl<<endl;
cout <<setfill(' ') << setw(b)
<<"3、取 消 订 单 "<<endl<<endl;
cout <<setfill(' ') << setw(b)
<<"4、查寻城市酒店"<<endl<<endl;
cout <<setfill(' ') << setw(b)
<<"5、退出星光系统"<<endl<<endl<<endl<<endl;
cout <<setfill(' ') << setw(b+1)
<<"请输入数字选择/n"<<endl;
cout << "/n/n/n/n/n/n/n/n/n/n/n/n/n/n"<<endl;
cin>>a;
if ((a<1)||(a>5))
{
c=0;
}
else
{
c=1;
}
}
return a;
}
///增加酒店
void add_hotel()
{
list<Hotel> hot;
loadfile(hot);
for(list<Hotel>::iterator vec_hot=hot.begin();vec_hot!=hot.end();vec_hot++)
{
cout<<*vec_hot;
}
bool a=1;
Hotel input;
while(a)
{
input.input();
hot.push_back(input);
bool b=1;
string x;
while(b)
{
cout <<"是否继续输入?(Y/N)ENTER";
cin>>x;
if(x=="y"||x=="Y")
{
a=1;
b=0;
}
else if(x=="n"||x=="N")
{
a=0;
b=0;
}
else
{
b=1;
cout <<"您输入的不正确请重新输入"<<endl;
}
}
}
savefile(hot);
}
//增加定单/
void add_list()
{
int num1,num2;
list<Hotel> hot;
list<Yuding> Yud;
num2=loadfile(Yud);
num1=loadfile(hot);
if (num1<1)
{
cout <<"没有酒店信息,请录入后再使用预定系统"<<endl;
exit(0);
}
for(list<Yuding>::iterator li_Yud=Yud.begin();li_Yud!=Yud.end();li_Yud++)
{
cout<<*li_Yud;
}
bool a=1;
Yuding input;
while(a)
{
input.input(hot,num1);
Yud.push_back(input);
bool b=1;
char x;
while(b)
{
cout <<"是否继续输入?(Y/N)ENTER确认:";
cin>>x;
if(x==*"y"||x==*"Y")
{
a=1;
b=0;
}
else if(x==*"n"||x==*"N")
{
a=0;
b=0;
}
else
{
b=1;
cout <<"您输入的不正确请重新输入"<<endl;
}
}
}
savefile(Yud);
savefile(hot);
}
//取消定单/
void sum_list()
{
int num1,num2;
list<Hotel> hot;
list<Yuding> Yud;
num2=loadfile(Yud);
num1=loadfile(hot);
if (num2<1)
{
cout <<"没有预定信息,请录入后再使用取消预定系统"<<endl;
exit(0);
}
int abdc=0;
bool b=1;
while(b)
{
for(list<Yuding>::iterator li_Yud=Yud.begin();li_Yud!=Yud.end();li_Yud++)
{
li_Yud->output();
abdc++;
if (abdc%20==0)
{
cout<<"按任意键继续";
cin.get();
}
}
cout <<"请输入取消定单的编号"<<endl;
int number;
cin >>number;
if (number>num2)
{
cout<<"你输入的定单编号不存在请重新输入:"<<endl;
b=1;
break;
}
list<Yuding>::iterator li_Yud=Yud.begin();
Yuding temp;
for (int i=1;i<number;i++)
{
li_Yud++;
}
temp=*li_Yud;
list<Hotel>::iterator li_hot=hot.begin();
for(int i=1;i<temp.rehotelNo();i++)
{
li_hot++;
}
li_hot->unDingdan(temp.restrct(),temp.restrnum());
if (li_Yud!=Yud.end())
{
Yud.erase(li_Yud);
}
else
{
Yud.pop_back();
}
cout <<"是否继续?(y/n)"<<endl;
string a;
cin>>a;
if (a=="y"||a=="Y")
{
b=1;
}
else
{
b=0;
}
savefile(hot);
savefile(Yud);
}
}
///查找城市
void findcty()
{
int num=0;
list<Hotel> hot;
loadfile(hot);
savefile(hot);
for(list<Hotel>::iterator vec_hot=hot.begin();vec_hot!=hot.end();vec_hot++)
{
cout<<*vec_hot;
}
bool a=1;
string b;
while(a)
{
cout <<"请输入想要查找的城市"<<endl;
cin >> b;
for(list<Hotel>::iterator li_hot=hot.begin();li_hot!=hot.end();li_hot++)
{
string c=li_hot->turncty();
if(b==c)
{
li_hot->output();
num++;
}
}
if (num==0)
{
cout <<"没有找到你输入的城市/n"<<endl;
}
else
{
cout<<"一共找到"<<num<<"个酒店!"<<endl;
}
cout <<"是否继续查找?(y/n)/n";
cin>> b;
if (b=="y"||b=="Y")
{
a=1;
}
else
{
a=0;
}
}
}
///
///读取文件
inline int loadfile(list<Hotel> &list_hot)
{
ifstream infile("hot.dat");
int num=1;
if (!infile)
{
cout <<"第一次运行程序吗?如果不是您的数据文件可能丢失!"<<endl;
}
else
{
Hotel temp;
while (infile >> temp)
{
temp.num(num);
list_hot.push_back(temp);
num++;
}
infile.close();
infile.clear();
}
return num-1;
}
///读取文件///
inline int loadfile(list<Yuding> &list_hot)
{
ifstream infile("yud.dat");
int num=1;
if (!infile)
{
cout <<"第一次运行程序吗?如果不是您的数据文件可能丢失!"<<endl;
}
else
{
Yuding temp;
while (infile >> temp)
{
temp.num(num);
list_hot.push_back(temp);
num++;
}
infile.close();
infile.clear();
}
return num-1;
}
/写入文件/
inline void savefile(list<Hotel> &list_hot)
{
ofstream outfile("hot.dat");
for(list<Hotel>::iterator li_hot=list_hot.begin();li_hot!=list_hot.end();li_hot++)
{
outfile<<*li_hot;
}
outfile.close();
outfile.clear();
}
/写入文件///
inline void savefile(list<Yuding> &list_hot)
{
ofstream outfile("yud.dat");
for(list<Yuding>::iterator li_hot=list_hot.begin();li_hot!=list_hot.end();li_hot++)
{
outfile<<*li_hot;
}
outfile.close();
outfile.clear();
}
/构造函数///
//CLASSHOTEL/
Hotel::Hotel() //初始化对象属性
{
No=0;
name="NONE";
cty="NONE";
total_room=0;
proom=0;
proom_empty=0;
proom_money=0.00;
hroom=0;
hroom_empty=0;
hroom_money=0.00;
}
//析构函数/
Hotel::~Hotel(){}
/输入酒店信息//
void Hotel::input()
{
bool b=1;
while(b)
{
cout<<"/n请输入酒店名称:";
cin >> name;
cout<<"/n请输入所在城市:";
cin>> cty;
cout<<"/n请输入总房间数:";
cin>>total_room;
cout<<"/n请输入普通房间数:";
cin>>proom;
cout<<"/n请输入普通空房数:";
cin>>proom_empty;
cout<<"/n请输入普通标准房价格:";
cin>>proom_money;
cout<<"/n请输入豪华房间数:";
cin>>hroom;
cout<<"/n请输入空豪华房间数:";
cin>>hroom_empty;
cout<<"请输入豪华房价格:";
cin>>hroom_money;
if (proom>total_room
||hroom>total_room
||proom+hroom>total_room
||proom_empty>proom
||hroom_empty>hroom
||proom_money>hroom_money)
{
cout <<"您的输入有误,请重新输入!"<<endl;
b=1;
}
else
{
b=0;
}
}
}
//返回房间数///
int Hotel::turn(bool a)
{
if (a)
{
return proom_empty;
}
else
{
return hroom_empty;
}
}
来定单时,修改对象基本属性/
void Hotel::Dingdan(int strct,int strnum)
{
cout <<"进入"<<strct<<strnum<<endl;
if (strct)
{
proom_empty-=strnum;
}
else
{
hroom_empty-=strnum;
}
cout <<"修改成功!"<<endl;
}
输出酒店信息///
void Hotel::output()
{
cout<<No<<"| "<<name<<"| "<<cty<<"| "<< total_room<<"| "<<proom
<<"| "<<proom_empty<<"| "<<proom_money<<"| "<<hroom
<<"| "<<hroom_empty<<"| "<<hroom_money<<endl;
}
//取消单时,修改对象基本属性///
void Hotel::unDingdan(int strct,int strnum)
{
if (strct)
{
proom_empty+=strnum;
}
else
{
hroom_empty+=strnum;
}
cout <<"修改成功!"<<endl;
}
//构造函数/
CLASSYUDING//
Yuding::Yuding()
{
No=0;
hotelNo=0;
strct=0;
name="NONE";
tel="NOnumber";
email="NOemail";
}
/析构函数///
Yuding::~Yuding(){}
/定单输入///
void Yuding::input(list<Hotel> &hot,int &num)
{
cout <<"本系统现在共有"<<num<<"家酒店信息"<<endl;
bool b=1;
while(b)
{
cout<<"/n清输入酒店编号:/n";
cin>> hotelNo;
if (hotelNo>num)
{
cout <<"您输入的酒店编号不存在,请重新输入!"<<endl;
b=1;
break;
}
list<Hotel>::iterator map=hot.begin();
for(int i=1;i<hotelNo;i++)
{
map++;
}
int cls=map->turn(strct);
string hotname=map->turnname();
cout<<"欢迎光临您预定"<<hotname
<<"酒店客房!你如果需要高级房客请按Y,如果需要普通客房请按N.(y/n)/n";
string strct1 ;
cin >> strct1;
if (strct1=="y"||strct1=="Y")
{
strct=false;
}
else if(strct1=="n"||strct1=="N")
{
strct=true;
}
else
{
cout <<"你输入有误请重新输入:"<<endl;
break;
}
cout<<"本店"<<(strct>0)?"空普通客房还有":"空豪华客房还有")
<<cls<<"间请输入定房数目:/n";
cin>>strnum;
if(strnum>cls)
{
cout <<"哦,你输入的房间数大于此酒店的空房数,请重新输入:/n";
b=1;
break;
}
cout<<"请输入预订者姓名:/n";
cin >> name;
cout<<"请输入预订者电话:/n";
cin>>tel;
cout<<"请输入预订者email:/n";
cin>>email;
map->Dingdan(strct,strnum);
b=0;
}
}
定单输出///
void Yuding::output()
{
cout <<endl<<" | "<<No<<" | "<<hotelNo
<<" | "<<strct<<" | " << strnum
<<" | "<<name<<" | "<<tel<<" | "
<<email<<" | "<<endl;
}
///
///
int main()
{
int a;
do
{
a=menu();
switch(a)
{
case 1:
add_hotel();
break;
case 2:
add_list();
break;
case 3:
sum_list();
break;
case 4:
findcty();
break;
case 5:
a=0;
break;
}
}while(a);
return 0;
}
<hot.no></hot.no><hot.name></hot.name><hot.cty></hot.cty><hot.total_room></hot.total_room><hot.proom></hot.proom><hot.proom_empty></hot.proom_empty><hot.proom_money></hot.proom_money><hot.hroom></hot.hroom><hot.hroom_empty></hot.hroom_empty><hot.hroom_money></hot.hroom_money>