c++實現(xiàn)值機系統(tǒng)
本項目為大家分享了c++實現(xiàn)值機系統(tǒng)的具體代碼,供大家參考,具體內容如下
前言
上周幫同學做了一個項目作業(yè),具體要求見下圖,實現(xiàn)語言為c++。
今天決定在此復盤這個程序編寫的思路,具體完整代碼實現(xiàn)在文末
需求分析——編程思路
結構體、類對象——座位
按照題目的描述,我們對于一個座位類,其至少有4個屬性,所以我們實現(xiàn)的思路有:
1、根據(jù)菜單中的c)按字母順序(編號)來顯示座位表,所以我們可以使用字符形式來存儲編號;
2、使用一個bool值來判斷座位是否被預定;
3、使用兩個字符串分別表示預定人的性和名。
然后由于題目中,一共有12個座位,我們不妨使用一個座位數(shù)組,作者在代碼使用了類嵌套的手法,當時是想通過座位表類對象指針去訪問節(jié)省傳入空間,同時,由于后邊的統(tǒng)計座位數(shù)量的時候的會比較好用。
初始化
創(chuàng)建座位表對象時,不妨對其初始化,用一個循環(huán)按A—L賦值給座位表的對應對象座位編號屬性賦值。
功能實行——菜單
1、菜單顯示,和之前做過的通訊錄差不多,只需要在外部封裝一個函數(shù),循環(huán)調用即可,同時為了一定的視覺效果,每次循環(huán)做一次按任意鍵繼續(xù) + 清屏 操作。
2、調用結構,首先如上面提到的,循環(huán),然后使用另一個判別分支結構——switch,每個選項對應一個函數(shù)調用。
3、刪除座位和預定座位的功能實現(xiàn)邏輯:
對于刪除,需要注意判斷是否座位匹配(即此時座位是否空,和客戶姓名是否匹配)
對于預定,則需要判斷輸入是否合乎要求(是否座位編號是空座)
代碼
#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;?? ?// 預定人的姓? }; // 座位表——座位數(shù)組 class seats_table { public: ?? ?// 座位表 ?? ?Seat Seats[Max_size]; ?? ?// 座位表中實際座位被坐的數(shù)量 ?? ?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; } // 顯示空座的數(shù)量 void show_num_of_empty(seats_table* Seats) { ?? ?cout << "Numer of empty seats: " << Max_size - Seats->m_size << endl; ?? ?system("pause");?? ?// 任意鍵繼續(xù) ?? ?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) { ?? ?// 調用一下顯示空座列表函數(shù) ?? ?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 ?? ??? ??? ?{ ?? ??? ??? ??? ?// 按照字母編號將對應座位置人(即非空,置否),并將實際座位(非空座)總數(shù)+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; ?? ?// 循環(huán),初始化座位的編號(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'; ?? ?// 循環(huán)顯示菜單進行操作 ?? ?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; ?? ??? ? ?? ??? ?// 放棄操作,退出循環(huán)(while循環(huán)) ?? ??? ?case 'f': ?? ??? ??? ?b = true; ?? ??? ??? ?break; ?? ??? ?// 其他情況 ?? ??? ?default: ?? ??? ??? ?cout << "Input error!" << endl; ?? ??? ??? ?system("pause"); ?? ??? ??? ?system("cls"); ?? ??? ?} ?? ??? ?if (b) ?? ??? ?{ ?? ??? ??? ?break; ?? ??? ?} ?? ?} ?? ?system("pause"); ?? ?return 0; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
cocos2d-x學習筆記之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMu
這篇文章主要介紹了cocos2d-x學習筆記之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex場景層介紹,需要的朋友可以參考下2014-09-09VC運用OPENGL加載BMP紋理圖的實現(xiàn)方法匯總
這篇文章主要介紹了VC運用OPENGL加載BMP紋理圖的實現(xiàn)方法,對于更好的了解OpenGL很有幫助,需要的朋友可以參考下2014-07-07