<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本專案為大家分享了c++實現值機系統的具體程式碼,供大家參考,具體內容如下
上週幫同學做了一個專案作業,具體要求見下圖,實現語言為c++。
今天決定在此覆盤這個程式編寫的思路,具體完整程式碼實現在文末
結構體、類物件——座位
按照題目的描述,我們對於一個座位類,其至少有4個屬性,所以我們實現的思路有:
1、根據選單中的c)按字母順序(編號)來顯示座位表,所以我們可以使用字元形式來儲存編號;
2、使用一個bool值來判斷座位是否被預定;
3、使用兩個字串分別表示預定人的性和名。
然後由於題目中,一共有12個座位,我們不妨使用一個座位陣列,作者在程式碼使用了類巢狀的手法,當時是想通過座位表類物件指標去存取節省傳入空間,同時,由於後邊的統計座位數量的時候的會比較好用。
初始化
建立座位表物件時,不妨對其初始化,用一個迴圈按A—L賦值給座位表的對應物件座位編號屬性賦值。
功能實行——選單
1、選單顯示,和之前做過的通訊錄差不多,只需要在外部封裝一個函數,迴圈呼叫即可,同時為了一定的視覺效果,每次迴圈做一次按任意鍵繼續 + 清屏 操作。
2、呼叫結構,首先如上面提到的,迴圈,然後使用另一個判別分支結構——switch,每個選項對應一個函數呼叫。
3、刪除座位和預定座位的功能實現邏輯:
對於刪除,需要注意判斷是否座位匹配(即此時座位是否空,和客戶姓名是否匹配)
對於預定,則需要判斷輸入是否合乎要求(是否座位編號是空座)
#include<iostream> #include<string> using namespace std; #define Max_size 12 // 座位類 class Seat { public: char number; // 座位編號 A - L bool is_empty; // 判斷是否空 false-滿,true-空 string name; // 預定人的名 string lastname; // 預定人的姓 }; // 座位表——座位陣列 class seats_table { public: // 座位表 Seat Seats[Max_size]; // 座位表中實際座位被坐的數量 int m_size; }; // 選單顯示 void show_menu() { cout << "To choose a functions, enter its letter label:" << endl << "a) Show number of empty seats" << endl << "b) Show list of empty seats" << endl << "c) Show alphabetical list of seats" << endl << "d) Assign a customer to seat assignment" << endl << "e) Delete a seat assignment" << endl << "f) Quit" << endl; } // 顯示空座的數量 void show_num_of_empty(seats_table* Seats) { cout << "Numer of empty seats: " << Max_size - Seats->m_size << endl; system("pause"); // 任意鍵繼續 system("cls"); // 清屏操作 } // 顯示空座列表即顯示座位編號 void show_Listofempty(seats_table* S) { cout << "List of empty seats:" << endl; for (int i = 0; i < Max_size; ++i) { if (S->Seats[i].is_empty) { cout << S->Seats[i].number << "t"; } } cout << endl; /*system("pause"); system("cls");*/ } // 按字母順序輸出座位列表(即輸出所有(12個)座位的資訊) void show_ListofSeats(seats_table* St) { cout << "List of Seats:" << endl; for (int i = 0; i < Max_size; ++i) { cout << St->Seats[i].number << "t"; if (St->Seats[i].is_empty) { cout << "Empty" << endl; } else { cout << "Not empty" << "t" << St->Seats[i].name << "t" << St->Seats[i].lastname << endl; } } system("pause"); system("cls"); } // Assign a customer to a seat assignment(就是訂座) void assign_seats(seats_table* St) { // 呼叫一下顯示空座列表函數 show_Listofempty(St); char judge; do { // 輸出提示資訊 cout << "Please choose the num of seat you want choose:" << endl; char sel; cin >> sel; // 先判斷是否是正確輸入 if (sel < 'A' || sel > 'L') { cout << "Input Error!" << endl; } else { // 再判斷該座位是否為空座 if (!St->Seats[sel - 'A'].is_empty) { // 非空 cout << "The seat is not empty!" << endl; } else { // 按照字母編號將對應座位置人(即非空,置否),並將實際座位(非空座)總數+1 St->Seats[(int)(sel - 'A')].is_empty = false; St->m_size++; // 輸出提示資訊(提醒使用者輸入名字) cout << "Please input your name:" << endl; string na; cin >> na; St->Seats[(int)(sel - 'A')].name = na; cout << "Please input your lastname:" << endl; string ln; cin >> ln; St->Seats[(int)(sel - 'A')].lastname = ln; // 輸出訂票成功的提示 cout << "Successful reservation!" << endl; } } cout << "Continue? (Y/N)" << endl; cin >> judge; } while (judge == 'Y'); system("pause"); system("cls"); } // delete a seat assignment(刪除一個座位的合約) // 說實話,這個機制有點問題,應該不是給客戶操作, 應該是工作人員操作 void d_seat(seats_table* St) { char num; char judge; do { // 輸出提示資訊(要刪除的座位編號) cout << "Please input the number(A-L) of seat you want delete:" << endl; cin >> num; // 先判斷是否是正確輸入 if (num < 'A' || num > 'L') { cout << "Input Error!" << endl; } else { // 判斷是否是空座 // 空座 if (St->Seats[num - 'A'].is_empty) { cout << "The seat is empty." << endl; } else { cout << "Please input your name and lastname:" << endl; string na, lna; cin >> na >> lna; // 判斷座位的名字和姓是否匹配 if (St->Seats[num - 'A'].name == na && St->Seats[num - 'A'].lastname == lna) { St->Seats[num - 'A'].is_empty = true; St->m_size--; St->Seats[num - 'A'].name = ""; St->Seats[num - 'A'].lastname = ""; cout << "Seat withdrawal succeeded!" << endl; } else { cout << "The name or lastname is not matchied!" << endl; } } } cout << "Continue? (Y/N)" << endl; cin >> judge; } while (judge == 'Y'); system("pause"); system("cls"); } int main() { seats_table S; // 初始化,實際被坐的座位為0 S.m_size = 0; // 迴圈,初始化座位的編號(A - L),並全部置空 for (int i = 0; i < Max_size; i++) { // 97--'A' S.Seats[i].number = (char)(i + 65); S.Seats[i].is_empty = true; } // 宣告選擇變數 char select = 'a'; // 迴圈顯示選單進行操作 while (1) { // 選單呼叫 show_menu(); bool b = false; cin >> select; switch (select) { case 'a': show_num_of_empty(&S); break; case 'b': show_Listofempty(&S); system("pause"); system("cls"); break; case 'c': show_ListofSeats(&S); break; case 'd': assign_seats(&S); break; case 'e': d_seat(&S); break; // 放棄操作,退出迴圈(while迴圈) case 'f': b = true; break; // 其他情況 default: cout << "Input error!" << endl; system("pause"); system("cls"); } if (b) { break; } } system("pause"); return 0; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援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