读书人

1个警告还有计费时输入的房间无人居住

发布时间: 2012-05-28 17:59:33 作者: rapoo

1个警告还有计费时输入的房间无人居住时出错
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
struct hotel{
int num,price,standard,deposit;
char name[20];
clock_t time_start;
clock_t time_end;
long int time_total;
struct hotel *next;
};
struct hotel * creat();
struct hotel * open_room(struct hotel *head,struct hotel *p);
int search(struct hotel *head,int num);
void print(struct hotel *head,int num);
void cost(struct hotel *head,int num);
struct hotel * delete_room(struct hotel *head,int num);
int main(void)
{
int m,n,choice,num,flag,sing,doub;
char name[20];
struct hotel *head,*p;
int size=sizeof(struct hotel);
head=creat();
do{
printf("酒店房间登记与计费管理系统\n");
printf("选项:\n");
printf("1.登记入住;\n");
printf("2.查询房间入住情况;\n");
printf("3.查询当前费用;\n");
printf("4.结账退房;\n");
printf("0.退出酒店房间登记与计费管理系统。\n");
printf("请选择:");
scanf("%d",&choice);
switch(choice){
case 1:
printf("\n请输入要入住的房间标准:[1]单人房,[2]双人房:");
scanf("%d",&m);
printf("\n请输入房号[1-20]:");
scanf("%d",&n);
num=100*m+n;
if(num==search(head,num)){
printf("\n此房间已有人住!请重新选择!\n");
continue;
}
else if(m==1&&sing==20){
printf("\n单人房已住满,请选择双人房。\n");
continue;
}
else if(m==2&&doub==20){
printf("\n双人房已住满,请选择单人房。\n");
continue;
}
if(m==1){
sing++;
p=(struct hotel *)malloc(size);
p->num=num;
printf("\n请输入名字:");
scanf("%s",name);
strcpy(p->name,name);
p->time_start=clock();
printf("\n请选择计费方式:[1]计时[2]计天:");
scanf("%d",&flag);
p->standard=flag;
if(flag==1)
p->price=10;
else
p->price=100;
p->deposit=100;
}
else{
doub++;
p=(struct hotel *)malloc(size);
p->num=num;
printf("\n请输入名字:");
scanf("%s",name);
strcpy(p->name,name);
p->time_start=clock();
printf("\n请选择计费方式:[1]计时[2]计天:");
scanf("%d",&flag);
p->standard=flag;
if(flag==1)
p->price=20;
else
p->price=200;
p->deposit=200;
}
p->time_start=clock();
head=open_room(head,p);
printf("\n\n客户信息确认:\n");
print(head,num);
printf("\n操作成功,");
system("pause");
break;
case 2:
printf("\n请输入房间标准:[1]单人房,[2]双人房:");
scanf("%d",&m);
printf("请输入房号[1-20]:");
scanf("%d",&n);
num=100*m+n;
print(head,num);
system("pause");
break;
case 3:
printf("\n请输入房间标准:[1]单人房,[2]双人房:");
scanf("%d",&m);
printf("请输入房号[1-20]:");
scanf("%d",&n);
num=100*m+n;
cost(head,num);
system("pause");
break;
case 4:
printf("请输入房间标准:[1]单人房,[2]双人房:");
scanf("%d",&m);
if(m==1)
sing--;
else
doub--;
printf("请输入房号[1-20]:");
scanf("%d",&n);
num=100*m+n;
head=delete_room(head,num);
printf("删除成功,");
system("pause");
break;
case 0:
break;
}
system("cls");
}while(choice!=0);

}
struct hotel * creat()
{
struct hotel *head;
int size=sizeof(struct hotel);


head=NULL;
return head;
}
struct hotel * open_room(struct hotel *head,struct hotel *p)
{
struct hotel *ptr,*ptr1,*ptr2;
ptr2=head;
ptr=p;
if(head==NULL){
head=ptr;
head->next=NULL;
}
else{
while((p->num>ptr2->num)&&(ptr2->next!=NULL)){
ptr1=ptr2;
ptr2=ptr2->next;
}
if(ptr->num<=ptr2->num){
if(head==ptr2)
head=ptr;
else
ptr1->next=ptr;
ptr->next=ptr2;
}
else{
ptr2->next=ptr;
ptr->next=NULL;
}
}
return head;
}
void print(struct hotel *head,int num)
{
struct hotel *ptr;
int flag=0;
for(ptr=head;ptr;ptr=ptr->next){
if(num==ptr->num){
flag=1;
break;
}
}
if(flag==1){
if(num/100==1)
printf("\n房间标准:单人房\n");
else
printf("\n房间标准:双人房\n");
printf("房号:%d\n",(ptr->num)%100);
printf("姓名:%s\n",ptr->name);
if(ptr->standard==1)
printf("计费方式:计时\n");
else
printf("计费方式:计天\n");
printf("单价:%d元\n",ptr->price);
printf("押金:%d元\n",ptr->deposit);
}
else
printf("此房间无入住记录。\n");
}
int search(struct hotel *head,int num)
{
struct hotel *ptr;
for(ptr=head;ptr;ptr=ptr->next){
if(num==ptr->num){
return num;
}
}
}
struct hotel * delete_room(struct hotel *head,int num)
{
struct hotel *ptr,*ptr2;
while(head!=NULL&&head->num==num){
ptr2=head;
head=head->next;
free(ptr2);
}
if(head==NULL)
return NULL;
ptr=head;
ptr2=head->next;
while(ptr2!=NULL){
if(ptr2->num==num){
ptr->next=ptr2->next;
free(ptr2);
}
else{
ptr=ptr2;
}
ptr2=ptr->next;
}
return head;
}
void cost(struct hotel *head,int num)
{
struct hotel *ptr;
int flag,cost;
flag=0;
for(ptr=head;ptr;ptr=ptr->next){
if(num==ptr->num){
flag=1;
break;
}
}
ptr->time_end=clock();
if(flag==1){
ptr->time_total=ptr->time_end-ptr->time_start;
if(ptr->standard==1){
ptr->time_total=(ptr->time_end-ptr->time_start)/60/60/24;
if(ptr->time_total==0)
ptr->time_total++;
printf("本房间共被租用%d天\n",ptr->time_total);
cost=ptr->price*ptr->time_total;
printf("总共花费%d元\n",cost);
}
else if(ptr->standard==0){
ptr->time_total=ptr->time_end-ptr->time_start/60/60;
if(ptr->time_total==0)
ptr->time_total++;
printf("本房间共被租用%d小时\n",ptr->time_total);
cost=ptr->price*ptr->time_total;
printf("总共花费%d元\n",cost);
}
}
}

[解决办法]

C/C++ code
int search(struct hotel *head,int num){    struct hotel *ptr;    for(ptr=head;ptr;ptr=ptr->next){        if(num==ptr->num){            return num;        }    }} 

读书人网 >C语言

热点推荐