#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; }