c语言课设总体设计(酒店管理)(共18页).doc

上传人:飞****2 文档编号:13434876 上传时间:2022-04-29 格式:DOC 页数:18 大小:304KB
返回 下载 相关 举报
c语言课设总体设计(酒店管理)(共18页).doc_第1页
第1页 / 共18页
c语言课设总体设计(酒店管理)(共18页).doc_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《c语言课设总体设计(酒店管理)(共18页).doc》由会员分享,可在线阅读,更多相关《c语言课设总体设计(酒店管理)(共18页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上C语言程序设计课程设计报告设计题目:学院教学信息管理系统专 业 自动化与信息工程学院 班 级 电气091 学 生 张芽 指导教师 常晓军 2010 年 春季 学期 设计任务:C语言课程设计任务书1题目:酒店房间登记与计费管理系统功能:1、屏幕上出现一个界面,让操作员能够方便的选择所需要进行的操作,包括登记入住、查询房间的入住情况、查询当前费用、结账退房等操作。 2、对不同标准的房间实施不同的收费标准,也可以按天收费或按小时收费,可根据顾客需要在登记入住时进行选择。 3、在结账退房时,根据入住时间,计费方式和房间单价计算出总费用。要求:1、用C语言实现程序设计;2、系统

2、的各个功能模块要求用函数实现;3、界面友好(良好的人机交互),程序加必要的注释。平时成绩:验收答辩成绩:设计报告成绩:总评成绩:指导教师:一、 总体设计1、 程序的总体设计(1) 程序总体设计思路:本实验做的是酒店房间登记与计费管理系统,主要实现的是房间登记与管理(包括登记入住、查询),计费管理(当前费用的计算与输出,结账时费用的计算与输出)等功能。为使程序条理清晰,体现模块化设计,把所有要实现的功能做成函数,采用分步实施的方法逐步细化。具体分布实施有以下5步。1,编写模块 2,定义实现个功能模块所要函数 3,编写各个函数 4,理清思路,逐步修改 5,调试整个程序。沿着这个顺序,首先在大脑形成

3、一个整体流程,确定酒店管理系统需要实现那些主要功能,编写模块。接下来,根据模块定义实现各功能模块所用函数。下面3步写相关程序。函数定义出来后,第3步就是把这些定义了的函数一个个编写出来。每个函数在编写前写构思好(想好要实现的功能,需要的信息,完成程序整体设计,再把自己想象成顾客,实现人机友好界面)。在正式调试前有一个修改,检查所编程序是否大致满足要求,是否能基本运行,流程还缺什么,实现某些功能的程序是否正确。当然修改的前提是思路清晰。修改时要不断地走程序流程,对不足之处进行修改,调整。最后,调试程序。又可分两步,1、语法错误调试2、逻辑错误调试。实际调试中我的程序语法错误很多,但经前面4步,已

4、经对流程很熟悉,加上c语言课上的调试经验,故调试修改还比较顺手。调试逻辑错误是把各个功能逐一操作,逐一修改。整个程序核心部分是各个函数:1、欢迎界面函数:给用户足够的信息提示,使用户了解酒店管理系统的功能,是通过switch进入不同界面。2、登记入住函数:使用户在入住前登记个人信息,选择房间信息(如房间类型,计费方式,房间号),记录入住时间等。3、 查询入住情况函数:为方便用户入住信息,顾客可通过不同方式查找到自己的个人信息。4、 查询当前费用函数:顾客可根据房间号随时查询所用费用,此函数包含计费功能,并将计费单独定义为一个函数。5、 结账退房函数:退房的标志是该房间的所有信息清零。(2)程序

5、的模块 登记入住查询房间入住情况按房间号查询主函数(欢迎界面)按客户信息查询按入住时间查询退出查询当前费用结账退房退出系统2、数据结构 此系统,选择用结构体存放不同类型的数据,房间信息。在这过程中由于对指针的运用与操作还不熟练,不方便修改,所以没用指针。(1)创建房间信息结构体 /*创建结构体date,记录入住和结账时间*/ struct date int mon; int day; int hour; ; /*创建结构体hotel*/struct hotelint num; /房间号 int kind; /*房间种类 1-单人间 2-双人间*/ char name20; /入住客户姓名 ch

6、ar ID19; /身份证号 int h_money; /按日收费价格 int d_money; /按小时收费价格 struct date time; /入住时间 int flag; /*flag含义 0-无人入住 1-按小时入住 2-按天入住*/ int deposit; /押金roomM; 3、函数原型声明void welcome(); /欢迎界面int dengji(); /登记入住int lookfor_room(); /查询房间入住情况int lookfor_price(); /查询当前费用int tuifang(); /结账退房int find(); /找入住人数long h_ca

7、lculate(); /按小时计费long d_calculate(); /按天计费int per_infor(); /个人信息void yingzhifu(); /结账付款int quit(); /退出函数void main(); /主函数二、详细设计1、主函数设计主函数说明:为满足顾客登记入住,查询房间入住情况,查询当前费用,结账退房等功能的实现,设计此函数。开始进入欢迎界面让顾客选择,进入顾客所选界面。开 始输入选择序号进入所选功能函数结 束主函数流程图2、各子函数流程图(共4子函数)(1)登记入住函数说明:如果有空房,则会出现一个个提示信息,顾客只要按照信息一一输入即可最终登记成功。当

8、然,输入过程中不免有失误,用while实现“输入有误,重新输入”,这是在考虑人机界面友好的前提下设计的,在之后的功能中也会用到。登 记入 住房 间 已住 满 ?已住满未住满输入相关信息输入有误?成功登记结束返回主函数YN登记入住流程图(2)查询房间入住情况:为满足顾客查询房间个人信息,设计此函数,有考虑客输入信息不同,故给了顾客3种查询方式(1. 按房号查询2. 按客户信息查询3. 按入住时间查询),最终输出个人信息(包括顾客姓名,身份证号,房间种类,房间号,计费方式,押金,入住时间等信息)。流程图如下:查询房间入住情况选择查询方式(i)1. 按房号查询2. 按客户信息查询3. 按入住时间查询

9、i=1?i=2?i=3?i=4?输入房间号输入身份证号输入入住时间返回主函数输入有误,重输否否否否是是是是输出个人信息结束查询房间入住情况流程图(3)查询当前费用函数说明:查询当前费用函数,考虑到顾客方便查询当前费用。同样用while实现重新输入,if-else实现各种选择判断。这些选择都是为顾客可以更好的操作服务的。(4)结账退房函数说明:再输入各种信息之后,程序由收费方式、所交押金、入住时间与结账时间的运算,得出顾客最终应支付的钱,确认退房后,系统会将该客户的所有信息清零,该房为空房。以下为3、4函数流程图查询当前费用输入房间号空房?1.、重输2、退出( i )i=1?输出个人信息输入查询

10、时间输出当前费用返回主函数结束是否否是 查询当前费用流程图结账退房全为空?返回主函数输入房间号空房?显示客户信息输入相关信息结 束 结账退房流程图三、测试与调试(测试方案、存在的问题及解决方法)出现欢迎界面测试1:选择选项1,登记入住 “1”按提示输入信息(如:1-单人间,1-房间号,1-按小时收费,张芽,25元,25,7月3日8时,登记成功)测试2:选择选项2,查询房间入住情况“1”按房间号查询,1、房间号 出现刚登记的个人信息 2、房间号 该房为空房“2” 按客户信息查询,身份证号 出现个人信息“3” 按入住时间查询,7月3日8时 同样出现个人信息“4” 退出,返回欢迎界面测试3:选择选项

11、3,查询当前费用 “1”号房间,查询时间7月3日9时,当前费用25元测试4:选择选项4,结账退房 “2”号房间,空房,重输 “1”号房间,结账时间7月4日8时,应支付600元,退房成功调试过程:1、对界面清晰程度调试。用“n”与其它符号结合起来调节2、数据类型调试,函数有无返回值的调试。如为了使每次完成一个功能后都可返回主函数或停止运行,需要有返回值,若return(1),则返回主函数继续操作,若exit(0),停止运行3、循环语句中要合理运用break,在我设计的程序中,break起着很重要的作用,它控制循环的正常执行。开始时,我没注意到这一点,使得运行过程有太多不足,在注意到break的作

12、用后,我对程序做了一定的修改,运行明显有了很大的改善。今后还是要小心,谨慎。四、小结 此程序满足课程设计要求,实现让操作员进行登记入住、查询房间入住情况、查询当前费用、结账退房等操作,并对不同房间实施不同收费标准,计算总费用等功能。 程序优点:整个程序界面友好,与顾客有良好的界面交流。程序虽简单,但功能齐全,适合初学者分析、阅读。 程序缺点: (1)数据结构单一。主要是学习c语言时间短,知识程度不深,不够全面,知道的不多。 (2)不会调用系统时间。因为对调用系统时间没有本质的了解,深入的学习,曾试图调用,可出现错误不知如何修改。故只能由人工计时。这虽然机械了点,但自己可以明白是怎么回事,方便修

13、改。 (3)时间的计算上也存在缺陷。不过我相信这个问题是可以解决的,只要找到好的方法,理清思路,便可写出程序。在c课设的这一个星期,是我对c语言及其实验有了更深入的了解。我认识到,c语言实验是非常注意书写的正确性和逻辑的严密性,实验过程本身就在考验一个人细心与耐心程度,还有对所学知识的熟练程度。这对我来说是非常重要的方面。这次试验也让我知道在c语言中,条理清晰的流程是很重要的,它包含你编写程序的大致方向,是你在编程过程中不会走错路,也不会太盲目。严谨认真的态度也不可或缺。实验中常常会遇到许多问题,c语言有自己解决问题的方法:找语法错误,找逻辑错误,调试等等,有时需要从整个程序方面考虑,这就需要

14、调试经验。在实验中,遇到问题要想方设法将它解决,看书找资料,请教同学,与同学讨论,都是很好的途径。C课设的学习虽然短暂,却使我获益匪浅,相信这些收获会对我以后的学习有很大帮助。源代码#define M 40#include#include#include/*全部功能*/void welcome(); /欢迎界面int dengji(); /登记入住int lookfor_room(); /查询房间入住情况int lookfor_price(); /查询当前费用int tuifang(); /结账退房int find(); /找入住人数long h_calculate(); /按小时计费long

15、 d_calculate(); /按天计费int per_infor(); /个人信息void yingzhifu(); /结账付款int quit(); /退出函数/*创建结构体date,记录入住和结账时间*/ struct date int mon; int day; int hour; ; /*创建结构体hotel,包括房间号、房间种类、入住客户信息、身份证号、按日收费价格 按小时收费价格、入住时间、是否处于入住状态、押金等*/struct hotelint num; int kind; /*房间种类 1-单人间 2-双人间*/ char name20; char ID19; int h

16、_money; int d_money; struct date time; int flag; /*flag含义 0-无人入住 1-按小时入住 2-按天入住*/ int deposit;roomM; /*找入住人数*/int find()int count=0,i; for(i=0;iM;i+) if(roomi.flag!=0) count+; return count;/*按小时计费*/long h_calculate(struct date end,struct date start,int money)long fee; int a,b; a=end.hour-start.hour;

17、 /计算小时 b=end.day-start.day; / 计算天数 if(a=8)fee=(b+1)*money; /如果小时数大于8,则算为一天 else if(a=0)fee=b*money; /如果小时数大于0而小于8,则不计算小时 else a=a+24; /如果小时数小于0,则小时数加24,天数减一,重新计算 b=b-1;if(a=8)fee=(b+1)*money;else fee=b*money; return fee; /有返回值 /*个人信息*/int per_infor(int k)char zhonglei30,fangshi30; switch(roomk.flag)

18、 case 1:strcpy(fangshi,按小时计费);break; case 2:strcpy(fangshi,按天计费);break; default:break; switch(roomk.kind) case 1:strcpy(zhonglei,单人间);break; case 2:strcpy(zhonglei,双人间);break; printf(nntt-姓名: ); puts(roomk.name);printf(nn); printf(tt-身份证号: );puts(roomk.ID);printf(nn); printf(tt-房间种类: );puts(zhonglei

19、);printf(nn); printf(tt-房间号: ); printf(%d,k+1);printf(nn); printf(tt-计费方式: );puts(fangshi);printf(nn); printf(tt-押金: ); printf(%d元,roomk.deposit);printf(nn); printf(tt-入住时间: ); printf(2010年%d月%d日%d时nn,roomk.time.mon,roomk.time.day,roomk.time.hour); return(0);/*最后收费*/void yingzhifu(long money,int dep

20、)long dif=(long)dep-money; if(dif=0)printf(押金余总费用相等); else if(dif0)printf(酒店应找还顾客%ld元,dif); else printf( 顾客应再支付%ld元,dif*(-1);/*退出函数,返回主函数*/int quit()int z; printf(返回欢迎界面吗?1-是 2-否nn); scanf(%d,&z); if(z=1) return(1); else printf(* 谢谢惠顾 *!nn); exit(0);/*主菜单*/void welcome()int n=find(); printf(*); prin

21、tf(nntt- 欢迎来到爱华酒店 -nn); printf(tt ( 1. 登记入住 )nn); printf(tt ( 2. 查询房间入住情况 )nn); printf(tt ( 3. 查询当前费用 )nn); printf(tt ( 4. 结账退房 )nn); printf(tt ( 5. 退出系统 )nn); printf(t004总房间数: %-3d 004入住人数: %-3d 004空房间数: %-3d,M,n,M-n); printf(nn*nn); printf(ttt- 请选择您所需的服务: ); /*登记入住功能*/int dengji()int i,j,k,yajin,s

22、,a,n; char ch,fangshi30; printf(nn- 登记入住 -nn); if(find()=M) /入住人数与房间总数相等 printf(当前房间已满,是否返回(Y/N): ); ch=getchar(); if(ch=y)return(1); /返回主菜单 else exit(0); printf(请选择房间类型:nn); printf(1.单人间 2.双人间nn); printf(001 ); scanf(%d,&n); printf(可供您选择的房间有: nn); for(i=20*(n-1)+1,j=0;i20*n+1;i+) if(roomi-1.flag=0)

23、 printf(%dt,i); j=j+1; if(j%5=0)printf(nn); printf(请输入您准备入住的房间号: ); /房间号k-roomk-1 scanf(%d,&k);roomk-1.kind=n;roomk-1.num=k;printf(nn请选择您的计费方式:(1.按小时收费为%d元/时-2.按天计费为%d元/分),k,roomk-1.h_money,roomk-1.d_money);printf(-);scanf(%d,&s);while(s!=1&s!=2)printf(输入有误,请重新输入: ); scanf(%d,&s);if(s=1)roomk-1.flag

24、=1;else roomk-1.flag=2;printf(nn请输入您的姓名: );scanf(%s,roomk-1.name);printf(nn请输入您的身份证号: );scanf(%s,roomk-1.ID);switch(n)case 1:yajin=25;break; case 2:yajin=50;break;printf(nn您应当缴纳的押金金额为 %d元,yajin);printf(nn请输入您实际缴纳的押金金额: );scanf(%d,&roomk-1.deposit);while(roomk-1.deposit5|i1)printf(nntt 输入有误,请重新输入: );

25、 scanf(%d,&i); else if(i=1)printf(nn请输入房间号: ); /按房号查询 scanf(%d,&j);if(roomj-1.flag=0)printf(nn此房间无人住nn);elseprintf(您的个人信息为: ); per_infor(j-1);break; else if(i=2)printf(nn请输入您的身份证号: ); /按客户信息查询 scanf(%s,a); while(1)for(k=0;kM;k+) if(strcmp(a,roomk.ID)=0)break; if(k!=M) printf(nn您的个人信息为: ); per_infor(

26、k);break; else printf(ttnn1. 输入有误,请重新输入 2.不存在此人信息,退出 nn); scanf(%d,&s);if(s=1)printf(nn请输入您的身份证号: ); scanf(%s,a);else return(1);break; else if(i=3) printf(nn请输入入住时间: ); scanf(%d月%d日,&tim_t.mon,&tim_t.day); for(k=0;kM|n1) printf(nn输入有误,请重新输入退房的房间号(1%d):,M); scanf(%d,&n); if(roomn-1.flag=0) printf(当前房

27、间尚未有人住,无法办理退房手续!nn); switch(roomn-1.kind) case 1:strcpy(zhonglei,单人间);break;case 2:strcpy(zhonglei,双人间);break; switch(roomn-1.flag) case 1:strcpy(fangshi,按小时计费);break;case 2:strcpy(fangshi,按天计费);break;default:break; printf(房间号: %dnn房间类型: %snn入住客人姓名: %snn身份证号: %snn,roomn-1.num,zhonglei,roomn-1.name,r

28、oomn-1.ID);printf(入住时间: );printf(2010年%d月%d日%d时,roomn-1.time.mon,roomn-1.time.day,roomn-1.time.hour); printf(nn请输入结账时间: );scanf(%d月%d日%d时,&end.mon,&end.day,&end.hour);printf(nn押金: %d,roomn-1.deposit);printf(nn计费方式: );printf(%s,fangshi);if(roomn-1.flag=1) printf(nn当前费用: %ld,money=h_calculate(end,room

29、n-1.time,roomn-1.h_money); else printf(nn当前费用: %ld,money=d_calculate(end,roomn-1.time,roomn-1.d_money);printf(nn应支付: );yingzhifu(money,roomn-1.deposit);printf(nn是否退房(1.是2.否) : );scanf(%d,&m); if(m=1)roomn-1.flag=0; strcpy(roomn-1.name,-empty-); roomn-1.deposit=0; printf(nn您已成功退房,欢迎下次光临!nn);quit(); /

30、*主函数*/ void main() int k,i,j; for(k=1;k=1&k20&k=40)roomk-1.h_money=40; roomk-1.d_money=300; welcome(); scanf(%d,&i); switch(i) case 1:j=dengji();break; case 2:j=lookfor_room();break; case 3:j=lookfor_price();break; case 4:j=tuifang();break; default:printf(* 欢迎下次光临 *nn);exit(0); while(j!=0) welcome(); scanf(%d,&i); switch(i) case 1:j=dengji();break; case 2:j=lookfor_room();break; case 3:j=lookfor_price();break; case 4:j=tuifang();break; default:printf(nn* 欢迎下次光临 *nn);exit(0); 专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁