C语言课程设计--宾馆房间登记与计费管理系统.doc_第1页
C语言课程设计--宾馆房间登记与计费管理系统.doc_第2页
C语言课程设计--宾馆房间登记与计费管理系统.doc_第3页
C语言课程设计--宾馆房间登记与计费管理系统.doc_第4页
C语言课程设计--宾馆房间登记与计费管理系统.doc_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言课程设计报告学生姓名:学 号:2222222222221111111111111000000000000学 院:班 级:题 目:宾馆房间登记与计费管理系统指导教师: 职称: 教 授 实验师 王王王 实验师 2012年07月15日II目 录目录.I一、选题背景.11.1主要问题及技术要求.11.2指导思想.1二、算法设计.12.1程序功能需求.12.2功能框架图.22.3设计方案说明.32.4计算公式.3三、程序设计及功能说明.43.1程序功能介绍.4四、结果分析.64.1主界面.64.2登记入住.64.3结账退房.94.4查询当前入住情况.124.5查询当前费用.134.6查询历史记录.14五、结论或总结.14六、课程设计心得体会.15参考文献.16源程序.17附表一.63一、选题背景1.1主要问题及技术要求本题对时间的控制要求较高,尤其是必须控制输入的时间,使其不能小于以前录入过的时间,防止当前时间输入错误。还有退房时的信息对比难度也较高,必须保证退房顾客与系统记录信息一致,防止服务错漏或错误退房。这是本题两个较大的难点。此外还有房间号、身份证号、时间的输入格式的控制、跨年的时间计算等难点。1.2指导思想学了C语言,我们需要一个学以致用的机会。选题后,在题目的完成过程中,我们的知识可以更加牢固。在完善酒店管理系统的过程中,我们要锻炼自己的基于现实思考的能力,培养自己缜密的思维。相对于大多数人做的学生管理系统,酒店管理系统对于时间的控制要求严格,对于我们的算法思想要求较高,因此,在完成该次课程设计的过程中,我们要锻炼我们的逻辑思维能力,同时对C语言有更深刻的认识,把C语言知识掌握得更牢固。同时,该系统以能够帮助酒店很好地管理客户信息,提高营业效率和数据的安全性和可靠性,减少劳力浪费为设计目标。在完成该系统的同时,我们也为社会尽了一份力。二、算法设计2.1程序功能需求(1)每次打开程序都能从顾客信息表文件中读出顾客数据,以便后面的操作;(2)有一个主界面,能根据用户需要从主界面进入不同的功能模块;(3)登记时:a.能够判断房间是否已住满;b.能够选择计费方式是按小时还是按天计费;c.能够判断输入的房间号、姓名、身份证号、入住时间等信息是否按正确格式输入;d.能够判断输入的房间号对应的房间是否有人入住,输入的身份证号是否正有人使用,输入的当前时间是否小于以前登记的所有时间;e.输入完成后将输入的信息按房间号排序并保存到文件;(4)退房时:a.能够判断是否有顾客入住;b.能够判断输入的房间号、姓名、身份证号、退房时间等信息是否按正确格式输入;c.能够判断输入的房间号对应的房间是否是空房;d.能够判断输入的姓名、身份证号与退房的房间号是否对应(即判断该房间中住的是不是这个顾客);e.能够判断输入的退房时间是否小于入住时间;f.能够计算出顾客入住的总时间数并根据顾客入住的总时间数、对应房间价格和顾客选择的支付方式计算出应付金额,并判断顾客支付的金额是否大于应付金额;g.输入顾客支付的金额后计算出找零金额并显示; h.退房结束前从顾客信息表中删去该退房顾客信息并将此次操作的信息写入历史记录文件; (5)查询当前入住情况时:a.判断是否有顾客入住;b.能够判断输入的当前时间是否小于任一顾客的入住时间;c.根据当前时间算出每位顾客的当前总入住时间数;d.逐条输出当前顾客信息及其当前总入住时间数;(6)查询当前费用时:a.判断是否有顾客入住;b.能够判断输入的当前时间是否小于任一顾客的入住时间;c.根据当前时间算出每位顾客的当前总入住时间数,进而算出各顾客应付金额;d.逐条输出当前顾客信息及其当前总入住时间数、当前费用;(7)查询历史记录时:a.判断是否有历史记录;b.从历史记录文件中读出每条历史记录并逐条输出;2.2功能框架图由2.1分析得以下功能图:图2-1 功能框架图2.3设计方案说明先编写各个功能分块的函数,然后在主函数中调用这些函数实现功能,即采用先分后总的方法。通过定义全局变量作为函数间的桥梁,达到整个程序的数据一致性。由以上方案设计程序,可以得到一个简单实用的系统,能够极大地减少酒店管理漏洞,该方案的条理性较强,设计出的程序也简单易用。下面是函数关系图解:图2-2 函数调用关系图2.4计算公式1)设当前日期是当前年的第M天,入住日期是入住那年的第N天(可由days函数算出)(1)按天既费时,总入住时间等于总入住天数:a.不跨年:总入住时间=M-Nb.跨年:总入住时间=(退房年份-入住年份)365+入住年份到退房年份间的闰年数+M(2)按小时计费时:总入住时间=以上求得的总入住天数24-入住时刻+退房时刻2) (1)按天既费时:应付金额=总入住时间每天价格 (2)按小时计费时:应付金额=总入住时间每小时价格3)找零金额=付款金额-应付金额三、程序及功能说明3.1程序功能介绍程序主要有登记入住、结账退房、查询当前入住情况、查询当前费用、查询历史记录、关闭程序功能。在登记入住时能够选择计费方式按天或按小时;退房时能够算出应付金额和找零金额;能够显示当前入住人数;查询历史记录时能够显示历史记录的条数;在任意输入状态下输入0都能返回主界面。1. 函数库#include /*标准输入输出函数库*/#include /*字符串函数库*/#include /*自带窗体控制函数库*/2. 结构体说明结构体如下: struct room char room20; /*容纳房间号*/char name20; /*容纳顾客姓名*/char ID20; /*容纳顾客身份证号*/int staytime4; /*容纳入住时间*/int endtime4; /*容纳退房时间*/int c; /*容纳计费方式的选择结果*/int time; /*容纳总入住时间*/int money; /*容纳应付金额*/int money1; /*容纳付款金额*/int money2; /*容纳找零金额*/char nn; /*换行符,用于在记录文件中换行*/该结构体类型用于容纳顾客的所有信息,具体用途在以上注释中给予了说明3. 全局变量char room195=1,-,0,1,1,-,0,2,1,-,0,3,2,-,0,1,2,-,0,2,2,-,0,3,3,-,0,1,3,-,0,2,3,-,0,3; /*定义数组容纳房间号,全局通用*/int g=10,t,end=2,g1,d,p; /* g,g1容纳总入住人数;d按小时或按天计费的选择结果,p容纳平年或闰年的判断结果*/4. 主函数主函数void main( )主要用于主界面控制,其主要功能为:程序启动后从顾客信息表获得数据;显示主界面,通过主界面连接各功能模块,按用户的选择调用不同的函数进入不同的功能模块,并附带有关闭程序功能。5. 登记入住函数登记入住函数void dengji(struct room room9)主要用于顾客登记入住,主要功能为将输入的顾客信息排序后写入顾客信息文件,在输入信息前先判断房间是否已满,再输入是判断输入的信息是否正确可用。6. 结账退房函数结账退房函数void tuifang(struct room room9)的主要功能是在顾客信息记录中找到与输入的信息对应的记录并将其删除,同时根据输入的信息计算出总入住时间、应付金额,再根据输入的付款金额计算出找零金额,最后将这些信息作为一条新纪录保存到历史记录表。7. 查询当前入住情况函数查询当前入住情况函数void chaxun( )的主要功能是在输入当前时间后,根据当前时间算出每位顾客的总入住时间,然后逐条输出顾客信息和顾客总入住时间;在输入当前时间时,判断当前时间的合法性。8. 查询当前费用函数查询当前费用函数void chaxun1( )是在查询当前入住情况函数void chaxun( )的基础上作出一些修改得到的,它的主要功能是输入当前时间后,根据当前时间算出每位顾客的总入住时间,然后再算出每位顾客的当前费用,最后逐条输出顾客信息和顾客总入住时间、顾客当前费用;在输入当前时间时对当前时间的合法性做判断。9. 查询历史记录函数查询历史记录函数void chaxun2(struct room a)的功能是从历史记录文件中逐条读出历史记录并输出。10. 顾客信息写入函数信息录入函数void write(struct room room)的功能是将顾客信息逐条写入顾客信息文件。11. 历史记录写入函数历史记录写入函数void write1(struct room room)的作用是写入一条历史记录到历史记录文件里。12. 顾客信息读取函数顾客信息读取函数的作用是从顾客信息文件中逐条读出顾客信息并将其存入指定的结构体数组里。13. days函数该函数的作用是根据当天日期算出该天是该年中的第几天。14. hours函数该函数是一个辅助计算函数,用于计算顾客入住的小时数。四、结果分析4.1主界面本程序设定了启动后若无顾客数据文件则显示暂无顾客数据,具体如图所示:图2-3 启动时图2-4 主界面4.2登记入住登记时的部分情况如图:图2-5 选择计费方式图2-6 选择错误时图2-7 房间号输入有误图2-8 身份证号输入有误图2-9 年份输入有误图2-10 月份输入有误图2-11 日期输入有误图2-12 时刻输入有误顾客信息及登记时间输入不合法时报错并重新输入:图2-13 登记演示图2-14 登记成功登记成功后可继续登记,使操作更简便:图2-15 登记成功后输入0回车后强制返回主界面,故本次登记无效:图2-16 强制返回主界面房间已满时禁止登记并给出提示:图2-17 房间已满时4.3结账退房结账退房部分功能展示如下图:图2-18 输入退房顾客信息时退房时间输入不合法是会给予提示,并重新输入:图2-9 输入退房时间时输入支付金额时判断是否满足应付金额,若不满足,重新输入:图2-20 输入支付金额时退房完成时计算出找零金额并显示:图2-21 退房完成时退房完成后可继续退房,简化操作:图2-22 退房完成后输入0回车后强制返回主界面,故本次退房无效:图2-23 强制返回主界面时图2-24 当前无人入住时4.4查询当前入住情况具体操作界面及功能如下图:图2-25 当前无人入住时输入当前时间时判断输入的时间是否合法,若不合法,重新输入:图2-26 输入当前时间时图2-27 查询完成时4.5查询当前费用查询当前费用模块的具体操作及功能展示如下图:当前无人入住时提示并不输出查询结果:图2-28 无人入住时输入当前时间时判断输入的时间是否合法,若不合法,重新输入:图2-29 输入当前时间时输入完成后计算出当前费用并输出:图2-30 查询结束时4.6查询历史记录查询历史记录时操作较简单,具体演示如下图:图2-31 查询结束时图2-32 没有历史记录时五、结论或总结完成该程序的过程中,先后经历了算法设计,编写代码,上机调试,试运行等几个阶段,最后终于基本达到了要求。程序能正常运行后,又对操作界面进行了美化,使得操作界面更直观易用。实现了题目要求的功能后,并且对功能进行了扩展,加入了查询历史记录、任意状态输入0返回主界面、运行结果以表格的形式输出等功能。本来还想加一个密码设置功能,不过由于不是十分必要,反而可能导致程序的简单实用性下降,故而放弃。这个程序的优点在于精确可靠,在房间号、时间、身份证号等的输入上进行严格的验证,能够有效地防止出现管理错漏问题。该程序在可用性方面有较大的优势。在完成该次设计的过程中,我收获了很多,学会了根据现实情况考虑问题,将理论与实际结合的思考方式。六、课程设计心得体会在设计较大的程序时,要有全局观,否则将会导致各系统模块间相互影响,产生不必要的麻烦。在设计一个系统时,界面的美化很重要,能够极大地提高系统的可用性,形成良好的人机交互。设计程序时,要不断查漏补缺,多次试运行,因为只有在使用中才能发现问题,程序的试用能帮我们找到一些在设计时忽略的问题。设计一个程序就像建一栋房子,要从地基开始一点点往上累加,即要一步步地分步实现模块功能,要有一定的条理性。最重要的一点是,设计的程序要与实际相结合,要符合实际需要,否则一切都将是毫无意义的。我们在学习过程中,要将理论与实际相结合,在实践中提高自我。本次课程设计,我将学过的C语言知识巩固了一遍,同时认识了函数库及其中的system函数和Sleep函数,使我对VC6.0更加了解,也了解到更多TuboC与VC6.0的区别。在设计过程中,我学会了有计划有条理地实现目标,这才是我本次课程设计中最大的收获。- 63 -参考文献1 谭浩强C语言程序设计教程北京:高等教育出版社,2007.2 曹哲主编C语言实验与课程设计指导北京:机械工业出版社,2010.3 谭浩强,张基温,唐永炎编著C程序设计教程.北京:清华大学出版社,1992.4 谭浩强编著C程序设计题解与上机指导(第二版)北京:清华大学出版社,1999.源程序#include /*头文件,标准输入输出函数库*/#include /*字符串函数库*/#include /*自带窗体控制函数库*/struct room /*定义结构体变量类型*/ char room20; /*定义结构体变量类型中的元素,下同*/char name20; char ID20; int staytime4;int endtime4;int c;int time;int money;int money1;int money2;char nn;room11,b11,a; /*定义两个结构体数组和一个结构体变量*/char room195=1,-,0,1,1,-,0,2,1,-,0,3,2,-,0,1,2,-,0,2,2,-,0,3,3,-,0,1,3,-,0,2,3,-,0,3; /*定义一个二维字符数组容纳房间号*/int g=10,t,end=2,g1,d,p; /* g,g1容纳总入住人数;d容纳选择按小时或按天计费的选择结果,p容纳平年或闰年的判断结果*/void main() /*定义主函数,主界面控制/void dengji(struct room room9); /*申明要调用的函数,下同*/void tuifang(struct room room9);void chaxun( );void chaxun1( );void chaxun2(struct room a);void read(struct room b);int flag,ll;for(ll=0;ll11;ll+) /*将roomll与 bll中所有的控制换行的nn元素初始化*/ roomll.nn=n; bll.nn=n; read(room); /*将roomll初始化*/g=0;while(strlen(roomg.ID)=18) g+; /*将g初始化*/while(t=4|end=2) /*while语句,实现主界面控制*/ system(cls); /*清屏语句,下同*/ t=0; printf(nnnnnnnnnn); /*输出格式控制,下同*/ printf( ); /*输出格式控制,下同*/ printf(*n); /*输出格式控制,下同*/ printf( ); /*输出格式控制,下同*/ printf(* 1 登记入住 *n); /*输出提示语句,下同*/ printf( ); /*输出格式控制,下同*/ printf(* 2 结账退房 *n); /*输出提示语句,下同*/ printf( ); /*输出格式控制,下同*/ printf(* 3 查询当前入住情况 *n); /*输出提示语句,下同*/ printf( ); /*输出格式控制,下同*/ printf(* 4 查询当前费用 *n); /*输出提示语句,下同*/ printf( ); /*输出格式控制,下同*/ printf(* 5 查询历史记录 *n); /*输出提示语句,下同*/ printf( ); /*输出格式控制,下同*/ printf(* 6 关闭程序 *n); /*输出提示语句,下同*/ printf( ); /*输出格式控制,下同*/ printf(*n); /*输出格式控制,下同*/ printf(n ); /*输出格式控制,下同*/ printf(请选择: ); /*输出提示语句,下同*/ scanf(%d,&flag); /*输入指定变量的值,下同*/ while(flag!=1)&(flag!=2)&(flag!=3)&(flag!=4)&(flag!=5)&(flag!=6) system(cls); printf(nnnnnnnnn);printf( ); printf(选择错误,请重新选择!n); printf( ); printf(*n); printf( ); printf(* 1 登记入住 *n); printf( ); printf(* 2 结账退房 *n); printf( ); printf(* 3 查询当前入住情况 *n); printf( ); printf(* 4 查询当前费用 *n); printf( ); printf(* 5 查询历史记录 *n); printf( ); printf(* 6 关闭程序 *n); printf( ); printf(*n); printf(n ); printf(请选择 : ); scanf(%d,&flag);system(cls); if(flag=1) /*if语句,功能模块控制,下同*/ end=1; while(end=1) system(cls); dengji(room);system(cls); if(t=4) break; /*break语句,实现任意状态输入0返回主界面,下同*/ system(cls); printf(nnnnnnnnnnnn); printf( ); printf(*n); printf( ); printf(* 1 继续登记入住 *n); printf( ); printf(* 2 返回主界面 *n); printf( ); printf(*nn); printf(n ); printf(请选择 : ); scanf(%d,&end); if(end=0) t=4; if(t=4) break; while(end!=1&end!=2) system(cls); printf(nnnnnnnnnnn); printf( ); printf(选择错误,请重新选择!n); printf( ); printf(*n); printf( ); printf(* 1 继续登记入住 *n); printf( ); printf(* 2 返回主界面 *n); printf( ); printf(*nn); printf(n ); printf(请选择 : ); scanf(%d,&end); if(end=0) t=4; if(t=4) break; if(flag=2) end=1; while(end=1) system(cls); tuifang(room);system(cls); if(t=4) break; printf(nnnnnnnnnn); printf( ); printf(*n); printf( ); printf(* 1 继续结账退房 *n); printf( ); printf(* 2 返回主界面 *n); printf( ); printf(*nn); printf(n ); printf(请选择 : ); scanf(%d,&end); if(end=0) t=4; if(t=4) break; while(end!=1&end!=2) system(cls); printf(nnnnnnnn); printf( ); printf(选择错误,请重新选择!n); printf( ); printf(*n); printf( ); printf(* 1 继续结账退房 *n); printf( ); printf(* 2 返回主界面 *n); printf( ); printf(*nn); printf(n ); printf(请选择 : ); scanf(%d,&end); if(end=0) t=4; if(t=4) break;if(flag=3) chaxun();if(t!=4)printf(n ); printf(输入任意数返回主界面 : ); scanf(%d,&t);end=2; if(flag=4) chaxun1();if(t!=4)printf(n ); printf(输入任意数返回主界面 : ); scanf(%d,&t); end=2; if(flag=5) chaxun2(a);if(t!=4) printf(n 输入任意数返回主界面 : ); scanf(%d,&t); end=2; if(flag=6) end=3; t=0;/*主函数结束*/void dengji(struct room room9) /*定义登记入住函数*/void write(struct room a); /*申明write函数*/int i,j,k,h=0;if(g9) /*if语句,判断房间是否已满*/while(h=0)printf(nnnnnnnnnnnn);printf( ); printf(*n);printf( );printf(* 请选择计费方式! *n);printf( );printf(* 1 按天计费 *n);p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论