C++课程设计·酒店管理系统
1.课题简介
客房管理系统是根据某酒店对客房管理的实际情况进行编写的,主要目的是为了方便酒店对客房的实际情况进行集中的查询与管理工作,以提高整个酒店的工作。
经过电脑及生活中的调查研究,根据客人的经济水平和生活理念,客房的类型已趋向于多样化,有标准房,单人房,VIP间,甚至总统套房。而初步设定通过客房的编号、类型、价格来定位一个客房的管理系统。
客房是一个对外服务的内容,为了客人的住宿要求,所以系统需要实现客房信息的录入、修改和删除功能。
客人对剩余客房需要进行选择,系统必须实现相应的查询、排序和输出功能,使客人择优而居。
本次课程设计需要实现的是——客房管理系统的链表实现。 主要实现的功能包括:客房信息的录入、修改、删除、剩余客房信息查询、排序、输出。客房信息可写入文件,也可从文件中读取。客房信息涉及的数据有客房编号、客房类型、定房日期、客房内容(设施)、定房有效期等。
2.设计方案
按照需求分析所得,客房信息系统有以下几个功能模块: 1.添加录入信息模块;
编写指针摸板,定义临时的客房间数,包括其各项类的成员,编号,类型,定房日期,价格,客房内容,入住天数。 3.修改客房信息模块;
读取保存的客房信息数据,根据客房编号查找所需修改的客房信
1
息,然后根据具体所需,修改成员参数,并保存。 4.删除客房信息模块;
从保存中的文件中读取信息,删除需要删除的信息,完善现在的客房运作。
5.查询剩余客房函数;
分按编号、类型、价格查询,这样可以更具有人性化来选择所剩余的客房,从而进行日常安排。 6.排序剩余客房模块;
根据具体所需排序,可以是编号、价格或者类型,本系统中根据的是客房入住的天数来排序。 7.输出剩余客房函数;
输出根据系统所需排序后的客房信息,本系统中是根据了客人入住的有效期即天数来及时了解空出的房间。
由上述需求分析可得,系统的功能模块图如图1所示。
客房的信息管理系统 录入客房信息 保存 客房信息 修改客房信息 删除客房信息 查询剩余客房信息 排序剩余客房信息 输出 剩余客房信息 退出系统
图1
2
2.具体设计及截屏图
1、类的设计
根据上述需求分析,有客房类和链表类。 (1)客房类
系统研究客房cGuestroom类中成员: ID[SIZE]是客房编号,Type[SIZE]是客房类型,Book[SIZE]是定房日期,Price[SIZE]是每间客房的价格,StayTime[SIZE]是定房的有效期,Function[SIZE]是客房的主要内容(如浴室、卫生间、网线等设施),标志flag和构造函数cGuestroom()。客房类的UML图如(图2)所示:
class cGuestroom + ID[BUFSIZE]:char// 客房编号 + Type[BUFSIZE]:char//客房类型 + Book[BUFSIZE]:char//定房日期 + Function[BUFSIZE]:char//客房内容 +StayTime :int//定房有效期 + flay :bool//标志 + cGuestroom()//构造函数初始化
图2
3
(2)链表类
在tList类中,有成员:构造函数tList(),创建链表Create(),判断链表是否为空的函数Empty() const,从尾部插入一个元素的函数Insert(const T e),返回第i个节点的函数GetcNode(int i),在链表中查询某个值的函数bool Find(const T e),析构函数~tList(),头节点head。链表类的UML图如(图3)所示:
2.界面设计:
4
tList +tList(); + Create():void +Empty() const:bool +Insert(conste:T):void +*GetcNode(i:int):cNode 图3 (1) 主界面的设计 主界面中显示客房管理系统的全部信息,客房信息的录入,客房信息的保存,客房信息的修改,客房信息的删除,剩余客房的查询,剩余客房的排序,剩余客房的输出,客房信息管理系统如图4所示。 图4 主界面 (2)分界面:客房信息的录入的设计 提示输入客房编号,客房类型,客人定房日期,客房价格,客房中的主要内容,客房定房的有效期。客房信息录入如图5所示。 图5 录入客房信息的分界面 (3)分界面:客房信息的保存的设计 5 针对第一步客房信息的输入及以后信息的修改、删除做一个文件保存。客房信息保存如图6所示。 图6 保存客房信息的分界面 (4)分界面:客房信息的修改的设计 提示根据编号进行客房信息修改,输入要修改的内容,如不修改的项目就远洋输出。客房信息修改界面如图7所示。 图7 修改客房信息的分界面 (5)分界面:客房信息的删除的设计 提示进入删除截面,根据客房编号查找所需删除的客房信息。客房信息的删除界面如图8所示。 6 图8 删除客房信息的分界面 (6)分界面:剩余客房信息的查询的设计 在保存完所修改或删除的客房信息,查询剩余的客房信息,按提示进入剩余客房查询界面,有按编号、类型、价格查询,根据拥护自主选择。查询剩余客房的信息界面如图9所示。 图9 查询客房信息的分界面 (7)剩余客房信息的排序的设计 按提示进行剩余客房的排序,本系统中是以客人的入住天数排序,显示屏幕如图10所示。 7 (8)分界面:剩余客房信息的输出的设计 在排序完后的剩余客房中,输出所有客房的信息,以检验客房的经营情况。剩余客房信息输出界面如图10所示。 图10 输出剩余客房的信息 4.关键代码分析 (1)系统的登录 在主函数中,输出客房信息系统的各功能提示。选择需要执行功能的序号,由switch判断和选择所需要执行的功能。 选择1:执行客房信息的录入; 选择2:执行保存客房的信息; 选择3:执行教工基本信息的保存; 选择4:执行教工基本信息的删除; 选择5:执行教工工资按从高到低排序; 选择6:执行教工基本信息的修改; 选择7:执行教工基本信息的查询; 选择8:退出; 主函数: int main() { tList tListMedic.Create(); //创建链表 8 ReadData(&tListMedic); while(1) { cout<<\"\\n\\n 客房管理系统 \\n\\n\"; cout<<\" ---------------------------------- \\n\\n\"; cout<<\" 1.客房信息的录入 \\n\\n\"; cout<<\" 2:客房信息保存\\n\\n\"; cout<<\" 3.\\n\\n\"; 客 房 信 息 的 修 改 cout<<\" 4.客房信息的删除 \\n\\n\"; cout<<\" 5.\\n\\n\"; 剩 余 客 房 信 息 的 查 询 cout<<\" 6.剩余客房信息的排序 \\n\\n\"; cout<<\" 7.\\n\\n\"; cout<<\" \\n\\n\"; cout<<\" 请选择:\"; 9 剩余客房信息的输出 8.退 出 系 统 int choose=0; cin>>choose; switch //用户选择 { case 1:AddtheGuestroom(&tListMedic); break; (choose) //输入客房信息 case //客房信息信息保存 case //修改客房信息 case //删除客房信息 case 5:FindtheremainGuestroom(&tListMedic); break; //查询剩余客房信息 case 6:RanktheremainGuestroom(&tListMedic); break; //排序剩余客房信息 case 7:OutputtheremainGuestroom(&tListMedic); break; //输出剩余客房信息 case //退出 default : break;} return 0; } 10 2:SaveData(&tListMedic);break; 3:ModifytheGuestroom(&tListMedic); break; 4:DeletetheGuestroom(&tListMedic); break; 8:exit(0); } 在读取数据库中,可以从以有的文件中读取数据到程序中,避免了程序的重复输入数据,有利于后面的信息修改、删除等功能。 读取数据库: void ReadData(tList char buf[BUFSIZE]; ifstream ifile(\"Guestroom.txt\//创建一个输出文件流对象 if (!ifile) { cerr << \"读取时打开文件出错!\" << endl; } cGuestroom Guestroom; while(ifile.getline(buf,BUFSIZE)) //遍历文本,读取数据 { ifile.getline(buf,BUFSIZE); strcpy(Guestroom.ID,buf); //读取客房编号 memset(buf,0,BUFSIZE); 11 ifile.getline(buf,BUFSIZE); //读取客房类型 strcpy(Guestroom.Type,buf); memset(buf,0,BUFSIZE); ifile.getline(buf,BUFSIZE); //读取提前定房日期 strcpy(Guestroom.Book,buf); memset(buf,0,BUFSIZE); ifile.getline(buf,BUFSIZE); // strcpy(Guestroom.Price,buf); memset(buf,0,BUFSIZE); ifile.getline(buf,BUFSIZE); //要内容 strcpy(Guestroom.Function,buf); memset(buf,0,BUFSIZE); ifile.getline(buf,BUFSIZE); //效期 Guestroom.StayTime=atoi(buf); memset(buf,0,BUFSIZE); 12 读取价格 读取客房主读取入住有 Guestroom.flag=true; tListMedic->Insert(Guestroom); } cout<<\"读取数据成功!\\n\\n\"; ifile.close(); //关闭文件 return; } (2)信息的添加 客房信息的录入,创建cGuestroom类和tempGuestroom对象,调用构造函数,输入客房的房间编号、房间类型、定房日期、房间价格、房间内容及个人的入住有效期,通过Insert函数实现。 void AddtheGuestroom(tList { cGuestroom tempGuestroom; //定义临时客房 cout<<\"下面开始添加客房信息\\n\"; cout<<\"请输入入住的客房编号:\"; cin>>tempGuestroom.ID; //读入客房编号 cout<<\"请输入客房类型:\"; cin>>tempGuestroom.Type; //读入 13 客房类型 cout<<\"请输入客人定房日期:\"; cin>>tempGuestroom.Book; //读入定房日期 cout<<\"请输入客房价格:\"; cin>>tempGuestroom.Price; //读入价格 cout<<\"请输入客房的主要内容:\"; cin>>tempGuestroom.Function; //读入主要内容 cout<<\"请输入客房入住有效期:\"; cin>>tempGuestroom.StayTime; //读入入住有效期 tempGuestroom.flag=true; tListMedic->Insert(tempGuestroom); cout<<\"添加成功!\\n\"; system(\"pause\"); system(\"cls\"); } (3)信息的删除 删除客房信息,按要求提示输入要删除客房的房间编号,定义一个指向链表第一个节点的指针p。如果指针创建成功,开始用while和if语句实现p指向的节点的客房编号与存在的客房编号的比较。 14 如果相同,输出该客房的信息并删除;如果没有相同的,提示没有所查询的房间。 void DeletetheGuestroom(tList { char id[BUFSIZE]; cout<<\"\\n请输入你要查找的客房编号:\"; cin>>id; //读取客房编号 bool flag=false; int count=0; cNode { if(strcmp(p->data.ID,id)==0 && p->data.flag) { count++; flag=true; break;} p=p->next;} if(flag==false) cout<<\"对不起,你所查找的客房延长了住房日期!\\n\"; / /如果不能删 15 else //如果能删 { count--; cout<<\"找到了,该客房的原始信息是:\\n\"; cout<<\"\\n\\n客房编号:\"<<(p->data).ID<<\"\客房类型 :\"<<(p->data).Type<<\"\\n\\ 定 房 日 期:\"<<(p->data).Book<<\"\\n\\价格:\"<<(p->data).Price; cout<<\"\\n\\容 客 房 的 入 主住 要有 内效 :\"<<(p->data).Function<<\"\\n\\ 期:\"<<(p->data).StayTime; cout< cout<<\"该客房的信息删除成功!\\n\";} cout< 按提示输入要修改的客房的客房编号,定义一个指向链表第一个节点的指针p。如果指针创建成功,开始用while和if语句实现p指向的节点的客房编号与存在的客房编号的比较。如果相同,提示输入房间的各个信息;如果没有相同,提示没有所查询的客房。 void ModifytheGuestroom(tList { char id[BUFSIZE]; 16 cout<<\"\\n请输入你要查找的客房编号:\"; cin>>id; //读取客房编号 bool flag=false; cNode { if(strcmp(p->data.ID,id)==0 && p->data.flag) { flag=true; break;} p=p->next;} if(flag==true) { cout<<\"找到了,该客房的原始信息是:\\n\"; cout<<\"\\n\\n客房编号:\"<<(p->data).ID<<\"\客房类型:\"<<(p->data).Type<<\"\\n\\定房日期:\"<<(p->data).Book<<\"\\n\\价格:\"<<(p->data).Price; cout<<\"\\n\\客房的主要内容:\"<<(p->data).Function<<\"\\n\\入住有效期:\"<<(p->data).StayTime; cout<<\"\\n下面开始修改该客房的信息:\\n\"; cGuestroom tempGuestroom; //定义临时客房 cout<<\"请输入客房的客房编号:\"; cin>>tempGuestroom.ID; //读入客房编号 cout<<\"请输入客房的客房类型:\"; cin>>tempGuestroom.Type; //读入客房类型 cout<<\"请输入客人的定房日期:\"; cin>>tempGuestroom.Book; //读入定房日期 cout<<\"请输入客房的客房价格:\"; cin>>tempGuestroom.Price; //读入价格 cout<<\"请输入客房的客房主要内容:\"; cin>>tempGuestroom.Function; //读入客房的主要内容 cout<<\"请输入客人入住客房有效期:\"; cin>>tempGuestroom.StayTime; //读入入住有效期 tempGuestroom.flag=true; p->data=tempGuestroom; cout<<\"修改成功!\";} 17 cout< 5.测试 程序测试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。 原程序: void RanktheremainGuestroom(tList {cNode for (p=tListMedic->head->next; p!= NULL; p=p->next) { for (q=p; q!= NULL; q=q->next) { if (p->data.Price > q->data.Price) { remainGuestroom.flag = p->data.flag; strcpy(remainGuestroom.ID, p->data.ID); strcpy(remainGuestroom.Type, p->data.Type); strcpy(remainGuestroom.Book, p->data.Book); strcpy(remainGuestroom.Price, p->data.Price); strcpy(remainGuestroom.Function, p->data.Function); remainGuestroom.StayTime = p->data.StayTime; p->data.flag = q->data.flag; 18 strcpy(p->data.Function, q->data.Function); strcpy(p->data.ID, q->data.ID); strcpy(p->data.Type, q->data.Type); strcpy(p->data.Book, q->data.Book); p->data.StayTime = q->data.StayTime; q->data.flag = remainGuestroom.flag; strcpy(q->data.Function, remainGuestroom.Function); strcpy(q->data.ID, remainGuestroom.ID); strcpy(q->data.Type, remainGuestroom.Type); strcpy(q->data.Book, remainGuestroom.Book); q->data.StayTime = remainGuestroom.StayTime; } } } } 编译成功后开始运行,信息录入后,不能在文档中正确排序输出,经Debug调试,发现,以客人的入住天数排序来及时调出空余客房为最佳选择。 void RanktheremainGuestroom(tList {cNode for (p=tListMedic->head->next; p!= NULL; p=p->next) 19 { for (q=p; q!= NULL; q=q->next) { if (p->data.StayTime > q->data.StayTime) { remainGuestroom.flag = p->data.flag; strcpy(remainGuestroom.ID, p->data.ID); strcpy(remainGuestroom.Type, p->data.Type); strcpy(remainGuestroom.Book, p->data.Book); strcpy(remainGuestroom.Price, p->data.Price); strcpy(remainGuestroom.Function, p->data.Function); remainGuestroom.StayTime = p->data.StayTime; p->data.flag = q->data.flag; strcpy(p->data.Function, q->data.Function); strcpy(p->data.ID, q->data.ID); strcpy(p->data.Type, q->data.Type); strcpy(p->data.Book, q->data.Book); p->data.StayTime = q->data.StayTime; q->data.flag = remainGuestroom.flag; strcpy(q->data.Function, remainGuestroom.Function); strcpy(q->data.ID, remainGuestroom.ID); strcpy(q->data.Type, remainGuestroom.Type); strcpy(q->data.Book, remainGuestroom.Book); 20 q->data.StayTime remainGuestroom.StayTime; } } } } 6.课题总结与体会 = 本次的C++课程设计虽然只是短短的两个星期,但是却令我体会很多,也学到很多东西。利用C++去设计客房管理,使我加强了对C++的认识,也对现代客房的基本运作管理有了初步了解。 在这次课程设计中,我还懂得了程序开发中的一些比较重要的步骤并且学会了一些没有接触过的知识,比如需求分析、类的设计以及类与类之间的关系,UML图形的表示方法等。面向对象程序设计作为一门软件设计的课程,具有极强的实践性,使我加强了灵活应用理论知识的能力及面向对象程序设计技能。C++语言相对于C语言来更具有优越性,它不仅兼容C,还有一个非常重要的特点就是面向对象(具体来讲就是类),另外模板技术的频繁引用,也使整个程序看起来更清晰,更有条理化,所以,对模块的掌握,在C++学习中是非常重要的。 在本次的应用程序的设计和创建过程中,我遇到了许多问题,有些是自己没有在教科书中学过的,但是却是系统所必须的,我通过在网上查找资料、查找书本、请教老师,一步步的把这些问题搞懂了,所以,课程设计也培养了我们探索实践的能力。 总之,我觉得,我们学习和掌握的知识,只有通过实际应用,才能真正的理解和掌握,才能更好的去应用。以前上C++课程,只是零散被动地接受知识,而不是主动地去吸收渗透,而此次的课程设计却让我对编程产生了兴趣,习惯独立自主地完成任务,在困难中寻求帮助,加强和同学间的互帮互助,相信自己会在以后的学习和工作更加有经验。通过课程设计,我既复习了以前的旧知识,又学到了一些新的知识;设计增强了我们用所学知识去解决具体问题的能力,进一步培养了我们独立思考问题和解决问题的能力。 21 7.参考文献 【1】陈维兴,林小茶.C++面向对象程序设计教程.北京.清华大学出版社2010,10 【2】谭浩强.C语言程序设计.北京:清华大学出版社.2010,5 【3】www.51CTO.com 8.源代码 //客房管理系统 主要实现的功能包括:客房信息的录入、修改、删除、剩余客房信息查询、排序、输出。客房信息可写入文件,也可从文件中读取。 /* 系统的登录 信息的添加 信息的删除 信息的修改 */ #include #include void FindTheGuestroom(); //查找客房 void FindTheGuestroomById(); //按照编号找客房 void FindTheGuestroomByType(); //按照类型找客房 22 void FindTheGuestroomByPrice(); //按照价格找客房 void DeleteTheGuestroom(); //删除客房 void AddTheGuestroom(); //客房添加 void ModifyTheGuestroom(); //修改客房 template public: T data; cNode *next; }; template class tList { public: // tList(); void Create(); // bool Empty() const; // void Insert(const T e); // 模板,样板 节点 定义成员函数 创建链表 判断链表是否为空从尾部插入一个元素 23 cNode template tList head=new cNode template cNode template 类的成员函数的实现 24 bool tList return (head->next==NULL); } template void tList cNode p=p->next; } p->next=q; q->next=NULL; } template cNode 25 :插入 返回第i 个节点 { int k=0; cNode template bool tList bool flag=false; cNode 26 在链表中查找某 { if(p->data==e) { flag=true; break; } p=p->next; } return flag; } template cNode p=head->next; delete head; head=p; } } 27 class cGuestroom { public: char ID[BUFSIZE]; //客房编号 char Type[BUFSIZE]; //客房类型 char Book[BUFSIZE]; //提前定房日期 char Price[BUFSIZE]; //客房价格 char Function[BUFSIZE]; //客房主要内容 int StayTime; //入住天数有效期 bool flag;//标志 cGuestroom()//构造函数初始化 { memset(ID,0,BUFSIZE);memset(Type,0,BUFSIZE);memset(Book,0,BUFSIZE);memset(Function,0,BUFSIZE); memset(Price,0,BUFSIZE);StayTime=0.0;flag=false; } //memset:把char类型转换成ASCII值 }; 28 void ReadData(tList char buf[BUFSIZE]; ifstream ifile(\"Guestroom.txt\个输出文件流对象 if (!ifile) { cerr << \"读取时打开文件出错!\" << endl; } cGuestroom Guestroom; while(ifile.getline(buf,BUFSIZE)) //遍历文本,读取数据 { ifile.getline(buf,BUFSIZE); strcpy(Guestroom.ID,buf);//读取客房编号 memset(buf,0,BUFSIZE); ifile.getline(buf,BUFSIZE);//读取客房类型 strcpy(Guestroom.Type,buf); memset(buf,0,BUFSIZE); 29 //创建一 ifile.getline(buf,BUFSIZE);//读取提前定房日期 strcpy(Guestroom.Book,buf); memset(buf,0,BUFSIZE); ifile.getline(buf,BUFSIZE);//读取价格 strcpy(Guestroom.Price,buf); memset(buf,0,BUFSIZE); ifile.getline(buf,BUFSIZE);//读取客房主要内容 strcpy(Guestroom.Function,buf); memset(buf,0,BUFSIZE); ifile.getline(buf,BUFSIZE);//读取入住有效期 Guestroom.StayTime=atoi(buf); memset(buf,0,BUFSIZE); Guestroom.flag=true; tListGue->Insert(Guestroom); } cout<<\"读取数据成功!\\n\\n\"; ifile.close();//关闭文件 return; 30 } void AddtheGuestroom(tList cGuestroom tempGuestroom; //定义临时客房 cout<<\"下面开始添加客房信息\\n\"; cout<<\"请输入入住的客房编号:\"; cin>>tempGuestroom.ID; //读入客房编号 cout<<\"请输入客房类型:\"; cin>>tempGuestroom.Type; //读入客房类型 cout<<\"请输入客人定房日期:\"; cin>>tempGuestroom.Book; //读入定房日期 cout<<\"请输入客房价格:\"; cin>>tempGuestroom.Price; //读入价格 cout<<\"请输入客房的主要内容:\"; cin>>tempGuestroom.Function; //读入主要内容 cout<<\"请输入客房入住有效期:\"; 31 输入客 cin>>tempGuestroom.StayTime; //读入入住有效期 tempGuestroom.flag=true; tListGue->Insert(tempGuestroom); cout<<\"添加成功!\\n\"; system(\"pause\"); //pause:停顿,终止 system(\"cls\"); } void SaveData(tList int i=0; ofstream ofile(\"Guestroom.txt\//创建一个输入文件流对象 if (!ofile) { cerr << \"保存时打开文件出错!\" << endl; } cNode 32 { //从内存中读取数据,存到外盘 if(p->data.flag) { ofile<<\"\\n\"; ofile<<(p->data).ID<<\"\\n\"; ofile<<(p->data).Type<<\"\\n\"; ofile<<(p->data).Book<<\"\\n\"; ofile<<(p->data).Price<<\"\\n\"; ofile<<(p->data).Function<<\"\\n\"; ofile<<(p->data).StayTime<<\"\\n\"; } p=p->next; } cout<<\"保存数据成功!\\n\"; ofile.close(); system(\"pause\"); system(\"cls\"); return; } 33 void ModifytheGuestroom(tList char id[BUFSIZE]; cout<<\"\\n请输入你要查找的客房编号:\"; cin>>id; //取客房编号 bool flag=false; cNode if(strcmp(p->data.ID,id)==0 && p->data.flag) { flag=true; break; } p=p->next; } if(flag==true) 34 读 {//显示屏幕 cout<<\"找到了,该客房的原始信息是:\\n\"; cout<<\"\\n\\n客房编号:\"<<(p->data).ID<<\"\客房类型:\"<<(p->data).Type<<\"\\n\\定房日 期:\"<<(p->data).Book<<\"\\n\\价格:\"<<(p->data).Price; cout<<\"\\n\\客房的主要内 容:\"<<(p->data).Function<<\"\\n\\入住有效期:\"<<(p->data).StayTime; cout<<\"\\n下面开始修改该客房的信息:\\n\"; cGuestroom tempGuestroom; //定义临时客房 cout<<\"请输入客房的客房编号:\"; cin>>tempGuestroom.ID; //读入客房编号 cout<<\"请输入客房的客房类型:\"; cin>>tempGuestroom.Type; //读入客房类型 cout<<\"请输入客人的定房日期:\"; cin>>tempGuestroom.Book; //读入定房日期 cout<<\"请输入客房的客房价格:\"; cin>>tempGuestroom.Price; //读入价格 cout<<\"请输入客房的客房主要内容:\"; cin>>tempGuestroom.Function; //读入客房的主要内容 35 cout<<\"请输入客人入住客房有效期:\"; cin>>tempGuestroom.StayTime; //读入入住有效期 tempGuestroom.flag=true; p->data=tempGuestroom; cout<<\"修改成功!\"; } cout< char id[BUFSIZE]; cout<<\"\\n请输入你要查找的客房编号:\"; cin>>id; //读取客房编号 bool flag=false; int count=0; 36 cNode if(strcmp(p->data.ID,id)==0 && p->data.flag) { count++; flag=true; break; } p=p->next; } if(flag==false) cout<<\"对不起,你所查找的客房延长了住房日期!\\n\";//如果不能删 else //如果能删 { count--; cout<<\"找到了,该客房的原始信息是:\\n\"; cout<<\"\\n\\n客房编号:\"<<(p->data).ID<<\"\客房类型:\"<<(p->data).Type<<\"\\n\\定房日 期:\"<<(p->data).Book<<\"\\n\\价格:\"<<(p->data).Price; cout<<\"\\n\\客房的主要内 37 容:\"<<(p->data).Function<<\"\\n\\入住有效期:\"<<(p->data).StayTime; cout< cout<<\"该客房的信息删除成功!\\n\"; } cout< char id[BUFSIZE]; cout<<\"\\n请输入你要查找的客房编号:\"; cin>>id; //读取客房编号 bool flag=false; 38 cNode if(strcmp(p->data.ID,id)==0 && p->data.flag) { flag=true; break; } p=p->next; } if(flag==false) cout<<\"对不起,没有该标号的客房!\\n\"; //如果找不到 else //如果找到了 { cout<<\"\\n找到了,该客房的信息是:\\n\"; cout<<\"\\n\\n客房编号:\"<<(p->data).ID<<\"\客房类型:\"<<(p->data).Type<<\"\\n\\定房日 期:\"<<(p->data).Book<<\"\\n\\价格:\"<<(p->data).Price; cout<<\"\\n\\主要内容:\"<<(p->data).Function<<\"\\n\\ 39 入住有效期:\"<<(p->data).StayTime; } cout< void FindtheremainGuestroomByType(tList char type[BUFSIZE]; cout<<\"\\n请输入你要查找的客房类型:\"; cin>>type; //读取客房类型 bool flag=false; cNode if(strcmp(p->data.Type,type)==0 && p->data.flag) 40 { flag=true; break; } p=p->next; } if(flag==false) cout<<\"对不起,没有该类型的客房!\\n\"; //如果满了 else //如果找到了 { cout<<\"\\n找到了,该客房信息是:\\n\"; cout<<\"\\n\\n客房编号:\"<<(p->data).ID<<\"\客房类型:\"<<(p->data).Type<<\"\\n\\定房日 期:\"<<(p->data).Book<<\"\\n\\价格:\"<<(p->data).Price; cout<<\"\\n\\客房的主要内 容:\"<<(p->data).Function<<\"\\n\\入住有效期:\"<<(p->data).StayTime; } cout< system(\"cls\"); return; } void FindtheremainGuestroomByPrice(tList char price[BUFSIZE]; cout<<\"\\n请输入你要查找的剩余客房的价格:\"; cin>>price; //读取价格 bool flag=false; cNode if(strcmp(p->data.Price,price)==0 && p->data.flag) { flag=true; 42 cout<<\"\\n\\n客房编号:\"<<(p->data).ID<<\"\客房类型:\"<<(p->data).Type<<\"\\n\\定房日 期:\"<<(p->data).Book<<\"\\n\\价格:\"<<(p->data).Price; cout<<\"\\n\\客房的主要内 容:\"<<(p->data).Function<<\"\\n\\入住有效期:\"<<(p->data).StayTime; } p=p->next; } if(flag==false) cout<<\"对不起,没有你所要求价格的客房!\\n\"; //如果找不到 cout< system(\"cls\"); 43 while(1) { cout<<\"\\n\\n\\n\\n\"; cout<<\" 1:按客房编号查询\\n\\n\"; cout<<\" 2:按客房类型查询\\n\\n\"; cout<<\" 3:按价格查询\\n\\n\"; cout<<\" 4:退出查询\\n\\n\"; cout<<\"你选择:\"; int choose=0; cin>>choose; switch(choose) //根据用户选择 { case 1:FindtheremainGuestroomById(tListGue); //按客房编号查询 break; case 2:FindtheremainGuestroomByType(tListGue); //按客房类型查询 break; case 3:FindtheremainGuestroomByPrice(tListGue); //按价格查询 break; 44 case 4: system(\"cls\"); return; //退出查询 default:break; } } return; } void RanktheremainGuestroom(tList {cNode for (p=tListGue->head->next; p!= NULL; p=p->next) { for (q=p; q!= NULL; q=q->next) { if (p->data.StayTime > q->data.StayTime) { remainGuestroom.flag = p->data.flag; 45 strcpy(remainGuestroom.ID, p->data.ID); //复制 strcpy(remainGuestroom.Type, p->data.Type); strcpy(remainGuestroom.Book, p->data.Book); strcpy(remainGuestroom.Price, p->data.Price); strcpy(remainGuestroom.Function, p->data.Function); remainGuestroom.StayTime = p->data.StayTime; p->data.flag = q->data.flag; strcpy(p->data.Function, q->data.Function); strcpy(p->data.ID, q->data.ID); strcpy(p->data.Type, q->data.Type); strcpy(p->data.Book, q->data.Book); p->data.StayTime = q->data.StayTime; q->data.flag = remainGuestroom.flag; strcpy(q->data.Function, remainGuestroom.Function); strcpy(q->data.ID, remainGuestroom.ID); strcpy(q->data.Type, remainGuestroom.Type); strcpy(q->data.Book, remainGuestroom.Book); 46 q->data.StayTime = remainGuestroom.StayTime; } } } } void OutputtheremainGuestroom(tList cNode if(p->data.flag) { cout<<\"\\n\\n客房编号:\"<<(p->data).ID<<\"\客房类型:\"<<(p->data).Type<<\"\\n\\提前定房日 期:\"<<(p->data).Book<<\"\\n\\价格:\"<<(p->data).Price; cout<<\"\\n\\主要内容:\"<<(p->data).Function<<\"\\n\\入住有效期:\"<<(p->data).StayTime; } 47 p=p->next; } cout< int main() { tList tListGue.Create(); //创建链表 ReadData(&tListGue); while(1) { cout<<\"\\n\\n \\n\\n\"; 48 客房管理系统 cout<<\" ---------------------------------- \\n\\n\"; cout<<\" 1.客房信息的录入 \\n\\n\"; cout<<\" 2:客房信息保存\\n\\n\"; cout<<\" 3.客房信息的修改 \\n\\n\"; cout<<\" 4.客房信息的删除 \\n\\n\"; cout<<\" 5.剩余客房信息的查询 \\n\\n\"; cout<<\" 6.剩余客房信息的排序 \\n\\n\"; cout<<\" 7.剩余客房信息的输出 \\n\\n\"; cout<<\" 8.退 出 系 统 \\n\\n\"; cout<<\" 请选择:\"; int choose=0; cin>>choose; switch (choose) //用户的选择 49 { case 1:AddtheGuestroom(&tListGue); break; //输入客房信息 case 2:SaveData(&tListGue);break; //客房信息信息保存 case 3:ModifytheGuestroom(&tListGue); break; //修改客房信息 case 4:DeletetheGuestroom(&tListGue); break; //删除客房信息 case 5:FindtheremainGuestroom(&tListGue); break; //查询剩余客房信息 case 6:RanktheremainGuestroom(&tListGue); break; //排序剩余客房信息 case 7:OutputtheremainGuestroom(&tListGue); break; //输出剩余客房信息 case 8:exit(0); //退出 default : break; } } return 0; } 50 51 因篇幅问题不能全部显示,请点此查看更多更全内容