1、目录一、题目规定(3)二、需求分析(3)三、 总体设计(4)四、 具体设计(5)1、 主函数main(5)2、 主菜单函数 menu(6)3、 登录模板enter(8)4、 记录模板count(10)5、 查询模板search(12)6、 修改模板modify(14)7、 离开模板leave(16)五、运营结果(19)六、总程序七、总结(30)一、 题目规定规定编写一个旅馆客房管理系统,系统涉及新用户登录功能、记录功能、查询功能、修改功能。建立如下结构体:struct Clientchar name20; int sex; int age; char ID_card20;/身份证号码; int
2、 year; int month; int date;/居住时间; ;struct Hotel int room_ID;/房间号; int tel; int price; int sign;/标记房间是否为空; struct Client Client_list;/实现结构体的嵌套; sumN;二、需求分析根据题目规定,房间信息数据存放在一个文本文献中;通过文献的输入和输出来实现新用户登录、记录、查询、修改等各项功能;且各项功能能独立完毕,不受其它工程是否完毕的影响;程序中应设有主菜单函数,通过主菜单函数可以调用各个功能函数,各个功能函数操作完毕后可以回到主菜单,等待下一个操作;还应设有菜单选
3、项,能通过键盘操作实现选择;同时,应有通道退出程序;三、总体设计通过度析,整个系统应涉及以几个模板:登录模板enter、记录模板count、查询模板search、修改模板modify、离开模板leave、退出。系统功能模块图客房管理系统记录模板count查询模板search修改模板modify离开模板leave退出登录模板enter主菜单函数menu四、具体设计1、 主函数main通过主函数,可以实现数据赋初值,函数的原形声明,为以后的操作做准备。流程图N变量i加1YNY变量i加1YNYNY是否新建数据库数据赋初值用fwrite向文献写入数据新建file.txt是否成功读取file.txt是否
4、成功输犯错误信息输犯错误信息NNY用fread从文献读入数据判断是否读完判断是否写完变量i加1判断i是否小于房间数NY判断房间是否有人Left-调用住菜单函数menu关闭文献进入系统程序main()int i;char c;FILE *fp;void menu();void enter();void count();void search();void modify();void leave();printf(nnnnt-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-);printf(nnnttWelcome to the
5、systerm of hotel management!nnn);printf(t-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-nnn);printf(ttAre you going to new the file:(y/n)tI choose bb); scanf(%c,&c);if(c=y) for(i=0;iN;i+) sumi.room_ID=i+1; sumi.tel=800+i; sumi.price=100; sumi.sign=0; if(fp=fopen(file.txt,w)=NULL) printf(
6、nCan not open the file!n);exit(0); for(i=0;iN;i+) fwrite(&sumi,sizeof(struct Hotel),1,fp); else if(fp=fopen(file.txt,r)=NULL) printf(nCan not open the file!n);exit(0); for(i=0;iN;i+) fread(&sumi,sizeof(struct Hotel),1,fp); for(i=0;iN;i+) if(sumi.sign) left-; fclose(fp);menu();2、 主菜单函数menu为了使系统执行完没部分
7、功能模快后能通过调用函数方便的返回到系统界面,设次函数。同只这个函数中能设立了各个功能的入口。流程图YN显示一系列的功能选项输入n,判断n是否1-6之内调用enter函数调用count函数调用search函数调用modify函数调用leave函数退出程序void menu()int n,a;do printf(nnnnt*MENU*nn); printf(tttt1.New customern); printf(tttt2.Count roomsn); printf(tttt3.Search roomn); printf(tttt4.Modify customern); printf(tttt
8、5.Leaven); printf(tttt6.Exitnn);printf(t*nn); printf(You choose number(1-6) bb); scanf(%d,&n); if(n6)a=1; printf(nWrong number!nnPrint any key to continue .n); getch(); else a=0; while(a=1); switch(n)case 1:enter();break; case 2:count();break; case 3:search();break; case 4:modify();break; case 5:lea
9、ve();break; case 6:exit(0);break; 3、 登录模板enter此模块用于新用户的登录,在此模块中规定输入新用户的姓名、性别,年龄,身份证号,入住时间。并将数据存入名为file.txt的文献中。流程图NYNYYNNNY打开file.txt文献是否成功开始输犯错误信息从文献中读如数据输入想租用的房间号e判断e是否在1-N之内判断n房间是否被占用Y输入新用户信息是否保存输犯错误房间号输出该房间以被占用向文献输出数据输出保存成功,并输出结果,left-是否还需要房间调用主菜单函数程序void enter() FILE *fp; char c; int i,t=0; int
10、 e; clrscr(); do if(fp=fopen(file.txt,r)=NULL) printf(nCan not open the file!n);exit(0); for(i=0;i=1&e=N) e-; if(sume.sign=0) printf(nPlease input your name:); scanf(%s,sume.Client_list.name); printf(ntsex:(1 stands for F,2stands for M); scanf(nt%d,&sume.Client_list.sex); printf(ntage:); scanf(%d,&s
11、ume.Client_list.age); printf(ntID_card:); scanf(%s,sume.Client_list.ID_card); printf(ntdate(year month date):); scanf(%d%d%d,&sume.Client_list.year,&sume.Client_list.month,&sume.Client_list.date); printf(nThis is the data you just input:n);printf(%st%dt%dt%s,sume.Client_list.name,sume.Client_list.se
12、x,sume.Client_list.age,sume.Client_list.ID_card);printf(t%d.%d.%d,sume.Client_list.year,sume.Client_list.month,sume.Client_list.date); printf(ntSave?(y/n):); c=getchar();c=getchar(); if(c=y) sume.sign=1; left-; if(fp=fopen(file.txt,w)=NULL) printf(nCan not open the file!n);exit(0); for(i=0;iN;i+) fw
13、rite(&sumi,sizeof(struct Hotel),1,fp); printf(nSuccessful!n);printf(Your room number: %dnttel: %dntprice: %d ,sume.room_ID,sume.tel,sume.price); fclose(fp); else printf(nSorry!This room has been taken!nn); else printf(nWrong number!n);printf(nnttttAgain?(y/n):);getchar();c=getchar();if(c=y) t=1;else
14、 t=0; while(t=1); printf(Print any key to continue .n); getch();menu();4、 记录模板count此部分用于对客房数据进行记录管理。涉及客房占用情况,占用人的各项数据,总房间数,客房剩余数。应输出所有房间的情况,以便进行记录。流程图NNYYNY开始打开file.txt文献是否成功输犯错误信息从文献中读如数据输出房间数及剩余房间数i是否小于N输出用户及房间信息输出数据组数是否为5的倍数从外界得到任意一个字符关闭文献调用主菜单函数程序void count()FILE *fp;int i,j;if(fp=fopen(file.txt
15、,r)=NULL)printf(nCan not open the file!n);exit(0);for(i=0;iN;i+)fread(&sumi,sizeof(struct Hotel),1,fp);printf(Room %dntname:%sntsex:%d (1 stand for female,2 stand for male)ntage:%dntID_card:%s,i+1,sumi.Client_list.name,sumi.Client_list.sex,sumi.Client_list.age,sumi.Client_list.ID_card);printf(nttime
16、:%d.%d.%dn,sumi.Client_list.year,sumi.Client_list.month,sumi.Client_list.date);if(sumi.sign)printf(tttTaken!n);else printf(tttUntaken!n);if(i%3=2) printf(nnPrint any key to next page!n); getch(); printf(nEnd!nn); printf(There are %d rooms with %d empty.n,N,left);fclose(fp);printf(Print any key to co
17、ntinue .n);getch();menu();5、 查询模板search此部分用于客户对某一客房进行查询,涉及房间占用情况,客户信息,房间的各种数据。流程图YNYYNNYN开始输入房间号nn是否大于0小于N打开file.txt文献是否成功输犯错误信息从文献中读入数据输出指定客房的信息判断是否被占用输出已经被占用判断是否想租用调用enter函数调用主菜单函数程序void search()int n,i,a;FILE *fp;char c;printf(Which room are you going to search?(1-%d):Room bb,N);do scanf(%d,&n);
18、if(nN) a=1; printf(nWrong number!ntPlease input again:(1-%d),Room bb,N); else a=0; while(a=1); if(fp=fopen(file.txt,r)=NULL) printf(nCan not open the file!n); exit(0); for(i=0;iN;i+) fread(&sumi,sizeof(struct Hotel),1,fp); printf(Room %dntname:%sntsex:%d (1 stand for female,2 stand for male)ntage:%d
19、ntID_card:%snttime:%d.%d.%dn,n,sumn-1.Client_list.name,sumn-1.Client_list.sex,sumn-1.Client_list.age,sumn-1.Client_list.ID_card,sumn-1.Client_list.year,sumn-1.Client_list.month,sumn-1.Client_list.date); printf(This rooms telephone number:%dntttprice:%dnt,sumn-1.tel,sumn-1.price); if(sumn-1.sign) pri
20、ntf(nHas been taken!nn); else printf(ntEmpty!tAre you going to rent it?(y/n) bb); c=getchar(); c=getchar(); printf(n); if(c=y) enter(); fclose(fp);printf(Print any key to continue .n);getch();menu();6、 修改模板modify此部分用于修改客户及客房各项信息,涉及客户的姓名、年龄、性别、身份证号码、入住时间,客房的电话号码,价格等。流程图NYNYYNYN输入房间号nn是否大于0小于N打开file.t
21、xt文献是否成功输犯错误信息从文献中读入数据开始输入拟修改选项t输入新姓名输入新性别输入新年龄输入新身份证号输入新日期输入新电话号码输入新价格放弃保存数据是否继续判断t是否大于0小于N134567182调用主菜单函数程序void modify()int i,n,t,a;char c;FILE *fp;struct Hotel sumN;printf(Which room are you going to modify:(1-%d)Room bb,N);scanf(%d,&n);n-;if(fp=fopen(file.txt,r)=NULL)printf(nCan not open the fi
22、le!n);exit(0);for(i=0;iN;i+) fread(&sumi,sizeof(struct Hotel),1,fp); do printf(Which part are you going to modify:nn);printf(nttt1.namenttt2.sexnttt3.agenttt4.ID_cardnttt5.datenttt6.telnttt7.pricenttt8.give upnnn); do printf(nI choose bb); scanf(%d,&t); if(t8) a=1; printf(nWrong number!ntPlease inpu
23、t again:(1-%d),Room bb,N); else a=0; while(a=1); switch(t) case 1:printf(nThe former name is %s.Please input new name:,sumn.Client_list.name); scanf(%s,sumn.Client_list.name);break; case 2:printf(nThe former sex is %d.Please input new sex:,sumn.Client_list.sex); scanf(%s,&sumn.Client_list.sex);break
24、; case 3:printf(nThe former age is %d.Please input new age:,sumn.Client_list.age); scanf(%s,&sumn.Client_list.age);break; case 4:printf(nThe former ID_card is %s.Please input new ID_card:,sumn.Client_list.ID_card); scanf(%s,sumn.Client_list.ID_card);break; case 5:printf(nThe former time is %d.%d.%d.
25、Please input new date:(year month date),sumn.Client_list.year,sumn.Client_list.month,sumn.Client_list.date);scanf(%s,&sumn.Client_list.year,&sumn.Client_list.month,&sumn.Client_list.date);break; case 6:printf(nThe former tel is %d .Please input new tel:,sumi.tel); scanf(%d,&sumn.tel); case 7:printf(
26、nThe former price is %d.Please input new price:,sumi.price); scanf(%d,&sumi.price); case 8:menu(); fclose(fp); if(fp=fopen(file.txt,w)=NULL)printf(nCan not open the file!n);exit(0); for(i=0;iN;i+) fwrite(&sumi,sizeof(struct Hotel),1,fp); printf(ntSuccessfull!n); printf(nModify other?(y/n) bb); getch
27、ar(); c=getchar(); while(c=y); fclose(fp); printf(nPrint any key to continue .n); getch(); menu();7、 离开模板leave此部分用于客户离开时删除其数据。在次部分程序中需要房间数据恢复到初始状态。流程图NYNYYYNYNYN输入房间号nn是否大于0小于N打开file.txt文献是否成功输犯错误信息从文献中读入数据开始该房间是否被占用客房是否都为空输出房间信息拟定离开输入当前日期输出所需付租金将数据置为原始值,left+保存数据,关闭文献输出所有房间都为空调用主菜单函数程序void leave()F
28、ILE *fp;char c;int t=0,p,i,n,year,month,date;if(fp=fopen(file.txt,r)=NULL)printf(nCan not open the file!n);exit(0);for(i=0;iN;i+)fread(&sumi,sizeof(struct Hotel),1,fp); if(sumi.sign) t=1;if(t=1) dop=0; printf(Please input your room number:(1-%d)Room bb,N); scanf(%d,&n); if(nN) p=1,printf(nWrong numb
29、er!n); else if(sumn-1.sign=0) printf(nnThis room has not been taken!nnPlease input again!n);while(p=1|sumn-1.sign=0); printf(This is your information:n);printf(name:%snsex:%dnage:%dnID_card%sn,sumn-1.Client_list.name,sumn-1.Client_list.sex,sumn-1.Client_list.age,sumn-1.Client_list.ID_card);printf(en
30、tertime:%d.%d.%dn,sumn-1.Client_list.year,sumn-1.Client_list.month,sumn-1.Client_list.date);printf(nnAre you sure to leave?(y/n):); getchar(); c=getchar(); if(c=y) printf(nInput the time now:); scanf(%d%d%d,&year,&month,&date); printf(You shoud pay:%d,sumn-1.price*(year-sumn-1.Client_list.year)*365+
31、(month-sumn-1.Client_list.month)*30+date-sumn-1.Client_list.date); left+; sumn-1.sign=0; strcpy(sumn-1.Client_list.name,); sumn-1.Client_list.age=0; sumn-1.Client_list.sex=0; strcpy(sumn-1.Client_list.ID_card, ); sumn-1.Client_list.year=0; sumn-1.Client_list.month=0; sumn-1.Client_list.date=0; fclos
32、e(fp); if(fp=fopen(file.txt,w)=NULL) printf(nCan not open the file!n);exit(0); for(i=0;iN;i+) fwrite(&sumi,sizeof(struct Hotel),1,fp); fclose(fp); printf(nntSuccessfull!n); else printf(nSorry!All the room is empty.n);printf(nnPrint any key to contimue .n);getch();menu();五、 运营结果程序启动界面说明:当初次新建数据时选择“y”
33、,再次进入时选择“n”。新用户登录界面记录模块(说明:每次显示三个用户)记录结果(说明:最后显示记录结果)查询模板查询模板(说明:可以通过查询租用房间)修改模板离开模板六、 总程序#include#include#define N 10int left=N;struct Client char name20; int sex; int age; char ID_card20; int year; int month; int date; ;struct Hotel int room_ID; int tel; int price; int sign; struct Client Client_l
34、ist; sumN;main()int i;char c;FILE *fp;void menu();void enter();void count();void search();void modify();void leave();printf(nnnnt-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-);printf(nnnttWelcome to the systerm of hotel management!nnn);printf(t-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
35、-*-*-*-*-*-*-*-*-nnn);printf(ttAre you going to new the file:(y/n)tI choose bb); scanf(%c,&c); if(c=y) for(i=0;iN;i+) sumi.room_ID=i+1; sumi.tel=800+i; sumi.price=80; sumi.sign=0; if(fp=fopen(file.txt,w)=NULL) printf(nCan not open the file!n); exit(0); for(i=0;iN;i+) fwrite(&sumi,sizeof(struct Hotel),1,fp); fclose(fp); else if(fp=fopen(file.txt,r)=NULL) printf(nCan not open the file!n);exit(0); for(i=0;iN;i+) fread(&sumi,sizeof(struct Hotel),1,fp); for(i=0;iN;