运维开发网

基于C的酒店管理系统的实现

运维开发网 https://www.qedev.com 2022-06-28 21:21 出处:网络
这篇文章主要为大家详细介绍了基于C++实现酒店管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

这篇文章主要为大家详细介绍了基于C++实现酒店管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

如今,大多数酒店都提供各种各样的服务风格和不同的规模,但总而言之,两个不可或缺的模块是客户和员工。因为对酒店行业没有深入了解,所以系统设计,包括数据库和功能模块,都是基于网上搜集的资料和个人认知,简单模仿,具体实现。

为了满足酒店管理的实际需要,本系统主要实现了以下功能:

1.入住:入住房号,入住时间,退房时间,个人信息(身份证号,手机号,姓名)
2。退房:输入已经入住的房号,确认后退房。
3。房间查询:管理员输入正确密码后可以查询房间状态和具体入住信息。
4。密码修改:管理员修改自己的密码,前提是首先输入正确的密码。
5。以txt文件的形式存储信息数据。
6。使用类封装。


注意:在使用代码之前,您需要在代码中的自定义路径下的Input.txt文档中预先存储信息。

功能截图




代码:

#includelt;iostreamgt;#includelt;iomanipgt;#includelt;stringgt;#includelt;fstreamgt;#includelt;sstreamgt;#includelt;windows.hgt;#includelt;stdexceptgt; #includelt;conio.hgt;using namespace std;class room{private: int roomnumber = 0; //房间号 int price = 0; //价格 int start_date = 0; //开始 结束 日期 int end_date = 0; bool order = 0; //房间状态 0/1 string name; //个人信息 string ID; string phone;public: void getnumber(int _number) { roomnumber = _number; } int returnnumber() const { return roomnumber; } void getprice(int _price) { price = _price; } int returnprice() const { return price; } void getdate(int s, int e) { if (s lt; 1 || s gt; 31 || e lt; 1 || e gt; 31 || s gt;= e) throw runtime_error("错误的日期!"); start_date = s; end_date = e; } int returnstartdate() const { return start_date; } int returnenddate() const { return end_date; } void getorder(bool _order) { if (!(_order == 0 || _order == 1)) throw out_of_range("房间状态错误!"); order = _order; } bool returnorder() const { return order; } void getname(string _name) { name = _name; } string returnname() const { return name; } void getID(string id) { if (id.size() lt; 18 || id.size() gt; 19) throw runtime_error("您的身份证号输入有误,请重新输入!(18位)"); ID = id; } string returnID() const { return ID; } void getphone(string ph) { if (ph.size() != 11) throw runtime_error("您的手机号输入有误,请重新输入(11位)!"); phone = ph; } string returnphone() const { return phone; } int sumprice() { return price * (end_date - start_date); } friend ostreamamp; operatorlt;lt;(ostreamamp; os, const room* u)//输出流重载 { os lt;lt; u-gt;returnnumber() lt;lt; '\n'; os lt;lt; u-gt;returnprice() lt;lt; '\n'; os lt;lt; u-gt;returnstartdate() lt;lt; '\n'; os lt;lt; u-gt;returnenddate() lt;lt; '\n'; os lt;lt; u-gt;returnorder() lt;lt; '\n'; os lt;lt; u-gt;returnname() lt;lt; '\n'; os lt;lt; u-gt;returnID() lt;lt; '\n'; os lt;lt; u-gt;returnphone() lt;lt; '\n'; return os; }};class standard :public room{};class suite :public room{};class kingsize :public room{};void nomorememory(){ cerr lt;lt; "unable to satisfy request for memory\n"; abort();}//new分配异常int check(int a[], int size, int suspicion){ int judge = 0; for (int i = 0; i lt; size; i++) { if (suspicion == a[i]) judge = 1; } if (judge == 0) throw suspicion; return 0;}class file_exception { string filename;public: file_exception(const stringamp; filename) :filename(filename) {} ~file_exception() {} const stringamp; get_filename()const { return filename; }};void update(room* p[], const stringamp; filename)//覆盖/更新原有文件内容{ ofstream os(filename, ios_base::binary); if (os) { for (int i = 0; i lt; 6; i++) { os lt;lt; p[i]; } } else throw file_exception(filename); os.close();}void addRecord(const stringamp; filename, room* current)//以追加模式打开文件,用于记录{ ofstream file(filename, ios_base::app); if (file) { file lt;lt; current; file.close(); } else throw file_exception(filename); file.close();}void password(string rightpassword){part4: string password; cout lt;lt; "请输入 密码: " lt;lt; endl; int i = 0; char ch; while ((ch = _getch()) != 13) { password += ch; //字符串拼接 cout lt;lt; "*"; } if (password != rightpassword) { cout lt;lt; "密码错误! 请重新输入" lt;lt; endl; goto part4; } cout lt;lt; "密码正确!" lt;lt; endl; fflush(stdin);}void checkin(room* p[], int size, const stringamp; filename1, const stringamp; filename2){ HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//句柄 cout.width(120); SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); cout lt;lt; "欢迎来到 小刘 酒店!\n本酒店设有 标准房, 商务套房 和 大床房. \n目前可入住房间为: " lt;lt; endl; int vacant_room[6]; int j = 0; int temp, temp1; string str; for (int i = 0; i lt; 6; i++) { if (p[i]-gt;returnorder() == 0) { temp1 = p[i]-gt;returnnumber(); cout lt;lt; temp1 lt;lt; "、"; vacant_room[j] = temp1; j++; } } cout lt;lt; endl lt;lt; "101-102 是标准间. 价格为 100 CNY 每晚" lt;lt; endl; cout lt;lt; "103-104 是商务套间. 价格为 200 CNY 每晚" lt;lt; endl; cout lt;lt; "105-106 是大床房. 价格为 300 CNY 每晚" lt;lt; endl;part1: try { cout lt;lt; '\n' lt;lt; setiosflags(ios_base::left) lt;lt; " 请输入你选择的房间号." lt;lt; endl; cout lt;lt; "共有 " lt;lt; j lt;lt; " 间空房." lt;lt; endl; cin gt;gt; temp; check(vacant_room, j, temp); } catch (int e) { cout lt;lt; "房间 " lt;lt; e lt;lt; " 不可选择入住,请重新选择." lt;lt; endl; goto part1; } room* current = NULL; for (int i = 0; i lt; 6; i++) { if (p[i]-gt;returnnumber() == temp) { current = p[i]; break; } }part2: try { cout lt;lt; "请输入 入住 日期" lt;lt; endl; cin gt;gt; temp; cout lt;lt; "请输入 离店 日期" lt;lt; endl; cin gt;gt; temp1; current-gt;getdate(temp, temp1); cout lt;lt; "请输入您的 姓名 " lt;lt; endl; cin gt;gt; str; current-gt;getname(str); cout lt;lt; "请输入您的 身份证号 " lt;lt; endl; cin gt;gt; str; current-gt;getID(str); cout lt;lt; "请输入您的 手机号 " lt;lt; endl; cin gt;gt; str; current-gt;getphone(str); current-gt;getorder(static_castlt;boolgt;(1)); cout lt;lt; "您的 消费金额 "; temp = current-gt;sumprice(); cout lt;lt; temp lt;lt; endl; } catch (runtime_erroramp; e) { cout lt;lt; e.what() lt;lt; endl; goto part2; } catch (out_of_rangeamp; e) { cout lt;lt; e.what() lt;lt; endl; goto part2; } cout lt;lt; resetiosflags(ios_base::left); try { update(p, filename1); addRecord(filename2, current); } catch (file_exceptionamp; e) { cout lt;lt; "Fail to open " lt;lt; e.get_filename() lt;lt; endl; }}void checkout(room* p[], int size, const stringamp; filename){ int temp; HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//句柄 SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE); cout lt;lt; " 感谢您的光临,欢迎您下次入住! " lt;lt; endl; cout lt;lt; endl;part3: cout lt;lt; " 请输入你想要 退房 的房间号." lt;lt; endl; cin gt;gt; temp; room* current = NULL; cout lt;lt; setiosflags(ios_base::left); int orderroom[6]; int j = 0; try { for (int i = 0; i lt; 6; i++) { if (p[i]-gt;returnnumber() == temp) { current = p[i]; } if (p[i]-gt;returnorder() == 1) { orderroom[j] = p[i]-gt;returnnumber(); j++; } } check(orderroom, j, temp); } catch (int e) { cout lt;lt; "房间 " lt;lt; e lt;lt; " 错误,请重新输入!" lt;lt; endl; goto part3; } cout lt;lt; resetiosflags(ios_base::left); current-gt;getorder(static_castlt;boolgt;(0)); try { update(p, filename); } catch (file_exceptionamp; e) { cout lt;lt; "Fail to open " lt;lt; e.get_filename() lt;lt; endl; }}void searchfor(room* p[], int size, stringamp; rightpassword){ int temp1; password(rightpassword); cout lt;lt; "如果您想要修改密码 请输入 1 , 2 键继续" lt;lt; endl; cin gt;gt; temp1; fflush(stdin); if (temp1 == 1) { password(rightpassword); cout lt;lt; "请输入新的密码 " lt;lt; endl; rightpassword = ' '; cin gt;gt; rightpassword; } HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//句柄 SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE); cout lt;lt; "请输入想要查询的房间号 ." lt;lt; endl; cin gt;gt; temp1; for (int i = 0; i lt; 6; i++) { if (p[i]-gt;returnnumber() == temp1) { cout lt;lt; p[i] lt;lt; endl; break; } }}int main(){ room* p[10]; set_new_handler(nomorememory);//处理new分配异常 for (int i = 0; i lt; 2; i++) { p[i] = new standard(); } for (int i = 2; i lt; 4; i++) { p[i] = new suite(); } for (int i = 4; i lt; 6; i++) { p[i] = new kingsize(); } const string filename1 = "此处填写路径 \\Input.txt"; const string filename2 = "此处填写路径 \\Output.txt"; try { ifstream ifs;//构建输入流对象,以二进制形式打开,得到文件内容 ifs.open(filename1, ios_base::binary); if (ifs) { for (int i = 0; i lt; 6; i++) { int roomnumber, price, start_date, end_date; bool order; string name; string ID; string phone; ifs gt;gt; roomnumber gt;gt; price gt;gt; start_date gt;gt; end_date gt;gt; order gt;gt; name gt;gt; ID gt;gt; phone; p[i]-gt;getnumber(roomnumber); p[i]-gt;getprice(price); p[i]-gt;getdate(start_date, end_date); p[i]-gt;getorder(order); p[i]-gt;getname(name); p[i]-gt;getID(ID); p[i]-gt;getphone(phone); } } else throw file_exception(filename1); ifs.close(); } catch (file_exceptionamp; e) { cout lt;lt; "Fail to open " lt;lt; e.get_filename() lt;lt; endl; } catch (runtime_erroramp; e) { cout lt;lt; e.what() lt;lt; endl; } catch (out_of_rangeamp; e) { cout lt;lt; e.what() lt;lt; endl; } int temp; HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//句柄 SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE); printf("▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n\n"); cout lt;lt; "\t\t\t小刘 酒店管理系统 \n\n\t\t游客 please input 1. 管理员 please input 2." lt;lt; endl; printf("\n▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n\n"); cin gt;gt; temp; system("cls"); if (temp == 1) { while (1) { SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);//设置背景和字体颜色 cout lt;lt; "欢迎来到 小刘 酒店!(游客)\n "; SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); cout lt;lt; "若你想要安全退出 ,please input 0. \n "; SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_BLUE); cout lt;lt; "若你想要入住酒店, please input 1.\n "; SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE); cout lt;lt; "若你想要办理退房, please input 2.\n"; int temp2; string str; cin gt;gt; temp2; system("cls"); if (temp2 == 0) break; if (temp2 == 1) { checkin(p, 6, filename1, filename2); } if (temp2 == 2) { checkout(p, 6, filename1); } cout lt;lt; "succeed!" lt;lt; endl; system("pause"); system("cls"); } } if (temp == 2) { while (1) { SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);//设置背景和字体颜色 cout lt;lt; "欢迎来到 小刘 酒店!(管理员)\n "; SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); cout lt;lt; "若你想要安全退出 ,please input 0. \n "; SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_BLUE); cout lt;lt; "若你想要入住酒店, please input 1.\n "; SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE); cout lt;lt; "若你想要办退房, please input 2.\n "; SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE); cout lt;lt; "若你想要查询房间信息, please input 3.\n"; int temp2; string str; cin gt;gt; temp2; system("cls"); if (temp2 == 0) break; if (temp2 == 1) { checkin(p, static_castlt;intgt;(6), filename1, filename2); } if (temp2 == 2) { checkout(p, static_castlt;intgt;(6), filename1); } if (temp2 == 3) { string rightpassword = "123456"; //默认初始密码 searchfor(p, 6, rightpassword); } system("pause"); system("cls"); } } return 0;}

注意:在使用代码之前,您需要在代码中的自定义路径下的Input.txt文档中预先存储信息。

这就是本文的全部内容。希望对大家的学习有帮助

0

精彩评论

暂无评论...
验证码 换一张
取 消