1、专业课程设计宾馆标准管理系统C语言版中 原 工 学 院软件职业技术学院一级实践环节报告课题名称: 宾馆客房管理系统 专 业: NET软件 班 级: NET104 学 号: 36 学生姓名: 李新辉 指导教师: 罗菁 年 月 日一、题目宾馆客房管理系统二、流程分析宾 馆 客 房 管 理 系 统客房登记客户查询房间查询退房结算房间数选择类型订金客户基本信息登记客房号查询姓名查询空房间查询查询所有客户查询所有房间房间号确定退房日期结算三、源代码#include#include#include#include/将字符转化为小写字母函数#define Z 50 /宾馆的房间数#define AY 800
2、#define BY 600#define CY 300#define AJ 15#define BJ 20#define CJ (Z-AJ-BJ)struct hotleunsigned int num;char dj; /各种等级类型unsigned int money;int fk;/判断房间的空闲状况0为空,为有人roomZ;struct dateint month;int day; ;struct peoplechar name20;char ID15;unsigned int num0;/房间号unsigned int money0;/客人交的订金struct date ru;st
3、ruct date chu;kehuZ;void saveroom();void loadroom();void printroom();void save(int s);void save1(int s);int loadn();void saven(int n);void savekehu2(int t,int m);/录入宾馆房间信息/void luru()int a0,b0,c0;a0=b0=c0=0;int i;for(i=0;iAJ;i+)roomi.num=(a0+)+601);roomi.dj =A;roomi.money =AY;roomi.fk=0;for(i=AJ;i(B
4、J+AJ);i+)roomi.num=(b0+)+501);roomi.dj =B;roomi.money =BY;roomi.fk=0;for(i=(AJ+BJ);iZ;i+)roomi.num=(c0+)+401);roomi.dj =C;roomi.money =CY;roomi.fk=0;saveroom();void saveroom()/储存房间信息FILE *fp;fp=fopen(my hotle.text,wb);for(int i=0;iZ;i+)/if(fwrite(&roomi,sizeof(struct hotle),1,fp)!=1)printf(文件写入失败n);
5、break;fclose(fp);void loadroom()FILE *fp;int i;if(fp=fopen(my hotle.text,rb)=NULL)printf(打开文件失败n);return;for(i=0;iZ;i+)if(fread(&roomi,sizeof(struct hotle),1,fp)!=1)printf(读取文件失败n);break;printf(读取成功!n);fclose(fp);void printroom()/输出各个房间的信息/loadroom();printf(客房号 客房等级 客房价格 客房空闲(为空)n);for(int i=0;iZ;i+
6、)printf(%-18d%-12c%-18d%-15dn,roomi.num,roomi.dj,roomi.money,roomi.fk);/输出各类型空房间的信息/void printkong(char ch)loadroom();int i;switch(ch)case a:printf(A类(豪华套房)空房间信息 客房号 客房价格 n);for(i=0;iAJ;i+)if(roomi.fk=0)printf(ttt%11d%15dn,roomi.num,roomi.money);break;case b:printf(B类(中档套房)空房间信息 客房号 客房价格 n);for(i=AJ
7、;i(AJ+BJ);i+)if(roomi.fk=0)printf(ttt%11d%15dn,roomi.num,roomi.money);break;case c:printf(C类(单人公寓)空房间信息 客房号 客房价格 n);for(i=(AJ+BJ);iZ;i+)if(roomi.fk=0)printf(ttt%11d%15dn,roomi.num,roomi.money);break;/选房间号/unsigned int panduan(unsigned int num1,char ch)int temp;/记录房间号int i;loadroom();for(i=0;iZ;i+)if
8、(roomi.num=num1&(tolower(roomi.dj)=ch)return temp=i;printf(请检查您选择的房间号是否有误!n);return (Z+2);/订房登记/int n;/已订的房间数void dengji()int s;/每次所订的房间数n=loadn();/读取每次文件中已订房间数的值int flag=0;/真假判断char ch;/用来选取房间等级unsigned int money1;/预付金额FILE *fp;unsigned int t;/printf(请输入您要订的房间数n);scanf(%d,&s);dogetchar();/接收输入中的回车p
9、rintf(请选择您所订房间的类型 A(豪华套房) B(中档套房) C(单人公寓)n);ch=getchar();while(!(tolower(ch)=a|tolower(ch)=b|tolower(ch)=c);for(int i=0;iZ)flag=1;elseflag=0;while(flag);/当选择房间错误或者所选房间有人时重新输入。roomt.fk=1;saveroom();/存取房间信息;kehui.num0=num1;doprintf(请交付订金(不得低于房价的倍)n);scanf(%d,&money1);while(money1Z)flag=1;elseflag=0;wh
10、ile(flag);/当选择房间错误或者所选房间有人时重新输入。roomt.fk=1;saveroom();/存取房间信息;kehui.num0=num1;doprintf(请交付订金(不得低于房价的倍)n);scanf(%d,&money1);while(money1Z)flag=1;elseflag=0;while(flag);/当选择房间错误或者所选房间有人时重新输入。roomt.fk=1;saveroom();/存取房间信息;kehui.num0=num1;doprintf(请交付订金(不得低于房价的倍)n);scanf(%d,&money1);while(money1(2*roomt
11、.money);/预付的订金不得低于房间价格的两倍kehui.money0=money1;break;/saveroom();printf(请输入客户的姓名n);getchar();/接收gets(kehui.name);printf(请输入客户的身份证号);gets(kehui.ID);printf(请输入入住日期(月、日)n);scanf(%d%d,&kehui.ru.month,&kehui.ru.day);printf(订房成功,欢迎您的光临n);if(fp=fopen(kehuxinxi.text,rb)=NULL)save1(s);elsesave(s);n=n+s;/n为以订房间
12、的人数。saven(n);/存取已订房间人数n的值/void saven(int n)FILE *fp;fp=fopen(n.text,w);fprintf(fp,%5d,n);fclose(fp);/读取n的值/int loadn()int m;FILE *fp;if(fp=fopen(n.text,r)=NULL)return 0;elsefscanf(fp,%d,&m);return m;/存取客户信息(追加)/void save(int s)FILE *fp;int i,m;m=loadn();if(fp=fopen(kehuxinxi.text,ab)=NULL)printf(打开文
13、件失败n);return;for(i=0;is;i+)fwrite(&kehui,sizeof(people),1,fp);fclose(fp);/存取(当文件为空时)/void save1(int s)FILE *fp;fp=fopen(kehuxinxi.text,wb);for(int i=0;is;i+)fwrite(&kehui,sizeof(people),1,fp);fclose(fp);/读取客户信息文件/void loadkehu()int m,i;m=loadn();FILE *fp;if(fp=fopen(kehuxinxi.text,rb)=NULL)printf(打开
14、文件失败或者客户信息为空n);return;for(i=0;im;i+)if(fread(&kehui,sizeof(people),1,fp)!=1)printf(读取文件失败/n);return;/ 输出客户信息/void printkehu()loadkehu();int m,i;m=loadn();/读取现在总共有多少个客人printf(客房号 客户姓名 ID 入住日期 预付金额n);for(i=0;im;i+)printf(%-3dtt%-3s t%-3stt %5d月%2d日tt%-dn,kehui.num0,kehui.name,kehui.ID,kehui.ru.month,k
15、ehui.ru.day,kehui.money0);/输出一个客户信息/void printkehu2(int i)/i是客户的下标printf(客房号 客户姓名 ID 入住日期 预付金额n);printf(%3dtt%3st%-3stt%-5d 月%-2d 日tt%dn,kehui.num0,kehui.name,kehui.ID,kehui.ru.month,kehui.ru.day,kehui.money0);/查询客户信息/void chaxun()int k;unsigned int numk;/查询的客房号int flag;/判断作用char namek20;/查询的客户姓名loa
16、dkehu();printf(1.客房号查询 2.客户姓名查询 n);doprintf(请选择: );scanf(%d,&k);while(!(k=1|k=2);switch(k)case 1:flag=1;/int i;printf(请输入您要查询的客房号: );scanf(%d,&numk);for(i=0;iZ;i+)if(kehui.num0=numk)flag=0;break;if(flag=1)/没查到时取初值printf(没有找到您要查询的客户n);return;printkehu2(i);break;case 2:flag=1;/int i;printf(请输入您要查询的客户姓
17、名: );getchar();/接收scanf(%s,namek);for(i=0;iZ;i+)if(strcmp(kehui.name,namek)=0)flag=0;break;if(flag=1)/没查到时取初值printf(没有找到您要查询的客户n);return;printkehu2(i);break;/时间(一年的第几天)/int shijian(int month,int day)int a12=31,28,31,30,31,30,31,31,30,31,30,31;int s=0;for(int i=0;imonth-1;i+)s=s+ai;s=s+day;return s;/
18、退房结算/void tuifang()int i,m,t1,t2,s1,s2,s;int flag=0;unsigned int money9;char ch;m=loadn();/客人总数getchar();/接收printf(请输入您要退的客房号n);unsigned int num9;/退的房间号scanf(%d,&num9);loadkehu();/读取客户信息loadroom();/读取房间信息for(i=0;im;i+)if(kehui.num0=num9)t1=i;/记住客户的位置flag=1;/证明有这个客户break;for(i=0;i=0)printf(应找您人民币%d 元
19、n,(kehut1.money0-money9);elseprintf(您的预付金额不足,请您再交取人民币 %d 元!n,(money9-kehut1.money0);roomt2.fk=0;saveroom();m=m-1;savekehu2(t1,m);saven(m);/存储剩余已订房的客户总数printf(欢迎您下次光临!n);elsereturn;/客户退房后存储/void savekehu2(int t,int m)/t为退房客户的下标,m为剩余订房客户的人数FILE *fp;if(fp=fopen(kehuxinxi.text,wb)=NULL)return;for(t;tm;t
20、+)kehut.num0=kehut+1.num0;strcpy(kehut.name,kehut+1.name);strcpy(kehut.ID,kehut+1.ID);kehut.money0=kehut+1.money0;kehut.ru.month=kehut+1.ru.month;kehut.ru.day=kehut+1.ru.day;for(int i=0;im;i+)if(fwrite(&kehui,sizeof(people),1,fp)!=1)printf(存取失败n);break;fclose(fp); void mulu()/首页提示信息printf(1. 客人入住登记n
21、);printf(2. 客户信息查询n);printf(3. 查询房间信息n);printf(4. 退房结算n);printf(0. 退出n);void main()/luru();/重新录入房间信息/printkong(b);/getchar();/return;char ch50=* * * * * welcome to * * * * *;printf(*nn);printf( %snn,ch);printf( * * * 欢迎您进入宾馆管理系统* * *nn);printf(*nnn);mulu();for(;)char ch2;int c,k;doprintf(请正确选择序号: );
22、scanf(%d,&c);while(!(c=1|c=2|c=3|c=4|c=5|c=0);switch(c)case 1:dengji();printf(按确定键返回主菜单n);getchar();getchar();break;case 2:printf(1.选择性查询n2.查询所有客户信息n);doprintf(请选择: );scanf(%d,&k);while(!(k=1|k=2);switch(k)case 1:chaxun();break;case 2:printkehu();break;printf(按确定键返回主菜单n);getchar();getchar();break;ca
23、se 3:printf(1.查询空房n2.查询所有房间信息n);doprintf(请选择: );scanf(%d,&k);while(!(k=1|k=2);switch(k)case 1:dogetchar();/接收输入中的回车printf(请选择您所查询空房间的类型 A(豪华套房) B(中档套房) C(单人公寓)n);ch2=getchar();while(!(tolower(ch2)=a|tolower(ch2)=b|tolower(ch2)=c);printkong(tolower(ch2);break;case 2:loadroom();printroom();break;printf(按确定键返回主菜单n);getchar();getchar();break;case 4:tuifang();printf(按确定键返回主菜单n);getchar();getchar();break;case 0:return;system(cls);mulu();四、执行结果截图五、个人感想 通过这次课题的实践