DancingGoo 2022-05-24 11:28 采纳率: 50%
浏览 441
已结题

c++宾馆客房管理系统,程序设计

宾馆客房管理系统(必须用类)
题目描述:设计一个宾馆客房管理系统,以菜单方式工作。
功能需求:
(1) 设计一个房间类Room, 记录的客房信息包括客房号、客房类型、客房价格、空闲情况、客人姓名、客人身份证号、入住时间、退房时间,预付费用等信息。
(2)客房信息的录入功能。
(3) 客人入住登记。
(4)客房信息浏览功能,浏览全部客房的信息。 支持按照空房、姓名、身份证号、 房间号查询。
(5) 客人退房结算。
(6)使用外部文件存储相关数据。

写注释!
要符合提干要求,外部文件

  • 写回答

5条回答 默认 最新

  • qfl_sdu 2022-05-24 21:32
    关注

    客房管理系统,现写的代码,运行结果如下:(有的截图中没有回车的地方,代码中已经修改了)

    img

    img

    img

    img

    img

    代码:

    //酒店管理系统
    /*
    (1) 设计一个房间类Room, 记录的客房信息包括客房号、客房类型、客房价格、空闲情况、客人姓名、客人身份证号、入住时间、退房时间,预付费用等信息。
    (2) 客房信息的录入功能。
    (3) 客人入住登记。
    (4) 客房信息浏览功能,浏览全部客房的信息。 支持按照空房、姓名、身份证号、 房间号查询。
    (5) 客人退房结算。
    (6) 使用外部文件存储相关数据。
    */
    
    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    
    //定义客房类型
    enum eRomeType 
    {
        e_rome_bj,  //标准间
        e_rome_dcf, //大床房
        e_rome_scf, //双床房
        e_rome_hhdcf, //豪华大床房
        e_rome_hhscf, //豪华双床房
        e_rome_swdcf, //商务大床房
        e_rome_zttf //总统套房
    };
    
    //定义客房状态
    enum eRomeState //在低版本vs中,可以直接写成 enum eRomeState
    {
        e_state_using, //再用
        e_state_preshoping, //已预定(尚未入住)
        e_state_free //空闲
    };
    
    
    //定义顾客信息
    class Guest
    {
    private:
        string mName; //姓名
        string mCard; //身份证号
        string mPhoneNmb; //手机号
        int mPrePay; //剩余预付费金额
    public:
        Guest(string name="", string id = "", string phone = "", int prepay = 0)
        {
            mName = name;
            mCard = id;
            mPhoneNmb = phone;
            mPrePay = prepay;
        }
        /*getter and setter functions*/
        string getName() { return mName; }
        string getId() { return mCard; }
        string getPhoneNmb() { return mPhoneNmb; }
        int getPrePay() { return mPrePay; }
    
        void setName(string name) { mName = name; }
        void setId(string id) { mCard = id; }
        void setPhoneNmb(string nmb) { mPhoneNmb = nmb; }
        void setPrePay(int p) { mPrePay = p; }
    
        /*输入输出运算符重载*/
        //friend ostream& operator << (ostream& os, Guest& p);
        //friend istream& operator >> (istream& is, Guest& p);
    };
    
    //定义日期类
    struct MyDate
    {
        int year, mon, day;
        MyDate()
        {
            year = 0;
            mon = 0;
            day = 0;
        }
    };
    
    class Rome
    {
    private:
        string mRomeId;  //房间号
        eRomeType mRomeType; //客房类型
        int mPrice; //房价
        eRomeState mRomeState; //客房状态
        Guest mGuest; //客户信息
        MyDate mStart; //入住日期
        MyDate mEnd; //退房日期
    
    public:
        Rome()
        {
            mRomeId = "";
            mRomeType = e_rome_bj;
            mPrice = 0;
            mRomeState = e_state_free;
            mStart.year = 0;
            mStart.mon = 0;
            mStart.day = 0;
            mEnd.year = 0;
            mEnd.mon = 0;
            mEnd.day = 0;
        }
        Rome(string id, eRomeType type, int price, eRomeState state = e_state_free)
        {
            mRomeId = id;
            mRomeType = type;
            mPrice = price;
            mRomeState = state;
        }
    
        /*getter and setter functions*/
        string getRomeId() { return mRomeId; }
        eRomeType getRomeType() { return mRomeType; }
        int getPrice() { return mPrice; }
        eRomeState getRomeState() { return mRomeState; }
        Guest getGuest() { return mGuest; }
        MyDate getStartDate() { return mStart; }
        MyDate getEndDate() { return mEnd; }
    
        void setRomeId(string id) { mRomeId = id; }
        void setRomeType(eRomeType t) { mRomeType = t; }
        void setRomePrice(int p) { mPrice = p; }
        void setRomeState(eRomeState s) { mRomeState = s; }
        void setGuest(Guest g) { mGuest = g; }
        void setStartDate(MyDate d) { mStart = d; }
        void setEndDate(MyDate d) { mEnd = d; }
    
        /*输入输出运算符重载*/
        friend ostream& operator << (ostream& os, Rome& p);
        friend istream& operator >> (istream& is, Rome& p);
    };
    
    ostream& operator << (ostream& os, Rome& p)
    {
        os << p.mRomeId << " ";
        switch (p.mRomeType)
        {
        case e_rome_bj:
            os << "1 "; break;
        case e_rome_dcf:
            os << "2 "; break;
        case e_rome_scf: //双床房
            os << "3 "; break;
        case e_rome_hhdcf: //豪华大床房
            os << "4 "; break;
        case e_rome_hhscf: //豪华双床房
            os << "5 "; break;
        case e_rome_swdcf: //商务大床房
            os << "6 "; break;
        case e_rome_zttf: //总统套房
            os << "7 "; break;
        }
        os << p.mPrice << " ";
    
        switch (p.mRomeState)
        {
        case e_state_using:
            os << "1 ";    break;
        case e_state_preshoping:
            os << "2 "; break;
        case e_state_free:
            os << "3 "; break;
        }
    
        if (p.mRomeState == e_state_using)
            os << p.mGuest.getName() << " " << p.mGuest.getId() << " " << p.mGuest.getPhoneNmb() << " " << p.mGuest.getPrePay() << " ";
        else
            os << "0 0 0 0 ";
    
        os << p.mStart.year<<"-" << p.mStart.mon<<"-" << p.mStart.day << " ";
        os << p.mEnd.year << "-" << p.mEnd.mon << "-" << p.mEnd.day << endl;
    
        return os;
    }
    
    istream& operator >> (istream& is, Rome& p)
    {
        int tmp;
        char ch;
        string str;
        is >> p.mRomeId;
        is >> tmp;
        switch (tmp)
        {
        case 1:
            p.mRomeType = e_rome_bj;
            break;
        case 2:
            p.mRomeType = e_rome_dcf;
            break;
        case 3:
            p.mRomeType = e_rome_scf; //双床房
            break;
        case 4:
            p.mRomeType = e_rome_hhdcf; //豪华大床房
            break;
        case 5:
            p.mRomeType = e_rome_hhscf; //豪华双床房
            break;
        case 6:
            p.mRomeType = e_rome_swdcf; //商务大床房
            break;
        case 7:
            p.mRomeType = e_rome_zttf; //总统套房
            break;
        }
        is >> p.mPrice;
    
        is >> tmp;
        switch (tmp)
        {
        case 1:
            p.mRomeState = e_state_using;
            break;
        case 2:
            p.mRomeState = e_state_preshoping;
            break;
        case 3:
            p.mRomeState = e_state_free;
            break;
        }
        is >> str;
        p.mGuest.setName(str);
        is >> str;
        p.mGuest.setId(str);
        is >> str;
        p.mGuest.setPhoneNmb(str);
        is >> tmp;
        p.mGuest.setPrePay(tmp);
    
        is >> p.mStart.year >> ch >> p.mStart.mon >> ch >> p.mStart.day;
        is >> p.mEnd.year >> ch >> p.mEnd.mon >> ch >> p.mEnd.day;
    
        return is;
    }
    
    //显示住房信息
    void showSingleInfo(Rome p)
    {
        cout << p.getRomeId() << " ";
        switch (p.getRomeType())
        {
        case e_rome_bj:
            cout << "标准间 "; break;
        case e_rome_dcf:
            cout << "大床房 "; break;
        case e_rome_scf: //双床房
            cout << "双床房 "; break;
        case e_rome_hhdcf: //豪华大床房
            cout << "豪华大床房 "; break;
        case e_rome_hhscf: //豪华双床房
            cout << "豪华双床房 "; break;
        case e_rome_swdcf: //商务大床房
            cout << "商务大床房 "; break;
        case e_rome_zttf: //总统套房
            cout << "总统套房 "; break;
        }
        cout << p.getPrice() << " ";
    
        switch (p.getRomeState())
        {
        case e_state_using:
            cout << "已入住 ";    break;
        case e_state_preshoping:
            cout << "已预定 "; break;
        case e_state_free:
            cout << "空闲 "; break;
        }
    
        if (p.getRomeState() == e_state_using)
        {
            cout << p.getGuest().getName() << " " << p.getGuest().getId() << " " << p.getGuest().getPhoneNmb() << " " << p.getGuest().getPrePay() << " ";
    
            cout << p.getStartDate().year << "-" << p.getStartDate().mon << "-" << p.getStartDate().day << " ";
            cout << p.getEndDate().year << "-" << p.getEndDate().mon << "-" << p.getEndDate().day << endl;
        }
        else
            cout << endl;
    
    }
    
    //录入客房信息
    void addRome(Rome romes[], int &n)
    {
        int flag = 1;
        while (1)
        {
            system("cls");
            Rome r;
            string str;
            cout << "请输入房间号:";
            cin >> str;
            r.setRomeId(str);
            cout << "请选择房间类型:" << endl;
            cout << "\t1.标准间\n";
            cout << "\t2.大床房\n";
            cout << "\t3.双床房\n";
            cout << "\t4.豪华大床房\n";
            cout << "\t5.豪华双床房\n";
            cout << "\t6.商务大床房\n";
            cout << "\t7.总统套房\n";
            int type;
            cin >> type;
            switch (type)
            {
            case 1: r.setRomeType(e_rome_bj); break;
            case 2: r.setRomeType(e_rome_dcf); break;
            case 3: r.setRomeType(e_rome_scf); break;
            case 4: r.setRomeType(e_rome_hhdcf); break;
            case 5: r.setRomeType(e_rome_hhscf); break;
            case 6: r.setRomeType(e_rome_swdcf); break;
            case 7: r.setRomeType(e_rome_zttf); break;
            }
            int price;
            cout << "请输入价格:";
            cin >> price;
            r.setRomePrice(price);
    
            romes[n] = r;
            n++;
    
            cout << "添加成功,是否继续添加(1.继续 2.结束):";
            cin >> flag;
            if (flag == 2)
                break;
        }
        system("pause");
    }
    
    //入住
    void homeIn(Rome romes[], int n)
    {
        system("cls");
        while (1)
        {
            cout << "请输入入住房间类型:\n";
            int type;
            cout << "\t1.标准间\n";
            cout << "\t2.大床房\n";
            cout << "\t3.双床房\n";
            cout << "\t4.豪华大床房\n";
            cout << "\t5.豪华双床房\n";
            cout << "\t6.商务大床房\n";
            cout << "\t7.总统套房\n";
    
            eRomeType e = e_rome_bj;
            while (1)
            {
                cin >> type;
                if (type >= 1 && type <= 7)
                    break;
                else
                    cout << "请输入1-7之间的数字:";
            }
    
            switch (type)
            {
            case 1: e = e_rome_bj; break;
            case 2: e = e_rome_dcf; break;
            case 3: e = e_rome_scf; break;
            case 4: e = e_rome_hhdcf; break;
            case 5: e = e_rome_hhscf; break;
            case 6: e = e_rome_swdcf; break;
            case 7: e = e_rome_zttf; break;
            }
    
            //查找符合条件的房间
            int flag = 0;
            for (int i = 0; i < n; i++)
            {
                if (romes[i].getRomeState() == e_state_free && romes[i].getRomeType() == e)
                {
                    cout << romes[i].getRomeId() << "   " << romes[i].getPrice() << endl;
                    flag = 1;
                }
            }
            if (flag == 0)
            {
                cout << "目前没有该类型的房间,请重新选择\n";
                continue;
            }
            else
            {
                string romeid;
                cout << "请输入房间号:";
                cin >> romeid;
                for (int i = 0; i < n; i++)
                {
                    if (romes[i].getRomeId().compare(romeid) == 0)
                    {
                        string name, id, phone;
                        int prepay;
                        cout << "请输入用户名:";
                        cin >> name;
                        cout << "请输入身份证号:";
                        cin >> id;
                        cout << "请输入手机号:";
                        cin >> phone;
                        cout << "请输入预付金额:";
                        cin >> prepay;
    
                        Guest g(name, id, phone, prepay);
                        romes[i].setGuest(g);
                        romes[i].setRomeState( e_state_using);
    
                        cout << "请输入入住日期:";
                        MyDate start, end;
                        cin >> start.year >> start.mon >> start.day;
    
                        cout << "请输入退房日期:";
                        cin >> end.year >> end.mon >> end.day;
                        romes[i].setStartDate(start);
                        romes[i].setEndDate(end);
    
    
                        cout << "入住办理成功\n";
                        system("pause");
                        return;
                    }
                }
            }
        }
    }
    
    // 查询
    void Search(Rome romes[], int n)
    {
        int op;
        int type;
        int i;
        eRomeType e;
        string str;
        while (1)
        {
            system("cls");
            cout << "1.显示所有客房信息\n";
            cout << "2.按照客房类型查询\n";
            cout << "3.显示所有空闲客房\n";
            cout << "4.根据用户名查询\n";
            cout << "5.根据房间号查询\n";
            cout << "6.根据身份证号查询\n";
            cout << "0.结束查询\n";
            cin >> op;
    
            switch (op)
            {
            case 0:
                return;
            case 1:
                for (i = 0; i < n; i++)
                    showSingleInfo(romes[i]);
                break;
            case 2:
                cout << "请选择房间类型:\n";
                cout << "\t1.标准间\n";
                cout << "\t2.大床房\n";
                cout << "\t3.双床房\n";
                cout << "\t4.豪华大床房\n";
                cout << "\t5.豪华双床房\n";
                cout << "\t6.商务大床房\n";
                cout << "\t7.总统套房\n";
                while (1)
                {
                    cin >> type;
                    if (type >= 1 && type <= 7)
                        break;
                    else
                        cout << "请输入1-7之间的数字:";
                }
    
                switch (type)
                {
                case 1: e = e_rome_bj; break;
                case 2: e = e_rome_dcf; break;
                case 3: e = e_rome_scf; break;
                case 4: e = e_rome_hhdcf; break;
                case 5: e = e_rome_hhscf; break;
                case 6: e = e_rome_swdcf; break;
                case 7: e = e_rome_zttf; break;
                }
                for (i = 0; i < n; i++)
                {
                    if (romes[i].getRomeType() == e)
                        cout << romes[i];
                }
                break;
            case 3:
                for (i = 0; i < n; i++)
                {
                    if (romes[i].getRomeState() == e_state_free)
                        showSingleInfo(romes[i]);
                }
                break;
            case 4:
                cout << "请输入用户名:";
                cin >> str;
                for (i = 0; i < n; i++)
                {
                    if (romes[i].getGuest().getName().compare(str) == 0)
                        showSingleInfo(romes[i]);
                }
                break;
            case 5:
                cout << "请输入房间号:";
                cin >> str;
                for (i = 0; i < n; i++)
                {
                    if (romes[i].getRomeId().compare(str) == 0)
                        showSingleInfo(romes[i]);
                }
                break;
            case 6:
                cout << "请输入身份证号:";
                cin >> str;
                for (i = 0; i < n; i++)
                {
                    if (romes[i].getGuest().getId().compare(str) == 0)
                        showSingleInfo(romes[i]);
                }
                break;
    
            }
            system("pause");
        }
    }
    
    
    
    
    //退房结算
    void Tuifang(Rome romes[], int n)
    {
        string romeid;
        int i = 0;
        system("cls");
        cout << "请输入房间号:";
        cin >> romeid;
        for ( i = 0; i < n; i++)
        {
            if (romes[i].getRomeId().compare(romeid) == 0 )
            {
                if (romes[i].getRomeState() != e_state_using)
                {
                    cout << "此房间尚未有客人入住" << endl;
                    break;
                }
    
    
                //居住天数(为了简便,这里让用户输入吧,否则计算比较麻烦)
                int days = 1;
                cout << "请输入实际居住天数:";
                cin >> days;
    
    
                int p, pre;
                p = romes[i].getPrice();
                pre = romes[i].getGuest().getPrePay();
                cout << "房间价格:" << p << endl;
                cout << "房客预付:" << pre << endl;
                if (pre > p*days)
                    cout << "找零:" << pre - p << endl;
                else if (pre == p*days)
                    cout << "预付刚好" << endl;
                else
                    cout << "房客仍需支付" << p*days - pre << endl;
    
                //设置客房状态
                romes[i].setRomeState(e_state_free);
    
                cout << "退房成功!" << endl;
                break;
            }
        }
        if (i == n)
            cout << "查无此房" << endl;
        system("pause");
    }
    
    
    //保存文件
    void SaveFile(Rome romes[], int n)
    {
        ofstream os;
        os.open("./Hotel.txt", ios::out);
        for (int i = 0; i < n; i++)
            os << romes[i];
        os.close();
        cout << "保存成功\n";
        system("pause");
    }
    
    int main()
    {
        int op; 
        int romNmb = 0;
        Rome romes[100];
    
        int flag = 1;
        while (1)
        {
            system("cls");
            cout << "1.录入客房信息" << endl;
            cout << "2.客人入住" << endl;
            cout << "3.查询" << endl;
            cout << "4.退房结算" << endl;
            cout << "5.保存到文件" << endl;
            cout << "0.退出系统" << endl;
            cin >> op;
            switch (op)
            {
            case 0: return 0;
            case 1: addRome(romes, romNmb); break;
            case 2: homeIn(romes, romNmb); break;
            case 3: Search(romes, romNmb); break;
            case 4: Tuifang(romes, romNmb); break;
            case 5: SaveFile(romes,romNmb); break;
            }
    
        }
    
    
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 6月2日
  • 已采纳回答 5月25日
  • 创建了问题 5月24日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效