住宿结帐管理系统.docx
住宿结帐管理系统-C语言课程 设计C语言课程设计设计题目住宿结帐管理系统专业计算机科学与技术、软件工程班级 计053、软件051、软件052学 生郭凌瑞张亮 方宇指导教师王晓帆2005-2006 年 2 学期设计任务:试设计一个住宿结帐管理系统,住宿结帐管理信息包 括:顾客姓名、入住时间、住宿房间、顾客数量、每日价格、住 宿天数、折扣率、实收金额。系统包括以下功能:住宿信息的录 入、修改、删除功能;住宿信息的排序、浏览功能;按住宿天数 查询、按住宿房间号码查询;住宿信息的统计:总人数、总收入、 空房数。建议:一人负责信息的录入、修改、删除;一人负责文件的 读取与写入操作;一人负责排序、查询。教师评语:目录1、试验目的及内容32、系统总体模块图33、小组任务分工44、子系统设计方案4(1)信息的录入、修改、删除;4(2)文件的读取与写入、统计、主函数;4(3)信息的排序、浏览、查询;45、子系统主要程序流程图4(1)信息读取模块流程图5(2)信息修改模块流程图6(3)信息修改模块流程图7(4)按住宿时间查询模块流程图8(5)按房间号码查询模块流程图96、个人设计小结与心得体会10117、小组设计总结8、系统源代码12试验目的:(1) 加深对C语言的理解,将在书本上掌握的知识点运用到实际的系统编程中去,为以后的学习打下基础。(2) 通过简单的系统设计,增强面对复杂问题的处理能力,为以后实际中解决问题打下基础。实验内容:试设计一个住宿结帐管理系统,住宿结帐管理信息包 括:顾客姓名、入住时间、住宿房间、顾客数量、每 日价格、住宿天数、折扣率、实收金额。系统包括以 下功能:住宿信息的录入修改、删除功能;住宿信息 的排序浏览功能;按住宿天数查询、按住宿房间号码 查询;住宿信息的统计:总人数、总收入、空房数。系统总体模块图:住宿结帐管理系统主程序模块1模块数浏览模 一信息统计 模块信息保存按住宿天数排序模一按房间号小组任务分工(1) 由郭凌瑞负责住宿信息的录入、修改、删除功能;(2) 由张亮负责文件的读取与写入操作,统计及主函数;(3) 由方宇负责排序、浏览、查询功能;子系统设计方案:(1)信息的录入、修改、删除;信息的录入、修改与删除通过对信息的标 志的判断与修改,执行信息录入的地址、修 改的目标及删除功能的实现。(2)文件的读取与写入、统计、主函数;文件的读取与写入可用已知的库函数来 完成,统计工作可由已有信息通过计算获得, 主函数可由swith语句来达到菜单选折功能的 目的。信息的排序、浏览、查询;排序功能可通过冒泡法来实现,浏览实现排序然 后显示即可,查询时,根据“=”来达到找到匹配信 息的目的。子N为所有房间数,NN为非空房间数信息读取模块流程图C开始0=>i+1i=信息修改模块流程图C 开始->+/输出所有/t/ 输入修改/输入修改i=结束信息删除模块流程图入 个/+/输出所有输入_个7t/输入要删/0=>i,N未找到要删./输入删除/C结束按住宿时间查询模块c开始::I/输出所有/输入要查询的0=>i,未找到要查按房间号码查询模块/输出所有/输入要查询未找到要查个人设计小结及心得体会:(1)在我设计的子系统部分,包含很多细节问题,如果稍有 不慎,往往导致模块无法运行,在设计中念尝试了很多方 法,对思维能力有了很大锻炼,提高了解决复杂问题的能力,同时,也很大程度上锻炼了耐心,做到不急不弃是系统最终成功的保证。I计053郭凌瑞(2)我的工作比较简单,但在书写代码时,发现了自己的问 题:文件无法顺利操作!文件是很重要的一个知识点,很 兴庆在这次实践中我及时弥补了以前的缺憾,为以后的继 续学习和面对复杂问题打下了坚实的基础,问题在实践中 才能被更好地发现和解决,在今后的学习中要更加重视实 践的作用!软051 张亮(3)在我设计的模块中,主要是对已有信息的处理,对排 序算法有了一个新的认识,从深层次理解了排序函数的思 想,突破了以前是似而非的局限。查询模块的书写,注意了 很多细节,使模块在整体上有了很大优化,给了用户一个人 性化的界面。软052 方宇小组设计总结:本次课程设计,我们做了一个简单管理系统,系统的功能 较以前的小程序有了很大加强,对个人及团队的能力有了更大的 要求,事实上,在本次课设中的确出现了很多以前没有遇到的问 题,这是一次自我提高的过程,从中我们弥补了以前遗漏的很多 东西,使自己的知识结构更加完善和牢固;同时,这也是一次实 践的机会,是增加面对复杂问题处理经验的机会,对以后做一些 比较大的系统有一定的借鉴。在本次试验的整个过程中,组员之间的合作起到了很大作用,共同解决了很多关键性难题,最终, 在我们的共同努力下,我们的第一个系统正常运行了,巨大成就 感促使我们有一种挑战更高目标的欲望!#include<stdio.h>#include<string.h>总房间数/非空房间数/入住时间顾客信息列表用来标志该顾客信息是否存在#define N 3int NN=0;类定义区struct Dateint year;int month;int day;struct Payrollint flang;char Name15;Date date;int Rome;int Number;int Price;int Days;float Discountrate;float Money;/子函数声名区void Imput(Payroll P,FILE *fp);void Read(Payroll P,FILE *fp);void Save(Payroll P,FILE *fp);void Reput(Payroll P,FILE *fp);void Delete(Payroll P,FILE *fp);void Stat(Payroll P,FILE *fp);void Timeread(Payroll P,FILE *fp);void Romenumber(Payroll P,FILE *fp);void Time(Payroll P,FILE *fp);void Rome(Payroll P,FILE *fp);void DAY(Payroll P,FILE *fp);void ROME(Payroll P,FILE *fp);/以下为主函数void main()FILE *fp;struct Payroll PN;fp=fopen("accout.dat”,"ab+");int select;Read(P,fp);顾客姓名 /入住时间 房间号顾客数量 每日价格 住宿天数/折扣率 实收金额结帐信息的录入结账信息的读取信息保存为文件结账信息的修改结账信息的删除信息统计按住宿天数浏览按住宿房间浏览按住宿天数查询按住宿房间查询按住宿天数排序/按房间号码排序从文件中读取结账信息printf("* 住宿结账管理系统 *nn") printf("欢迎使用本系统!nn");printf("=菜单=n""请选择:n""1-添加新信息n”"2-修改信息n""3删除信息n”"4-统计信息n”"5按住宿天数浏览n""6按住宿天数查询n""7按放房间号码浏览n""8按房间号码查询n""9退出 n");scanf("%d",&select);while(select!=9)switch(select)case 1:Imput(P,fp);break;case 2:Reput(P,fp);break;case 3:Delete(P,fp);break;case 4:Stat(P,fp);break;case 5:Timeread(P,fp);break;case 6:Time(P,fp);break;case 7:Romenumber(P,fp);break;case 8:Rome(P,fp);break;printf("nn");printf("请选择要进行的操作:n""1-添加新信息n""2修改信息n”"3删除信息n”"4-统计信息n”"5按住宿天数浏览n""6按住宿天数查询n""7按放房间号码浏览n"/没有退出本系统时,循环提示操作信息录入修改信息删除信息统计信息按住宿天数浏览按住宿天数查询/按放房间号码浏览按房间号码查询每完成一次操作选折下一次操作"8按房间号码查询n"9退出 n");scanf("%d",&select); Save(P,fp);/将本次系统运行结果保存为文件printf("谢谢使用,再见!n”); /子函数定义区 void Imput(Payroll P,FILE *fp)结帐信息的录入 int i; char ch; printf("姓名入住时间房间顾客数量每日价格住宿天数折扣率n"); printf("=n"); for(i=0;i<N;i+) if(Pi.flang!=1)/避免覆盖已有信息 scanf("%s%d%d%d%d%d%d%d%f",Pi.Name,&Pi.date.year, &Pi.date.month,&Pi.date.day,&Pi.Rome,&Pi.Numb er, &Pi.Price,&Pi.Days,&Pi.Discountrate); Pi.flang=1;标示已存信息NN+; Pi.Money=Pi.Days*Pi.Discountrate*Pi.Price; if(i=N-1) break; printf("是否继续录入?(y or n) "); getchar(); ch=getchar(); if(ch!='n') printf("姓名入住时间房间顾客数量每日价格住宿天数折扣率n"); printf("=n"); else break;printf("抱歉,所有房间已满!nn");void Save(Payroll P,FILE *fp)信息保存为文件int i;for(i=0;i<N;i+)if(Pi.flang=1)fwrite(&Pi,sizeof(struct Payroll),1,fp);fclose(fp);void Read(Payroll P,FILE *fp)结账信息的读取int i;for(i=0;i<N;i+)fread(&Pi,sizeof(struct Payroll),1,fp);void Reput(Payroll P,FILE *fp)结账信息的修改int i;int n,j=NN;char ch;printf (-姓名住宿时间 房间 顾客数量 每日价格 住宿天数折扣率实收 金额n");printf("=n");for(i=0;i<N;i+)if(Pi.flang=1)printf("%8s%6d%3d%3d%10d%8d%8d%8d%8.2f%8.2fn”,Pi.Name,Pi.date.year,Pi.date.month,Pi.date.day,Pi.Rome,Pi.Numbe r,Pi.Price,Pi.Days,Pi.Discountrate,Pi.Money);printf(-请输入要修改的房间号(输入零结束修改!):n");scanf("%d",&n);while(n!=0)for(i=0;i<N;i+)(if(Pi.flang=1)(if(Pi.Rome=n)printf("确认要修改吗? (y or n) ");getchar();ch=getchar();if(ch='y')printf (-请重新输入该信息:n");printf(-姓名入住时间房间顾客数量每日价格住宿天数折扣率n");printf("=n");scanf("%s%d%d%d%d%d%d%d%f”,Pi.Name,&Pi.date.year,&Pi.date.month,&Pi.date.day, &Pi.Rome,&Pi.Number,&Pi.Price, &Pi.Days,&Pi.Discountrate);Pi.Money=Pi.Days*Pi.Discountrate*Pi.Price;elsecontinue;elsej-;elsecontinue;if(j=0)printf(-没有找到要修改的内容!请确认后再输入! n");printf(-请输入要修改的房间号(输入零结束修改!): n"); scanf("%d",&n);void Delete(Payroll P,FILE *fp)住宿信息的删除int i,n;int k=NN,j=NN;int NO=NN;char ch;printf(- 姓名入住时间房间顾客数量每日价格住宿天数折扣率实收金额n");printf("= =n");for(i=0;i<N;i+)if(Pi.flang=1)printf("%8s%6d%3d%3d%10d%6d%8d%8d%8.2f%8.2fn",Pi.Name,Pi.date.year,Pi.date.month,Pi.date.day,Pi.Rome,Pi.Number,Pi.Price,Pi.Days,Pi.Discountrate,Pi.Money);printf(-请输入要删除的房间号(输入零结束删除!):n");scanf("%d",&n);while(n!=0)for(i=0;i<N;i+)if(Pi.flang=1)if(Pi.Rome=n)printf("确认要删除吗? (y or n) ”);getchar();ch=getchar();if(ch='y')if(k=1)/此时删除所有住宿信息for(i=0;i<N;i+)Pi.flang=0;NO-;Pi.flang=0;删除该项内容k-;elsecontinue;elsej-;if(k=0)break;if(j=0)printf(-没有找到要删除的内容,请确认! n");printf(-请输入要删除的房间号(输入零结束删除!):n"); scanf("%d",&n);NN=NO;void Timeread(Payroll P,FILE *fp)按天数浏览int i;/Read(P,fp);DAY(P,fp);printf (-姓名入住时间房间顾客数量每日价格住宿天数折扣率实收金额n");printf("= =n");for(i=0;i<N;i+)if(Pi.flang=1)printf("%8s%6d%3d%3d%10d%6d%8d%8d%8.2f%8.2fn”,Pi.Name,Pi.date.year,Pi.date.month,Pi.date.day, Pi.Rome,Pi.Number,Pi.Price,Pi.Days, Pi.Discountrate,Pi.Money);printf("nn");void Romenumber(Payroll P,FILE *fp)按住宿房间浏览int i,j=NN;ROME(P,fp);printf(- 姓名入住时间房间顾客数量每日价格住宿天数折扣率实收金额n");printf("= =n");for(i=0;i<N;i+)if(Pi.flang=1)printf("%8s%6d%3d%3d%8d%6d%8d%8d%8.2f%8.2fn”,Pi.Name,Pi.date.year,Pi.date.month,Pi.date.day, Pi.Rome,Pi.Number,Pi.Price,Pi.Days,Pi.Discountrate,Pi.Money);printf("nn");void Stat(Payroll P,FILE *fp)信息统计int i,n=N;int Sumperson=0;总人数float Sum=0;/总收入struct Payroll t;/Read(P,fp);for(i=0;i<N;i+)if(Pi.flang=1)Sumperson+=Pi.Number;Sum+=Pi.Money;n-;printf("入住总人数:%dn空房数:%dn总收入:.2fnnn”,Sumperson,n,Sum);按住宿时间查询void Time(Payroll P,FILE *fp) Date time;int i,j=NN;/ Read(P,fp);printf(-请输入要查询的日期(年、月、日):n");scanf("%d%d%d",&time.year,&time.month,&time.day);printf (- 姓名入住时间房间顾客数量每日价格住宿天数折扣率实收金额n");printf("= =n");for(i=0;i<NN;i+)if(Pi.flang=1)if(Pi.date.year=time.year&&Pi.date.month=time.month&&Pi.date.day=time.day)printf("%8s%6d%3d%3d%10d%6d%8d%8d%8.2f%8.2fn",Pi.Name,Pi.date.year,Pi.date.month,Pi.date.day, Pi.Rome,Pi.Number,Pi.Price,Pi.Days,Pi.Discountrate,Pi.Money);elsej-;if(j=0)printf("没有找到要查询的内容,请确认! n");void Rome(Payroll P,FILE *fp)/按住宿房间号码查询int no,i;int j=NN;printf(-请输入要查询的房间号码:n");scanf("%d",&no);printf(-姓名入住时间房间顾客数量每日价格住宿天数折扣率实收金额n");printf("= =n");for(i=0;i<NN;i+)if(Pi.flang=1)if(Pi.Rome=no)printf("%8s%6d%3d%3d%10d%8d%10d%8d%8.2f%8.2fn”,Pi.Name,Pi.date.year,Pi.date.month,Pi.date.day,Pi.Rome,Pi.Number,Pi.Price,Pi.Days,Pi.Discountrate,Pi.Money);elsej-;if(j=0)printf("没有找到要查询的内容,请确认! n");void DAY(Payroll P,FILE *fp)按住宿天数排序int i,j,k;采用冒泡法进行struct Payroll t;for(i=0;i<N-1;i+)if(Pi.flang=1)k=i;for(j=i+1;j<N;j+)if(Pk.Days<Pj.Days)k=j;if(k!=j)t=Pi;Pi=Pk;Pk=t;void ROME(Payroll P,FILE *fp)按住宿房间号码排序int i,j,k;/采用冒泡法进行struct Payroll t;for(i=0;i<N-1;i+)if(Pi.flang=1)k=i;for(j=i+1;j<N;j+)if(Pk.Rome<Pj.Rome)k=j;if(k!=j)t=Pi;Pi=Pk;Pk=t;