<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
現今大多數賓館所提供的服務樣式都各式各樣,規模大小也是各有不同,但是歸總下來,不可或缺的兩類模組還是顧客和工作人員。由於對賓館行業內部沒有很深刻的理解,此次系統設計包括資料庫和功能模組都是根據網上收集到的材料和個人認知上,簡單模仿和具體實現的。
為滿賓館管理的實際需求,本系統主要實現以下功能:
1、入住登記:登記所入住房間號碼,登記顧客入住時間,退房時間,個人資訊(身份證號,手機號,姓名)
2、退房辦理:輸入已經入住的房間號,確認完畢即可退房。
3、房間查詢:管理員輸入正確的密碼後即可對房間狀態查詢,和具體入住資訊查詢。
4、密碼修改:管理員對自身密碼進行修改,前提是先輸入正確密碼後才能實現。
5、以txt檔案的形式儲存資訊資料。
6、使用類封裝。
注:程式碼使用前需要先向程式碼中自定義路徑下的Input.txt檔案中預存資訊
功能截圖
程式碼:
#include<iostream> #include<iomanip> #include<string> #include<fstream> #include<sstream> #include<windows.h> #include<stdexcept> #include<conio.h> 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 < 1 || s > 31 || e < 1 || e > 31 || s >= 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() < 18 || id.size() > 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 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 memoryn"; 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)//覆蓋/更新原有檔案內容 { 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)//以追加模式開啟檔案,用於記錄 { 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 << "請輸入 密碼: " << endl; int i = 0; char ch; while ((ch = _getch()) != 13) { password += ch; //字串拼接 cout << "*"; } if (password != rightpassword) { cout << "密碼錯誤! 請重新輸入" << 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 << "歡迎來到 小劉 酒店!n本酒店設有 標準房, 商務套房 和 大床房. 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 是標準間. 價格為 100 CNY 每晚" << endl; cout << "103-104 是商務套間. 價格為 200 CNY 每晚" << endl; cout << "105-106 是大床房. 價格為 300 CNY 每晚" << endl; part1: try { cout << 'n' << setiosflags(ios_base::left) << " 請輸入你選擇的房間號." << endl; cout << "共有 " << j << " 間空房." << endl; cin >> temp; check(vacant_room, j, temp); } catch (int e) { cout << "房間 " << e << " 不可選擇入住,請重新選擇." << 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 << "請輸入 入住 日期" << endl; cin >> temp; cout << "請輸入 離店 日期" << endl; cin >> temp1; current->getdate(temp, temp1); cout << "請輸入您的 姓名 " << endl; cin >> str; current->getname(str); cout << "請輸入您的 身份證號 " << endl; cin >> str; current->getID(str); cout << "請輸入您的 手機號 " << endl; cin >> str; current->getphone(str); current->getorder(static_cast<bool>(1)); cout << "您的 消費金額 "; 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 << " 請輸入你想要 退房 的房間號." << 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 << " 錯誤,請重新輸入!" << endl; goto part3; } cout << resetiosflags(ios_base::left); current->getorder(static_cast<bool>(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 << "如果您想要修改密碼 請輸入 1 , 2 鍵繼續" << endl; cin >> temp1; fflush(stdin); if (temp1 == 1) { password(rightpassword); cout << "請輸入新的密碼 " << endl; rightpassword = ' '; cin >> rightpassword; } HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//控制程式碼 SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE); cout << "請輸入想要查詢的房間號 ." << 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;//構建輸入流物件,以二進位制形式開啟,得到檔案內容 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("▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓nn"); cout << "ttt小劉 酒店管理系統 nntt遊客 please input 1. 管理員 please input 2." << endl; printf("n▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓nn"); cin >> temp; system("cls"); if (temp == 1) { while (1) { SetConsoleTextAttribute(hout, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);//設定背景和字型顏色 cout << "歡迎來到 小劉 酒店!(遊客)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);//設定背景和字型顏色 cout << "歡迎來到 小劉 酒店!(管理員)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<int>(6), filename1, filename2); } if (temp2 == 2) { checkout(p, static_cast<int>(6), filename1); } if (temp2 == 3) { string rightpassword = "123456"; //預設初始密碼 searchfor(p, 6, rightpassword); } system("pause"); system("cls"); } } return 0; }
注:程式碼使用前需要先向程式碼中自定義路徑下的Input.txt檔案中預存資訊
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45