• C++——酒店管理系统


    酒店管理系统项目:
        旅客类:
            姓名、性别、身份证号
            构造函数
            show
            setName\setSex\setId    (可选)
        房间类:
            房号、房型、房价、入住数、旅客数组
            构造函数
            入住
            退房
            show
        酒店类:(单例模式)
            层数、每层房数、房间对象(三级指针)
            构造函数    (读酒店信息文件进行构造)
            入住
            退房
            查看空房
            查询房间
            升级
        管理员类:(选做)

    5   层数
    4   第一层房间数
    1001 2 200
    1002 3 200
    1003 2 200
    1005 2 200
    2

    1.guest.h

    1. #pragma once
    2. #include <iostream>
    3. #include <string>
    4. #include <fstream>
    5. using namespace std;
    6. class Guest
    7. {
    8. string name;
    9. char sex;
    10. string id;
    11. public:
    12. Guest(const string name="", char sex='m', const string id="") : name(name), sex(sex), id(id) {}
    13. //显示客人信息
    14. void show()
    15. {
    16. cout<<name<<" "<<sex<<" "<<id<<endl;
    17. }
    18. // friend ostream& operator<<(ostream& os, const Guest& g)
    19. // {
    20. // return os<<g.name<<" "<<g.sex<<" "<<g.id;
    21. // }
    22. };

    2.room.h

    1. #pragma once
    2. #include "guest.h"
    3. class Room
    4. {
    5. char type;
    6. short id;
    7. float price;
    8. int guest_cnt;
    9. Guest** guests;
    10. public:
    11. Room(char type, short id, float price):type(type), id(id), price(price)
    12. {
    13. guests = new Guest*[100];
    14. guest_cnt = 0;
    15. }
    16. //显示房间,客人信息
    17. void show(void)
    18. {
    19. cout<<id<<" "<<(int)type<<" "<<price<<endl;
    20. for(int i=0; i<guest_cnt; i++)
    21. {
    22. cout<<"旅客"<<i+1<<": "<<endl;
    23. guests[i]->show();
    24. }
    25. }
    26. //运算符重载写法
    27. // friend ostream& operator<<(ostream& os, const Room& r)
    28. // {
    29. // os<<r.id<<" "<<r.type<<" "<<r.price<<endl;
    30. // for(int i=0; i<r.guest_cnt; i++)
    31. // {
    32. // os<<"旅客"<<i+1<<": "<<endl;
    33. // os<<r.guests[i];
    34. // }
    35. // return os;
    36. // }
    37. bool cmp_room_id(int room_id)
    38. {
    39. return id==room_id;
    40. }
    41. bool in(Guest* guest)
    42. {
    43. if(guest_cnt >= type)
    44. {
    45. return false;
    46. }
    47. guests[guest_cnt++] = guest;
    48. return true;
    49. }
    50. //重载==运算符,对比房号
    51. bool operator==(int room_id)
    52. {
    53. return id==room_id;
    54. }
    55. //是否空房
    56. bool empty(void)
    57. {
    58. return guest_cnt==0;
    59. }
    60. //退房
    61. void out(void)
    62. {
    63. if(0==guest_cnt)
    64. {
    65. cout<<"房间"<<id<<"已空"<<endl;
    66. }
    67. for(int i=0; i<guest_cnt; i++)
    68. {
    69. delete guests[i];
    70. }
    71. guest_cnt = 0;
    72. cout<<"退房成功"<<endl;
    73. system("pause");
    74. }
    75. };

    3.hotel.h

    1. #pragma once
    2. #include "room.h"
    3. #include "tools.h"
    4. class Hotel
    5. {
    6. static Hotel hotel;
    7. int level_cnt;
    8. int *level_room;
    9. Room ***rooms;
    10. Hotel(void){}
    11. Hotel(const Hotel& that){}
    12. public:
    13. static Hotel& getHotel(void)
    14. {
    15. return hotel;
    16. }
    17. void load(const char *path); //加载房间信息
    18. void start(void); //程序运行
    19. int menu(void); //显示菜单并返回选择
    20. void in(void); //入住
    21. void list(void); //显示空房
    22. void query(void); //查询已入住房间,房客信息
    23. void out(void); //退房
    24. void upgrade(void); //升级房间
    25. Room *find(int room_id); //根据房间号查找房间,因为入住或退房等都需要房间号,所以提供一个接口
    26. };

    4.hotel.cpp

    1. #include "hotel.h"
    2. Hotel Hotel::hotel;
    3. void Hotel::load(const char *path)
    4. {
    5. FILE *fp = fopen(path, "r");
    6. if (NULL == fp)
    7. {
    8. perror("fopen");
    9. return;
    10. }
    11. fscanf(fp, "%d", &level_cnt);
    12. level_room = new int[level_cnt];
    13. rooms = new Room **[level_cnt];
    14. for (int i = 0; i < level_cnt; i++)
    15. {
    16. fscanf(fp, "%d", &level_room[i]);
    17. rooms[i] = new Room *[level_room[i]];
    18. for (int j = 0; j < level_room[i]; j++)
    19. {
    20. char type;
    21. short id;
    22. float price;
    23. fscanf(fp, "%hd %hhd %f", &id, &type, &price);
    24. rooms[i][j] = new Room(type, id, price);
    25. rooms[i][j]->show();
    26. }
    27. }
    28. // C++写法
    29. // ifstream ifs(path);
    30. // if(!ifs.good())
    31. // {
    32. // cout<<"errno"<<endl;
    33. // return;
    34. // }
    35. // ifs>>level_cnt;
    36. // level_room = new int[level_cnt];
    37. // rooms = new Room **[level_cnt];
    38. // for(int i=0;i<level_cnt;i++)
    39. // {
    40. // ifs>>level_room[i];
    41. // rooms[i] = new Room *[level_room[i]];
    42. // for(int j=0;j<level_room[i];j++)
    43. // {
    44. // char type;
    45. // short id;
    46. // float price;
    47. // ifs>>id>>type>>price;
    48. // rooms[i][j]=new Room(type, id, price);
    49. // }
    50. // }
    51. // cout<<__func__<<endl;
    52. }
    53. void Hotel::start(void)
    54. {
    55. while (true)
    56. {
    57. switch (menu())
    58. {
    59. case '1':in(); break;
    60. case '2':query(); break;
    61. case '3':out(); break;
    62. case '4':list(); break;
    63. case '0':
    64. cout << "欢迎下次光临!" << endl;
    65. return;
    66. break;
    67. default:break;
    68. }
    69. }
    70. //cout << __func__ << endl;
    71. }
    72. int Hotel:: menu(void) // 显示菜单并返回选择
    73. {
    74. system("cls");
    75. cout << "***欢迎使用XXX酒店管理系统***" << endl;
    76. cout << "1.入住 2.查询" << endl;
    77. cout << "3.退房 4.查看" << endl;
    78. cout << "0.退出" << endl;
    79. return get_cmd('0','4');
    80. }
    81. void Hotel:: in(void)
    82. {
    83. string name,id;
    84. char sex;
    85. cout << "请输入姓名、性别、身份证号:";
    86. cin >> name >> sex >> id;
    87. Guest *guest = new Guest(name, sex, id);
    88. int room_id;
    89. cout << "请输入要入住的房间:";
    90. cin >> room_id;
    91. Room *room = find(room_id);
    92. if (room == NULL)
    93. {
    94. cout << "未找到该房间:" <<room_id <<",请检查房间号"<< endl;
    95. return;
    96. }
    97. if(room->in(guest))
    98. {
    99. cout << "入住成功!" << endl;
    100. system("pause");
    101. }
    102. else
    103. {
    104. cout << "该房间已满!" << endl;
    105. delete guest;
    106. }
    107. }
    108. void Hotel::list(void)
    109. {
    110. for(int i=0;i<level_cnt;i++)
    111. {
    112. for(int j=0;j<level_room[i];j++)
    113. {
    114. if(rooms[i][j]->empty())
    115. {
    116. rooms[i][j]->show();
    117. }
    118. }
    119. }
    120. system("pause");
    121. }
    122. void Hotel::query(void)
    123. {
    124. for(int i=0;i<level_cnt;i++)
    125. {
    126. for(int j=0;j<level_room[i];j++)
    127. {
    128. if(!rooms[i][j]->empty())
    129. {
    130. rooms[i][j]->show();
    131. }
    132. }
    133. }
    134. system("pause");
    135. }
    136. void Hotel::out(void)
    137. {
    138. int room_id;
    139. cout << "请输入要退房的房间号:";
    140. cin >> room_id;
    141. Room *room = find(room_id);
    142. if (room == NULL)
    143. {
    144. cout << "未找到该房间:" << room_id << ",请检查房间号" << endl;
    145. return;
    146. }
    147. room->out();
    148. }
    149. void Hotel::upgrade(void)
    150. {
    151. }
    152. Room *Hotel::find(int room_id)
    153. {
    154. for (int i = 0; i < level_cnt; i++)
    155. {
    156. for (int j = 0; j < level_room[i]; j++)
    157. {
    158. if (rooms[i][j]->cmp_room_id(room_id))
    159. {
    160. return rooms[i][j];
    161. }
    162. }
    163. }
    164. return NULL;
    165. }

    5.tools.h

    1. #pragma once
    2. #include "hotel.h"
    3. char get_cmd(char a, char b);
    4. void anykey_continue(void);

    6.tool.cpp

    1. #include "hotel.h"
    2. char get_cmd(char a, char b) // 输入命令
    3. {
    4. char cmd;
    5. while (true)
    6. {
    7. cout << "请输入命令(1-" << b << "):";
    8. cin >> cmd;
    9. if (cmd >= a && cmd <= b)
    10. {
    11. return cmd;
    12. }
    13. cout << "输入错误,请重新输入!" << endl;
    14. }
    15. }
    16. // //按任意键继续(Linux)
    17. // void anykey_continue(void)
    18. // {
    19. // stdin->IO_read_ptr = stdin->IO_read_end;
    20. // cout << "按任意键继续..." << endl;
    21. // getch();
    22. // cout << endl;
    23. // }

    7.main.cpp

    1. #include "hotel.h"
    2. int main(int argc,const char* argv[])
    3. {
    4. if(2!=argc)
    5. {
    6. cout<<"User: ./hotel [hotel_name]"<<endl;
    7. return 0;
    8. }
    9. Hotel &hotel=Hotel::getHotel();
    10. hotel.load(argv[1]);
    11. hotel.start();
    12. return 0;
    13. }

    8.hotel.txt

    1. 5
    2. 5
    3. 1001 2 200
    4. 1002 3 200
    5. 1003 2 200
    6. 1004 2 200
    7. 1005 2 200
    8. 6
    9. 2001 2 300
    10. 2002 3 300
    11. 2003 2 300
    12. 2004 2 300
    13. 2005 2 300
    14. 2006 2 300
    15. 7
    16. 3001 3 400
    17. 3002 3 400
    18. 3003 3 400
    19. 3004 3 400
    20. 3005 3 400
    21. 3006 3 400
    22. 3007 3 400
    23. 8
    24. 4001 4 500
    25. 4002 4 500
    26. 4003 4 500
    27. 4004 4 500
    28. 4005 4 500
    29. 4006 4 500
    30. 4007 4 500
    31. 4008 4 500

  • 相关阅读:
    负载均衡Ribbon和Feign的使用与区别
    Android WebSocket 使用指南:详细步骤与实践
    MYSQL的事务、视图、索引、数据备份和恢复
    opdriver 数据处理
    MySQL的分库分表
    事故报告模板
    3d稀疏卷积——spconv源码剖析(五)
    图像处理——数组变换
    iTOP-3568开发板Ubuntu下安装ADB工具
    CSDN 五一创作勋章Lv4 勋章_(标签-ar)
  • 原文地址:https://blog.csdn.net/m0_67677309/article/details/143308258