首頁 > 軟體

C語言實現酒店客房管理系統課程設計

2022-03-17 10:00:32

本文範例為大家分享了C語言實現酒店客房管理系統的具體程式碼,供大家參考,具體內容如下

設計目標:設計一個酒店客房管理系統,用C語言實現。對該系統的要求如下:

一、需求描述

系統角色:

1.總檯服務員

能夠根據住客需求完成住客登記任務,並完成客房管理功能。

1)登記入住功能
2)結賬功能
3)查詢房間功能
4)客房資訊列印
5)統計功能

2.系統管理員

能夠新增、刪除和修改系統使用者(總檯服務員),設定使用者許可權。包括

1)新增新使用者
2)刪除使用者
3)修改使用者許可權

二、系統流程描述

系統啟動則進入登陸選單。

1.登陸流程

(1)程式執行,顯示登陸介面,請使用者輸入角色、賬號及密碼。
(2)使用者輸入賬號密碼後,系統校驗正確與否,正確則進入功能選單。錯誤則提示輸入錯誤,繼續顯示登陸介面。

2.總檯服務員使用流程描述:

1)主介面:

總檯服務員登陸成功後,系統顯示功能選單:“1. 登記入住 2. 結賬3.查詢客房資訊 4.客房資訊列印6.客房統計7.退出”。

2)登記入住

(1)服務員輸入數位1,系統進入登記入住介面,要求總檯服務員輸入客戶資訊及房間資訊。
(2)總檯服務員輸入客戶姓名、性別、年齡、身份證號、所需房間型別、房間號、房間單價、入住天數。
(3)系統根據輸入資訊顯示應付費用。總檯服務員收取費用後輸入收費金額。系統在客房記錄中新增該客戶的記錄並寫入磁碟。
(4)系統應保證在所需房間不足時報告錯誤。

3)結賬

(1)服務員輸入數位2,系統進入結賬介面,要求總檯服務員輸入房間資訊。
(2)總檯服務員輸入房間號,系統顯示客戶名稱、房間單價、入住天數、總金額、應付房款、實付房款、欠費金額或退款額等相關資訊。並提示總檯服務員收取欠費金額或退還押金。
(3)總檯服務員輸入補交房款或退還押金數額後,系統將該客戶的入住記錄放入歷史入住記錄中。並將該房間設定為空閒。

4)查詢客房資訊

(1)服務員輸入數位3,系統進入查詢介面,並顯示“1.按顧客名稱查詢 2.按房間號查詢”。
(2)總檯服務員輸入1.系統提示服務員輸入顧客名稱,輸入後,系統顯示該顧客的入住記錄,包括顧客資訊及入住房間號、房間單價、入住天數、總金額等相關資訊。 如無該顧客的資訊則列印“沒有此客戶的入住資訊。”
(3)總檯服務員輸入2.系統提示服務員輸入房間號及查詢起止時間。輸入房間號及起止時間後,系統顯示該房間從起始時間到結束時間的入住客戶的姓名、身份證號、入住天數等資訊。

5)客房資訊列印

服務員輸入數位4,系統進入客房資訊列印介面。系統列印所有房間資訊,按房間號排序,包括房間號、房間型別、是否有人入住、入住人數、入住天數等資訊。

6)客房統計

服務員輸入數位5,系統進入客房統計介面。系統列印本日的入住人數、入住房間數、空置房間數、入住率統計、空房率統計、實收房款。

7)退出

服務員選擇退出,則系統返回到登陸介面。

3.系統管理員使用流程

1)主介面:

管理員登陸成功後,系統顯示功能選單:“1.使用者資料列印 2.新增使用者 3.刪除使用者 4.修改使用者許可權 5退出”

2)使用者資料列印:

管理員選擇使用者資料列印功能,則進入使用者資料列印介面,提示管理員輸入使用者賬號,管理員輸入後,系統列印該使用者的賬號、密碼、角色、許可權等資訊。

3)新增使用者

管理員選擇新增使用者功能,則進入新增使用者介面,提示管理員輸入使用者賬號和初始密碼。管理員輸入後,系統列印該使用者相關資訊並返回主介面。

4)刪除使用者

管理員選擇刪除使用者功能,則進入刪除使用者介面,提示管理員輸入要刪除的使用者賬號。管理員輸入後,系統提示已刪除該使用者資訊並返回主介面。

5)修改使用者許可權

管理員選擇修改使用者許可權功能,則進入修改使用者許可權介面,提示管理員輸入要修改的使用者賬號。管理員輸入後,系統列印該使用者的許可權,並提示管理員輸入要修改後的許可權,管理員輸入後,系統列印該使用者的資訊並返回主介面。

6)退出

管理員選擇退出,則系統返回到登陸介面。

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;//管理員存取許可權1
    int might2;//服務員存取許可權2
    int might3;//客房存取許可權3
    char account[20];//賬戶
    char possword[20];//密碼
    char name[20];//姓名
    char sex[5];//性別
    int age;//年齡
    char ID[20];//身份證號
    char time[20];//入住時間
    char phone[20];//聯絡電話
    char room[15];//房間型別
    int numder;//房間號
    int price;//房間單價
    int day;//入住天數
    int cope;//總價
    int payment;//
    int debt;
    char manage[5];//是否結賬
    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);//新增服務員
void amend(LinkList *p);//修改自己或服務員的密碼
void Remove(LinkList *p);//刪除服務員
void Seller(LinkList *p);//客房結賬
void amend2(LinkList *p);//修改客戶資訊
void Inquire(LinkList *p);//客房查詢
void statistics1(LinkList *p);//某日客房統計
void statistics3(LinkList *p);//客房統計
void statistics2(LinkList *p);//服務員統計
void set(LinkList *p);//設定房間數量
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,入住時間(年.月.日),聯絡電話n");
    scanf("%s%s%d%s%s%s", q->name, q->sex, &q->age, q->ID, q->time, q->phone);
    printf("請依次輸入客戶的:房間型別,房間號,房間單價,入住天數,付款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)新增服務員

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("賬號重複!");
            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");
    scanf("%d", &nu);
    while (q != NULL)
    {
        if (q->numder == nu)
        {
            printf("請選擇將要修改的內容:n");
            printf("1.姓名n");
            printf("2.性別n");
            printf("3.年齡n");
            printf("4.身份證號n");
            printf("5.聯絡電話n");
            printf("6.入住時間n");
            printf("7.房間號");
            printf("8.房間型別n");
            printf("9.房間單價n");
            printf("10.入住天數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("請輸入新修改的聯絡電話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("請輸入新修改的入住天數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)結賬

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 入住天數:%d 實付:%d  再付:%d  共計%d元n", q->name, q->ID, q->numder, q->price, q->day, q->payment, q->debt, q->cope);
            printf("再付%dn", q->debt);
            printf("1.確定結賬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("結賬成功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 聯絡電話:%s", q->name, q->sex, q->age, q->ID, q->time, q->phone);
                printf("房間型別:%s 房間號:%d 房間單價:%d 入住天數:%d 總計:%d   實付:%d 再付:%d  是否結賬:%sn", 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 聯絡電話:%s", q->name, q->sex, q->age, q->ID, q->time, q->phone);
                printf("房間型別:%s 房間號:%d 房間單價:%d 入住天數:%d 總計:%d  實付:%d 再付:%d  是否結賬:%sn", 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查詢結束n");
        printf("t請按確認鍵返回選單n");
    }
    getchar();
    getchar();
    menu3(p);
}

9)某日客房統計

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("請輸入統計時間:n");
    scanf("%s", tim);
    while (q != NULL)
    {
        if (strcmp(q->time, tim) == 0)
        {
            a = a + 1;
            if (m == 0)
            {
                printf("%s結賬房間有n", tim);
                m = m + 1;
            }
            if (strcmp(q->manage, "YES") == 0)
            {
                printf("%dn", q->numder);
                k= k+1;
                b = b + 1;
            }
            if (b == 0)
            {
                printf("無n");
                b = b + 1;
            }
            if (i == 0)
            {
                printf("%s入住房間有n", tim);
                i = i + 1;
            }
            if (strcmp(q->manage, "NO") == 0)
            {
                printf("%dn", q->numder);
                c = c + 1;
            }
            if (c == 0)
            {
                printf("無入住n");
            }
        }
        q = q->next;
    }
    if (a != 0)
    {
        printf("此日結賬率:百分之%0.0f %n", (k / a) * 100);
        printf("此日入住率:百分之%0.0f %nn", (c / a) * 100);
    }
    if (a == 0)

    {
        printf("t暫時無客戶資訊n");
    }
    printf("t請按確認鍵返回選單n");
    getchar();
    getchar();
    menu3(p);
}

10)客房統計

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("當前空房率:百分之%0.0fn", ((m - b) / m) * 100);
    printf("當前住房率:百分之%0.0fn", (b / m) * 100);
    printf("按確認鍵返回主選單!n");
    getchar();
    getchar();
    menu3(p);
}

11)服務員統計

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  %sn", q->account, q->possword);
            c = c + 1;
        }
        q = q->next;
    }
    if (c == 0)
    {
        printf("暫無服務員資訊n");
    }
    printf("t請按確認鍵返回選單n");
    getchar();
    getchar();
    menu2(p);
}

12)設定房間數量

void set(LinkList *p)
{
    struct hotel *q = p->next;
    system("cls");
    printf("當前房間數量為:%dn", q->age);
    printf("請輸入房間數量:n");
    scanf("%d", &(q->age));
    printf("設定成功!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("姓名    性別 年齡 身份證號           入住時間          聯絡電話     房間型別 房間號 房間單價 入住天數 共計 實付 再付  是否結賬 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)開闢節點

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)判斷是否為服務員

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 **歡迎登陸酒店管理系統** n"); Sleep(50);
        printf("t| 1.登記入住             |n"); Sleep(50);
        printf("t| 2.結賬                 |n"); Sleep(50);
        printf("t| 3.修改客戶資訊         |n"); Sleep(50);
        printf("t| 4.查詢客房資訊         |n"); Sleep(50);
        printf("t| 5.某日客房資訊統計     |n"); Sleep(50);
        printf("t| 6.客房統計             |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請選擇您要進行的操作: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 **請選擇您要進行的操作**  n"); Sleep(50);
        printf("t|    1.新增服務員            |n"); Sleep(50);
        printf("t|    2.修改賬戶或密碼        |n"); Sleep(50);
        printf("t|    3.刪除服務員            |n"); Sleep(50);
        printf("t|    4.統計服務員資訊        |n"); Sleep(50);
        printf("t|    5.返回上一層            |n"); Sleep(50);
        printf("t|    6.設定房間數量          |n"); Sleep(50);
        printf("t|    7.退出(儲存)          |n");
        printf("t---------------------------n");
        printf("t請選擇您要進行的操作: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|  歡迎進入酒店管理系統 |n"); Sleep(50);
        printf("t|   **請選擇您的身份**  |n"); Sleep(50);
        printf("t|  1.管理員            |n"); Sleep(50);
        printf("t|  2.服務員            |n"); Sleep(50);
        printf("t|  3.退出              |n"); Sleep(50);
        printf("t_________________________nn");
        printf("t請選擇您要進行的操作: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)主函數

int main()
{
    LinkList *p;
    p = (struct hotel *)malloc(sizeof(struct hotel));
    p->next = NULL;
    readHotelput(p);
    menu1(p);
    /*saveHotelFile(p);*/
    system("pause");
    return 0;
}

稍微改了一下,管理員初始賬號和密碼可以自定義,有了管理員的密碼和賬號之後才可以新增服務員哦。
這個程式碼使用傳首地址的方法,也可以通過設定靜態指標存首尾地址,這樣會更簡單。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com