《酒店管理系统》程序设计基础课程设计报告专业:计算机科学与技术班级:11计科1班姓名:指导教师:2012年7月2日-1--2-1、课程设计题目描述和要求1.1课程题目:酒店管理系统1.2课程要求:1.屏幕上出现一个界面,让操作员能够方便的选择所需要进行的操作,如不同级别房间价格的查询、修改、刷除等。2.对不同标准的房间实施不同的收费标准,也可以按天收费或按小时收费,可根据顾客需要在等级的入住的时候进行选择。3.月底进行结算,实收多少,应收多少。2、课程设计目的:通过C++语言编程实现酒店管理系统的基本功能。酒店管理系统的实现核心是要录入客人信息并在退房时结算,同时具有月底结算功能。此程序重在满足其要求,使用者可以方便的使用。也可以根据自己的需求对程序进行优化。-3-3、课程设计结构图4.课程设计总结在做程序设计前就已经感觉到我设计的《酒店管理系统》比较复杂,不仅要写出实现各种功能的函数还要保证函数之间的连接,怎样通过函数之间的关系能很好的把函数连接起来,还要保证程序能够很好的而且有效的运行。还有可能遇到一些以前没有用到的知识,像怎样在输入有误的情况下进行异常处理,这些都要通过函数的功能来实现,这些对我来说都是新的知识,而且觉得很有难度。在做程序设计前还必须把书本上的基本知识搞懂,程序设计会用到书中的类做,对类的理解也不是很到位,一些概念的知识还没有很好的理解,所以还需要借助书中的知识来加深对类的理解。在编程的过程中也遇到了很多的困难,但是通过同学的帮助渐渐对于程序有更深一步的理解,而且他们也帮我编一个对异常处理的函数,这样在异常处理的过程中就能很好的处理因为在输入有误的情况的错误。经过这次课程设计的编写我有增加了一些新知识,知道自己在编程方面还欠缺甚多,在自己完成了编程之后觉得收益良多,原来书本上的东西并不少,我们学习不要贪多,一定要把书本上的知识掌握好!在这次课程设计的编写中我了解了一些输入输出流,知道了如何把程序保存到磁盘中,这些知识都是以前没有深究和不多用的。比如:常用的输入输出流除iostream(通用输入输出流和其他输入输出流的基类)外还有fstream(输入输出文件流)和strstream(输入书出字符串流类)。书本上好多知识都是我们没留意-4-而在程序中要用到的。选课题的时候心高气傲觉得自己能编出来,而正要着手编的时候才知道题目并不简单。看到这个课题的时候觉得题目要求并不高,而且函数名及功能都给出来了,只需把它填满就行。处于心理作用而且老师也说了课程设计是要把整本书的知识都融合在一起的,于是我开始想如何用类、如何把程序写得简单明了,但是想了好久也想不出来,于是自己搜了一些有关这一课题的程序,想从中获得一些灵感,找到一些好的方法。事与愿违,网上的程序好多,大都用到了数据库,看不懂,我选了一个C程序来看,发现里面好多头文件都不认识,而它用的是struct和class相结和,多文件的编程,包括的知识广泛,感觉很复杂。我后面就模范他的结构,用简单的语句编出框架,然后在一步步深入细化,最后用fstream类输入输出文本,然而简单的程序也有出错的时候,经过反复的修改、调试终于写出了这个程序!5、参考书目:[1]谭浩强,《C++程序设计》,北京,清华大学出版社,2006年.[2]詹红霞、侯思颖、陶永红,《VisualC++程序设计教程》,北京,清华大学出版社,2007年附录:#includeiostream#includefstreamusingnamespacestd;intn;charb[5]=kong;structdate//时间结构体{intyear;intmonth;-5-intday;}in,out;structhotell//客房结构体{intnum;//房号charleixing[5];//房间类型intprice;//房间价格charnoman[5];//房间是否空闲charname[20];//客户姓名datein;//用结构体定义的入住时间dateout;//用结构体定义的退房时间intpay;//预付金额intshenfen;//身份证号intshu;//客房数目intinput;//客房收入}room[100];voidluru()//客房信息录入函数{inti,j;ofstreamkefang(kefang.txt,ios::binary);//打开二进制文件if(!kefang){cerr文件没有打开!endl;abort();}cout您选择了客房信息录入功能\n;cout现在进行客房信息的录入\n;cout总客房数为100间,请输入您要录入的客房数。\n\n;-6-cout请输入房间数endl;cout;cinn;if(n100||n=0){cout您的输入有误,请重试\n\n;luru();}for(i=0;in;i++){cout客房号endl;cout;cinroom[i].num;cout客房类型(1、2、3、)\n请在1-3中进行选择endl;cout;cinroom[i].leixing;cout客房价格endl;cout;cinroom[i].price;for(j=0;j5;j++){room[i].noman[j]=b[j];//此时客房为kong}room[i].shu=n;//录入的客房数目coutendl;cout本客房信息录入结束\n\n;kefang.write((char*)&room[i],sizeof(room[i]));kefang.close();}-7-}voiddengji()//客人入住登记函数{chara[5]=man;intk,j,i;fstreamkefang(kefang.txt,ios::in|ios::out|ios::binary);if(!kefang){cerr文件打开失败!endl;abort();}cout请输入客人人数endl;cout;cink;for(intx=0;xk;x++){cout请输入客人的房号endl;cout;cini;room[i-1].num=i;kefang.seekg(i-1*sizeof(a[i-1]));kefang.read((char*)&room[i-1],sizeof(room[i-1]));cout请输入客人的姓名endl;cout;cinroom[i-1].name;cout请输入客人的身份证号endl;cout;cinroom[i-1].shenfen;cout请输入客人入住时间,年/月/日endl;cout年:;-8-cinroom[i-1].in.year;cout月:;cinroom[i-1].in.month;cout日:;cinroom[i-1].in.day;cout请输入客人的预付金额(单位:元)endl;cout;cinroom[i-1].pay;for(j=0;j5;j++){room[i-1].noman[j]=a[j];//此时客房为man}kefang.write((char*)&room[i-1],sizeof(room[i-1]));}kefang.close();cout客人入住登记结束,按回车键返回主菜单!endl;}voidtuifang()//客人退房结算{inta,i,j,pay1,pay2;fstreamkefang(kefang.txt,ios::in|ios::out|ios::binary);if(!kefang){cerr文件打开失败!endl;abort();}cout请输入客人住的房间号endl;for(i=0;in;i++){-9-cout;cina;if(a==room[i].num){kefang.seekg(i*sizeof(room[i]));kefang.read((char*)&room[i],sizeof(room[i]));cout客人的房间号room[i].num;cout客人的入住时间为:room[i].in.year年room[i].in.month月room[i].in.day;coutendl;cout请输入客人的退房时间年/月/日endl;cout年:;cinroom[i].out.year;cout月:;cinroom[i].out.month;cout日:;cinroom[i].out.day;cout客人的退房时间为room[i].out.year年room[i].out.month月room[i].out.day日;pay1=room[i].pay-((room[i].out.year-room[i].in.year)*365+(room[i].out.month-room[i].in.month)*30+(room[i].out.day-room[i].in.day))*room[i].price;pay2=((room[i].out.year-room[i].in.year)*365+(room[i].out.month-room[i].in.month)*30+(room[i].out.day-room[i].in.day))*room[i].price-room[i].pay;if(pay1=0)cout总的住宿费用为((room[i].out.year-room[i].in.year)*365+(room[i].out.month-room[i].in.month)*30+(room[i].out.day-room[i].in.day))*room[i].price元,\n;cout入住时预付费用为:room[i].payendl;-10-cout剩余费用为:pay1endl;if(pay10)cout还须付:pay2元;for(j=0;j5;j++){room[i].noman[j]=b[j];//初始化客房为空room[i].name[j]=0;//初始化客人名字为空}room[i].input=room[i].input+((room[i].out.year-room[i].in.year)*365+(room[i].out.month-room[i].in.month)*30+(room[i].out.day-room[i].in.day))*room[i].price;kefang.write((char*)&room[i],sizeof(room[i]));}elseif(a!=room[i].num)cout输入房号不存在!请确认后重试。\n\nendl;break;}kefang.close();cout按回车键返回主菜单返回主菜单!endl;}voidfind()//客房信息的查询{inti=0;intk=0;;charname[20];ifstreamkefang(kefang.txt,ios::binary);if(!kefang){cerr文件打开失败!endl;abort();}cout您选择要查询方式:\n\n;-11-cout1.按空房间查询2.按姓名查询房间\n3.按房号查询4.所有客房信息\n\n;intchaxun;cout;cinchaxun;switch(chaxun){case1:cout空房间查询,;//按空房间查询cout查询结果如下endl;for(i=0;iroom[0].shu;i++){kefang.seekg(i*sizeof(room[i])