c++實(shí)現(xiàn)值機(jī)系統(tǒng)
本項(xiàng)目為大家分享了c++實(shí)現(xiàn)值機(jī)系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
前言
上周幫同學(xué)做了一個(gè)項(xiàng)目作業(yè),具體要求見(jiàn)下圖,實(shí)現(xiàn)語(yǔ)言為c++。
今天決定在此復(fù)盤(pán)這個(gè)程序編寫(xiě)的思路,具體完整代碼實(shí)現(xiàn)在文末
需求分析——編程思路
結(jié)構(gòu)體、類對(duì)象——座位
按照題目的描述,我們對(duì)于一個(gè)座位類,其至少有4個(gè)屬性,所以我們實(shí)現(xiàn)的思路有:
1、根據(jù)菜單中的c)按字母順序(編號(hào))來(lái)顯示座位表,所以我們可以使用字符形式來(lái)存儲(chǔ)編號(hào);
2、使用一個(gè)bool值來(lái)判斷座位是否被預(yù)定;
3、使用兩個(gè)字符串分別表示預(yù)定人的性和名。
然后由于題目中,一共有12個(gè)座位,我們不妨使用一個(gè)座位數(shù)組,作者在代碼使用了類嵌套的手法,當(dāng)時(shí)是想通過(guò)座位表類對(duì)象指針去訪問(wèn)節(jié)省傳入空間,同時(shí),由于后邊的統(tǒng)計(jì)座位數(shù)量的時(shí)候的會(huì)比較好用。
初始化
創(chuàng)建座位表對(duì)象時(shí),不妨對(duì)其初始化,用一個(gè)循環(huán)按A—L賦值給座位表的對(duì)應(yīng)對(duì)象座位編號(hào)屬性賦值。
功能實(shí)行——菜單
1、菜單顯示,和之前做過(guò)的通訊錄差不多,只需要在外部封裝一個(gè)函數(shù),循環(huán)調(diào)用即可,同時(shí)為了一定的視覺(jué)效果,每次循環(huán)做一次按任意鍵繼續(xù) + 清屏 操作。
2、調(diào)用結(jié)構(gòu),首先如上面提到的,循環(huán),然后使用另一個(gè)判別分支結(jié)構(gòu)——switch,每個(gè)選項(xiàng)對(duì)應(yīng)一個(gè)函數(shù)調(diào)用。
3、刪除座位和預(yù)定座位的功能實(shí)現(xiàn)邏輯:
對(duì)于刪除,需要注意判斷是否座位匹配(即此時(shí)座位是否空,和客戶姓名是否匹配)
對(duì)于預(yù)定,則需要判斷輸入是否合乎要求(是否座位編號(hào)是空座)
代碼
#include<iostream> #include<string> using namespace std; #define Max_size 12 // 座位類 class Seat { public: ?? ?char number;?? ??? ?// 座位編號(hào) A - L ?? ?bool is_empty;?? ??? ?// 判斷是否空?? ?false-滿,true-空 ?? ?string name;?? ??? ?// 預(yù)定人的名 ?? ?string lastname;?? ?// 預(yù)定人的姓? }; // 座位表——座位數(shù)組 class seats_table { public: ?? ?// 座位表 ?? ?Seat Seats[Max_size]; ?? ?// 座位表中實(shí)際座位被坐的數(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");?? ??? ?// 清屏操作 } // 顯示空座列表即顯示座位編號(hào) 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個(gè))座位的信息) 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) { ?? ?// 調(diào)用一下顯示空座列表函數(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 ?? ??? ??? ?{ ?? ??? ??? ??? ?// 按照字母編號(hào)將對(duì)應(yīng)座位置人(即非空,置否),并將實(shí)際座位(非空座)總數(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(刪除一個(gè)座位的合約) // 說(shuō)實(shí)話,這個(gè)機(jī)制有點(diǎn)問(wèn)題,應(yīng)該不是給客戶操作, 應(yīng)該是工作人員操作 void d_seat(seats_table* St) { ?? ? ?? ?char num; ?? ?char judge; ?? ?do ?? ?{ ?? ??? ?// 輸出提示信息(要?jiǎng)h除的座位編號(hào)) ?? ??? ?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; ?? ?// 初始化,實(shí)際被坐的座位為0 ?? ?S.m_size = 0; ?? ?// 循環(huán),初始化座位的編號(hào)(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)顯示菜單進(jìn)行操作 ?? ?while (1) ?? ?{ ?? ??? ?// 菜單調(diào)用 ?? ??? ?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; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言獲取Shell返回結(jié)果的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇C語(yǔ)言獲取Shell返回結(jié)果的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07cocos2d-x學(xué)習(xí)筆記之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMu
這篇文章主要介紹了cocos2d-x學(xué)習(xí)筆記之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex場(chǎng)景層介紹,需要的朋友可以參考下2014-09-09剖析C++中的常量表達(dá)式與省略號(hào)的相關(guān)作用
這篇文章主要介紹了C++中的常量表達(dá)式與省略號(hào)的相關(guān)作用,以及表達(dá)式中的可變參數(shù)模板示例,需要的朋友可以參考下2016-01-01C/C++標(biāo)準(zhǔn)庫(kù)之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間詳解
最近遇到一個(gè)問(wèn)題:數(shù)據(jù)庫(kù)中存放的時(shí)間為UTC時(shí)間,但是現(xiàn)在要求都出來(lái)顯示的時(shí)間為本地時(shí)間,所以就用C++實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于C/C++標(biāo)準(zhǔn)庫(kù)之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間的方法,還有C++中獲取UTC時(shí)間精確到微秒的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2017-11-11VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法匯總
這篇文章主要介紹了VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法,對(duì)于更好的了解OpenGL很有幫助,需要的朋友可以參考下2014-07-07C語(yǔ)言中大小端問(wèn)題實(shí)例探索解決方法
這篇文章主要介紹了C語(yǔ)言中大小端問(wèn)題實(shí)例,總的來(lái)說(shuō)這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達(dá)的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過(guò)程。希望通過(guò)這道題能給你帶來(lái)一種解題優(yōu)化的思路2023-02-02C語(yǔ)言用棧實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)換為二進(jìn)制的方法示例
這篇文章主要介紹了C語(yǔ)言用棧實(shí)現(xiàn)十進(jìn)制轉(zhuǎn)換為二進(jìn)制的方法,結(jié)合實(shí)例形式分析了C語(yǔ)言棧的定義及進(jìn)制轉(zhuǎn)換使用技巧,需要的朋友可以參考下2017-06-06