C語言實現(xiàn)酒店客房管理系統(tǒng)課程設(shè)計
本文實例為大家分享了C語言實現(xiàn)酒店客房管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
設(shè)計目標(biāo):設(shè)計一個酒店客房管理系統(tǒng),用C語言實現(xiàn)。對該系統(tǒng)的要求如下:
一、需求描述
系統(tǒng)角色:
1.總臺服務(wù)員
能夠根據(jù)住客需求完成住客登記任務(wù),并完成客房管理功能。
1)登記入住功能
2)結(jié)賬功能
3)查詢房間功能
4)客房信息打印
5)統(tǒng)計功能
2.系統(tǒng)管理員
能夠添加、刪除和修改系統(tǒng)用戶(總臺服務(wù)員),設(shè)置用戶權(quán)限。包括
1)添加新用戶
2)刪除用戶
3)修改用戶權(quán)限
二、系統(tǒng)流程描述
系統(tǒng)啟動則進(jìn)入登陸菜單。
1.登陸流程
(1)程序運行,顯示登陸界面,請用戶輸入角色、賬號及密碼。
(2)用戶輸入賬號密碼后,系統(tǒng)校驗正確與否,正確則進(jìn)入功能菜單。錯誤則提示輸入錯誤,繼續(xù)顯示登陸界面。
2.總臺服務(wù)員使用流程描述:
1)主界面:
總臺服務(wù)員登陸成功后,系統(tǒng)顯示功能菜單:“1. 登記入住 2. 結(jié)賬3.查詢客房信息 4.客房信息打印6.客房統(tǒng)計7.退出”。
2)登記入住
(1)服務(wù)員輸入數(shù)字1,系統(tǒng)進(jìn)入登記入住界面,要求總臺服務(wù)員輸入客戶信息及房間信息。
(2)總臺服務(wù)員輸入客戶姓名、性別、年齡、身份證號、所需房間類型、房間號、房間單價、入住天數(shù)。
(3)系統(tǒng)根據(jù)輸入信息顯示應(yīng)付費用??偱_服務(wù)員收取費用后輸入收費金額。系統(tǒng)在客房記錄中添加該客戶的記錄并寫入磁盤。
(4)系統(tǒng)應(yīng)保證在所需房間不足時報告錯誤。
3)結(jié)賬
(1)服務(wù)員輸入數(shù)字2,系統(tǒng)進(jìn)入結(jié)賬界面,要求總臺服務(wù)員輸入房間信息。
(2)總臺服務(wù)員輸入房間號,系統(tǒng)顯示客戶名稱、房間單價、入住天數(shù)、總金額、應(yīng)付房款、實付房款、欠費金額或退款額等相關(guān)信息。并提示總臺服務(wù)員收取欠費金額或退還押金。
(3)總臺服務(wù)員輸入補交房款或退還押金數(shù)額后,系統(tǒng)將該客戶的入住記錄放入歷史入住記錄中。并將該房間設(shè)置為空閑。
4)查詢客房信息
(1)服務(wù)員輸入數(shù)字3,系統(tǒng)進(jìn)入查詢界面,并顯示“1.按顧客名稱查詢 2.按房間號查詢”。
(2)總臺服務(wù)員輸入1.系統(tǒng)提示服務(wù)員輸入顧客名稱,輸入后,系統(tǒng)顯示該顧客的入住記錄,包括顧客信息及入住房間號、房間單價、入住天數(shù)、總金額等相關(guān)信息。 如無該顧客的信息則打印“沒有此客戶的入住信息。”
(3)總臺服務(wù)員輸入2.系統(tǒng)提示服務(wù)員輸入房間號及查詢起止時間。輸入房間號及起止時間后,系統(tǒng)顯示該房間從起始時間到結(jié)束時間的入住客戶的姓名、身份證號、入住天數(shù)等信息。
5)客房信息打印
服務(wù)員輸入數(shù)字4,系統(tǒng)進(jìn)入客房信息打印界面。系統(tǒng)打印所有房間信息,按房間號排序,包括房間號、房間類型、是否有人入住、入住人數(shù)、入住天數(shù)等信息。
6)客房統(tǒng)計
服務(wù)員輸入數(shù)字5,系統(tǒng)進(jìn)入客房統(tǒng)計界面。系統(tǒng)打印本日的入住人數(shù)、入住房間數(shù)、空置房間數(shù)、入住率統(tǒng)計、空房率統(tǒng)計、實收房款。
7)退出
服務(wù)員選擇退出,則系統(tǒng)返回到登陸界面。
3.系統(tǒng)管理員使用流程
1)主界面:
管理員登陸成功后,系統(tǒng)顯示功能菜單:“1.用戶資料打印 2.添加用戶 3.刪除用戶 4.修改用戶權(quán)限 5退出”
2)用戶資料打?。?/p>
管理員選擇用戶資料打印功能,則進(jìn)入用戶資料打印界面,提示管理員輸入用戶賬號,管理員輸入后,系統(tǒng)打印該用戶的賬號、密碼、角色、權(quán)限等信息。
3)添加用戶
管理員選擇添加用戶功能,則進(jìn)入添加用戶界面,提示管理員輸入用戶賬號和初始密碼。管理員輸入后,系統(tǒng)打印該用戶相關(guān)信息并返回主界面。
4)刪除用戶
管理員選擇刪除用戶功能,則進(jìn)入刪除用戶界面,提示管理員輸入要刪除的用戶賬號。管理員輸入后,系統(tǒng)提示已刪除該用戶信息并返回主界面。
5)修改用戶權(quán)限
管理員選擇修改用戶權(quán)限功能,則進(jìn)入修改用戶權(quán)限界面,提示管理員輸入要修改的用戶賬號。管理員輸入后,系統(tǒng)打印該用戶的權(quán)限,并提示管理員輸入要修改后的權(quán)限,管理員輸入后,系統(tǒng)打印該用戶的信息并返回主界面。
6)退出
管理員選擇退出,則系統(tǒng)返回到登陸界面。
1)聲明部分
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<Windows.h> #include<string.h> #define LEN sizeof(struct hotel) typedef struct hotel { ?? ?int might1;//管理員訪問權(quán)限1 ?? ?int might2;//服務(wù)員訪問權(quán)限2 ?? ?int might3;//客房訪問權(quán)限3 ?? ?char account[20];//賬戶 ?? ?char possword[20];//密碼 ?? ?char name[20];//姓名 ?? ?char sex[5];//性別 ?? ?int age;//年齡 ?? ?char ID[20];//身份證號 ?? ?char time[20];//入住時間 ?? ?char phone[20];//聯(lián)系電話 ?? ?char room[15];//房間類型 ?? ?int numder;//房間號 ?? ?int price;//房間單價 ?? ?int day;//入住天數(shù) ?? ?int cope;//總價 ?? ?int payment;// ?? ?int debt; ?? ?char manage[5];//是否結(jié)賬 ?? ?struct hotel *next;// }LinkList; void menu1(struct hotel *p); void menu22(struct hotel *p); void menu2(struct hotel *p); void menu33(struct hotel *p); void menu3(struct hotel *p); void ADD(LinkList *p);//添加客戶 void ADD1(LinkList *p);//添加服務(wù)員 void amend(LinkList *p);//修改自己或服務(wù)員的密碼 void Remove(LinkList *p);//刪除服務(wù)員 void Seller(LinkList *p);//客房結(jié)賬 void amend2(LinkList *p);//修改客戶信息 void Inquire(LinkList *p);//客房查詢 void statistics1(LinkList *p);//某日客房統(tǒng)計 void statistics3(LinkList *p);//客房統(tǒng)計 void statistics2(LinkList *p);//服務(wù)員統(tǒng)計 void set(LinkList *p);//設(shè)置房間數(shù)量 void statistics(LinkList *p);//客房打印
2)添加客戶
void ADD(LinkList *p) { ?? ?struct hotel *q, *n = p; ?? ?struct hotel *h = p->next; ?? ?struct hotel *m = p->next; ?? ?int flag = 0; ?? ?system("cls"); ?? ?q = (struct hotel *)malloc(sizeof(struct hotel)); ?? ?q->next = NULL; ?? ?printf("請依次輸入:客戶姓名,性別,年齡,ID,入住時間(年.月.日),聯(lián)系電話\n"); ?? ?scanf("%s%s%d%s%s%s", q->name, q->sex, &q->age, q->ID, q->time, q->phone); ?? ?printf("請依次輸入客戶的:房間類型,房間號,房間單價,入住天數(shù),付款\n"); ?? ?scanf("%s%d%d%d%d", q->room, &q->numder, &q->price, &q->day, &q->payment); ?? ?strcpy(q->manage, "NO"); ?? ?getchar(); ?? ?q->cope = q->price *q->day; ?? ?q->debt = q->cope - q->payment; ?? ?q->might1 = 0; ?? ?q->might2 = 0; ?? ?q->might3 = 3; ?? ?strcpy(q->account, "0"); ?? ?strcpy(q->possword, "0"); ?? ?if (q->numder>m->age) ?? ?{ ?? ??? ?printf("超出房間限額!\n"); ?? ??? ?Sleep(2000); ?? ??? ?menu3(p); ?? ?} ?? ?while (h != NULL) ?? ?{ ?? ??? ?if (h->numder == q->numder &&strcmp(h->manage, "NO") == 0) ?? ??? ?{ ?? ??? ??? ?flag = 1; ?? ??? ??? ?printf("此房間客戶暫未退房"); ?? ??? ??? ?Sleep(1000); ?? ??? ??? ?ADD(p); ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?h = h->next; ?? ?} ?? ?while (n->next != NULL) ?? ?{ ?? ??? ?n = n->next; ?? ?} ?? ?n->next = q; ?? ?if (flag == 0) ?? ?{ ?? ??? ?printf("\t添加成功\n"); ?? ??? ?printf("\t請按回車鍵返回菜單\n"); ?? ?} ?? ?else ?? ??? ?printf("\t添加失敗\n"); ?? ?getchar(); ?? ?menu3(p); }
3)添加服務(wù)員
void ADD1(LinkList *p) { ?? ?struct hotel *q, *n = p; ?? ?struct hotel *h = p->next; ?? ?int flag = 0; ?? ?system("cls"); ?? ?q = (struct hotel *)malloc(sizeof(struct hotel)); ?? ?q->next = NULL; ?? ?printf("請輸入添加的賬號\n"); ?? ?scanf("%s", q->account); ?? ?printf("請輸入添加的密碼\n"); ?? ?scanf("%s", q->possword); ?? ?getchar(); ?? ?q->might1 = 0; ?? ?q->might2 = 2; ?? ?q->might3 = 0; ?? ?strcpy(q->name, "0"); ?? ?strcpy(q->sex, "0"); ?? ?q->age = 0; ?? ?strcpy(q->ID, "0"); ?? ?strcpy(q->room, "0"); ?? ?strcpy(q->manage, "0"); ?? ?strcpy(q->time, "0"); ?? ?strcpy(q->phone, "0"); ?? ?q->numder = 0; ?? ?q->price = 0; ?? ?q->day = 0; ?? ?q->debt = 0; ?? ?q->payment = 0; ?? ?q->cope = 0; ?? ?while (h != NULL) ?? ?{ ?? ??? ?if (strcmp(h->account, q->account) == 0) ?? ??? ?{ ?? ??? ??? ?flag = 1; ?? ??? ??? ?printf("賬號重復(fù)!"); ?? ??? ??? ?Sleep(1000); ?? ??? ??? ?menu2(p); ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?h = h->next; ?? ?} ?? ?while (n->next != NULL) ?? ?{ ?? ??? ?n = n->next; ?? ?} ?? ?n->next = q; ?? ?if (flag == 0) ?? ?{ ?? ??? ?printf("\t添加成功\n"); ?? ??? ?printf("\t請按回車鍵返回菜單\n"); ?? ?} ?? ?else ?? ??? ?printf("\t添加失敗\n"); ?? ?getchar(); ?? ?menu2(p); }
4)修改密碼或賬戶
void amend(LinkList *p) { ?? ?struct hotel *q = p->next; ?? ?char acc[20], poss[20], ac[20]; ?? ?int flag = 0, i; ?? ?system("cls"); ?? ?printf("請輸入要修改的賬號:"); ?? ?scanf("%s", acc); ?? ?while (q != NULL) ?? ?{ ?? ??? ?if (strcmp(q->account, acc) == 0) ?? ??? ?{ ?? ??? ??? ?flag = 1; ?? ??? ??? ?printf("1.僅修改密碼\n2.密碼賬戶均修改\n"); ?? ??? ??? ?scanf("%d", &i); ?? ??? ??? ?if (i == 1) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("請輸入新密碼:"); ?? ??? ??? ??? ?scanf("%s", poss); ?? ??? ??? ??? ?strcpy(q->possword, poss); break; ?? ??? ??? ?} ?? ??? ??? ?if (i == 2) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("請輸入新賬號:"); ?? ??? ??? ??? ?scanf("%s", ac); ?? ??? ??? ??? ?getchar(); ?? ??? ??? ??? ?printf("請輸入新密碼:"); ?? ??? ??? ??? ?scanf("%s", poss); ?? ??? ??? ??? ?strcpy(q->account, ac); ?? ??? ??? ??? ?strcpy(q->possword, poss); break; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?q = q->next; ?? ?} ?? ?if (flag == 0) ?? ?{ ?? ??? ?printf("賬戶錯誤!\n"); ?? ??? ?printf("\t請按回車鍵返回菜單\n"); ?? ?} ?? ?if (flag == 1) ?? ?{ ?? ??? ?printf("修改成功!\n"); ?? ??? ?printf("\t請按回車鍵返回菜單\n"); ?? ?} ?? ?getchar(); ?? ?getchar(); ?? ?menu2(p); }
5)修改客戶信息
void amend2(LinkList *p) { ?? ?struct hotel *q = p->next; ?? ?int i, j = 0, k; ?? ?char na[20], se[5], I[20], ti[20], Ph[20], roo[15]; ?? ?int ag, nu, pr, da; ?? ?system("cls"); ?? ?printf("請輸入修改內(nèi)容的房間號:\n"); ?? ?scanf("%d", &nu); ?? ?while (q != NULL) ?? ?{ ?? ??? ?if (q->numder == nu) ?? ??? ?{ ?? ??? ??? ?printf("請選擇將要修改的內(nèi)容:\n"); ?? ??? ??? ?printf("1.姓名\n"); ?? ??? ??? ?printf("2.性別\n"); ?? ??? ??? ?printf("3.年齡\n"); ?? ??? ??? ?printf("4.身份證號\n"); ?? ??? ??? ?printf("5.聯(lián)系電話\n"); ?? ??? ??? ?printf("6.入住時間\n"); ?? ??? ??? ?printf("7.房間號"); ?? ??? ??? ?printf("8.房間類型\n"); ?? ??? ??? ?printf("9.房間單價\n"); ?? ??? ??? ?printf("10.入住天數(shù)\n"); ?? ??? ??? ?printf("11.返回上一層\n"); ?? ??? ??? ?scanf("%d", &i); ?? ??? ??? ?switch (i) ?? ??? ??? ?{ ?? ??? ??? ?case 1:printf("請輸入新修改的姓名\n"); scanf("%s", na); j = 1; strcpy(q->name, na); break; ?? ??? ??? ?case 2:printf("請輸入新修改的性別\n"); scanf("%s", se); j = 1; strcpy(q->sex, se); break; ?? ??? ??? ?case 3:printf("請輸入新修改的年齡\n"); scanf("%d", &ag); j = 1; q->age = ag; break; ?? ??? ??? ?case 4:printf("請輸入新修改的身份證號\n"); scanf("%s", I); j = 1; strcpy(q->ID, I); break; ?? ??? ??? ?case 5:printf("請輸入新修改的聯(lián)系電話\n"); scanf("%s", Ph); j = 1; strcpy(q->phone, Ph); break; ?? ??? ??? ?case 6:printf("請輸入新修改的入住時間\n"); scanf("%s", ti); j = 1; strcpy(q->time, ti); break; ?? ??? ??? ?case 7:printf("請輸入新修改的房間號\n"); scanf("%d", &nu); j = 1; q->numder = nu; break; ?? ??? ??? ?case 8:printf("請輸入新修改的房間類型\n"); scanf("%s", roo); j = 1; strcpy(q->room, roo); break; ?? ??? ??? ?case 9:printf("請輸入新修改的房間單價\n"); scanf("%d", &pr); j = 1; q->price = pr; q->cope = (q->price)*(q->day); q->debt = q->cope - q->payment; break; ?? ??? ??? ?case 10:printf("請輸入新修改的入住天數(shù)\n"); scanf("%d", &da); j = 1; q->day = da; q->cope = q->price*q->day; q->debt = q->cope - q->payment; break; ?? ??? ??? ?case 11:menu3(p); break; ?? ??? ??? ?default:printf("請輸入合法量!\n"); break; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?q = q->next; ?? ?} ?? ?if (j == 1) ?? ?{ ?? ??? ?printf("修改成功!\n"); ?? ?} ?? ?if (j == 0) ?? ?{ ?? ??? ?printf("修改失敗\n"); ?? ?} ?? ?printf("按回車鍵返回\n"); ?? ?getchar(); ?? ?getchar(); ?? ?menu3(p); }
6)刪除
void Remove(LinkList *p) { ?? ?struct hotel *n = p->next; ?? ?struct hotel *h = p->next->next; ?? ?int flag = 0; ?? ?char acc[20]; ?? ?system("cls"); ?? ?printf("請輸入要刪除的賬戶:"); ?? ?scanf("%s", acc); ?? ?while (h != NULL) ?? ?{ ?? ??? ?if (strcmp(h->account, acc) == 0) ?? ??? ?{ ?? ??? ??? ?n->next = h->next; ?? ??? ??? ?flag = 1; ?? ??? ??? ?free(h); break; ?? ??? ?} ?? ??? ?n = h; ?? ??? ?h = h->next; ?? ?} ?? ?if (flag == 1) ?? ?{ ?? ??? ?printf("刪除成功!\n"); ?? ??? ?printf("\t請按回車鍵返回菜單\n"); ?? ?} ?? ?if (flag == 0) ?? ?{ ?? ??? ?printf("刪除失??!\n"); ?? ??? ?printf("\t請按回車鍵返回菜單\n"); ?? ?} ?? ?getchar(); ?? ?getchar(); ?? ?menu2(p); }
7)結(jié)賬
void Seller(LinkList *p) { ?? ?struct hotel *q = p->next; ?? ?char man[5]; ?? ?int nu, i; ?? ?int flag = 0; ?? ?system("cls"); ?? ?printf("請輸入該客戶房間號:"); ?? ?scanf("%d", &nu); ?? ?while (q != NULL) ?? ?{ ?? ??? ?if ((q->numder == nu)&&strcmp(q->manage,"NO")==0) ?? ??? ?{ ?? ??? ??? ?flag = 1; ?? ??? ??? ?printf("客戶:%s 身份證號:%s 房間號:%d 房間單價:%d 入住天數(shù):%d 實付:%d ?再付:%d ?共計%d元\n", q->name, q->ID, q->numder, q->price, q->day, q->payment, q->debt, q->cope); ?? ??? ??? ?printf("再付%d\n", q->debt); ?? ??? ??? ?printf("1.確定結(jié)賬\n2.返回\n"); ?? ??? ??? ?scanf("%d", &i); ?? ??? ??? ?switch (i) ?? ??? ??? ?{ ?? ??? ??? ?case 1:q->debt = 0; q->payment = q->cope; strcpy(q->manage, "YES"); break; ?? ??? ??? ?case 2:menu3(p); break; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?q = q->next; ?? ?} ?? ?if (flag == 0) ?? ?{ ?? ??? ?printf("\t無該客戶信息\n"); ?? ??? ?printf("\t請按回車鍵返回菜單\n"); ?? ?} ?? ?else ?? ?{ ?? ??? ?printf("結(jié)賬成功\n"); ?? ??? ?printf("\t請按回車鍵返回菜單\n"); ?? ?} ?? ?getchar(); ?? ?getchar(); ?? ?menu3(p); }
8)客房查詢
void Inquire(LinkList *p) { ?? ?struct hotel *q = p->next; ?? ?int nu; ?? ?char na[20]; ?? ?int a; ?? ?int flag = 0; ?? ?system("cls"); ?? ?printf("1.按照姓名查詢;\n2.按照房間號查詢;\n"); ?? ?scanf("%d", &a); ?? ?getchar(); ?? ?if (a == 1) ?? ?{ ?? ??? ?printf("請輸入姓名:"); ?? ??? ?scanf("%s", na); ?? ??? ?while (q != NULL) ?? ??? ?{ ?? ??? ??? ?if (strcmp(q->name, na) == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?printf("姓名:%s 性別:%s 年齡:%d 身份證號:%s 入住時間:%s 聯(lián)系電話:%s", q->name, q->sex, q->age, q->ID, q->time, q->phone); ?? ??? ??? ??? ?printf("房間類型:%s 房間號:%d 房間單價:%d 入住天數(shù):%d 總計:%d ? 實付:%d 再付:%d ?是否結(jié)賬:%s\n", q->room, q->numder, q->price, q->day, q->cope, q->payment, q->debt, q->manage); ?? ??? ??? ?} ?? ??? ??? ?q = q->next; ?? ??? ?} ?? ?} ?? ?if (a == 2) ?? ?{ ?? ??? ?printf("請輸入房間號:"); ?? ??? ?scanf("%d", &nu); ?? ??? ?while (q != NULL) ?? ??? ?{ ?? ??? ??? ?if (q->numder == nu) ?? ??? ??? ?{ ?? ??? ??? ??? ?flag = 1; ?? ??? ??? ??? ?printf("姓名:%s 性別:%s 年齡:%d 身份證號:%s 入住時間:%s 聯(lián)系電話:%s", q->name, q->sex, q->age, q->ID, q->time, q->phone); ?? ??? ??? ??? ?printf("房間類型:%s 房間號:%d 房間單價:%d 入住天數(shù):%d 總計:%d ?實付:%d 再付:%d ?是否結(jié)賬:%s\n", q->room, q->numder, q->price, q->day, q->cope, q->payment, q->debt, q->manage); ?? ??? ??? ?} ?? ??? ??? ?q = q->next; ?? ??? ?} ?? ?} ?? ?if (flag == 0) ?? ?{ ?? ??? ?printf("\t無該客戶信息\n"); ?? ??? ?printf("\t請按回車鍵返回菜單\n"); ?? ?} ?? ?if (flag == 1) ?? ?{ ?? ??? ?printf("\t查詢結(jié)束\n"); ?? ??? ?printf("\t請按回車鍵返回菜單\n"); ?? ?} ?? ?getchar(); ?? ?getchar(); ?? ?menu3(p); }
9)某日客房統(tǒng)計
void statistics1(LinkList *p) { ?? ?struct hotel *q = p->next; ?? ?int m = 0, i = 0; ?? ?float a = 0, b = 0, c = 0,k=0; ?? ?char tim[20]; ?? ?system("cls"); ?? ?printf("請輸入統(tǒng)計時間:\n"); ?? ?scanf("%s", tim); ?? ?while (q != NULL) ?? ?{ ?? ??? ?if (strcmp(q->time, tim) == 0) ?? ??? ?{ ?? ??? ??? ?a = a + 1; ?? ??? ??? ?if (m == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("%s結(jié)賬房間有\(zhòng)n", tim); ?? ??? ??? ??? ?m = m + 1; ?? ??? ??? ?} ?? ??? ??? ?if (strcmp(q->manage, "YES") == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("%d\n", q->numder); ?? ??? ??? ??? ?k= k+1; ?? ??? ??? ??? ?b = b + 1; ?? ??? ??? ?} ?? ??? ??? ?if (b == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("無\n"); ?? ??? ??? ??? ?b = b + 1; ?? ??? ??? ?} ?? ??? ??? ?if (i == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("%s入住房間有\(zhòng)n", tim); ?? ??? ??? ??? ?i = i + 1; ?? ??? ??? ?} ?? ??? ??? ?if (strcmp(q->manage, "NO") == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("%d\n", q->numder); ?? ??? ??? ??? ?c = c + 1; ?? ??? ??? ?} ?? ??? ??? ?if (c == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("無入住\n"); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?q = q->next; ?? ?} ?? ?if (a != 0) ?? ?{ ?? ??? ?printf("此日結(jié)賬率:百分之%0.0f %\n", (k / a) * 100); ?? ??? ?printf("此日入住率:百分之%0.0f %\n\n", (c / a) * 100); ?? ?} ?? ?if (a == 0) ?? ?{ ?? ??? ?printf("\t暫時無客戶信息\n"); ?? ?} ?? ?printf("\t請按回車鍵返回菜單\n"); ?? ?getchar(); ?? ?getchar(); ?? ?menu3(p); }
10)客房統(tǒng)計
void statistics3(LinkList *p) { ?? ?struct hotel *q = p->next->next; ?? ?struct hotel *n = p->next; ?? ?float m = p->next->age; ?? ?int i, j = 0, k, c = 1; ?? ?float a = 0, b = 0; ?? ?system("cls"); ?? ?printf("空置房間有:\n"); ?? ?for (i = 1; i <= m; i++) ?? ?{ ?? ??? ?j = 0; ?? ??? ?q = p->next; ?? ??? ?while (q != NULL) ?? ??? ?{ ?? ??? ??? ?if (i == q->numder&&strcmp(q->manage, "NO") == 0) ?? ??? ??? ?{ ?? ??? ??? ??? ?c++; ?? ??? ??? ??? ?j = 1; ?? ??? ??? ?} ?? ??? ??? ?q = q->next; ?? ??? ?} ?? ??? ?if (j == 0) ?? ??? ?{ ?? ??? ??? ?printf("%d ?", i); ?? ??? ??? ?c++; ?? ??? ?} ?? ??? ?a++; ?? ?} ?? ?q = p->next; ?? ?printf("\n"); ?? ?printf("暫住房間有:\n"); ?? ?while (q != NULL) ?? ?{ ?? ??? ?if (strcmp(q->manage, "NO") == 0) ?? ??? ?{ ?? ??? ??? ?printf("%d ? ", q->numder); ?? ??? ??? ?b++; ?? ??? ??? ?k = 1; ?? ??? ?} ?? ??? ?q = q->next; ?? ?} ?? ?if (k = 0) ?? ?{ ?? ??? ?printf("暫無入?。n"); ?? ?} ?? ?printf("\n"); ?? ?printf("當(dāng)前空房率:百分之%0.0f\n", ((m - b) / m) * 100); ?? ?printf("當(dāng)前住房率:百分之%0.0f\n", (b / m) * 100); ?? ?printf("按回車鍵返回主菜單!\n"); ?? ?getchar(); ?? ?getchar(); ?? ?menu3(p); }
11)服務(wù)員統(tǒng)計
void statistics2(LinkList *p) { ?? ?struct hotel *q = p->next; ?? ?int c = 0, i = 0; ?? ?system("cls"); ?? ?while (q != NULL) ?? ?{ ?? ??? ?if (i == 0) ?? ??? ?{ ?? ??? ??? ?printf("賬號 ? 密碼\n"); ?? ??? ??? ?i = 2; ?? ??? ?} ?? ??? ?if (q->might2 == 2) ?? ??? ?{ ?? ??? ??? ?printf("%s ?%s\n", q->account, q->possword); ?? ??? ??? ?c = c + 1; ?? ??? ?} ?? ??? ?q = q->next; ?? ?} ?? ?if (c == 0) ?? ?{ ?? ??? ?printf("暫無服務(wù)員信息\n"); ?? ?} ?? ?printf("\t請按回車鍵返回菜單\n"); ?? ?getchar(); ?? ?getchar(); ?? ?menu2(p); }
12)設(shè)置房間數(shù)量
void set(LinkList *p) { ?? ?struct hotel *q = p->next; ?? ?system("cls"); ?? ?printf("當(dāng)前房間數(shù)量為:%d\n", q->age); ?? ?printf("請輸入房間數(shù)量:\n"); ?? ?scanf("%d", &(q->age)); ?? ?printf("設(shè)置成功!\n"); ?? ?printf("按回車鍵返回菜單!\n"); ?? ?getchar(); ?? ?getchar(); ?? ?menu2(p); }
13)客房打印
void statistics(LinkList *p) { ?? ?struct hotel *q = p->next; ?? ?system("cls"); ?? ?if (q == NULL) ?? ?{ ?? ??? ?printf("\t暫時無客戶信息\n"); ?? ?} ?? ?else ?? ?{ ?? ??? ?printf("姓名 ? ?性別 年齡 身份證號 ? ? ? ? ? 入住時間 ? ? ? ? ?聯(lián)系電話 ? ? 房間類型 房間號 房間單價 入住天數(shù) 共計 實付 再付 ?是否結(jié)賬 \n"); ?? ??? ?while (q != NULL) ?? ??? ?{ ?? ??? ??? ?if (q->might3 == 3) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("%s %s %d %s %s %s %s %d %d %d %d %d %d %s \n", q->name, q->sex, q->age, q->ID, q->time, q->phone, q->room, q->numder, q->price, q->day, q->cope, q->payment, q->debt, q->manage); ?? ??? ??? ?} ?? ??? ??? ?q = q->next; ?? ??? ?} ?? ?} ?? ?printf("\t請按回車鍵返回菜單\n"); ?? ?getchar(); ?? ?getchar(); ?? ?menu3(p); }
14)讀入磁盤文件
void saveHotelFile(LinkList *L) { ?? ?FILE *fp; ?? ?LinkList *p; ?? ?p = L->next; ?? ?fp = fopen("hotel.txt", "w"); ?? ?if (fp == NULL) ?? ?{ ?? ??? ?printf("無法打開此文件\n"); ?? ??? ?exit(0); ?? ?} ?? ?while (p) ?? ?{ ?? ??? ?fprintf(fp, "%d %d %d %s %s %s %s %d %s %s %s %s %d %d %d %d %d %d %s \n", p->might1, p->might2, p->might3, p->account, p->possword, p->name, p->sex, p->age, p->ID, p->time, p->phone, p->room, p->numder, p->price, p->day, p->cope, p->payment, p->debt, p->manage); ?? ??? ?p = p->next; ?? ?} ?? ?fclose(fp); }
15)開辟節(jié)點
void ListInsert(LinkList *L, LinkList *n) { ?? ?LinkList *q = L; ?? ?n->next = NULL; ?? ?while (q->next != NULL) ?? ?{ ?? ??? ?q = q->next; ?? ?} ?? ?q->next = n; }
16)向鏈表讀取
void readHotelput(LinkList* L) { ?? ?FILE* fp; ?? ?LinkList* n; ?? ?LinkList* m; ?? ?char ch; ?? ?char acc[20], po[20], na[20], se[5], I[20], ti[20], Ph[20], roo[15], man[5], a[20], b[20]; ?? ?int mi1, mi2, mi3, ag, nu, pr, da, co, s, pa, de; ?? ?fp = fopen("hotel.txt", "r"); ?? ?if (fp == NULL) ?? ?{ ?? ??? ?fp = fopen("hotel.txt", "w"); ?? ?} ?? ?else ?? ?{ ?? ??? ?if (fgetc(fp) == -1) ?? ??? ?{ ?? ??? ??? ?printf("此程序為首次使用,請自定義賬號和密碼\n"); ?? ??? ??? ?printf("賬號:\n"); ?? ??? ??? ?scanf("%s", a); ?? ??? ??? ?getchar(); ?? ??? ??? ?printf("密碼:\n"); ?? ??? ??? ?scanf("%s", b); ?? ??? ??? ?getchar(); ?? ??? ??? ?m = (LinkList*)malloc(sizeof(LinkList)); ?? ??? ??? ?strcpy(m->account, a);//初始賬戶 ?? ??? ??? ?strcpy(m->possword, b);//初始密碼 ?? ??? ??? ?strcpy(m->name, "0"); ?? ??? ??? ?strcpy(m->sex, "0"); ?? ??? ??? ?strcpy(m->ID, "0"); ?? ??? ??? ?strcpy(m->room, "0"); ?? ??? ??? ?strcpy(m->manage, "0"); ?? ??? ??? ?strcpy(m->time, "0"); ?? ??? ??? ?strcpy(m->phone, "0"); ?? ??? ??? ?m->might1 = 1; ?? ??? ??? ?m->might2 = 0; ?? ??? ??? ?m->might3 = 0; ?? ??? ??? ?m->age = 0; ?? ??? ??? ?m->numder = 0; ?? ??? ??? ?m->price = 0; ?? ??? ??? ?m->day = 0; ?? ??? ??? ?m->debt = 0; ?? ??? ??? ?m->payment = 0; ?? ??? ??? ?m->cope = 0; ?? ??? ??? ?m->next = NULL; ?? ??? ??? ?L->next = m; ?? ??? ?} ?? ??? ?if (fgetc(fp) != -1) ?? ??? ?{ ?? ??? ??? ?fseek(fp, -2L, 1); ?? ??? ?} ?? ??? ?while (!feof(fp)) ?? ??? ?{ ?? ??? ??? ?fscanf(fp, "%d %d %d %s %s %s %s %d %s %s %s %s %d %d %d %d %d %d %s ", &mi1, &mi2, &mi3, acc, po, na, se, &ag, I, ti, Ph, roo, &nu, &pr, &da, &co, &pa, &de, man); ?? ??? ??? ?n = (LinkList*)malloc(sizeof(LinkList)); ?? ??? ??? ?strcpy(n->account, acc); ?? ??? ??? ?strcpy(n->possword, po); ?? ??? ??? ?strcpy(n->name, na); ?? ??? ??? ?strcpy(n->sex, se); ?? ??? ??? ?strcpy(n->ID, I); ?? ??? ??? ?strcpy(n->time, ti); ?? ??? ??? ?strcpy(n->phone, Ph); ?? ??? ??? ?strcpy(n->room, roo); ?? ??? ??? ?strcpy(n->manage, man); ?? ??? ??? ?n->might1 = mi1; ?? ??? ??? ?n->might2 = mi2; ?? ??? ??? ?n->might3 = mi3; ?? ??? ??? ?n->age = ag; ?? ??? ??? ?n->numder = nu; ?? ??? ??? ?n->price = pr; ?? ??? ??? ?n->day = da; ?? ??? ??? ?n->debt = de; ?? ??? ??? ?n->payment = pa; ?? ??? ??? ?n->cope = co; ?? ??? ??? ?ListInsert(L, n); ?? ??? ??? ?/*n=n->next;*/ ?? ??? ?} ?? ?} ?? ?fclose(fp); }
17)判斷是否為服務(wù)員
void menu33(struct hotel *p) { ?? ?int i = 0; ?? ?struct hotel *h = p->next->next; ?? ?char a[20], b[20]; ?? ?system("cls"); ?? ?printf("請輸入賬戶:"); ?? ?scanf("%s", a); ?? ?getchar(); ?? ?printf("請輸入密碼:"); ?? ?scanf("%s", b); ?? ?getchar(); ?? ?while (h != NULL) ?? ?{ ?? ??? ?if ((strcmp(h->account, a) == 0) && (strcmp(h->possword, b) == 0) && h->might2 == 2) ?? ??? ?{ ?? ??? ??? ?i = 1; ?? ??? ??? ?menu3(p); break; ?? ??? ?} ?? ??? ?h = h->next; ?? ?} ?? ?if (i == 0) ?? ?{ ?? ??? ?Sleep(1500); ?? ??? ?printf("密碼或賬號錯誤!\n"); ?? ??? ?menu1(p); ?? ?} }
18)頁面3
void menu3(struct hotel *p) { ?? ?int i; ?? ?system("cls"); ?? ?while (1) ?? ?{ ?? ??? ?printf("\t--------------------------\n"); Sleep(50); ?? ??? ?printf("\t **歡迎登陸酒店管理系統(tǒng)** \n"); Sleep(50); ?? ??? ?printf("\t| 1.登記入住 ? ? ? ? ? ? |\n"); Sleep(50); ?? ??? ?printf("\t| 2.結(jié)賬 ? ? ? ? ? ? ? ? |\n"); Sleep(50); ?? ??? ?printf("\t| 3.修改客戶信息 ? ? ? ? |\n"); Sleep(50); ?? ??? ?printf("\t| 4.查詢客房信息 ? ? ? ? |\n"); Sleep(50); ?? ??? ?printf("\t| 5.某日客房信息統(tǒng)計 ? ? |\n"); Sleep(50); ?? ??? ?printf("\t| 6.客房統(tǒng)計 ? ? ? ? ? ? |\n"); Sleep(50); ?? ??? ?printf("\t| 7.客房信息打印 ? ? ? ? |\n"); Sleep(50); ?? ??? ?printf("\t| 8.返回上一層 ? ? ? ? ? |\n"); Sleep(50); ?? ??? ?printf("\t| 9.退出(保存) ? ? ? ? |\n"); Sleep(50); ?? ??? ?printf("\t--------------------------\n"); ?? ??? ?printf("\t請選擇您要進(jìn)行的操作:\n"); ?? ??? ?scanf("%d", &i); ?? ??? ?switch (i) ?? ??? ?{ ?? ??? ?case 1:ADD(p); break; ?? ??? ?case 2:Seller(p); break; ?? ??? ?case 3:amend2(p); break; ?? ??? ?case 4:Inquire(p); break; ?? ??? ?case 5:statistics1(p); break; ?? ??? ?case 6:statistics3(p); break; ?? ??? ?case 7:statistics(p); break; ?? ??? ?case 8:menu1(p); break; ?? ??? ?case 9:saveHotelFile(p); exit(0); ?? ??? ?default:printf("\t輸入不合法量\n"); Sleep(1500); system("cls"); ?? ??? ?} ?? ?} }
19)判斷是否為管理員
void menu22(struct hotel *p) { ?? ?struct hotel *h = p->next; ?? ?char a[20], b[20]; ?? ?int i = 0; ?? ?system("cls"); ?? ?printf("請輸入賬戶:"); ?? ?scanf("%s", a); ?? ?getchar(); ?? ?printf("請輸入密碼:"); ?? ?scanf("%s", b); ?? ?getchar(); ?? ?while (h != NULL) ?? ?{ ?? ??? ?if ((strcmp(h->account, a) == 0) && (strcmp(h->possword, b) == 0) && h->might1 == 1) ?? ??? ?{ ?? ??? ??? ?i = 1; ?? ??? ??? ?menu2(p); break; ?? ??? ?} ?? ??? ?h = h->next; ?? ?} ?? ?if (i == 0) ?? ?{ ?? ??? ?Sleep(1500); ?? ??? ?printf("密碼或賬號錯誤!\n"); ?? ??? ?menu1(p); ?? ?} }
20)頁面2
void menu2(struct hotel *p) { ?? ?int c; ?? ?system("cls"); ?? ?while (1) ?? ?{ ?? ??? ?printf("\t---------------------------\n"); Sleep(50); ?? ??? ?printf("\t **請選擇您要進(jìn)行的操作** ?\n"); Sleep(50); ?? ??? ?printf("\t|?? ?1.添加服務(wù)員 ? ? ? ? ? ?|\n"); Sleep(50); ?? ??? ?printf("\t|?? ?2.修改賬戶或密碼 ? ? ? ?|\n"); Sleep(50); ?? ??? ?printf("\t|?? ?3.刪除服務(wù)員 ? ? ? ? ? ?|\n"); Sleep(50); ?? ??? ?printf("\t|?? ?4.統(tǒng)計服務(wù)員信息 ? ? ? ?|\n"); Sleep(50); ?? ??? ?printf("\t|?? ?5.返回上一層 ? ? ? ? ? ?|\n"); Sleep(50); ?? ??? ?printf("\t|?? ?6.設(shè)置房間數(shù)量 ? ? ? ? ?|\n"); Sleep(50); ?? ??? ?printf("\t|?? ?7.退出(保存) ? ? ? ? ?|\n"); ?? ??? ?printf("\t---------------------------\n"); ?? ??? ?printf("\t請選擇您要進(jìn)行的操作:\n"); ?? ??? ?scanf("%d", &c); ?? ??? ?switch (c) ?? ??? ?{ ?? ??? ?case 1:ADD1(p); break; ?? ??? ?case 2:amend(p); break; ?? ??? ?case 3:Remove(p); break; ?? ??? ?case 4:statistics2(p); break; ?? ??? ?case 5:menu1(p); break; ?? ??? ?case 6:set(p); break; ?? ??? ?case 7:saveHotelFile(p); exit(0); ?? ??? ?default:printf("請輸入合法量!\n"); Sleep(1500); system("cls"); ?? ??? ?} ?? ?} }
21)頁面1
void menu1(struct hotel *p) { ?? ?int a; ?? ?system("cls"); ?? ?while (1) ?? ?{ ?? ??? ?printf("\t_________________________\n"); Sleep(50); ?? ??? ?printf("\t| ?歡迎進(jìn)入酒店管理系統(tǒng) |\n"); Sleep(50); ?? ??? ?printf("\t| ? **請選擇您的身份** ?|\n"); Sleep(50); ?? ??? ?printf("\t| ?1.管理員 ? ? ? ? ? ?|\n"); Sleep(50); ?? ??? ?printf("\t| ?2.服務(wù)員 ? ? ? ? ? ?|\n"); Sleep(50); ?? ??? ?printf("\t| ?3.退出 ? ? ? ? ? ? ?|\n"); Sleep(50); ?? ??? ?printf("\t_________________________\n\n"); ?? ??? ?printf("\t請選擇您要進(jìn)行的操作:\n"); ?? ??? ?scanf("%d", &a); ?? ??? ?switch (a) ?? ??? ?{ ?? ??? ?case 1:menu22(p); break; ?? ??? ?case 2:menu33(p); break; ?? ??? ?case 3:saveHotelFile(p); exit(0); ?? ??? ?default:printf("請輸入合法量!\n"); Sleep(1000); menu1(p); ?? ??? ?} ?? ?} }
22)主函數(shù)
int main() { ?? ?LinkList *p; ?? ?p = (struct hotel *)malloc(sizeof(struct hotel)); ?? ?p->next = NULL; ?? ?readHotelput(p); ?? ?menu1(p); ?? ?/*saveHotelFile(p);*/ ?? ?system("pause"); ?? ?return 0; }
稍微改了一下,管理員初始賬號和密碼可以自定義,有了管理員的密碼和賬號之后才可以添加服務(wù)員哦。
這個代碼使用傳首地址的方法,也可以通過設(shè)置靜態(tài)指針存首尾地址,這樣會更簡單。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言函數(shù)指針與回調(diào)函數(shù)的實現(xiàn)
本文主要介紹了C語言函數(shù)指針與回調(diào)函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05C語言變長數(shù)組 struct中char data[0]的用法詳解
下面小編就為大家?guī)硪黄狢語言變長數(shù)組 struct中char data[0]的用法詳解。小編覺得挺不錯的現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01c/c++?Error:?redefinition?of?'xxx'的問題及解決方法
兩個類/文件同時引用定義ReplyInfo的頭文件,會造成頭文件中定義重復(fù)定義,本文給大家分享c/c++?Error:?redefinition?of?‘xxx’?的問題及解決方法,感興趣的朋友一起看看吧2023-08-08C++中指針的數(shù)據(jù)類型和運算相關(guān)知識小結(jié)
這篇文章主要介紹了C++中指針的數(shù)據(jù)類型和運算相關(guān)知識小結(jié),是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-09-09C語言驅(qū)動開發(fā)內(nèi)核特征碼掃描PE代碼段
這篇文章主要為大家介紹了C語言驅(qū)動開發(fā)內(nèi)核特征碼掃描PE代碼段,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10