C语言课程设计---酒店房间登记与计费管理系统源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
酒店房间登记与计费管理系统源代码
#define M 80
#include<>
#include<>
#include<>
/*函数声明*/
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].ho ur);
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);
}。