① c語言編寫酒店預訂管理系統的好處
C語言編寫酒店預訂管理系統的好處如下:
1.C語言時具有結構化的控制語句,可以用於實現函數的邏輯控制,方便麵向過程的程序設計。
2.C語言豐富的數據類型,不僅包含有傳統的字元型、整型、浮點型、數組類型等數據類型,還具有其他編程語言所不具備的數據類型,其中以指針類型數據使用最為靈活,可以通過編程對各種數據結構進行計算。對應於酒店各部分管理數據的眾多項目也沒有問題。
管理系統是為達到組織目標,針對管理對象,由具有特定管理職能和內在聯系的各種管理機構、管理制度、管理過程、管理方法所構成的完整的組織管理體系。在企業中,這個總系統可分為計劃經營,生產技術、勞動人事、財務成本和生活服務等子系統。它們之間,既有區別,又有聯系。子系統的目標要服從企業管理系統的總目標。各個子系統的作用不是平列的,其中有一個子系統對實現總目標居中心地位,起主導作用。把企業管理看作一個系統,就能夠採取系統分析的方法,綜合研究企業的各項專業管理,把生產經營活動的內部條件和外部環境、定量分析和定性分析有機地結合起來,選擇最優方案,提高經濟效益,促進生產發展。
② 求幫助!!C語言 賓館客房管理系統!!!!高分懸賞!!!!緊急!!緊急!!!!!!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//***********************************************************************************
void initial_room(); //初始化80個房間信息
void welcome(); //驗證用戶登陸,登陸成功顯示歡迎信息
void enter();
void book_room();
void check_in();
void check_out();
void inquire();
int i=0;
//***********************************************************************************
struct Room
{
int number;
int dank;
int price;
int state;
};
struct Customer
{
char name[10],ID[19];
int room_number;
int prepaid;
int change;
int day;
};
void set_name(struct Customer *cs, char *n)
{
strcpy(cs->name,n);
}
void set_ID(struct Customer *cs, char *p)
{
strcpy(cs->ID,p);
}
void set_room_number(struct Customer *cs, int n)
{
cs->room_number=n;
}
void set_day(struct Customer *cs, int d)
{
cs->day=d;
}
void set_prepaid(struct Customer *cs, int p)
{
cs->prepaid=p;
}
char *get_name(struct Customer *cs)
{
return cs->name;
}
char *get_ID(struct Customer *cs)
{
return cs->ID;
}
int get_room_number(struct Customer *cs)
{
return cs->room_number;
}
int get_day(struct Customer *cs)
{
return cs->day;
}
int get_prepaid(struct Customer *cs)
{
return cs->prepaid;
}
//***********************************************************************************
struct Room room[80];
struct Customer *customer[80];
void CCustomer(struct Customer *cs)
{
printf("請您輸入顧客的姓名\n");
scanf("%s",&cs->name);
printf("請您輸入顧客的身份證號碼\n");
scanf("%s",&cs->ID);
cs->prepaid = cs->change = cs->day = 0;
}
void FCustomer()
{
printf("該顧客退房成功!");
}
int main(void) //程序入口從這里開始運行
{
char choice='1';
initial_room(); //初始化80個房間的信息,分四個等級
welcome(); //驗證用戶登陸,登陸成功顯示歡迎信息
while(choice=='1')
{
enter(); //根據用戶的選擇執行不同的功能
printf("\n");
printf("繼續使用本系統請按\"1\",退出請按\"2\"! ");
fflush(stdin);
scanf("%c",&choice);
printf("\n");
}
return 0;
}
//系統登陸界面***********************************************************************
void welcome() //驗證用戶登陸,登陸成功顯示歡迎信息
{
char name[4],code[7];
printf("請輸入用戶名和密碼(以空格隔開):\n");
scanf("%s%s",&name,&code);
while((strcmp(name,"000")!=0)||(strcmp(code,"666666")!=0))
{
printf("用戶名或密碼輸入有誤,請重新輸入!\n");
scanf("%s%s",&name,&code);
}
printf("\n");
printf("\n");
printf(" ▲***************************▲\n");
printf(" △ 歡迎使用賓館客房管理系統! △\n");
printf(" ▲***************************▲\n");
printf("\n");
}
//系統入口***************************************************************************
void enter()
{
int kind_of_service;
printf("請選擇服務類別:訂房、入住、退房還是查詢? \n");
printf(" 1->定房 2->入住 3->退房 4->查詢: ");
scanf("%d",&kind_of_service);
if((kind_of_service>4) || (kind_of_service<1))
{
printf("您的輸入有誤,請重試!\n");
scanf("%d",&kind_of_service);
}
else
{
switch(kind_of_service)
{
case 1: book_room();
break;
case 2: check_in();
break;
case 3: check_out();
break;
case 4: inquire();
break;
}
}
}
//訂房實現***************************************************************************
void book_room()
{
int room_standard,day;
customer[i] = (struct Customer*)malloc(sizeof(struct Customer));
CCustomer(customer[i]);
printf("請您選擇預定房間的標准:\n");
printf("1.單人間/天150元\n2.雙人間/天200元\n3.標准間/天300元\n4.總統套房/天600元\n");
scanf("%d",&room_standard);
printf("請輸入預定天數\n");
scanf("%d",&day);
set_day(customer[i],day);
switch(room_standard)
{
int n;
case 1:
printf("住房費用總共為: %d 元\n",day*150); //計算住房費用
for(n=0;n<20;n++) //從第一個級別的房間中查找一個空閑的房間
{
if(room[n].state==0) //state=0表示該住房沒有被預定的
{
printf("預定成功★房間號碼為: %d\n",room[n].number);
room[n].state=1;
set_room_number(customer[i],room[n].number);
break;
}
}
break;
case 2:
printf("住房費用總共為: %d 元\n",day*200);
for(n=20;n<40;n++)
{
if(room[n].state==0)
{
printf("預定成功★房間號碼為: %d\n",room[n].number);
room[n].state=1;
set_room_number(customer[i],room[n].number);
break;
}
}
break;
case 3:
printf("住房費用總共為: %d 元\n",day*300);
for(n=40;n<60;n++)
{
if(room[n].state==0)
{
printf("預定成功★房間號碼為: %d\n",room[n].number);
room[n].state=1;
set_room_number(customer[i],room[n].number);
break;
}
}
break;
case 4:
printf("住房費用總共為: %d 元\n",day*600);
for(n=60;n<80;n++)
{
if(room[n].state==0)
{
printf("預定成功★房間號碼為: %d\n",room[n].number);
room[n].state=1;
set_room_number(customer[i],room[n].number);
break;
}
}
break;
}
i++; //住房的顧客數加1
}
//入住登記***************************************************************************
void check_in()
{
char name1[10],id1[19];
int ding_or_no,prepaid;
int j;
printf("該顧客訂房了嗎? (1->訂了 2->沒訂) ");
scanf("%d",&ding_or_no);
if(ding_or_no==1)
{
printf("請輸入顧客的姓名:\n");
scanf("%s",&name1);
printf("請輸入顧客的身份證號碼:\n");
scanf("%s",&id1);
for(j=0;j<i;j++)
{
if((strcmp(get_name(customer[j]),name1)==0)&&(strcmp(get_ID(customer[j]),id1)==0)) //查找該顧客的定房信息
{
int num=get_room_number(customer[j]); //取得定房的房間號
printf("顧客 %s 今天入住本賓館! 房間號碼為: %d\n",name1,num);
switch(num/100)
{
case 6:
prepaid=get_day(customer[j])*150;
set_prepaid(customer[j],prepaid);
printf("請收房費 %d元整!\n",prepaid); //開始收費
room[num%100-1].state=2; //修改房間狀態為入住狀態
break;
case 7:
prepaid=get_day(customer[j])*200;
set_prepaid(customer[j],prepaid);
printf("請收房費 %d元整!\n",prepaid);
room[19+num%100].state=2;
break;
case 8:
prepaid=get_day(customer[j])*300;
set_prepaid(customer[j],prepaid);
printf("請收房費 %d元整!\n",prepaid);
room[39+num%100].state=2;
break;
case 9:
prepaid=get_day(customer[j])*600;
set_prepaid(customer[j],prepaid);
printf("請收房費 %d元整!\n",prepaid);
room[59+num%100].state=2;
break;
}
break;
}
}
}
else
{
int room_standard,day;
customer[i] = (struct Customer*)malloc(sizeof(struct Customer));
CCustomer(customer[i]);
printf("請您選擇預定房間的標准:\n");
printf("1.單人間/天150元\n2.雙人間/天200元\n3.標准間/天300元\n4.總統套房/天600元\n");
scanf("%d",&room_standard);
printf("請輸入住宿天數\n");
scanf("%d",&day);
set_day(customer[i],day);
switch(room_standard)
{
int n;
case 1:
prepaid=day*150;
set_prepaid(customer[i],prepaid);
printf("請收房費 %d元整!\n",prepaid);
for(n=0;n<20;n++)
{
if(room[n].state==0)
{
printf("入住房間號碼為: %d\n",room[n].number);
room[n].state=2;
set_room_number(customer[i],room[n].number);
break;
}
}
break;
case 2:
prepaid=day*200;
set_prepaid(customer[i],prepaid);
printf("請收房費 %d元整!\n",prepaid);
for(n=20;n<40;n++)
{
if(room[n].state==0)
{
printf("入住房間號碼為: %d\n",room[n].number);
room[n].state=2;
set_room_number(customer[i],room[n].number);
break;
}
}
break;
case 3:
prepaid=day*300;
set_prepaid(customer[i],prepaid);
printf("請收房費 %d元整!\n",prepaid);
for(n=40;n<60;n++)
{
if(room[n].state==0)
{
printf("入住房間號碼為: %d\n",room[n].number);
room[n].state=2;
set_room_number(customer[i],room[n].number);
break;
}
}
break;
case 4:
prepaid=day*600;
set_prepaid(customer[i],prepaid);
printf("請收房費 %d元整!\n",prepaid);
for(n=60;n<80;n++)
{
if(room[n].state==0)
{
printf("入住房間號碼為: %d\n",room[n].number);
room[n].state=2;
set_room_number(customer[i],room[n].number);
break;
}
}
break;
}
i++;
}
}
//退房結算***************************************************************************
void check_out()
{
char name2[10],id2[19];
int standard,j,room_number,day1,day2,day;
printf("請輸入要退房的顧客姓名和身份證號碼:\n");
scanf("%s%s",&name2,&id2);
printf("請輸入該顧客實住天數:\n");
scanf("%d",&day2);
for(j=0;j<i;j++)
{
if((strcmp(get_name(customer[j]),name2)==0)&&(strcmp(get_ID(customer[j]),id2)==0))
{
char account;
room_number=get_room_number(customer[j]);
standard=room_number/100;
day1=get_day(customer[j]);
day=day1-day2;
switch(standard)
{
case 6:
printf("顧客的房間號是%d :為單人間,每天150元\n",room_number);
printf("該顧客預付了房費 %d元, 實際消費 %d元整!\n",get_prepaid(customer[j]),day2*150);
printf("\n");
if(day>0)
printf("請退給該顧客 %d 元整!\n",day*150);
if(day<0)
printf("請補收該顧客住房費 %d 元整!\n",-day*150);
break;
case 7:
printf("顧客的房間號是%d :為單人間,每天200元\n",room_number);
printf("該顧客預付了房費 %d元, 實際消費 %d元整!\n",get_prepaid(customer[j]),day2*200);
printf("\n");
if(day>0)
printf("請退給該顧客 %d 元整!\n",day*200);
if(day<0)
printf("請補收該顧客住房費 %d 元整!\n",-day*200);
break;
case 8:
printf("顧客的房間號是%d :為單人間,每天300元\n",room_number);
printf("該顧客預付了房費 %d元, 實際消費 %d元整!\n",get_prepaid(customer[j]),day2*300);
printf("\n");
if(day>0)
printf("請退給該顧客 %d 元整!\n",day*300);
if(day<0)
printf("請補收該顧客住房費 %d 元整!\n",-day*300);
break;
case 9:
printf("顧客的房間號是%d :為單人間,每天600元\n",room_number);
printf("該顧客預付了房費 %d元, 實際消費 %d元整!\n",get_prepaid(customer[j]),day2*600);
printf("\n");
if(day>0)
printf("請退給該顧客 %d 元整!\n",day*600);
if(day<0)
printf("請補收該顧客住房費 %d 元整!\n",-day*600);
break;
}
printf("\n");
printf("退房核算清楚,請按1: ");
fflush(stdin);
scanf("%c",&account);
if(account=='1')
{
int k;
for(k=0;k<80;k++)
{
if(room[k].number==get_room_number(customer[j]))
room[k].state=0;
}
i--;
for(;j<i;j++)
{
customer[j]=customer[j+1];
}
free(customer[i]);
FCustomer();
}
}
}
}
//信息查詢***************************************************************************
void inquire()
{
char inquire_choice;
printf("房間信息查詢請按1, 顧客信息查詢請按2: ");
fflush(stdin);
scanf("%c",&inquire_choice);
if(inquire_choice=='1')
{
int j,k=0;
printf("\n");
printf("下列房間還沒人預訂,也沒人入住:\n");
for(j=0;j<80;j++)
{
if(room[j].state==0)
{
if(k%10==0)
printf("\n");
printf("%d\t",room[j].number);
k++;
}
}
printf("\n");
printf("\n");
k=0;
printf("下列房間已預訂:\n");
for(j=0;j<80;j++)
{
if(room[j].state==1)
{
if(k%10==0)
printf("\n");
printf("%d\t",room[j].number);
k++;
}
}
k=0;
printf("\n");
printf("\n");
printf("下列房間有人入住:\n");
for(j=0;j<80;j++)
{
if(room[j].state==2)
{
if(k%10==0)
printf("\n");
printf("%d\t",room[j].number);
k++;
}
}
printf("\n");
printf("\n");
}
else if(inquire_choice=='2')
{
char inquire_choice;
int j;
printf("按姓名查詢請按1, 按身份證查詢請按2: \n");
fflush(stdin);
scanf("%c",&inquire_choice);
if(inquire_choice=='1')
{
char name3[10];
printf("請輸入顧客的姓名: \n");
scanf("%s",&name3);
for(j=0;j<i;j++)
{
if(strcmp(get_name(customer[j]),name3)==0)
{
printf("%s的住房信息如下:\n",name3);
printf("\t房間號為: %d\n",get_room_number(customer[j]));
printf("\t預付房費為: %d\n",get_prepaid(customer[j]));
}
}
}
if(inquire_choice=='2')
{
char id3[10];
int j;
printf("請輸入顧客的身份證: \n");
scanf("%s",&id3);
for(j=0;j<i;j++)
{
if(strcmp(get_ID(customer[j]),id3)==0)
{
printf("%s的住房信息如下:\n",get_name(customer[j]));
printf("\t房間號為: %d\n",get_room_number(customer[j]));
printf("\t預付房費為: %d\n",get_prepaid(customer[j]));
}
}
}
}
}
//房間信息初始化*********************************************************************
void initial_room() //對80個房間進行初始化,分4個等級
{
int j,k=601;
for(j=0;j<20;j++)
{
room[j].number=k++;
room[j].dank=1;
room[j].price=150;
room[j].state=0;
}
k=701;
for(j=20;j<40;j++)
{
room[j].number=k++;
room[j].dank=2;
room[j].price=200;
room[j].state=0;
}
k=801;
for(j=40;j<60;j++)
{
room[j].number=k++;
room[j].dank=3;
room[j].price=300;
room[j].state=0;
}
k=901;
for(j=60;j<80;j++)
{
room[j].number=k++;
room[j].dank=4;
room[j].price=600;
room[j].state=0;
}
}
③ 數據結構,C語言編寫宿舍管理系統
。。。。。。。。。。。。。。。。。。。。正在寫
/*學生宿舍信息管理系統*/
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<string.h>
#define LEN sizeof(struct commdity)
struct student
{
char name[15];/*學生姓名*/
int sex;/*學生性別*/
};
struct commdity
{
int num;/*宿舍號碼*/
int number;/*容納人數---並沒有賦予實際作用*/
int money;/*住宿費用*/
struct student Student[8];/*最多能住個8人上限*/
};
struct commdity comm[50];
void menu()/*菜單*/
{
printf("\t\t\t\t住宿管理系統:\n\n");
printf("\t\t\t\t0.退出\n");
printf("\t\t\t\t1.錄入宿舍的信息\n");
printf("\t\t\t\t2.錄入學生的信息\n");
printf("\t\t\t\t3.刪除學生信息\n");
printf("\t\t\t\t4.查找學生信息\n");
printf("\t\t\t\t請選擇:(0-7):");
}
void in()/*對宿舍信息的錄入*/
{
int i,m=0;
char ch[2];
FILE *fp;
if((fp=fopen("data","ab+"))==NULL)
{
printf("不能打開文件\n");
return;
}
while(!feof(fp))
{
if(fread(&comm[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("沒有任何記錄");
}
else
{
system("cls");
printf("存在記錄");
}
if((fp=fopen("data","wb"))==NULL)
{
printf("不能打開文件");
return;
}
for(i=0;i<m;i++)
{
if(fwrite(&comm[i],LEN,1,fp)!=1)
{
printf("不能保存");
getch();
}
}
printf("是否輸入(y\n)");
scanf("%s",ch);
while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
printf("宿舍編號");
scanf("%d",&comm[m].num);
for(i=0;i<m;i++)
{
if(comm[i].num==comm[m].num)
{
printf("該宿舍已經存在,按任意鍵繼續");
getch();
fclose(fp);
return;
}
}
printf("請輸入宿舍容納人數");
scanf("%d",&comm[m].number);
printf("請輸入住宿費用");
scanf("%d",&comm[m].money);
if(fwrite(&comm[m],LEN,1,fp)!=1)
{
printf("不能保存");
getch();
}
else
{
printf("已經保存 \n");
m++;
}
printf("是否繼續");
scanf("%s",ch);
}
fclose(fp);
printf("OK!\n");
}
void studentInput()/*分配學生到指定宿舍*/
{
FILE *fp;
int i,j,m=0,snum;
if((fp=fopen("data","ab+"))==NULL)
{
printf("不能打開文件!\n");
return;
}
while(!feof(fp))
{
if(fread(&comm[m],LEN,1,fp)==1)
{
m++;
}
}
printf("一共有%d條記錄",m);
fclose(fp);
if((fp=fopen("data","wb"))==NULL)
{
printf("不能打開文件\n");
return;
}
printf("請輸入學生的宿舍編號\n");
scanf("%d",&snum);
for(i=0;i<m;i++)
{
if(snum==comm[i].num)
{
printf("存在該宿舍!\n");
for(j=0;j<8;j++)
{
if(comm[i].Student[j].sex==NULL)
{
printf("請輸入學生的名稱\n");
scanf("%s",&comm[i].Student[j].name);
printf("請輸入學生的性別(1-男,2-女)\n");
scanf("%d",&comm[i].Student[j].sex);
for(i=0;i<m;i++)
{
if(fwrite(&comm[i],LEN,1,fp)!=1)
{
printf("不能保存");
getch();
}
}
break;
}
}
fclose(fp);
return;
}
}
fclose(fp);
printf("沒有找到");
return;
}
void search()/*對學生信息查找*/
{
int i,m=0;
FILE *fp;
int s;
char ch[2];
int num=0;
printf("請輸入編號\n");
scanf("%d",&num);
if((fp=fopen("data","ab+"))==NULL)
{
printf("文件不能打開!\n");
return;
}
while(!feof(fp))
{
if(fread(&comm[m],LEN,1,fp)==1)
{
m++;
}
}
if(m==0)
{
printf("沒有任何記錄存在");
return;
}
printf("一共有%d記錄\n",m);
for(i=0;i<m;i++)
{
if(num==comm[i].num)
{
printf("存在該記錄 是否顯示\n");
scanf("%s",ch);
if(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
printf("%d宿舍: 住宿人數%d\n",comm[i].num,comm[i].number);
for(s=0;s<8;s++)
{
if(comm[i].Student[s].sex!=NULL)
{
printf("\n學生:%s 性別:%d\n",comm[i].Student[s].name,comm[i].Student[s].sex);
}
}
}
return;
}
}
printf("沒有找到");
}
void deleStudent()/*刪除住宿的學生信息*/
{
FILE *fp;
int snum,s,i,j,m=0;
char ch[2];
char name[20];
if((fp=fopen("data","ab+"))==NULL)
{
printf("不能打開文件!\n");
return;
}
while(!feof(fp))
{
if(fread(&comm[m],LEN,1,fp)==1)
{
m++;
}
}
fclose(fp);
if(m==0)
{
printf("沒有記錄\n");
return;
}
printf("請輸入宿舍編號\n");
scanf("%d",&snum);
for(i=0;i<m;i++)
{
if(comm[i].num==snum)
{
printf("已經找到該宿舍!\n");
printf("請輸入該學生的名稱!\n");
scanf("%s",&name);
for(s=0;s<8;s++)
{
if(strcmp(comm[i].Student[s].name,name)==0)
{
printf("已將查詢到該學生 (是否刪除y\n)\n");
scanf("%s",ch);
if(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
{
for(j=s;j<8;j++)
{
comm[i].Student[j]=comm[i].Student[j+1];
}
printf("刪除成功!\n");
if((fp=fopen("data","wb"))==NULL)
{
printf("不能打開文件");
return;
}
for(i=0;i<m;i++)
{
if(fwrite(&comm[i],LEN,1,fp)!=1)
{
printf("不能保存");
getch();
}
}
}
fclose(fp);
return;
}
}
}
}
printf("沒有找到\n");
return;
}
int main()
{
int n;
menu();
scanf("%d",&n);
while(n!=0)
{
switch(n)
{
case 1:
{
in();
break;
}
case 2:
{
studentInput();
break;
}
case 3:
{
deleStudent();
break;
}
case 4:
{
search();
break;
}
default:
{
break;
}
}
menu();
scanf("%d",&n);
}
system("pause");
}
/*程序結束*/
/*保證語法上沒有任何錯誤 有很多程序段重復,你可以自己改改,還有那個容納人數我直接固定了8個 不過問題不大*/
④ C語言程序設計 客房管理系統
這個很簡單的,就是一個讀寫文件功能和指針。
讀寫文件 fopen() fread() fwrite() ,其中需要打開為binary,或者將結構轉化為字元數組。
當讀入一個結構,罩野就將它當作結構指針賦值。得到指針後就可以操作了。
查詢功能可能需要遍歷文件。應有一個循環。並且可以判斷是哪個條件。while( 指針->成員 == 條件 ){ 處理 }。
當然新用戶登記也是讀寫文件物激喊,如果要安全好一點的可以查個MD5演算法加密一下。
以下是一個保存的實例(手寫的,錯誤難免):
bool saveto(char *filename, hotel *proom)
{
//檢查是否有信息
FILE *fp = fopen(filename, "r");
if( fp )//打開失敗
{
fp = fopen(filename, "w");//鉛喊寫方式打開
if( !fp )//打開成功
{
goto _WRITE;
}
else return false; //又失敗了,退出
}
else //只讀方式打開成功了!
{
fclose(fp); //關閉原來的
}
//追加方式打開
fp = fopen(filename, "a");
if( !fp )
{
goto _WRITE;
}
else return false; //如果追加方式沒打開
_WRITE:
//寫入數據
fwrite((void*)proom, sizeof(hotel), sizeof(hotel), fp);
//關閉文件
fclose(fp);
//退出
goto _END;
_END:
return true;
}
⑤ c語言這個最後的客房管理系統怎麼編寫 求助啊
很簡單啊 給我發過來 我給你答案
⑥ 用C語言編寫宿舍管理查詢系統
以前給別人寫的,完全原創,已經在VC上編譯運行通過:
#include <conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct /*定義結構體數組*/
{
char num[10]; /*學號*/
char name[20]; /*姓名*/
int roomID; /*房號*/
}Student;
Student stu[80]; /*結構體數組變數*/
int menu_select() /*菜單函數*/
{
char c;
do{
system("cls"); /*運行前清屏*/
printf("\t\t************宿舍管理查詢系統************\n"); /*菜單選擇*/
printf("\t\t | 1. 輸入信息 |\n");
printf("\t\t | 2. 顯示所有信息 |\n");
printf("\t\t | 3. 排序 |\n");
printf("\t\t | 4. 查詢信息 |\n");
printf("\t\t | 0. Quit |\n");
printf("\t\t****************************************\n");
printf("\t\t\t請輸入處理種類(0-4):");
c=getchar(); /*讀入選擇*/
}while(c<'0'||c>'4');
return(c-'0'); /*返回選擇*/
}
int Input(Student stud[],int n) /*輸入若干條記錄*/
{int i=0;
char sign,x[10]; /*x[10]為清除多餘的數據所用*/
while(sign!='n'&&sign!='N') /*判斷*/
{
printf("\t\t\t學號:"); /*交互輸入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t\t姓名:");
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\t房號:");
scanf("\t\t\t%d",&stud[n+i].roomID);
gets(x); /*清除多餘的輸入*/
printf("\t\t\t還需要繼續輸入嗎?(Y/N)");
scanf("\t\t\t%c",&sign); /*輸入判斷*/
i++;
}
return(n+i);
}
void Display(Student stud[],int n) /*顯示所有記錄*/
{
int i;
printf("\t\t\t-----------------------------------\n"); /*格式頭*/
printf("\t\t\t學號\t\t姓名\t\t房號\n");
printf("\t\t\t-----------------------------------\n");
for(i=1;i<n+1;i++) /*循環輸入*/
{
printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].roomID);
if(i>1&&i%10==0) /*每十個暫停*/
{
printf("\t\t\t-----------------------------------\n"); /*格式*/
printf("\t\t\t");
system("pause");
printf("\t\t\t-----------------------------------\n");
}
}
printf("\t\t\t");
system("pause");
}
void Sort_by_num(Student stud[],int n) /*按學號排序*/
{ int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].roomID;
q=&stud[j].roomID;
s=*p;
*p=*q;
*q=s;
}
Display(stu,n);
}
void Sort_by_name(Student stud[],int n) /*按姓名排序*/
{ int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].name,stud[j+1].name)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].roomID;
q=&stud[j].roomID;
s=*p;
*p=*q;
*q=s;
}
Display(stu,n);
}
void Sort_by_room(Student stud[],int n) /*按房號排序*/
{ int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(stud[j].roomID>stud[j+1].roomID)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].roomID;
q=&stud[j].roomID;
s=*p;
*p=*q;
*q=s;
}
Display(stu,n);
}
void Query_a_record_by_name(Student stud[],int n) /*查找並顯示一個記錄*/
{
char s[20];
int i=0;
printf("\t\t\t請輸入姓名:"); /*互動式輸入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\t沒有找到相關信息!\n"); /*輸入失敗信息*/
return;
}
printf("\t\t\this(her) number:%s\n",stud[i].name);/*輸出該學生信息*/
printf("\t\t\this(her) number:%s\n",stud[i].num);
printf("\t\t\this(her) roomID:%d\n",stud[i].roomID);
}
void Query_a_record_by_num(Student stud[],int n) /*查找並顯示一個記錄*/
{
char s[20];
int i=0;
printf("\t\t\t請輸入學號:"); /*互動式輸入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].num,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\t沒有找到相關信息!\n"); /*輸入失敗信息*/
return;
}
printf("\t\t\this(her) number:%s\n",stud[i].name);/*輸出該學生信息*/
printf("\t\t\this(her) number:%s\n",stud[i].num);
printf("\t\t\this(her) roomID:%d\n",stud[i].roomID);
}
void Query_a_record_by_room(Student stud[],int n) /*查找並顯示一個記錄*/
{
int s;;
int i=0;
printf("\t\t\t請輸入房號:"); /*互動式輸入*/
scanf("\t\t\t%d",&s);
while(stud[i].roomID==s) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\t沒有找到相關信息!\n"); /*輸入失敗信息*/
return;
}
printf("\t\t\this(her) number:%s\n",stud[i].name);/*輸出該學生信息*/
printf("\t\t\this(her) number:%s\n",stud[i].num);
printf("\t\t\this(her) roomID:%d\n",stud[i].roomID);
}
void WritetoText(Student stud[],int n) /*將所有記錄寫入文件*/
{
int i=0;
FILE *fp; /*定義文件指針*/
if((fp=fopen("stu.txt","w"))==NULL) /*打開文件*/
{
printf("\t\t\t文件打開失敗!!\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n); /*循環寫入數據*/
while(i<n)
{
fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].roomID);
i++;
}
fclose(fp); /*關閉文件*/
printf("文件保存完畢!\n"); /*返回成功信息*/
}
void main() /*主函數*/
{
int n=0,i;
for(;;)
{
switch(menu_select()) /*選擇判斷*/
{
case 1:
printf("\t\t\t輸入相關情報\n"); /*輸入若干條記錄*/
n=Input(stu,n);
break;
case 2:
printf("\t\t\宿舍狀況一覽\n"); /*顯示所有記錄*/
Display(stu,n);
break;
case 3:
printf("\t\t\t請輸入按什麼進行排序(1.姓名、2.學號、3.房號)\n\t\t\t");
scanf("%d",&i);
while(i)
{
if(i<1||i>3)
{
printf("錯誤輸入!!\n");
printf("\t\t\t請輸入按什麼進行排序(1.姓名、2.學號、3.房號)\n\t\t\t");
continue;
}
switch(i)
{
case 1:
Sort_by_name(stu,n);
break;
case 2:
Sort_by_num(stu,n);
break;
case 3:
Sort_by_room(stu,n);
break;
}
break;
}
printf("\t\t\t排序完畢!\n");
printf("\t\t\t");
WritetoText(stu,n);
system("pause");
break;
case 4:
printf("\t\t\t請輸入按什麼進行查詢(1.姓名、2.學號、3.房號)\n\t\t\t");
scanf("%d",&i);
while(i)
{
if(i<1||i>3)
{
printf("錯誤輸入!!\n");
printf("\t\t\t請輸入按什麼進行查詢(1.姓名、2.學號、3.房號)\n\t\t\t");
continue;
}
switch(i)
{
case 1:
Query_a_record_by_name(stu,n);
break;
case 2:
Query_a_record_by_num(stu,n);
break;
case 3:
Query_a_record_by_room(stu,n);
break;
}
break;
}
printf("\t\t\t");
system("pause");
break;
case 0:
printf("\t\t\t歡迎使用!!\n"); /*結束程序*/
printf("\t\t\t");
system("pause");
exit(0);
}
}
}
⑦ C語言程序設計 酒店管理 急急急急 求編程高手
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=0;flag&&i<4;i++)
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 )/*檢查身份證號長度*/
{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:YES;0: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.同一個客戶在同一天兩次住進賓館(全表搜索!身份證號和入住日期相同)
4.同一身份證號,姓名和性別不同(全表搜索!)
另外,應該完成的任務有:
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 name sex 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 name sex 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 name sex 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 name sex 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 name sex 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 name sex 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 name sex 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 name sex 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=3;i>-1;i--)
{j=year%10;
temp[i]=j+'0';
year=year/10;
}
for(i=1;i>-1;i--)
{j=month%10;
temp[4+i]=j+'0';
month=month/10;
}
for(i=1;i>-1;i--)
{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;
int flag=1;
clr();
if(NULL==head_room) {printf("head_room=0\n");getch();clr();return 0;}
printf("Please input CLIENT ID(18bytes)!\n");/*mode=1表示根據身份證號查找特定客戶*/
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表示根據身份證號查找特定客戶*/
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 name sex 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表示根據身份證號查找特定客戶*/
scanf("%s",name);
}
pc->fee=fee;
pc->cost=cost;
pc->time=time;
strcpy(pc->collect,name);
printf("Account end! Thank you!\n");
return 1;
}
⑧ C語言客房管理系統,求大神
//inhead.h
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"ctype.h"
#defineMaxRoom20
structguest_info
{
charname[8];
charfee[5];
charidnum[18];
chartime[14];
charouttime[14];
intnumber;
chartel[11];
intr;
}room[21];
voidLogin();
voidSearch();
voidChange();
voidout();
voidsave();
voidload();
//inlogin.c
#include"head.h"
voidLogin()
{
inti;
system("cls");
printf("請輸入客房號: ");
scanf("%d",&i);
if(room[i].r==1)
{
printf("對不起,該房間已入住");
return;
}
room[i].number=i;
room[i].r=1;
printf("請輸入客戶姓名、身份證號碼、聯系電話、入住時間、退房時間、費用: ");
scanf("%s%s%s%s%s%s",room[i].name,room[i].idnum,room[i].tel,room[i].time,room[i].outtime,room[i].fee);
save();
printf("恭喜,登記成功!! ");
}
voidsave()
{
inti;
FILE*fp;
if((fp=fopen("room.txt","wb"))==NULL)
{
printf("無法打開文件 ");
return;
}
for(i=0;i<MaxRoom;i++)
if(fwrite(&room[i],sizeof(structguest_info),1,fp)!=1)
printf("文件讀取錯誤 ");
printf("文件寫入完成 ");
fclose(fp);
}
voidload()
{
FILE*fp;
inti;
if((fp=fopen("room.txt","rb"))==NULL)
{
printf("不知春能打開文件 ");
return;
}
for(i=0;i<MaxRoom;i++)
if(fread(&room[i],sizeof(structguest_info),1,fp)!=1)
{
if(feof(fp))
{
fclose(fp);
return;
}
printf("文件讀取錯誤 ");
}
fclose(fp);
system("cls");
printf("文件讀取成功 ");
}
voidChange()
{
inti;
system("cls");
printf("請輸入房間號: ");
scanf("%d",&i);
if(room[i].number==i)
{
printf("請輸入退房日期: ");
scanf("%s",room[i].outtime);
printf("請輸入費用: ");
scanf("%s",room[i].fee);
system("cls");
printf("修改成功!! ");
}
else
{
system("cls");
printf("該房間為空房!! ");
}
}
voidout()
{
inti;
printf("請輸入房間號: ");
scanf("%d",&i);
if(room[i].number==i)
{
搭虛耐room[i]=room[21];
save();
system("cls");
printf("退房成功 "譽旁);
}
else
{
system("cls");
printf("該房間為空房 ");
}
}
voidSearch()
{
inti;
system("cls");
printf("請輸入要查詢的房間號碼: ");
scanf("%d",&i);
if(room[i].number==i)
{
printf("姓名:%s ",room[i].name);
printf("客房號:%d ",room[i].number);
printf("聯系電話:%s ",room[i].tel);
printf("入住時間:%s ",room[i].time);
printf("退房時間:%s ",room[i].outtime);
printf("費用:%s ",room[i].fee);
}
else
{
printf("很抱歉,沒有找到該身份證登記的相關信息!!");
}
}
voidFreeRoom()
{
intf;
for(f=0;f<20;f++)
{
if(room[f].r==0)
printf("%d號房為空房 ",f);
else
printf("%d號房已入住 ",f);
}
}
//inmain.c
#include"head.h"
intmain()
{
inti;
intcount=20;
intj;
for(j=0;j<20;j++)
{
room[j].r=0;
}
do
{
printf(" ");
printf("****************************************************************************** ");
printf("**************************歡迎使用溫馨99客房登記系統************************** ");
printf("******************************歡迎員工------1號******************************* ");
printf("好消息,特價鍾點房40元/2小時,單人房140元/間,雙人房230元/間,憑學生證有7折優惠 ");
printf(" 1.--登記客房信息<Insert> ");
printf(" 2.--查詢客房信息<Search> ");
printf(" 3.--修改客房信息<Change> ");
printf(" 4.--用戶退房管理<Outside> ");
printf(" 5.--顯示當前空房信息<ShowTheFreeRomm> ");
printf(" 6.--把客房信息保存到文件<SaveTheInformationintoFile> ");
printf(" 7.--從文件記錄讀取客房信息(維護中)<ShowTheInformationfromFile> ");
printf(" 8--退出客房管理系統<Exit> ");
printf("****************>>>>此程序由舒昱鑫吐血打造Version:1.0Bate>>>>**************** ");
printf("****************************************************************************** ");
printf("****************************************************************************** ");
printf("輸入需要選擇的功能:");
scanf("%d",&i);
switch(i)
{
case1:Login();break;
case2:Search();break;
case3:Change();;break;
case4:out();break;
case5:FreeRoom();break;
case6:save();break;
case7:load();break;
case8:printf("謝謝使用溫馨99的客房登記系統,正在退出.......... 退出成功,按任意鍵關閉程序!! ");break;
default:printf("輸入錯誤,請從新選擇");break;
}
}
while(i!=8);
return0;
}
⑨ C語言課程設計 酒店管理程序
沒有時間寫,只有一點,朋友給的!
酒店管理
#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("請您輸入您的身份證號碼\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("請您輸入您的身份證號碼\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("再見");
}
}
⑩ C語言編寫酒店管理系統
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=0;flag&&i<4;i++)
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 )/*檢查身份證號長度*/
{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:YES;0: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.同一個客戶在同一天兩次住進賓館(全表搜索!身份證號和入住日期相同)
4.同一身份證號,姓名和性別不同(全表搜索!)
另外,應該完成的任務有:
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 name sex 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 name sex 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 name sex 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 name sex 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 name sex 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 name sex 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 name sex 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 name sex 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=3;i>-1;i--)
{j=year%10;
temp[i]=j+'0';
year=year/10;
}
for(i=1;i>-1;i--)
{j=month%10;
temp[4+i]=j+'0';
month=month/10;
}
for(i=1;i>-1;i--)
{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;
int flag=1;
clr();
if(NULL==head_room) {printf("head_room=0\n");getch();clr();return 0;}
printf("Please input CLIENT ID(18bytes)!\n");/*mode=1表示根據身份證號查找特定客戶*/
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表示根據身份證號查找特定客戶*/
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 name sex 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表示根據身份證號查找特定客戶*/
scanf("%s",name);
}
pc->fee=fee;
pc->cost=cost;
pc->time=time;
strcpy(pc->collect,name);
printf("Account end! Thank you!\n");
return 1;
}