酒店房间登记与计费管理系统源代码#define M 80#include<stdlib.h>#include<stdio.h>#include<string.h>/*函数声明*/void check_in();/*登记入住函数*/void chamber();/*入住情况函数*/void price();/*当前费用函数*/void fee();/*结账退房函数*/void infor();/*信息查询函数*/void save(int);/*保存信息函数*/void read(int);/*读取信息函数*/void choice();/*功能选择函数*/int judge_year(int);/*判断闰年函数*/void information();/*输出全部房间信息*//*结构体*/struct time{int year;int mon;int date;int hour;};struct room/*定义各房间信息的结构体*/{char name[40];char ID[18];int flag;/*0-无人入住,1-按小时计费,2-按天计费*/long int deposit;time t[2];/*0-入住时间,1-当前时间*/}room[M];char c1[40]={0};char c2[18]={0};/*主函数(主界面)*/void main(){system("cls");/*清屏*/system("color 4E");int n;printf("********************************************************************************");printf("****");printf("**\t\t----------欢迎光临万豪酒店----------**");printf("****");printf("********************************************************************************\n\n");printf("\t\t\t[1.登记入住]\n\n");printf("\t\t\t[2.入住情况]\n\n");printf("\t\t\t[3.当前费用]\n\n");printf("\t\t\t[4.结账退房]\n\n");printf("\t\t\t[5.信息查询]\n\n");printf("\t\t\t[6.全部信息]\n\n");printf("\t\t\t[7.退出系统]\n\n");printf("请输入您需要的服务的代码:");scanf("%d",&n);while(n<1||n>7){printf("\n\n代码输入有误,请您重新输入:");scanf("%d",&n);}switch(n)/*根据输入数字选择功能*/{case 1:check_in();break;/*调用登记入住函数*/case 2:chamber();break;/*调用房间情况函数*/case 3:price();break;/*调用当前费用函数*/case 4:fee();break;/*调用结账退房函数*/case 5:infor();break;/*调用信息查询函数*/case 6:information();break;/*调用全部信息函数*/case 7:exit(0);/*调用退出系统函数*/}}/*查看房间使用情况函数*/void chamber(){system("cls");/*清屏*/system("color 4E");printf("\n**********************************房间使用情况**********************************\n");int count=0;int i;int j;int k;int m;for(i=1;i<=80;i++)/*统计未入住房间总数*/{read(i);if(room[i-1].flag==0)count++;}printf("当前未使用房间数:%d\n\n\n",count);chaxun:printf("请输入你要查询的房间号(1-40:单人间,41-80:双人间):");/*输入房间号查询房间入住情况*/scanf("%d",&m);while(m<1||m>80){printf("\n\n房间号输入有误,请您重新输入:");scanf("%d",&m);}read(m);while(room[m-1].flag!=0){printf("\n\n对不起,该房间已有客人入住,请输入其他房间号:");scanf("%d",&m);read(m);}printf("\n\n该房间没有客人入住,您要入住该房间吗?(1-是,2-否):");scanf("%d",&j);while(j<1||j>2){printf("\n\n您的选择输入有误,请您重新输入:");scanf("%d",&j);}if(j==1)check_in();else{printf("\n\n您需要继续查询吗?(1-是,2-否):");scanf("%d",&k);while(k<1||k>2){printf("\n\n您的选择输入有误,请您重新输入:");scanf("%d",&k);}if(k==1)goto chaxun;else{printf("\n\n");main();}}}/*登记入住函数*/void check_in(){system("cls");/*清屏*/system("color 4E");int i;int j;int l;int k;int tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};printf("\n************************************登记入住************************************\n");printf("请输入您将入住的房间号:");scanf("%d",&i);while(i<1||i>80){printf("\n\n房间号输入有误,请您重新输入:");scanf("%d",&i);}read(i);while(room[i-1].flag!=0)/*判断房间是否入住*/{printf("\n\n对不起,该房间已有客人入住,请输入其他房间号:");scanf("%d",&i);read(i);}printf("\n\n请输入您的姓名:");/*客人信息登记*/scanf("%s",room[i-1].name);j=strlen(room[i-1].name);while(j<0){printf("\n\n您的姓名输入有误,请您重新输入:\n");scanf("%s",room[i-1].name);j=strlen(room[i-1].name);}printf("\n\n请输入您的证件号码:");scanf("%s",room[i-1].ID);j=strlen(room[i-1].ID);while(j!=18){printf("\n\n您的证件号码输入有误,请您重新输入:\n");scanf("%s",room[i-1].ID);j=strlen(room[i-1].ID);}if(i<=40){printf("\n\n您选择的是单人间,该房间148元/天,8元/小时。\n\n\n");/*选择计费方式*/printf("请选择您的计费方式(1:按小时计费,2:按天计费):");}else{printf("\n\n您选择的是双人间,该房间128元/天,7元/小时。\n\n\n");printf("请选择您的计费方式(1:按小时计费,2:按天计费):");}scanf("%d",&room[i-1].flag);while(room[i-1].flag<0||room[i-1].flag>2){printf("\n\n您的计费方式输入有误,请您重新输入:");scanf("%d",&room[i-1].flag);}printf("\n\n请按所示格式输入您的入住时间(年-月-日-时,时为24小时制):");scanf("%d-%d-%d-%d",&room[i-1].t[0].year,&room[i-1].t[0].mon,&room[i-1].t[0].date,&room[i-1].t[0].hour);l=judge_year(room[i-1].t[0].year);while((room[i-1].t[0].year<=0)||(room[i-1].t[0].mon<=0||room[i-1].t[0].mon>12)||(room[i-1].t[0].date<=0||room[i-1].t[0].date>tab[l][room[i-1].t[0].mon-1])||(room[i-1].t[0].hour<0||room[i-1].t[0].hour>=24)){printf("\n\n您的入住时间输入有误,请按照格式重新输入:");scanf("%d-%d-%d-%d",&room[i-1].t[0].year,&room[i-1].t[0].mon,&room[i-1].t[0].date,&room[i-1].t[0].hour);l=judge_year(room[i-1].t[0].year);}printf("\n\n请输入您的押金数额:");scanf("%ld",&room[i-1].deposit);while(room[i-1].deposit<=0){printf("\n\n您的押金数额输入有误,请您重新输入:\n");scanf("%ld",&room[i-1].deposit);}printf("\n\n您是否确定您的信息:(1-是,2-否):");scanf("%d",&k);while(k<1||k>2){printf("\n\n您的选择输入有误,请您重新输入:\n");scanf("%d",&k);}if(k==1){printf("\n\n您已登记入住成功,祝您在本店住得愉快!\n\n");save(i);choice();}else check_in();}/*费用查询函数*/void price(){system("cls");/*清屏*/system("color 4E");printf("\n************************************费用查询************************************\n");int i;int j;int k;int tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};int day=0;int hr=0;int total_hour;int total_day;long int price;printf("请输入您的房间号:");scanf("%d",&i);while(i<1||i>80){printf("\n\n您的房间号输入有误,请您重新输入:");scanf("%d",&i);}read(i);while(room[i-1].flag==0)/*判断房间是否已有客人入住*/{printf("\n\n该房间无人入住,请重新输入您的房间号:");scanf("%d",&i);read(i);}printf("\n\n请按所示格式输入当前时间(年-月-日-时,时为24小时制):");/*输入当前时间*/shuru:scanf("%d-%d-%d-%d",&room[i-1].t[1].year,&room[i-1].t[1].mon,&room[i-1].t[1].date,&room[i-1].t[1].hour);j=judge_year(room[i-1].t[1].year);while((room[i-1].t[1].year<=0)||(room[i-1].t[1].mon<=0||room[i-1].t[1].mon>12)||(room[i-1].t[1].date<=0||room[i-1].t[1].date>tab[j][room[i-1].t[1].mon-1])||(room[i-1].t[1].hour<0||room[i-1].t[1].hour>=24)){printf("\n\n您的入住时间输入有误,请按照格式重新输入:");scanf("%d-%d-%d-%d",&room[i-1].t[1].year,&room[i-1].t[1].mon,&room[i-1].t[1].date,&room[i-1].t[1].hour);j=judge_year(room[i-1].t[1].year);}if(room[i-1].t[0].mon!=room[i-1].t[1].mon){for(k=room[i-1].t[0].mon+1;k<room[i-1].t[1].mon;k++){day+=tab[j][k-1];}day+=tab[j][room[i-1].t[0].mon-1]-room[i-1].t[0].date+room[i-1].t[1].date;}else{day+=room[i-1].t[1].date-room[i-1].t[0].date;}hr=room[i-1].t[1].hour-room[i-1].t[0].hour;if(room[i-1].flag==1)/*根据房间类型和计费方式计算费用*/{if(hr<0){total_hour=day*24-hr;}else{total_hour=day*24+hr;}if(i<=40)price=8*total_hour;else price=7*total_hour;}if(room[i-1].flag==2){while(hr<0){day=day-1;hr=hr+24;}if(hr<8){total_day=day;}else{total_day=day+1;}if(i<=40)price=148*total_day;else price=128*total_day;}while(price<0){printf("您的时间输入有误,请重新输入:");goto shuru;}printf("\n\n当前费用为:%ld元.\n\n",price);/*输出当前费用*/choice();}/*结账退房函数*/void fee(){system("cls");system("color 4E");printf("\n************************************结账退房************************************\n");int i;int j;int k;int tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};int day=0;int hr=0;int total_hour;int total_day;long int price;long int fee;printf("请输入您的房间号:");scanf("%d",&i);while(i<1||i>80){printf("\n\n您的房间号输入有误,请您重新输入:");scanf("%d",&i);}read(i);while(room[i-1].flag==0)/*判断房间是否有客人入住*/{printf("\n\n该房间无人入住,请重新输入您的房间号:");scanf("%d",&i);read(i);}printf("\n\n请按所示格式输入当前时间(年-月-日-时,时为24小时制):");/*输入当前时间*/shuru:scanf("%d-%d-%d-%d",&room[i-1].t[1].year,&room[i-1].t[1].mon,&room[i-1].t[1].date,&room[i-1].t[1].hour);j=judge_year(room[i-1].t[1].year);while((room[i-1].t[1].year<=0)||(room[i-1].t[1].mon<=0||room[i-1].t[1].mon>12)||(room[i-1].t[1].date<=0||room[i-1].t[1].date>tab[j][room[i-1].t[1].mon-1])||(room[i-1].t[1].hour<0||room[i-1].t[1].hour>=24)){printf("\n\n您的入住时间输入有误,请按照格式重新输入:");scanf("%d-%d-%d-%d",&room[i-1].t[1].year,&room[i-1].t[1].mon,&room[i-1].t[1].date,&room[i-1].t[1].hour);j=judge_year(room[i-1].t[1].year);}if(room[i-1].t[0].mon!=room[i-1].t[1].mon){for(k=room[i-1].t[0].mon+1;k<room[i-1].t[1].mon;k++){day+=tab[j][k-1];}day+=tab[j][room[i-1].t[0].mon-1]-room[i-1].t[0].date+room[i-1].t[1].date;}else{day+=room[i-1].t[1].date-room[i-1].t[0].date;}hr=room[i-1].t[1].hour-room[i-1].t[0].hour;if(room[i-1].flag==1)/*根据房间类型和计费方式计算费用*/{if(hr<0){total_hour=day*24-hr;}else{total_hour=day*24+hr;}if(i<=40)price=8*total_hour;else price=7*total_hour;}if(room[i-1].flag==2){while(hr<0){day=day-1;hr=hr+24;}if(hr<8){total_day=day;}else{total_day=day+1;}if(i<=40)price=148*total_day;else price=128*total_day;}while(price<0){printf("您的时间输入有误,请重新输入:");goto shuru;}fee=price-room[i-1].deposit;if(fee>0)/*输出最后的总费用*/{printf("\n\n扣除押金后,您另需支付费用%ld元。",fee);}else if(fee==0){printf("\n\n您所交纳的押金恰好能够支付您的住房费用,您无需另行交钱。");}else{printf("\n\n您所交纳的押金还未使用完,本宾馆应支付您余额%ld元。",-fee);}printf("\n\n\n您已退房成功,感谢您的光临,我们下次再见!\n\n");room[i-1].flag=0;strcpy(room[i-1].name,c1);strcpy(room[i-1].ID,c2);room[i-1].deposit=0;room[i-1].t[0].year=0;room[i-1].t[0].mon=0;room[i-1].t[0].date=0;room[i-1].t[0].hour=0;room[i-1].t[1].year=0;room[i-1].t[1].mon=0;room[i-1].t[1].date=0;room[i-1].t[1].hour=0;save(i);choice();}/*信息查询函数*/void infor(){system("cls");system("color 4E");printf("\n************************************信息查询************************************\n");int i;printf("请输入您的房间号:");scanf("%d",&i);while(i<1||i>80){printf("\n\n您的房间号输入有误,请您重新输入:");scanf("%d",&i);}read(i);while(room[i-1].flag==0)/*判断房间是否有客人入住*/{printf("\n\n该房间无人入住,请重新输入您的房间号:");scanf("%d",&i);read(i);}printf("\n\n您的信息如下:\n\n\n");/*输出客人信息*/printf("姓名:");puts(room[i-1].name);printf("\n\n");printf("证件号码:");puts(room[i-1].ID);printf("\n\n");printf("房间类型:");if(i<=40){printf("单人间\n\n\n");}else{printf("双人间\n\n\n");}printf("计费方式:");if(room[i-1].flag==1){printf("按小时计费\n\n\n");}else{printf("按天计费\n\n\n");}printf("入住时间:");printf("%d年%d%月%d日%d时\n\n\n",room[i-1].t[0].year,room[i-1].t[0].mon,room[i-1].t[0].date,room[i-1].t[0].hour);printf("押金数额:");printf("%ld元\n\n",room[i-1].deposit);choice();}/*功能选择函数*/void choice(){printf("\n************************************功能选择************************************\n");printf("\t\t\t[1.入住情况]\n");printf("\t\t\t[2.登记入住]\n");printf("\t\t\t[3.当前费用]\n");printf("\t\t\t[4.结账退房]\n");printf("\t\t\t[5.信息查询]\n");printf("\t\t\t[6.回主界面]\n");printf("\t\t\t[7.全部信息]\n");printf("\t\t\t[8.退出系统]\n");int k;printf("请选择您需要的服务:");/*服务选择*/scanf("%d",&k);while(k<1||k>8){printf("\n\n代码输入有误,请您重新输入:");scanf("%d",&k);}switch(k){case 1:chamber();break;/*调用房间情况函数*/case 2:check_in();break;/*调用登记入住函数*/case 3:price();break;/*调用当前费用函数*/case 4:fee();break;/*调用结账退房函数*/case 5:infor();break;/*调用信息查询函数*/case 6:main();break;/*调用主函数*/case 7:information();break;/*调用全部信息函数*/case 8:exit(0);/*调用退出系统函数*/}}/*判断闰年函数*/int judge_year(int x){if((x%4==0)&&(x%100!=0)||(x%400==0))return(1);else return(0);}/*全部信息查询*/void information(){system("cls");printf("\n************************************全部信息************************************\n");int i;int j;int k;int year;int month;int date;int hour;int year1;int month1;int day1;int hour1;int tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};int day=0;int hr=0;int total_hour;int total_day;long int price;printf("\n\n请按所示格式输入当前时间(年-月-日-时,时为24小时制):");/*输入当前时间*/scanf("%d-%d-%d-%d",&year,&month,&date,&hour);j=judge_year(year);for(i=1;i<=80;i++){read(i);if(room[i-1].flag==0){printf("房间%d无人入住。\n",i);if(i<=40){printf("房间类型:单人间。\n");printf("单价:148元/天,8元/小时。\n");}else{printf("房间类型:双人间。\n");printf("单价:128元/天,7元/小时。\n");}}else{year1=year-room[i-1].t[0].year;month1=month-room[i-1].t[0].mon;day1=date-room[i-1].t[0].date;hour1=hour-room[i-1].t[0].hour;while(hour1<0){day1=day1-1;hour1=hour1+24;}printf("房间%d客户信息如下:\n",i);printf("姓名:");puts(room[i-1].name);printf("证件号码:");puts(room[i-1].ID);printf("房间类型:");if(i<=40){printf("单人间\n");printf("单价:148元/天,8元/小时。\n");}else{printf("双人间\n");printf("单价:128元/天,7元/小时。\n");}printf("计费方式:");if(room[i-1].flag==1){printf("按小时计费\n");}else{printf("按天计费\n");}printf("入住时间:");printf("%d年%d%月%d日%d时\n",room[i-1].t[0].year,room[i-1].t[0].mon,room[i-1].t[0].date,room[i-1].t[0].hour);printf("已入住时间:%d年%d月%d天%d小时。\n",year1,month1,day1,hour1);printf("押金数额:");printf("%ld元",room[i-1].deposit);if(room[i-1].t[0].mon!=month){for(k=room[i-1].t[0].mon+1;k<month;k++){day+=tab[j][k-1];}day+=tab[j][room[i-1].t[0].mon-1]-room[i-1].t[0].date+date;}else{day+=date-room[i-1].t[0].date;}hr=hour-room[i-1].t[0].hour;if(room[i-1].flag==1)/*根据房间类型和计费方式计算费用*/{if(hr<0){total_hour=day*24-hr;}else{total_hour=day*24+hr;}if(i<=40)price=8*total_hour;else price=7*total_hour;}if(room[i-1].flag==2){while(hr<0){day=day-1;hr=hr+24;}if(hr<8){total_day=day;}else{total_day=day+1;}if(i<=40)price=148*total_day;else price=128*total_day;}printf("\n当前费用为:%ld元.\n",price);/*输出当前费用*/}day=0;hr=0;/*时间清零*/}choice();}/*保存信息函数*/void save(int x){int i;char c;FILE*fp;if((fp=fopen("酒店房间登记与计费管理系统信息存储文件.txt","wb+"))==NULL){printf("无法打开文件。\n\n\n");printf("请按任意键返回主菜单,并选择“退出系统”选项,在修改错误后再运行此系统。\n\n");scanf("%s",&c);main();}for(i=1;i<=x;i++)if(fwrite(&room[i-1],sizeof(struct room),1,fp)!=1)printf("文件写入错误!\n\n");fclose(fp);}/*读取信息函数*/void read(int y){int i=1;char c;FILE*fp;if((fp=fopen("酒店房间登记与计费管理系统信息存储文件.txt","rb+"))==NULL){printf("\n\n无法打开文件。\n\n\n");printf("请按任意键返回主菜单,并选择“退出系统”选项,在修改错误后再运行此系统。\n\n");scanf("%s",&c);main();}else{do{fread(&room[i-1],sizeof(struct room),1,fp);i++;}while(feof(fp)==0);}fclose(fp);}。