当前位置:文档之家› 第五组酒店客房预订管理系统的设计与实现源代码

第五组酒店客房预订管理系统的设计与实现源代码

#include <iostream>#include <iomanip>#include <string>#include <fstream>#include"conio.h" //输入/输出文件流类using namespace std;const int Maxr=100; //最多的客户const int Maxb=100; //最多的客房const int Maxbor=10; //每位客户最多预订十间客房//person类class person{public:char name[20];char ID[18];char *getname() {return name;}//获取姓名char *getID() {return ID;} //获取身份证号void setID(char I[]) //设置身份证号{strcpy(ID,I);}void setname(char na[]) //设置姓名{strcpy(name,na);}};//客户类公有继承了person类,实现对客户的信息的描述class customer:public person{private:int num; //客户编号int tag; //删除标记1:已删0:未删int borbook[Maxbor]; //所订房间public:customer() {}int gettag() {return tag;} //获取删除标记void delbook(){ tag=1; } //设置删除标记1:已删0:未删int getnum() {return num;} //获取客户编号void addcustomer(int n,char *na,char *I) //增加客户{tag=0;num=n;strcpy(name,na);strcpy(ID,I);for(int i=0;i<Maxbor;i++)borbook[i]=0;}void borrowbook(int bookid) //预订操作{for(int i=0;i<Maxbor;i++){if (borbook[i]==0){borbook[i]=bookid;return;}}}int retbook(int bookid) //退订操作{for(int i=0;i<Maxbor;i++){if(borbook[i]==bookid){borbook[i]=0;return 1;}}return 0;}void display() //读出客户信息{cout <<"客户编号:" << num <<setw(15)<< "姓名:" << name <<setw(15)<< "身份证号:" << ID<<setw(15)<<"客房编号:[";for(int i=0;i<Maxbor;i++)if(borbook[i]!=0)cout <<"#"<< borbook[i]<<" ";cout << "]"<<endl;}};//客户库类,实现建立客户的个人资料class RDatabase{private:int top; //客户记录指针customer read[Maxr]; //客户记录public:RDatabase() //构造函数,将customer.txt读到read[]中{customer s;top=-1;fstream file("customer.txt",ios::in); //打开一个输入文件while (1){file.read((char *)&s,sizeof(s));if (!file)break;top++;read[top]=s;}file.close(); //关闭customer.txt}void clear() //删除所有客户信息{top=-1;}int addcustomer(int n,char *na,char *I) //添加客户时先查找是否存在{customer *p=query(n);if (p==NULL){top++;read[top].addcustomer(n,na,I);return 1;}return 0;}customer *query(int customerid) //按编号查找{for (int i=0;i<=top;i++)if (read[i].getnum()==customerid&&read[i].gettag()==0){return &read[i];}return NULL;}customer *query(string name) //按name查找{for (int i=0;i<=top;i++)if (read[i].getname()==name&&read[i].gettag()==0){return &read[i];}return NULL;}void display() //输出所有客户信息{for (int i=0;i<=top;i++)if(read[i].gettag()==0)read[i].display();}void customerdata(); //客户库维护~RDatabase() //析构函数,将read[]写到customer.txt文件中{fstream file("customer.txt",ios::out);for (int i=0;i<=top;i++)if (read[i].gettag()==0)file.write((char *)&read[i],sizeof(read[i]));file.close();}};void RDatabase::customerdata(){char choice;char rsex[10];char rname[20];int customerid;char rID[18];customer *r;system("cls");while (choice!='0'){cout<<endl<<setw(40)<<"客户信息"<<endl;cout<<endl<<setw(28)<<"1 "<<"新增"<<endl;cout<<endl<<setw(28)<<"2 "<<"更改"<<endl;cout<<endl<<setw(28)<<"3 "<<"删除"<<endl;cout<<endl<<setw(28)<<"4 "<<"查找"<<endl;cout<<endl<<setw(28)<<"5 "<<"显示"<<endl;cout<<endl<<setw(28)<<"6 "<<"全删"<<endl;cout<<endl<<setw(28)<<"0 "<<"返回"<<endl;cin>>choice;system("cls");switch (choice){case '1':cout <<"请输入客户信息:"<<endl;cout << "输入客户编号:";cin >> customerid;cout << "输入客户姓名:";cin >> rname;cout << "输入客户身份证号:";cin >> rID;addcustomer (customerid,rname,rID);break;case '2':cout << "输入客户编号:";cin >> customerid;r=query(customerid);if (r==NULL){cout << " 该客户不存在"<<endl;break;}cout << "输入新的客户姓名:";cin >> rname;r->setname(rname);cout<<"输入新的身份证号码:";cin>>rID;r->setID (rID);break;case '3':cout << "输入客户编号:";cin >> customerid;r=query(customerid);if (r==NULL){cout <<" 该客户不存在" << endl;break;}r->delbook();cout<<"删除成功!"<<endl;break;case '4':char cho;cout<<"请选择查找方式:"<<endl;cout<<"1.按客户编号查找,2.按客户姓名查找";cin>>cho;system("cls");switch (cho){case '1':cout << "输入客户编号:";cin >> customerid;r=query(customerid);if (r==NULL){cout <<" 该客户不存在"<< endl;break;}break;case'2':cout<<"输入客户名字:";cin >> rname;r=query(rname);if (r==NULL){cout<<"该客户不存在"<<endl;break;}}r->display();break;case '5':display();break;case '6':clear();cout<<"删除成功!"<<endl;break;default:cout<<"正在返回主界面...";system("cls");break;}}}//客房类,实现对客房的描述class Book{private:int tag; //删除标记1:已删0:未删int no; //客房编号char name[20]; //客房描述int onshelf; //是否预订1:空房2:已预订public:Book(){}char *getname() { return name; } //获取姓名int getno(){ return no; } //获取客房编号int gettag(){ return tag; } //获取删除标记void setname(char na[]) //设置客房描述{strcpy(name,na);}void delbook(){ tag=1;} //删除客房void addbook(int n,char *na) //增加客房{tag=0;no=n;strcpy(name,na);onshelf=1;}int borrowbook() //预订操作{if (onshelf==1){onshelf=0;return 1;}return 0;}void retbook() //退订操作{onshelf=1;}void disp() //输出客房{cout <<"客房编号:"<< no <<setw(15)<< "客房描述:"<< name <<setw(15)<<(onshelf==1? "空房":"已预订") <<endl;}};//客房库类,实现对客房的管理,如查找、删除等class BDatabase{private:int top; //客房记录指针Book book[Maxb]; //客房记录public:BDatabase() //构造函数,将book.txt读到book[]中{Book b;top=-1;fstream file("book.txt",ios::in);while (1){file.read((char *)&b,sizeof(b));if (!file) break;top++;book[top]=b;}file.close();}void clear() //全删{top=-1;}int addbook(int n,char *na) //增加客房{Book *p=query(n);if (NULL==p){top++;book[top].addbook(n,na);return 1;}return 0;}Book *query(int bookid) //查找客房{for (int i=0;i<=top;i++)if (book[i].getno()==bookid &&book[i].gettag()==0){return &book[i];}return NULL;}Book *query(string bname){for (int i=0;i<=top;i++)if (book[i].getname()==bname&&book[i].gettag()==0){return &book[i];}return NULL;}void bookdata(); //客房库维护void disp(){for (int i=0;i<=top;i++)if (book[i].gettag()==0)book[i].disp();}~BDatabase() //析构函数,将book[]写到book.txt文件中{fstream file("book.txt",ios::out);for (int i=0;i<=top;i++)if (book[i].gettag()==0)file.write((char *)&book[i],sizeof(book[i]));file.close();}};void BDatabase::bookdata(){char choice;char bname[40];int bookid;Book *b;system("cls");while (choice!='0'){cout<<endl<<setw(40)<<"客房信息"<<endl;cout<<endl<<setw(28)<<"1 "<<"新增"<<endl;cout<<endl<<setw(28)<<"2 "<<"更改"<<endl;cout<<endl<<setw(28)<<"3 "<<"删除"<<endl;cout<<endl<<setw(28)<<"4 "<<"查找"<<endl;cout<<endl<<setw(28)<<"5 "<<"显示"<<endl;cout<<endl<<setw(28)<<"6 "<<"全删"<<endl;cout<<endl<<setw(28)<<"0 "<<"返回"<<endl;cin >> choice;system("cls");switch (choice){case '1':cout <<"请输入客房信息:"<<endl;cout << "输入客房编号:";cin >> bookid;cout << "输入客房描述:";cin >> bname;addbook(bookid,bname);break;case '2':cout << "输入客房编号:";cin >> bookid;b=query(bookid);if (b==NULL){cout <<" 该客房不存在"<<endl;break;}cout << "输入新的客房描述:";cin >> bname;b->setname(bname);break;case '3':cout <<"输入客房编号:";cin >> bookid;b=query(bookid);if (b==NULL){cout <<" 该客房不存在" << endl;break;}b->delbook();cout<<"删除成功!"<<endl;break;case '4':char bb;cout << "请选择查找方式:1.按客房编号查找2.按客房描述查找";cin >> bb;switch(bb){case'1':cout<<"请输入客房编号:";cin>>bookid;b=query(bookid);if (b==NULL){cout <<" 该客房不存在"<< endl;break;}break;case'2':cout<<"请输入客房描述:";cin>>bname;b=query(bname);if (b==NULL){cout <<" 该客房不存在"<< endl;break;}}b->disp();break;case '5':disp();break;case '6':clear();cout<<"删除成功!"<<endl;break;default:cout<<"正在返回主界面...";system("cls");}}}int main(){char choice;int bookid,customerid;RDatabase customerDB;customer *r;BDatabase BookDB;Book *b;while(choice!='0'){cout <<setw(39)<<"欢迎使用"<<endl;cout <<endl<<setw(55)<<"酒店客房预订管理系统"<<endl<<endl;cout <<"のののののののののののののののののののののののののののののののののののの"<<endl;cout <<"I"<<setw(71)<<"I";cout <<endl<<"I"<<setw(25)<<"1"<<setw(15)<<"客户信息"<<setw(31)<<"I"<<endl;cout <<"I"<<setw(71)<<"I";cout <<endl<<"I"<<setw(25)<<"2"<<setw(15)<<"客房信息"<<setw(31)<<"I"<<endl;cout <<"I"<<setw(71)<<"I";cout <<endl<<"I"<<setw(25)<<"3"<<setw(15)<<"订房"<<setw(31)<<"I"<<endl;cout <<"I"<<setw(71)<<"I";cout <<endl<<"I"<<setw(25)<<"4"<<setw(15)<<"退房"<<setw(31)<<"I"<<endl;cout <<"I"<<setw(71)<<"I";cout <<endl<<"I"<<setw(25)<<"0"<<setw(15)<<"退出"<<setw(31)<<"I"<<endl;cout <<"のののののののののののののののののののののののののののののののののののの"<<endl;cin >> choice;switch (choice){case '1':customerDB.customerdata();break;case '2':BookDB.bookdata();break;case '3':cout <<"输入客户编号:";cin >>customerid;cout <<"输入客房编号:";cin >>bookid;r=customerDB.query(customerid);//按编号查找if (r==NULL){cout <<" 不存在的客户,不能预订"<< endl;break;}b=BookDB.query(bookid);if (b==NULL){cout <<" 不存在的客房,不能预订"<< endl;break;}if (b->borrowbook()==0){cout << " 该客房已预订,不能预订"<< endl;break;}r->borrowbook(b->getno());cout<<"预订成功!"<<endl;break;case '4':cout<<"输入客户编号:";cin >>customerid;cout << "输入客房编号:";cin >>bookid;r=customerDB.query(customerid);if (r==NULL){cout <<" 不存在的客户,不能退订" << endl;break;}b=BookDB.query(bookid);if (b==NULL){cout <<" 不存在的客房,不能退订" <<endl;break;}b->retbook();r->retbook(b->getno());cout<<"退订成功!"<<endl;break;default:cout<<"正在写入数据库......谢谢使用!";}}return 0;}。

相关主题