C语言课程设计酒店管理程序

C语言课程设计酒店管理程序,第1张

没有时间写,只有一点,朋友给的!

酒店管理

#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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12393919.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存