首頁 > 軟體

C++實現簡單酒店管理系統

2022-08-31 14:03:45

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

酒店管理系統設計報告

一、 需求分析

題目要求如下:

某酒店有客房若干間,其中客房分為不同等級,如豪華、標準、普通等,客房床位數也不同。例如,豪華套房有4個床位,400元/晚;標準客房2個床位,200元/晚;普通客房1個床位,100元/晚。

顧客分金卡會員、銀卡會員、普通會員及非會員,其享受的折扣不同。例如,金卡會員可享受8折優惠,銀卡會員可享受9折優惠,普通會員享受95折優惠,非會員不享受優惠。

當顧客連續入住多天時,也可享受一定的折扣。例如,當顧客連續入住24晚時,可享受9折優惠;連續入住58晚時,可享受85折優惠;連續入住9晚以上時,可享受8折優惠。

採用物件導向的思想,建立系統中清晰的類,分析和定義各個類,每個類中要有各自的屬性和方法,並開發一套客房管理系統,實現如下功能:

(1) 管理員:以管理員身份登入系統,查詢當前客房入住及預訂情況,並設定客房價格、顧客優惠政策等;
(2) 酒店前臺:以前臺身份登入系統,查詢當前客房入住及預訂情況,為顧客辦理入住、退房、換房等服務;顧客退房後為顧客計算消費金額並收費;
(3) 顧客:可以註冊和登入系統,使用者在查詢到心儀的客房後,登入酒店客房管理系統可提交訂單實現客房預訂;未入住酒店前1天,可取消客房預訂;顧客入住退房後可評論。

二、 類圖設計及說明

這裡的customer類名打錯了

三、 系統功能設計

1、系統可以三種使用者登入,分別為管理員、前臺工作人員、客戶,管理員需要特殊管理員賬戶才可以登入,客戶需要註冊賬號才可以登入系統,使用者登入成功後轉至前臺工作人員為其服務。

2、 管理人員頁面有查詢房間狀態,設定優惠政策,新建房間等選項。

① 查詢房間狀態:返回所有房間號,房間型別和當前狀態
② 設定優惠政策:對已有的區間設定打折力度
③ 新建房間:通過房間號和房間型別來新建房間

3、 前臺頁面提供客房查詢,辦理入住,提前預約,辦理退房等功能

① 查詢客房資訊:向用戶提供房間資訊來選擇。
② 辦理入住:獲取使用者入住時間和離開時間為客戶辦理入住。
③ 提前預約:獲取使用者入住時間和離開時間為客戶提前預約。
④ 辦理退房:獲取退房房間號,辦理退房並且返回客戶需付費金額。

4、客戶介面,無賬號註冊賬號,通過賬號密碼的形式登入,登入成功後轉至前臺頁面。

四、實現流程

五、 結果演示

1、 首頁

2、 管理員

登入管理員頁面

建立房間

依次建立五個房間(建立數量小於40)
可查詢當前的狀態

設定優惠政策

3、 前臺

查詢當前房間狀態

輸入入住時間和退房時間,會顯示當前房間狀態,可進行選擇,選擇後會更具入住時間長短顯示客戶所享受的優惠政策,8折(此前在管理員狀態設定過)

房間狀態變為有客

若入住有客的房間,會顯示已經有客人了,選擇其他房間

預約房間也是同理

並且房間變成已經被預約

退房,入住7天豪華房間400x7=2800,但是享受8折,因此收費2240,繳費後可以留下評論

並且此時房間狀態也變成了空

4、 客戶

客戶平臺

註冊賬號

登入賬號,登入成功轉到前臺

如果輸入不存在的賬號,會報錯

六、 問題及解決

中途遇見了一個問題想了很久,客戶請求入住後通過reception類入住,reception類中是通過改變room型別實現的,然而每次入住後房間的狀態在reception類中已經改變,卻在查詢時沒有變化,最後將reception類的checkin函數改為返回room型別才成功,當然預約和退房也是同理。原來客戶提交的申請在reception類中建立一個新的room,並不是我們想要操作的room,因此需要返回修改後的房間才可以得到正確的結果。

七、 附錄

設計程式碼如下:

#include<iostream>
using namespace std;
#include<string>

enum Type { luxury, standard, ordinary };
enum Status { used, reserved, empty1 };
struct Time {
    int year;
    int month;
    int day;
};

class room {
public:
    room(int roomNo, Type roomType) {
        roomID = roomNo;
        type = roomType;
        roomStatus = empty1;
        if (type == luxury) {
            price = 400;
            name = "豪華間";
        }
        else if (type == standard) {
            price = 200;
            name = "標準間";
        }
        else if (type == ordinary) {
            price = 100;
            name = "普通間";
        }
    };
    room() {};
    //顯示房間當前資訊
    void showInformation() {
        cout << "房間號:" << roomID << endl;
        cout << "型別:" << name << endl;
        if(roomStatus == 0)
            cout << "當前狀態:有客" <<endl;
        else if(roomStatus == 1)
            cout << "當前狀態:已被預約" << endl;
        else
            cout << "當前狀態:空房間" << endl;
        cout << endl;

    }
    //辦理入住
    void checkIn(Time beginTime, Time endTime) {
        this->begin = beginTime;
        this->end = endTime;
        this->roomStatus = used;
    }
    void roomReserved(Time beginTime, Time endTime) {
        roomStatus = reserved;
        begin = beginTime;
        end = endTime;
    };
    //辦理退房
    float checkOut() {
        roomStatus = empty1;
        int day = (end.year - begin.year) * 365 + (end.month - begin.month) * 30 + (end.day - begin.day);
        float polity;
        if (day > 2 && day <= 4) {
            polity = polity1;
        }
        else if (day >= 5 && day <= 8) {
            polity = polity2;
        }
        else if (day >= 9) {
            polity = polity3;
        }
        else {
            polity = 1;
        }
        float money = ((end.year - begin.year) * 365 + (end.month - begin.month) * 30 + (end.day - begin.day))*price*polity;
        return money;
    }
    int showstatus() {
        return roomStatus;
    }
    int getRno(){
        return roomID;
    }
    void setPolity(float a, float b, float c) {
        polity1 = a;
        polity2 = b;
        polity3 = c;        
    }
    int getRoomnumber() {
        return roomnumber;
    }
    friend class manager;
    friend class reception;
private:
    int roomID;
    static float polity1;
    static float polity2;
    static float polity3;
    static int roomnumber;
    Type type;
    string name;
    float price;
    Status roomStatus;
    Time begin;
    Time end;
};

class manager {
public:
    manager() {};
    room roomcreate(int No, Type roomtype) {
        room Room(No, roomtype);
        Room.roomnumber++;
        return Room;
    }
    void checkInformation(room Room) {
        Room.showInformation();
    }
    void setPolity() {
        room Room1;
        float a, b, c;
        cout << "請分別設定入住2-4天,5-8天或9天以上的優惠政策,用1以內小數表示打折力度" << endl;
        cin >> a >> b >> c;
        Room1.setPolity(a, b, c);
        cout << "設定成功" << endl;
    };
};

class reception {
public:
    reception(int no) {
        NO = no;
    }
    void checkInformation(room Room) {
        Room.showInformation();
    }
    room CheckIn(Time begin, Time end, room Room) {
        if (Room.showstatus() == empty1) {
            Room.checkIn(begin, end);
            cout << "預定成功!時間:" << begin.year << "年" << begin.month << "月" << begin.day << "日---" << end.year << "年" << end.month << "月" << end.day << "日" << endl;
            int day = (end.year - begin.year) * 365 + (end.month - begin.month) * 30 + (end.day - begin.day);
            if (day > 2 && day <= 4) {
                polity = Room.polity1;
            }
            else if (day >= 5 && day <= 8) {
                polity = Room.polity2;
            }
            else if (day >= 9) {
                polity = Room.polity3;
            }
            else {
                polity = 1;
            }
            if (polity < 1)
                cout << "優惠打" << polity * 10 << "折" << endl;
        }
        else {
            cout << "房間已經被預定,請選擇其他房間" << endl;
        }
        return Room;
    }
    int getID() {
        return NO;
    }
    room CheckOut(room Room) {
        float money = Room.checkOut();
        cout << "退房成功" << endl;
        cout << "請支付:" << money << "元"<<endl;
        return Room;
    }
    room Reserved(Time begin, Time end, room Room) {
        if (Room.showstatus() == empty1) {
            Room.roomReserved(begin, end);
            cout << "預定成功!時間:" << begin.year << "年" << begin.month << "月" << begin.year << "日---" << end.year << "年" << end.month << "月" << end.day << "日" << endl;
            int day = (end.year - begin.year) * 365 + (end.month - begin.month) * 30 + (end.day - begin.day);
            if (day > 2 && day <= 4) {
                polity = Room.polity1;
            }
            else if (day >= 5 && day <= 8) {
                polity = Room.polity2;
            }
            else if (day >= 9) {
                polity = Room.polity3;
            }
            else {
                polity = 1;
            }
            if (polity < 1)
                cout << "優惠打" << polity * 10 << "折" << endl;
        }
        else {
            cout << "房間已經被預定,請選擇其他房間" << endl;
        }
        return Room;
    }
private:
    int NO;
    float polity;
};

class customer {
public:
    customer(){}
    customer(int Count, int Key) {
        count = Count;
        key = Key;
        customernumber++;
        cout << "註冊成功!" << endl;
    }
    void signin() {};
    void checkin(reception rec, Time begin, Time end, room Room) {
        rec.CheckIn(begin, end, Room);
    }
    void reserve(reception rec, Time begin, Time end, room Room) {
        rec.Reserved(begin, end, Room);
    }
    void  checkout(reception rec, room Room) {
        rec.CheckOut(Room);
    }
    int getnumber() {
        return customernumber;
    }
    int getcount() {
        return count;
    }
    int getkey() {
        return key;
    }
private:
    int count;
    int key;
    static int customernumber;
};
int room::roomnumber = 0;
int customer::customernumber = 0;
float room::polity1 = 1;
float room::polity2 = 1;
float room::polity3 = 1;
int main() {

    int user;
    int rightkey = 123;
    manager jasur;
    reception wmn(1);
    room Baseroom;
    room Room[40];
    customer Customer[40];
    customer baseCusomer;
    string comments[40];

    while (true) {
        cout << "歡迎來到酒店預訂系統,請問你是?" << endl;
        cout << "1.管理員  2.前臺   3.客戶" << endl;
        cout << "請輸入:" << endl;
        cin >> user;
        if (user == 1) {    //管理員選項
            cout << "請輸入管理員密碼:" << endl;
            int key;
            cin >> key;
            if (rightkey == key) {
                cout << "歡迎來到管理員平臺歡迎您!" << endl;
                while (true) {
                    cout << "1.查詢入住情況   2.設定客房優惠  3.建立房間  0.退出" << endl;
                    int selection;
                    cout << "請輸入:" << endl;
                    cin >> selection;
                    if (selection == 1) {
                        for (int i = 0; i < Baseroom.getRoomnumber(); i++) {
                            jasur.checkInformation(Room[i + 1]);
                        }
                    }
                    else if (selection == 2) {
                        jasur.setPolity();
                    }
                    else if (selection == 3) {
                        int entry, Rno;
                        cout << "輸入建立房間的房間號和型別(1代表豪華間,2代表標準間,3代表普通間)" << endl;
                        cin >> Rno >> entry;
                        if (entry == 1)
                            Room[Baseroom.getRoomnumber()] = jasur.roomcreate(Rno, luxury);
                        else if (entry == 2)
                            Room[Baseroom.getRoomnumber()] = jasur.roomcreate(Rno, standard);
                        else if (entry == 3)
                            Room[Baseroom.getRoomnumber()] = jasur.roomcreate(Rno, ordinary);
                        cout << "操作成功" << endl << endl;
                    }
                    else if (selection == 0) {
                        break;
                    }
                }
            }
        }
        else if (user == 2) {
            cout << "歡迎來到前臺服務平臺" << endl;
            while (true) {
                fuwu:
                cout << wmn.getID() << "號服務員為您服務,本平臺為您提供瞭如下功能:1.查詢客房資訊  2.辦理入住  3.提前預約  4.辦理退房  0.退出" << endl;
                cout << "請選擇需要的服務" << endl;
                int selection;
                cin >> selection;
                if (selection == 1) {
                    cout << "客房資訊如下:" << endl;
                    for (int i = 0; i < Baseroom.getRoomnumber(); i++) {
                        wmn.checkInformation(Room[i + 1]);
                    }
                }
                else if (selection == 2) {
                    Time begin, end;
                    int Rno, index;
                    cout << "輸入客戶入住時間:";
                    cin >> begin.year >> begin.month >> begin.day;
                    cout << "輸入客戶離開時間:";
                    cin >> end.year >> end.month >> end.day;
                    cout << "客房資訊如下:" << endl;
                    for (int i = 0; i < Baseroom.getRoomnumber(); i++) {
                        wmn.checkInformation(Room[i + 1]);
                    }
                    cout << "請輸入入住客房號:";
                    cin >> Rno;
                    for (int i = 0; i < Baseroom.getRoomnumber(); i++) {
                        if (Room[i + 1].getRno() == Rno) {
                            index = i + 1;
                        }
                    }
                    Room[index] = wmn.CheckIn(begin, end, Room[index]);

                }
                else if (selection == 3) {
                    Time begin, end;
                    int Rno, index;
                    cout << "輸入客戶入住時間:";
                    cin >> begin.year >> begin.month >> begin.day;
                    cout << "輸入客戶離開時間:";
                    cin >> end.year >> end.month >> end.day;
                    cout << "客房資訊如下:" << endl;
                    for (int i = 0; i < Baseroom.getRoomnumber(); i++) {
                        wmn.checkInformation(Room[i + 1]);
                    }
                    cout << "請輸入預約客房號:";
                    cin >> Rno;
                    for (int i = 0; i < Baseroom.getRoomnumber(); i++) {
                        if (Room[i + 1].getRno() == Rno) {
                            index = i + 1;
                        }
                    }
                    Room[index] = wmn.Reserved(begin, end, Room[index]);
                }
                else if (selection == 4) {
                    int Rno,index;
                    cout << "請輸入退房房間號:";
                    cin >> Rno;
                    for (int i = 0; i < Baseroom.getRoomnumber(); i++) {
                        if (Room[i + 1].getRno() == Rno) {
                            index = i + 1;
                        }
                    }
                    Room[index] = wmn.CheckOut(Room[index]);
                    cout << "歡迎留言評論您的體驗:" << endl;
                    cin >> comments[index];
                }
                else if (selection == 0) {
                    break;
                }
            }
        }
        else if (user == 3) {
            cout << "使用者你好,歡迎您來到本酒店" << endl;
            while (true) {
                cout << "請問您有本平臺的賬號嗎?沒有可以註冊一個哦!" << endl;
                cout << "1.我已經有賬號了    2.註冊     0.退出" << endl;
                int selection;
                cin >> selection;
                if (selection == 1) {
                    int count, key, rightcount, index = -1;
                x:
                    cout << "請輸入賬號:" << endl;
                    cin >> count;
                    for (int i = 0; i < baseCusomer.getnumber(); i++) {
                        if (Customer[i].getcount() == count) {
                            index = i;
                        }
                    }
                    if (index == -1) {
                        cout << "不存在此賬號" << endl;
                        goto x;
                    }
                y:
                    cout << "請輸入密碼:";
                    cin >> key;
                    for (int i = 0; i < baseCusomer.getnumber(); i++) {
                        if (Customer[index].getkey() == key) {
                            cout << "登入成功!" << endl;
                            goto fuwu;
                        }
                        else {
                            cout << "密碼錯誤!" << endl;
                            goto y;
                        }
                    }
                }
                else if (selection == 2) {
                    int count, key, virity;
                    cout << "請輸入註冊賬號:";
                    cin >> count;
                    cout << endl;
                a:
                    cout << "請設定密碼:";
                    cin >> key;
                    cout << "請確認密碼:";
                    cin >> virity;
                    if (key == virity) {
                        customer base(count, key);
                        Customer[baseCusomer.getnumber() - 1] = base;
                    }
                    else {
                        cout << "兩次密碼不相等,重新輸入" << endl;
                        goto a;
                    }

                }
                else if (selection == 0) {
                    break;
                }

            }
        }
        else {
            cout << "無效的選擇,重新選擇!";
        }
    }

    return 0;
}

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


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