酒店管理
#include<stdio.h>
void xx()
void search()
main()
{ int f
printf(" ▲***********************▲\n")
printf(" △ 欢迎来到XXX饭店△\n")
printf(" ▲************************▲\n")
printf("1.进入. 2退出.\n")
scanf("%d",&f)
if(f==1)
search()
else
printf("输入错误")
}
void search()
{
int d[15],g[3],a,b,c,x,y,h
printf("请选袭山择您需要的号码:\n1.预定房间\n2.退定房间\n")
scanf("%d",&a)
if(a>3 || a<1)
{printf("您输入有误请您重试!\n")
}
else switch(a)
{ case 1:
{ printf("请您输入您的身份z号码\n")
scanf("%d",&d[15])
printf("您已登陆成功^-^\n")
printf("请您选择退定种类:\n")
printf("1.单人间/夜150元\n2.双人间/夜200元\n3.标准间/夜300元\n4.总统套房/夜600元\n")
scanf("%d",&b)
switch(b)
{ case 1:printf("请输入预定天数\n")
scanf("%d"虚稿,&x)
printf("请预交款为拍誉中%d元\n",x*150)
printf("1.确定 2.返回")
scanf("%d",&h)
printf("您已预定成功★房间号码为202.\n")break
case 2:printf("请输入预定天数\n")
scanf("%d",&x)
printf("请预交款为%d元\n",x*200)
printf("1.确定 2.返回")
scanf("%d",&h)
printf("您已预定成功★房间号码为305.\n")break
case 3:printf("请输入预定天数\n")
scanf("%d",&x)
printf("请预交款为%d元\n",x*300)
printf("1.确定 2.返回")
scanf("%d",&h)
printf("您已预定成功★房间号码为208.\n")break
case 4:printf("请输入预定天数\n")
scanf("%d",&x)
printf("请预交款为%d元\n",x*600)
printf("1.确定 2.返回")
scanf("%d",&h)
printf("您已预定成功★房间号码为306.\n")break
default :printf("您的输入有错请您重试")
}
}break
case 2:
{printf("请您输入您的身份z号码\n")
scanf("%d",&d[15])
printf("您已登陆成功^-^\n")
printf("请您选择退订服务种类:\n")
printf("1.单人间/夜150元\n2.双人间/夜200元\n3.标准间/夜300元\n4.总统套房/夜600元\n")
scanf("%d",&c)
switch(c)
{case 1:printf("请您输入要退定的房间号码\n")
scanf("%d",&g[3])
printf("请您输入要退订的天数\n")
scanf("%d",&y)
printf("我们将退您%d元\n",y*150)
printf("您退定成功: 谢谢您的光临 !\n")break
case 2:printf("请您输入要退定的房间号码\n")
scanf("%d",&g[3])
printf("请您输入要退订的天数\n")
scanf("%d",&y)
printf("我们将退您%d元\n",y*200)
printf("您退定成功.谢谢您的光临 !")break
case 3:printf("请您输入要退定的房间号码\n")
scanf("%d",&g[3])
printf("请您输入要退订的天数\n")
scanf("%d",&y)
printf("我们将退您%d元\n",y*300)
printf("您退定成功:谢谢您的光临 !\n")break
case 4:printf("请您输入要退定的房间号码\n")
scanf("%d",&g[3])
printf("请您输入要退订的天数\n")
scanf("%d",&y)
printf("我们将退您%d元\n",y*600)
printf("您退定成功:谢谢您的光临 !\n")break
default:printf("您的输入有错请您重试")}
}break}
{
int n
printf("谢谢光顾\n是否要再预定? 1.是2.否")
scanf("%d",&n)
if(n==1)
search()
else
printf("再见")
}
}
int CheckRoom(struct room *pr){char phonenu[4][12]={"110","119","120","122"}/*非法私人电话号码*/
char type[3][2]={"渗庆2","t","T"}
int flag=1,i
static int pass=1
if(NULL==pr) {printf("Error:Null point! Can't check the datas:\n")return 0}
printf("Start to part Maintain:about room\n")
while( strlen(pr->roomnu)>5 )/*检查数据长度,防止保存二进制数据错误*/
{pr->roomnu[5]=0
printf("ERROR:the roomnu: %s is longer than 5 bytes.\n",pr->roomnu)
printf("Please select another shorter roomnu:\n")
scanf("%s",pr->roomnu)
}
while( strlen(pr->cleaner)>19 )/*检查数据长度,防止保存二进制数据错误*/
{pr->cleaner[19]=0
printf("ERROR:the cleaner:%s is longer than 19 bytes.\n",pr->cleaner)
printf("Please select another shorter name:\n")
scanf("%s",pr->cleaner)
}
while(flag||strlen(pr->phonenu)>11)/*检查数据内容(由flag控制)和长度,防止保存二进制数据错误*/
{
while( strlen(pr->phonenu)>11 )/*检查长度*/
{pr->phonenu[11]=0
printf("ERROR:the phonenu:%s is longer than 11 bytes.\n",pr->phonenu)
printf("Please select another shorter phonenu:\n")
scanf("%s",pr->phonenu)
}
while(flag)/*检查内容*//*这个算法也有问题,如果内容非法,但长度通过怎么办呢?*/
{for(i=0flag&&i<4i++)
if( 0==strcmp(pr->phonenu,phonenu[i]) )/*内容非法*/
{printf("ERROR:illegal phonenu:%s!\n",pr->phonenu)
flag=0/*检测到内容非法*/
}
if(flag) flag=0/*内容检查通过*/
else {flag=1
printf("Please input a legal phonenu:\n")
scanf("%s",pr->phonenu)/*内容检查未通过,重新收入*/
}
}
}
flag=1
while(flag||strlen(pr->type)>1)/*检查数据内容(由flag控制)和长度,此例丛雹握和上例不同*/
{
while( strlen(pr->type)>1 )/*检查长度*/
{pr->type[1]=0
printf("ERROR:the type:%s is longer than 1 byte.\n",pr->type)
printf("Please select another shorter type:\n")
scanf("%s",pr->type)
}
while(flag)/*检查内容*/
{if(strcmp(pr->type,type[0])&&strcmp(pr->肆册type,type[1])&&strcmp(pr->type,type[2]) )/*内容非法*/
{printf("ERROR:illegal type:%s!\n",pr->type)
flag=0/*检测到内容非法*/
}
if(flag) flag=0/*内容检查通过*/
else {flag=1
printf("Please input a legal type:\n")
scanf("%s",pr->type)/*内容检查未通过,重新收入*/
}
}
}
while( pr->maximum<pr->currentclient )/*检查数据间的联系*/
{printf("ERROR:the room's capacity does not fit for the number of current clients.\n")
printf("Please alter the maximum:\n")
scanf("%d",&(pr->maximum))
}/*检查房间最大容量和当前已住顾客人数是否相容,如果前者小于后者则写入错误报告文件 */
printf("Congratulations: ROOM Check pass %d!\n",pass++)
return 1
}
int CheckClient(struct client *pc)
{ int flag=1,i
char sex[4][2]={"m","M","f","F"}
static int pass=1
if(NULL==pc) {printf("Error:Null point! Can't check the datas:\n")return 0}
printf("Start to part Maintain:about client\n")
while( strlen(pc->roomnu)>5 )/*检查房间长度*/
{pc->roomnu[5]=0
printf("ERROR:the roomnu: %s is longer than 5 bytes.\n",pc->roomnu)
printf("Please select another shorter roomnu:\n")
scanf("%s",pc->roomnu)
}
while( strlen(pc->identity_card)!=18 )/*检查身份z号长度*/
{pc->identity_card[18]=0
printf("ERROR:the identity_card:%s is not 18 bytes.\n",pc->identity_card)
printf("Please check the length and input it again:\n")
scanf("%s",pc->identity_card)
}
while(strlen(pc->name)>19)/*检查姓名长度*/
{pc->name[19]=0
printf("ERROR:the name:%s is longer than 19 bytes.\n",pc->name)
printf("Please select another shorter phonenu:\n")
scanf("%s",pc->name)
}
while(flag||strlen(pc->sex)>1)/*检查性别内容(由flag控制)和长度*/
{
while( strlen(pc->sex)>1 )/*检查长度*/
{pc->sex[1]=0
printf("ERROR:the sex:%s is longer than 1 byte.\n",pc->sex)
printf("Please select another shorter sex:\n")
scanf("%s",pc->sex)
}
while(flag)/*检查内容*/
{if(strcmp(pc->sex,sex[0])&&strcmp(pc->sex,sex[1])&&strcmp(pc->sex,sex[2])&&strcmp(pc->sex,sex[3]) )/*内容非法*/
{printf("ERROR:illegal sex:%s!\n",pc->sex)
flag=0/*检测到内容非法*/
}
if(flag) flag=0/*内容检查通过*/
else {flag=1
printf("Please input a legal sex:\n")
scanf("%s",pc->sex)/*内容检查未通过,重新收入*/
}
}
}
while( strlen(pc->date)!=8 )/*检查日期长度*/
{pc->date[8]=0
printf("ERROR:the date:%s is not 8 bytes.\n",pc->date)
printf("Please check the length and input it again:\n")
scanf("%s",pc->date)
}
while( strlen(pc->collect)>5 )/*检查收款人长度*/
{pc->collect[5]=0
printf("ERROR:the collect:%s is not 5 bytes.\n",pc->collect)
printf("Please check the length and input it again:\n")
scanf("%s",pc->collect)
}
while(pc->time<0)/*检查入住天数*/
{printf("ERROR:illegal input of time: %f!\n",pc->time)
printf("Please check and input it again:\n")
scanf("%f",&pc->time)
}
while(pc->cost<0)/*检查应缴费用*/
{printf("ERROR:illegal input of cost: %f!\n",pc->cost)
printf("Please check and input it again:\n")
scanf("%f",&pc->cost)
}
while(pc->fee<0)/*检查实缴费用*/
{printf("ERROR:illegal input of cost: %f!\n",pc->fee)
printf("Please check and input it again:\n")
scanf("%f",&pc->fee)
}
if( pc->fee>pc->cost )/*检查数据间的联系,实缴费用应小于应缴用*/
{printf("It may be a error:fee=%f >cost=%f\n",pc->fee,pc->cost)
printf("Do you like to alter them?(1:YES0:NO)\n")
scanf("%d",&flag)
while(flag)
{printf("Please input the values:cost and fee\n")
scanf("%f%f",&pc->cost,&pc->fee)
if(pc->fee>pc->cost)
{printf("Error again!!\n")flag=1}
else flag=0
}
}
printf("Congratulations: CLIENT Check pass %d!\n",pass++)
return 1
}
int CheckAll(struct room *head_room)
{struct client *pc
struct room *pr
if(NULL==head_room) {printf("head_room=0\n")return 0}
printf("Start to part Maintain:about room and client\n")
pr=head_room
while(pr)
{CheckRoom(pr)
pc=pr->head
while(pc)
{CheckClient(pc)
pc=pc->next
}
pr=pr->next
}
return 1
}
/**该函数为内部数据维护,不提供输入数据服务。实体完整性,参照完整性,用户自定义完整性
出现错误则将错误输出到doc文档。
错误范围暂时定义如下:
1.同一房间的客户房间号不同(同房搜索!)
2.实缴费用大于应缴费用。(同房搜索!)
3.同一个客户在同一天两次住进宾馆(全表搜索!身份z号和入住日期相同)
4.同一身份z号,姓名和性别不同(全表搜索!)
另外,应该完成的任务有:
5.计算客户的应缴费用->对cost *** 作,需要用到:time,unit_price
6.计算客房的总住户人数(包括当前住户)->对totalclient *** 作,需要用到:没有
7.重新修订当前住户数->对currentclient进行 *** 作,需要用到:time
8.计算客房的总计收入->对income进行 *** 作,需要用到:fee
9.当前住户的实缴费用清零->对fee进行 *** 作,需要用到:time
完成这些 *** 作的先后顺序为:7->6->5->9->8->2->1->3->4*/
int Consistency(struct room *head_room)
{struct room *pr,*tpr
struct client *pc,*tpc
char file[12]="error.doc"
int i=0/*i用于错误计数*/
static int count=0
FILE *fp
if(NULL==head_room) {printf("head_room=0\n")return 0}
printf("Start to part Maintain:Consistency!\n")
pr=head_room
while(pr)
{pr->currentclient=0
/*pr->totalclient=0*/
pr->income=0
pc=pr->head
while(pc)
{if(!pc->time) pr->currentclient++/*完成........7.....*/
/*pr->totalclient++*//*完成........6.....*/
pc->cost=(pc->time)*(pr->unit_price)/*完成........5.....*/
if(!pc->time) pc->fee=0 /*完成........9.....*/
pr->income=pr->income+pc->fee /*完成........8.....*/
pc=pc->next
}
pr=pr->next
}
if(NULL==( fp=fopen(file,"wt") ) )
{printf("Cannot open file:%s!\n",file)
return 0
}
pr=head_room
while(pr)
{pc=pr->head
while(pc)
{if(pc->fee>pc->cost)
{fprintf(fp,"Error %d:fee=%f >cost=%f\n",++i,pc->fee,pc->cost)
fprintf(fp,"roomnu identity_card namesex date clt time cost fee\n")
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",pc->roomnu,pc->identity_card,pc->name,pc->sex,pc->date,pc->collect,pc->time,pc->cost,pc->fee)
/*完成........2.....*/
}
if( strcmp(pr->roomnu,pc->roomnu) )
{fprintf(fp,"Error %d:the client's roomnu:%s != the room's roomnu:%s",++i,pc->roomnu,pr->roomnu)
fprintf(fp,"roomnu cleaner phonenu type max area price clientNO\n")
fprintf(fp,"%-6s %-16s %-12s %-4s %-3d %-6.1f %-6.1f %-2d\n",pr->roomnu,pr->cleaner,pr->phonenu,pr->type,pr->maximum,pr->area,pr->unit_price,pr->currentclient)
fprintf(fp,"roomnu identity_card namesex date clt time cost fee\n")
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",pc->roomnu,pc->identity_card,pc->name,pc->sex,pc->date,pc->collect,pc->time,pc->cost,pc->fee)
/*完成........1.....*/
}
pc=pc->next
}
pr=pr->next
}
/*这个要全表搜索,搜索一次全表过掉一个客户*/
pr=head_room
while(pr)
{pc=pr->head
while(pc)
{
if(pc->next)
{tpc=pc->next
while(tpc)
{if(0==strcmp(pc->identity_card,tpc->identity_card) &&0==strcmp(pc->date,tpc->date) )
{fprintf(fp,"Error %d:the same client:%s lived in our hotel in the same day:%s\n",++i,pc->identity_card,pc->date)
fprintf(fp,"roomnu identity_card namesex date clt time cost fee\n")
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n",pc->roomnu,pc->identity_card,pc->name,pc->sex,pc->date,pc->collect,pc->time,pc->cost,pc->fee)
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",tpc->roomnu,tpc->identity_card,tpc->name,tpc->sex,tpc->date,tpc->collect,tpc->time,tpc->cost,tpc->fee)
}/*完成........3.....*/
if(0==strcmp(pc->identity_card,tpc->identity_card) &&(strcmp(pc->name,tpc->name)||strcmp(pc->sex,tpc->sex)) )
{fprintf(fp,"Error %d:the same client:%s have the different name or sex in our hotel.\n",++i,pc->identity_card)
fprintf(fp,"roomnu identity_card namesex date clt time cost fee\n")
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n",pc->roomnu,pc->identity_card,pc->name,pc->sex,pc->date,pc->collect,pc->time,pc->cost,pc->fee)
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",tpc->roomnu,tpc->identity_card,tpc->name,tpc->sex,tpc->date,tpc->collect,tpc->time,tpc->cost,tpc->fee)
}/*完成........4.....*/
tpc=tpc->next
}/*while(tpc) exit */
/*当前房间比较结束,进入下一个房间*/
tpr=pr->next
while(tpr)
{tpc=tpr->head
while(tpc)
{if(0==strcmp(pc->identity_card,tpc->identity_card) &&0==strcmp(pc->date,tpc->date) )
{fprintf(fp,"Error %d:the same client:%s lived in our hotel in the same day:%s\n",++i,pc->identity_card,pc->date)
fprintf(fp,"roomnu identity_card namesex date clt time cost fee\n")
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n",pc->roomnu,pc->identity_card,pc->name,pc->sex,pc->date,pc->collect,pc->time,pc->cost,pc->fee)
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",tpc->roomnu,tpc->identity_card,tpc->name,tpc->sex,tpc->date,tpc->collect,tpc->time,tpc->cost,tpc->fee)
}/*完成........3.....*/
if(0==strcmp(pc->identity_card,tpc->identity_card) &&(strcmp(pc->name,tpc->name)||strcmp(pc->sex,tpc->sex)) )
{fprintf(fp,"Error %d:the same client:%s have the different name or sex in our hotel.\n",++i,pc->identity_card)
fprintf(fp,"roomnu identity_card namesex date clt time cost fee\n")
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n",pc->roomnu,pc->identity_card,pc->name,pc->sex,pc->date,pc->collect,pc->time,pc->cost,pc->fee)
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",tpc->roomnu,tpc->identity_card,tpc->name,tpc->sex,tpc->date,tpc->collect,tpc->time,tpc->cost,tpc->fee)
}/*完成........4.....*/
tpc=tpc->next
}/*while(tpc) exit */
tpr=tpr->next
}/*while(tpr) exit */
}
else/*当前客户下一节点为空的情况搜索*/
{tpr=pr->next
while(tpr)
{tpc=tpr->head
while(tpc)
{if(0==strcmp(pc->identity_card,tpc->identity_card) &&0==strcmp(pc->date,tpc->date) )
{fprintf(fp,"Error %d:the same client:%s lived in our hotel in the same day:%s\n",++i,pc->identity_card,pc->date)
fprintf(fp,"roomnu identity_card namesex date clt time cost fee\n")
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n",pc->roomnu,pc->identity_card,pc->name,pc->sex,pc->date,pc->collect,pc->time,pc->cost,pc->fee)
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",tpc->roomnu,tpc->identity_card,tpc->name,tpc->sex,tpc->date,tpc->collect,tpc->time,tpc->cost,tpc->fee)
}/*完成........3.....*/
if(0==strcmp(pc->identity_card,tpc->identity_card) &&(strcmp(pc->name,tpc->name)||strcmp(pc->sex,tpc->sex)) )
{fprintf(fp,"Error %d:the same client:%s have the different name or sex in our hotel.\n",++i,pc->identity_card)
fprintf(fp,"roomnu identity_card namesex date clt time cost fee\n")
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n",pc->roomnu,pc->identity_card,pc->name,pc->sex,pc->date,pc->collect,pc->time,pc->cost,pc->fee)
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",tpc->roomnu,tpc->identity_card,tpc->name,tpc->sex,tpc->date,tpc->collect,tpc->time,tpc->cost,tpc->fee)
}/*完成........4.....*/
tpc=tpc->next
}/*while(tpc) exit */
tpr=tpr->next
}/*while(tpr) exit */
}
pc=pc->next/*搜索一次全表过掉一个客户*/
}/*while(pc) exit */
pr=pr->next
}/*while(pr) exit */
printf("Maintain NO. %d\n",++count)
fclose(fp)
return 1
}
int ToDate(char *date,int year,int month,int day)/*将年月日转换为字符串*/
{int i,j
char temp[9]
for(i=3i>-1i--)
{j=year%10
temp[i]=j+'0'
year=year/10
}
for(i=1i>-1i--)
{j=month%10
temp[4+i]=j+'0'
month=month/10
}
for(i=1i>-1i--)
{j=day%10
temp[6+i]=j+'0'
day=day/10
}
temp[8]=0
strcpy(date,temp)
return 1
}
int Account(struct room *head_room)
{struct room *pr
struct client *pc
char temp[20],date[9],name[6]
float cost,fee
int time,year,month,day
intflag=1
clr()
if(NULL==head_room) {printf("head_room=0\n")getch()clr()return 0}
printf("Please input CLIENT ID(18bytes)!\n")/*mode=1表示根据身份z号查找特定客户*/
scanf("%s",temp)
while(strlen(temp)!=18)
{printf("Error:the client(ID=%s) is not 18 bytes!",temp)
printf("Please check and input CLIENT ID(18bytes),again!\n")/*mode=1表示根据身份z号查找特定客户*/
scanf("%s",temp)
}
/*查找客户*/
pr=head_room
flag=1
while(flag&&pr)
{pc=pr->head
while(flag&&pc)
{if( !strcmp(pc->identity_card,temp)&&!pc->time)
{printf("roomnu identity_card namesex date clt time cost fee\n")
PrintClient(pc)
flag=0
}
if(flag) pc=pc->next
}
pr=pr->next
}
if(NULL==pc) {printf("Error:the client(ID=%s) does not exist in out hotel!\n",temp)getch()clr()return 0}
/*获取日期*/
year =GetTime(0,1)
month=GetTime(0,2)
day =GetTime(0,3)
ToDate(date,year,month,day)
time=CountDays(pc->date,date)
cost=time*pr->unit_price
printf("The client ID=%s who have lived %d days should pay %6.1f $!\n",temp,time,cost)
printf("Please input how much you get from him and your name!\n")
printf("The money is:")
scanf("%f",&fee)
printf("Your name(collect) is:")
scanf("%s",name)
while(strlen(name)>5)
{printf("Error:the name=%s is longer than 5 bytes!",name)
printf("Please check and input ,again!\n")/*mode=1表示根据身份z号查找特定客户*/
scanf("%s",name)
}
pc->fee=fee
pc->cost=cost
pc->time=time
strcpy(pc->collect,name)
printf("Account end! Thank you!\n")
return 1
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)