網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
現(xiàn)今大多數(shù)賓館所提供的服務(wù)樣式都各式各樣,規(guī)模大小也是各有不同,但是歸總下來(lái),不可或缺的兩類模塊還是顧客和工作人員。由于對(duì)賓館行業(yè)內(nèi)部沒(méi)有很深刻的理解,此次系統(tǒng)設(shè)計(jì)包括數(shù)據(jù)庫(kù)和功能模塊都是根據(jù)網(wǎng)上收集到的材料和個(gè)人認(rèn)知上,簡(jiǎn)單模仿和具體實(shí)現(xiàn)的。
為滿賓館管理的實(shí)際需求,本系統(tǒng)主要實(shí)現(xiàn)以下功能:
1、入住登記:登記所入住房間號(hào)碼,登記顧客入住時(shí)間,退房時(shí)間,個(gè)人信息(身份證號(hào),手機(jī)號(hào),姓名)
2、退房辦理:輸入已經(jīng)入住的房間號(hào),確認(rèn)完畢即可退房。
3、房間查詢:管理員輸入正確的密碼后即可對(duì)房間狀態(tài)查詢,和具體入住信息查詢。
4、密碼修改:管理員對(duì)自身密碼進(jìn)行修改,前提是先輸入正確密碼后才能實(shí)現(xiàn)。
5、以txt文檔的形式存儲(chǔ)信息數(shù)據(jù)。
6、使用類封裝。
注:代碼使用前需要先向代碼中自定義路徑下的Input.txt文檔中預(yù)存信息
功能截圖
代碼:
#include#include #include #include #include #include #include ? #include using namespace std; class room { private: ?? ?int roomnumber = 0;?? ??? ?//房間號(hào) ?? ?int price = 0;?? ??? ??? ?//價(jià)格 ?? ?int start_date = 0;?? ??? ?//開(kāi)始 結(jié)束 日期 ?? ?int end_date = 0; ?? ?bool order = 0;?? ??? ??? ?//房間狀態(tài) 0/1 ?? ?string name;?? ??? ??? ?//個(gè)人信息 ?? ?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 < 1 || s > 31 || e < 1 || e > 31 || s >= e) throw runtime_error("錯(cuò)誤的日期!"); ?? ??? ?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("房間狀態(tài)錯(cuò)誤!"); ?? ??? ?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() < 18 || id.size() > 19) throw runtime_error("您的身份證號(hào)輸入有誤,請(qǐng)重新輸入!(18位)"); ?? ??? ?ID = id; ?? ?} ?? ?string returnID() const ?? ?{ ?? ??? ?return ID; ?? ?} ?? ?void getphone(string ph) ?? ?{ ?? ??? ?if (ph.size() != 11) ?? ??? ??? ?throw runtime_error("您的手機(jī)號(hào)輸入有誤,請(qǐng)重新輸入(11位)!"); ?? ??? ?phone = ph; ?? ?} ?? ?string returnphone() const ?? ?{ ?? ??? ?return phone; ?? ?} ?? ?int sumprice() ?? ?{ ?? ??? ?return price * (end_date - start_date); ?? ?} ?? ?friend ostream& operator<<(ostream& os, const room* u)//輸出流重載 ?? ?{ ?? ??? ?os << u->returnnumber() << '\n'; ?? ??? ?os << u->returnprice() << '\n'; ?? ??? ?os << u->returnstartdate() << '\n'; ?? ??? ?os << u->returnenddate() << '\n'; ?? ??? ?os << u->returnorder() << '\n'; ?? ??? ?os << u->returnname() << '\n'; ?? ??? ?os << u->returnID() << '\n'; ?? ??? ?os << u->returnphone() << '\n'; ?? ??? ?return os; ?? ?} }; class standard :public room { }; class suite :public room { }; class kingsize :public room { }; void nomorememory() { ?? ?cerr << "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 < size; i++) ?? ?{ ?? ??? ?if (suspicion == a[i]) ?? ??? ??? ?judge = 1; ?? ?} ?? ?if (judge == 0) ?? ??? ?throw suspicion; ?? ?return 0; } class file_exception { ?? ?string filename; public: ?? ?file_exception(const string& filename) :filename(filename) {} ?? ?~file_exception() {} ?? ?const string& get_filename()const { return filename; } }; void update(room* p[], const string& filename)//覆蓋/更新原有文件內(nèi)容 { ?? ?ofstream os(filename, ios_base::binary); ?? ?if (os) ?? ?{ ?? ??? ?for (int i = 0; i < 6; i++) ?? ??? ?{ ?? ??? ??? ?os << p[i]; ?? ??? ?} ?? ?} ?? ?else ?? ??? ?throw file_exception(filename); ?? ?os.close(); } void addRecord(const string& filename, room* current)//以追加模式打開(kāi)文件,用于記錄 { ?? ?ofstream file(filename, ios_base::app); ?? ?if (file) ?? ?{ ?? ??? ?file << current; ?? ??? ?file.close(); ?? ?} ?? ?else ?? ??? ?throw file_exception(filename); ?? ?file.close(); } void password(string rightpassword) { part4: ?? ?string password; ?? ?cout << "請(qǐng)輸入 密碼: " << endl; ?? ?int i = 0; ?? ?char ch; ?? ?while ((ch = _getch()) != 13) ?? ?{ ?? ??? ?password += ch; //字符串拼接 ?? ??? ?cout << "*"; ?? ?} ?? ?if (password != rightpassword) ?? ?{ ?? ??? ?cout << "密碼錯(cuò)誤! 請(qǐng)重新輸入" << endl; ?? ??? ?goto part4; ?? ?} ?? ?cout << "密碼正確!" << endl; ?? ?fflush(stdin); } void checkin(room* p[], int size, const string& filename1, const string& filename2) { ?? ?HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//句柄 ?? ?cout.width(120); ?? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); ?? ?cout << "歡迎來(lái)到 小劉 酒店!\n本酒店設(shè)有 標(biāo)準(zhǔn)房, 商務(wù)套房 和 大床房. \n目前可入住房間為: " << endl; ?? ?int vacant_room[6]; ?? ?int j = 0; ?? ?int temp, temp1; ?? ?string str; ?? ?for (int i = 0; i < 6; i++) ?? ?{ ?? ??? ?if (p[i]->returnorder() == 0) ?? ??? ?{ ?? ??? ??? ?temp1 = p[i]->returnnumber(); ?? ??? ??? ?cout << temp1 << "、"; ?? ??? ??? ?vacant_room[j] = temp1; ?? ??? ??? ?j++; ?? ??? ?} ?? ?} ?? ?cout << endl << "101-102 是標(biāo)準(zhǔn)間. 價(jià)格為 100 CNY 每晚" << endl; ?? ?cout << "103-104 是商務(wù)套間. 價(jià)格為 200 CNY 每晚" << endl; ?? ?cout << "105-106 是大床房. 價(jià)格為 300 CNY 每晚" << endl; part1: ?? ?try ?? ?{ ?? ??? ?cout << '\n' << setiosflags(ios_base::left) << " 請(qǐng)輸入你選擇的房間號(hào)." << endl; ?? ??? ?cout << "共有 " << j << " 間空房." << endl; ?? ??? ?cin >> temp; ?? ??? ?check(vacant_room, j, temp); ?? ?} ?? ?catch (int e) ?? ?{ ?? ??? ?cout << "房間 " << e << " 不可選擇入住,請(qǐng)重新選擇." << endl; ?? ??? ?goto part1; ?? ?} ?? ?room* current = NULL; ?? ?for (int i = 0; i < 6; i++) ?? ?{ ?? ??? ?if (p[i]->returnnumber() == temp) ?? ??? ?{ ?? ??? ??? ?current = p[i]; ?? ??? ??? ?break; ?? ??? ?} ?? ?} part2: ?? ?try ?? ?{ ?? ??? ?cout << "請(qǐng)輸入 入住 日期" << endl; ?? ??? ?cin >> temp; ?? ??? ?cout << "請(qǐng)輸入 離店 日期" << endl; ?? ??? ?cin >> temp1; ?? ??? ?current->getdate(temp, temp1); ?? ??? ?cout << "請(qǐng)輸入您的 姓名 " << endl; ?? ??? ?cin >> str; ?? ??? ?current->getname(str); ?? ??? ?cout << "請(qǐng)輸入您的 身份證號(hào) " << endl; ?? ??? ?cin >> str; ?? ??? ?current->getID(str); ?? ??? ?cout << "請(qǐng)輸入您的 手機(jī)號(hào) " << endl; ?? ??? ?cin >> str; ?? ??? ?current->getphone(str); ?? ??? ?current->getorder(static_cast (1)); ?? ??? ?cout << "您的 消費(fèi)金額 "; ?? ??? ?temp = current->sumprice(); ?? ??? ?cout << temp << endl; ?? ?} ?? ?catch (runtime_error& e) ?? ?{ ?? ??? ?cout << e.what() << endl; ?? ??? ?goto part2; ?? ?} ?? ?catch (out_of_range& e) ?? ?{ ?? ??? ?cout << e.what() << endl; ?? ??? ?goto part2; ?? ?} ?? ?cout << resetiosflags(ios_base::left); ?? ?try ?? ?{ ?? ??? ?update(p, filename1); ?? ??? ?addRecord(filename2, current); ?? ?} ?? ?catch (file_exception& e) ?? ?{ ?? ??? ?cout << "Fail to open " << e.get_filename() << endl; ?? ?} } void checkout(room* p[], int size, const string& filename) { ?? ?int temp; ?? ?HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//句柄 ?? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE); ?? ?cout << " 感謝您的光臨,歡迎您下次入住! " << endl; ?? ?cout << endl; part3: ?? ?cout << " 請(qǐng)輸入你想要 退房 的房間號(hào)." << endl; ?? ?cin >> temp; ?? ?room* current = NULL; ?? ?cout << setiosflags(ios_base::left); ?? ?int orderroom[6]; ?? ?int j = 0; ?? ?try ?? ?{ ?? ??? ?for (int i = 0; i < 6; i++) ?? ??? ?{ ?? ??? ??? ?if (p[i]->returnnumber() == temp) ?? ??? ??? ?{ ?? ??? ??? ??? ?current = p[i]; ?? ??? ??? ?} ?? ??? ??? ?if (p[i]->returnorder() == 1) ?? ??? ??? ?{ ?? ??? ??? ??? ?orderroom[j] = p[i]->returnnumber(); ?? ??? ??? ??? ?j++; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?check(orderroom, j, temp); ?? ?} ?? ?catch (int e) ?? ?{ ?? ??? ?cout << "房間 " << e << " 錯(cuò)誤,請(qǐng)重新輸入!" << endl; ?? ??? ?goto part3; ?? ?} ?? ?cout << resetiosflags(ios_base::left); ?? ?current->getorder(static_cast (0)); ?? ?try ?? ?{ ?? ??? ?update(p, filename); ?? ?} ?? ?catch (file_exception& e) ?? ?{ ?? ??? ?cout << "Fail to open " << e.get_filename() << endl; ?? ?} } void searchfor(room* p[], int size, string& rightpassword) { ?? ?int temp1; ?? ?password(rightpassword); ?? ?cout << "如果您想要修改密碼 請(qǐng)輸入 1 , 2 鍵繼續(xù)" << endl; ?? ?cin >> temp1; ?? ?fflush(stdin); ?? ?if (temp1 == 1) ?? ?{ ?? ??? ?password(rightpassword); ?? ??? ?cout << "請(qǐng)輸入新的密碼 " << endl; ?? ??? ?rightpassword = ' '; ?? ??? ?cin >> rightpassword; ?? ?} ?? ?HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//句柄 ?? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE); ?? ?cout << "請(qǐng)輸入想要查詢的房間號(hào) ." << endl; ?? ?cin >> temp1; ?? ?for (int i = 0; i < 6; i++) ?? ?{ ?? ??? ?if (p[i]->returnnumber() == temp1) ?? ??? ?{ ?? ??? ??? ?cout << p[i] << endl; ?? ??? ??? ?break; ?? ??? ?} ?? ?} } int main() { ?? ?room* p[10]; ?? ?set_new_handler(nomorememory);//處理new分配異常 ?? ?for (int i = 0; i < 2; i++) ?? ?{ ?? ??? ?p[i] = new standard(); ?? ?} ?? ?for (int i = 2; i < 4; i++) ?? ?{ ?? ??? ?p[i] = new suite(); ?? ?} ?? ?for (int i = 4; i < 6; i++) ?? ?{ ?? ??? ?p[i] = new kingsize(); ?? ?} ?? ?const string filename1 = "此處填寫路徑 ? \\Input.txt"; ?? ?const string filename2 = "此處填寫路徑 ? \\Output.txt"; ?? ?try ?? ?{ ?? ??? ?ifstream ifs;//構(gòu)建輸入流對(duì)象,以二進(jìn)制形式打開(kāi),得到文件內(nèi)容 ?? ??? ?ifs.open(filename1, ios_base::binary); ?? ??? ?if (ifs) ?? ??? ?{ ?? ??? ??? ?for (int i = 0; i < 6; i++) ?? ??? ??? ?{ ?? ??? ??? ??? ?int roomnumber, price, start_date, end_date; ?? ??? ??? ??? ?bool order; ?? ??? ??? ??? ?string name; ?? ??? ??? ??? ?string ID; ?? ??? ??? ??? ?string phone; ?? ??? ??? ??? ?ifs >> roomnumber >> price >> start_date >> end_date >> order >> name >> ID >> phone; ?? ??? ??? ??? ?p[i]->getnumber(roomnumber); ?? ??? ??? ??? ?p[i]->getprice(price); ?? ??? ??? ??? ?p[i]->getdate(start_date, end_date); ?? ??? ??? ??? ?p[i]->getorder(order); ?? ??? ??? ??? ?p[i]->getname(name); ?? ??? ??? ??? ?p[i]->getID(ID); ?? ??? ??? ??? ?p[i]->getphone(phone); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?else ?? ??? ??? ?throw file_exception(filename1); ?? ??? ?ifs.close(); ?? ?} ?? ?catch (file_exception& e) ?? ?{ ?? ??? ?cout << "Fail to open " << e.get_filename() << endl; ?? ?} ?? ?catch (runtime_error& e) ?? ?{ ?? ??? ?cout << e.what() << endl; ?? ?} ?? ?catch (out_of_range& e) ?? ?{ ?? ??? ?cout << e.what() << endl; ?? ?} ?? ?int temp; ?? ?HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//句柄 ?? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE); ?? ?printf("▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n\n"); ?? ?cout << "\t\t\t小劉 酒店管理系統(tǒng) ? ? ? ?\n\n\t\t游客 please input 1. 管理員 please input 2." << endl; ?? ?printf("\n▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n\n"); ?? ?cin >> temp; ?? ?system("cls"); ?? ?if (temp == 1) ?? ?{ ?? ??? ?while (1) ?? ??? ?{ ?? ??? ??? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);//設(shè)置背景和字體顏色 ?? ??? ??? ?cout << "歡迎來(lái)到 小劉 酒店!(游客)\n "; ?? ??? ??? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); ?? ??? ??? ?cout << "若你想要安全退出 ,please input 0. \n "; ?? ??? ??? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_BLUE); ?? ??? ??? ?cout << "若你想要入住酒店, please input 1.\n "; ?? ??? ??? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE); ?? ??? ??? ?cout << "若你想要辦理退房, please input 2.\n"; ?? ??? ??? ?int temp2; ?? ??? ??? ?string str; ?? ??? ??? ?cin >> temp2; ?? ??? ??? ?system("cls"); ?? ??? ??? ?if (temp2 == 0) ?? ??? ??? ??? ?break; ?? ??? ??? ?if (temp2 == 1) ?? ??? ??? ?{ ?? ??? ??? ??? ?checkin(p, 6, filename1, filename2); ?? ??? ??? ?} ?? ??? ??? ?if (temp2 == 2) ?? ??? ??? ?{ ?? ??? ??? ??? ?checkout(p, 6, filename1); ?? ??? ??? ?} ?? ??? ??? ?cout << "succeed!" << endl; ?? ??? ??? ?system("pause"); ?? ??? ??? ?system("cls"); ?? ??? ?} ?? ?} ?? ?if (temp == 2) ?? ?{ ?? ??? ?while (1) ?? ??? ?{ ?? ??? ??? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);//設(shè)置背景和字體顏色 ?? ??? ??? ?cout << "歡迎來(lái)到 小劉 酒店!(管理員)\n "; ?? ??? ??? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); ?? ??? ??? ?cout << "若你想要安全退出 ,please input 0. \n "; ?? ??? ??? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_BLUE); ?? ??? ??? ?cout << "若你想要入住酒店, please input 1.\n "; ?? ??? ??? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE); ?? ??? ??? ?cout << "若你想要辦退房, please input 2.\n "; ?? ??? ??? ?SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE); ?? ??? ??? ?cout << "若你想要查詢房間信息, please input 3.\n"; ?? ??? ??? ?int temp2; ?? ??? ??? ?string str; ?? ??? ??? ?cin >> temp2; ?? ??? ??? ?system("cls"); ?? ??? ??? ?if (temp2 == 0) ?? ??? ??? ??? ?break; ?? ??? ??? ?if (temp2 == 1) ?? ??? ??? ?{ ?? ??? ??? ??? ?checkin(p, static_cast (6), filename1, filename2); ?? ??? ??? ?} ?? ??? ??? ?if (temp2 == 2) ?? ??? ??? ?{ ?? ??? ??? ??? ?checkout(p, static_cast (6), filename1); ?? ??? ??? ?} ?? ??? ??? ?if (temp2 == 3) ?? ??? ??? ?{ ?? ??? ??? ??? ?string rightpassword = "123456";?? ??? ??? ?//默認(rèn)初始密碼 ?? ??? ??? ??? ?searchfor(p, 6, rightpassword); ?? ??? ??? ?} ?? ??? ??? ?system("pause"); ?? ??? ??? ?system("cls"); ?? ??? ?} ?? ?} ?? ?return 0; }
注:代碼使用前需要先向代碼中自定義路徑下的Input.txt文檔中預(yù)存信息
原文鏈接:https://blog.csdn.net/weixin_43811333/article/details/107361540
相關(guān)推薦
- 2022-06-26 shell腳本語(yǔ)言之if條件判斷語(yǔ)句實(shí)例詳解_linux shell
- 2022-10-05 教你使用RustDesk?搭建一個(gè)自己的遠(yuǎn)程桌面中繼服務(wù)器_服務(wù)器其它
- 2022-12-11 Django?auth?應(yīng)用模塊詳解_python
- 2022-12-13 Prometheus?Operator架構(gòu)介紹_云其它
- 2023-08-28 React綁定antd輸入框,點(diǎn)擊清空或者確定按鈕實(shí)現(xiàn)清空輸入框內(nèi)容
- 2022-08-01 Python?OpenCV基于HSV的顏色分割實(shí)現(xiàn)示例_python
- 2022-10-30 詳解Golang如何實(shí)現(xiàn)一個(gè)環(huán)形緩沖器_Golang
- 2022-08-01 混淆矩陣Confusion?Matrix概念分析翻譯_其它綜合
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支