c语言课设总体设计.docx
- 文档编号:6756859
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:21
- 大小:146.68KB
c语言课设总体设计.docx
《c语言课设总体设计.docx》由会员分享,可在线阅读,更多相关《c语言课设总体设计.docx(21页珍藏版)》请在冰豆网上搜索。
c语言课设总体设计
C语言程序设计
课程设计报告
设计题目:
学院教学信息管理系统
专业自动化及信息工程学院
班级电气091
学生张芽
指导教师常晓军
2010年春季学期
设计任务:
C语言课程设计任务书1
题目:
酒店房间登记及计费管理系统
功能:
1、屏幕上出现一个界面,让操作员能够方便的选择所需要进行的操作,包括登记入住、查询房间的入住情况、查询当前费用、结账退房等操作。
2、对不同标准的房间实施不同的收费标准,也可以按天收费或按小时收费,可根据顾客需要在登记入住时进行选择。
3、在结账退房时,根据入住时间,计费方式和房间单价计算出总费用。
要求:
1、用C语言实现程序设计;
2、系统的各个功能模块要求用函数实现;
3、界面友好(良好的人机交互),程序加必要的注释。
平时成绩:
验收答辩成绩:
设计报告成绩:
总评成绩:
指导教师:
一、总体设计
1、程序的总体设计
(1)程序总体设计思路:
本实验做的是酒店房间登记及计费管理系统,主要实现的是房间登记及管理(包括登记入住、查询),计费管理(当前费用的计算及输出,结账时费用的计算及输出)等功能。
为使程序条理清晰,体现模块化设计,把所有要实现的功能做成函数,采用分步实施的方法逐步细化。
具体分布实施有以下5步。
1,编写模块2,定义实现个功能模块所要函数3,编写各个函数4,理清思路,逐步修改5,调试整个程序。
沿着这个顺序,首先在大脑形成一个整体流程,确定酒店管理系统需要实现那些主要功能,编写模块。
接下来,根据模块定义实现各功能模块所用函数。
下面3步写相关程序。
函数定义出来后,第3步就是把这些定义了的函数一个个编写出来。
每个函数在编写前写构思好(想好要实现的功能,需要的信息,完成程序整体设计,再把自己想象成顾客,实现人机友好界面)。
在正式调试前有一个修改,检查所编程序是否大致满足要求,是否能基本运行,流程还缺什么,实现某些功能的程序是否正确。
当然修改的前提是思路清晰。
修改时要不断地走程序流程,对不足之处进行修改,调整。
最后,调试程序。
又可分两步,1、语法错误调试2、逻辑错误调试。
实际调试中我的程序语法错误很多,但经前面4步,已经对流程很熟悉,加上c语言课上的调试经验,故调试修改还比较顺手。
调试逻辑错误是把各个功能逐一操作,逐一修改。
整个程序核心部分是各个函数:
1、欢迎界面函数:
给用户足够的信息提示,使用户了解酒店管理系统的功能,是通过switch进入不同界面。
2、登记入住函数:
使用户在入住前登记个人信息,选择房间信息(如房间类型,计费方式,房间号),记录入住时间等。
3、查询入住情况函数:
为方便用户入住信息,顾客可通过不同方式查找到自己的个人信息。
4、查询当前费用函数:
顾客可根据房间号随时查询所用费用,此函数包含计费功能,并将计费单独定义为一个函数。
5、结账退房函数:
退房的标志是该房间的所有信息清零。
(2)程序的模块
2、数据结构
此系统,选择用结构体存放不同类型的数据,房间信息。
在这过程中由于对指针的运用及操作还不熟练,不方便修改,所以没用指针。
(1)创建房间信息结构体
/*创建结构体date,记录入住和结账时间*/
structdate
{intmon;
intday;
inthour;
};
/*创建结构体hotel*/
structhotel
{intnum;//房间号
intkind;/*房间种类1-单人间2-双人间*/
charname[20];//入住客户姓名
charID[19];//身份证号
inth_money;//按日收费价格
intd_money;//按小时收费价格
structdatetime;//入住时间
intflag;/*flag含义0-无人入住1-按小时入住2-按天入住*/
intdeposit;//押金
}room[M];
3、函数原型声明
voidwelcome();//欢迎界面
intdengji();//登记入住
intlookfor_room();//查询房间入住情况
intlookfor_price();//查询当前费用
inttuifang();//结账退房
intfind();//找入住人数
longh_calculate();//按小时计费
longd_calculate();//按天计费
intper_infor();//个人信息
voidyingzhifu();//结账付款
intquit();//退出函数
voidmain();//主函数
二、详细设计
1、主函数设计
主函数说明:
为满足顾客登记入住,查询房间入住情况,查询当前费用,结账退房等功能的实现,设计此函数。
开始进入欢迎界面让顾客选择,进入顾客所选界面。
主函数流程图
2、各子函数流程图(共4子函数)
(1)登记入住函数说明:
如果有空房,则会出现一个个提示信息,顾客只要按照信息一一输入即可最终登记成功。
当然,输入过程中不免有失误,用while实现“输入有误,重新输入”,这是在考虑人机界面友好的前提下设计的,在之后的功能中也会用到。
登记入住流程图
(2)查询房间入住情况:
为满足顾客查询房间个人信息,设计此函数,有考虑
客输入信息不同,故给了顾客3种查询方式(1.按房号查询2.按客户信息查询3.按入住时间查询),最终输出个人信息(包括顾客姓名,身份证号,房间种类,房间号,计费方式,押金,入住时间等信息)。
流程图如下:
查询房间入住情况流程图
(3)查询当前费用函数说明:
查询当前费用函数,考虑到顾客方便查询当前费用。
同样用while实现重新输入,if-else实现各种选择判断。
这些选择都是为顾客可以更好的操作服务的。
(4)结账退房函数说明:
再输入各种信息之后,程序由收费方式、所交押金、入住时间及结账时间的运算,得出顾客最终应支付的钱,确认退房后,系统会将该客户的所有信息清零,该房为空房。
以下为3、4函数流程图
查询当前费用流程图
结账退房流程图
三、测试及调试(测试方案、存在的问题及解决方法)
出现欢迎界面
测试1:
选择选项1,登记入住
“1”按提示输入信息(如:
1-单人间,1-房间号,1-按小时收费,张芽,6151926,25元,25,7月3日8时,登记成功)
测试2:
选择选项2,查询房间入住情况
“1”按房间号查询,1、房间号出现刚登记的个人信息
2、房间号该房为空房
“2”按客户信息查询,身份证号6151926出现个人信息
“3”按入住时间查询,7月3日8时同样出现个人信息
“4”退出,返回欢迎界面
测试3:
选择选项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的作用后,我对程序做了一定的修改,运行明显有了很大的改善。
今后还是要小心,谨慎。
四、小结
此程序满足课程设计要求,实现让操作员进行登记入住、查询房间入住情况、查询当前费用、结账退房等操作,并对不同房间实施不同收费标准,计算总费用等功能。
程序优点:
整个程序界面友好,及顾客有良好的界面交流。
程序虽简单,但功能齐全,适合初学者分析、阅读。
程序缺点:
(1)数据结构单一。
主要是学习c语言时间短,知识程度不深,不够全面,知道的不多。
(2)不会调用系统时间。
因为对调用系统时间没有本质的了解,深入的学习,曾试图调用,可出现错误不知如何修改。
故只能由人工计时。
这虽然机械了点,但自己可以明白是怎么回事,方便修改。
(3)时间的计算上也存在缺陷。
不过我相信这个问题是可以解决的,只要找到好的方法,理清思路,便可写出程序。
在c课设的这一个星期,是我对c语言及其实验有了更深入的了解。
我认识到,c语言实验是非常注意书写的正确性和逻辑的严密性,实验过程本身就在考验一个人细心及耐心程度,还有对所学知识的熟练程度。
这对我来说是非常重要的方面。
这次试验也让我知道在c语言中,条理清晰的流程是很重要的,它包含你编写程序的大致方向,是你在编程过程中不会走错路,也不会太盲目。
严谨认真的态度也不可或缺。
实验中常常会遇到许多问题,c语言有自己解决问题的方法:
找语法错误,找逻辑错误,调试等等,有时需要从整个程序方面考虑,这就需要调试经验。
在实验中,遇到问题要想方设法将它解决,看书找资料,请教同学,及同学讨论,都是很好的途径。
C课设的学习虽然短暂,却使我获益匪浅,相信这些收获会对我以后的学习有很大帮助。
源代码
#defineM40
#include
#include
#include
/*全部功能*/
voidwelcome();//欢迎界面
intdengji();//登记入住
intlookfor_room();//查询房间入住情况
intlookfor_price();//查询当前费用
inttuifang();//结账退房
intfind();//找入住人数
longh_calculate();//按小时计费
longd_calculate();//按天计费
intper_infor();//个人信息
voidyingzhifu();//结账付款
intquit();//退出函数
/*创建结构体date,记录入住和结账时间*/
structdate
{intmon;
intday;
inthour;
};
/*创建结构体hotel,包括房间号、房间种类、入住客户信息、身份证号、按日收费价格
按小时收费价格、入住时间、是否处于入住状态、押金等*/
structhotel
{intnum;
intkind;/*房间种类1-单人间2-双人间*/
charname[20];
charID[19];
inth_money;
intd_money;
structdatetime;
intflag;/*flag含义0-无人入住1-按小时入住2-按天入住*/
intdeposit;
}room[M];
/*找入住人数*/
intfind()
{intcount=0,i;
for(i=0;i if(room[i].flag! =0) count++; returncount; } /*按小时计费*/ longh_calculate(structdateend,structdatestart,intmoney) {longfee; inta,b; a=end.hour-start.hour;//计算小时 b=end.day-start.day;//计算天数 if(a<0) {a=a+24; b=b-1; } fee=(a+b*24)*money;//计算费用 returnfee; } /*按天计费*/ longd_calculate(structdateend,structdatestart,intmoney) {longfee; inta,b; a=end.hour-start.hour;//计算小时 b=end.day-start.day;//计算天数 if(a>=8)fee=(b+1)*money;//如果小时数大于8,则算为一天 elseif(a>=0)fee=b*money;//如果小时数大于0而小于8,则不计算小时 else{a=a+24;//如果小时数小于0,则小时数加24,天数减一,重新计算 b=b-1; if(a>=8)fee=(b+1)*money; elsefee=b*money; } returnfee;//有返回值 } /*个人信息*/ intper_infor(intk) {charzhonglei[30],fangshi[30]; switch(room[k].flag) {case1: strcpy(fangshi,"按小时计费");break; case2: strcpy(fangshi,"按天计费");break; default: break; } switch(room[k].kind) {case1: strcpy(zhonglei,"单人间");break; case2: strcpy(zhonglei,"双人间");break; } printf("\n\n\t\t----姓名: ");puts(room[k].name);printf("\n\n"); printf("\t\t----身份证号: ");puts(room[k].ID);printf("\n\n"); printf("\t\t----房间种类: ");puts(zhonglei);printf("\n\n"); printf("\t\t----房间号: ");printf("%d",k+1);printf("\n\n"); printf("\t\t----计费方式: ");puts(fangshi);printf("\n\n"); printf("\t\t----押金: ");printf("%d元",room[k].deposit);printf("\n\n"); printf("\t\t----入住时间: "); printf("2010年%d月%d日%d时\n\n",room[k].time.mon,room[k].time.day,room[k].time.hour); return(0); } /*最后收费*/ voidyingzhifu(longmoney,intdep) {longdif=(long)dep-money; if(dif==0)printf("押金余总费用相等"); elseif(dif>0)printf("酒店应找还顾客%ld元",dif); elseprintf("顾客应再支付%ld元",dif*(-1)); } /*退出函数,返回主函数*/ intquit() {intz; printf("返回欢迎界面吗? 1-是2-否\n\n"); scanf("%d",&z); if(z==1) return (1); elseprintf("******谢谢惠顾******! \n\n"); exit(0); } /*主菜单*/ voidwelcome() {intn=find(); printf("************************************************************************"); printf("\n\n\t\t----------欢迎来到爱华酒店----------\n\n"); printf("\t\t(((1.登记入住)))\n\n"); printf("\t\t(((2.查询房间入住情况)))\n\n"); printf("\t\t(((3.查询当前费用)))\n\n"); printf("\t\t(((4.结账退房)))\n\n"); printf("\t\t(((5.退出系统)))\n\n"); printf("\t\004总房间数: %-3d\004入住人数: %-3d\004空房间数: %-3d",M,n,M-n); printf("\n\n*************************************************************************\n\n"); printf("\t\t\t--请选择您所需的服务: "); } /*登记入住功能*/ intdengji() {inti,j,k,yajin,s,a,n; charch,fangshi[30]; printf("\n\n--------登记入住--------\n\n"); if(find()==M)//入住人数及房间总数相等 {printf("当前房间已满,是否返回(Y/N): "); ch=getchar(); if(ch=='y')return (1);//返回主菜单 elseexit(0); } printf("请选择房间类型: \n\n"); printf("1.单人间2.双人间\n\n"); printf("\001"); scanf("%d",&n); printf("可供您选择的房间有: \n\n"); for(i=20*(n-1)+1,j=0;i<20*n+1;i++) if(room[i-1].flag==0) {printf("%d\t",i); j=j+1; if(j%5==0)printf("\n\n"); } printf("请输入您准备入住的房间号: ");//房间号k--room[k-1] scanf("%d",&k); room[k-1].kind=n; room[k-1].num=k; printf("\n\n请选择您的计费方式: (1.按小时收费为%d元/时--2.按天计费为%d元/分)",k,room[k-1].h_money,room[k-1].d_money); printf("----"); scanf("%d",&s); while(s! =1&&s! =2) {printf("输入有误,请重新输入: "); scanf("%d",&s); } if(s==1)room[k-1].flag=1; elseroom[k-1].flag=2; printf("\n\n请输入您的姓名: ");scanf("%s",room[k-1].name); printf("\n\n请输入您的身份证号: ");scanf("%s",room[k-1].ID); switch(n) {case1: yajin=25;break; case2: yajin=50;break; } printf("\n\n您应当缴纳的押金金额为%d元",yajin); printf("\n\n请输入您实际缴纳的押金金额: "); scanf("%d",&room[k-1].deposit); while(room[k-1].deposit<0) {printf("\t\t\n\n! 输入有误,请重新输入! \n\n"); printf("\n\n请输入您实际缴纳的押金金额: "); scanf("%d",&room[k-1].deposit); } printf("\n\n请输入是否入住(1.是2.否): "); scanf("%d",&a); while(a! =1&&a! =2){printf("\n\n\t\t输入有误,请重新输入: "); scanf("%d",&a);} if(a==1){printf("\n\n请输入您的入住时间: "); scanf("%d月%d日%d时",&room[k-1].time.mon,&room[k-1].time.day,&room[k-1].time.hour); switch(room[k-1].flag) {case1: strcpy(fangshi,"按小时计费");break; case2: strcpy(fangshi,"按天计费");break; default: break; } printf("\n\n您选择的计费方式为----%s",fangshi); printf("\n\n您已成功登记! \n\n"); }quit(); } /*查询房间入住函数*/ intlookfor_room() {inti,j,k,s; structdatetim_t; chara[20]; printf("\n\n----------查询房间入住----------\n\n"); printf("\t\t1.按房号查询\n\n\t\t2.按客户信息查询\n\n\t\t3.按入住时间查询\n\n\t\t4.退出"); printf("\n\n请选择: "); scanf("%d",&i); while (1) {if(i>5||i<1){printf("\n\n\t\t输入有误,请重新输入: "); scanf("%d",&i);} elseif(i==1){printf("\n\n请输入房间号: ");//按房号查询 scanf("%d",&j); if(room[j-1].flag==0)printf("\n\n此房间无人住\n\n"); else{printf("您的个人信息为: "); per_infor(j-1);}break; } elseif(i==2){printf("\n\n请输入您的身份证号: ");//按客户信息查询 scanf("%s",a); while (1) {for(k=0;k if(strcmp(a,room[k].ID)==0)break; if(k! =M) {printf("\n\n您的个人信息为: "); per_infor(k);break; } else{printf("\t\t\n\n1.输入有误,请重新输入2.不存在此人信息,退出\n\n"); scanf("%d",&s); if(s==1){printf("\n\n请输入您的身份证号: "); scanf("%s",a);} elsereturn (1);}}break;} elseif(i==3) {printf("\n\n请输入入住时间: "); scanf("%d月%d日",&tim_t.mon,&tim_t.day); for(k=0;k if(tim_t.mon==room[k].time.mon&&tim_t.day==room[k].time.day)break;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 总体 设计