c++實(shí)現(xiàn)值機(jī)系統(tǒng)
本項目為大家分享了c++實(shí)現(xiàn)值機(jī)系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
前言
上周幫同學(xué)做了一個項目作業(yè),具體要求見下圖,實(shí)現(xiàn)語言為c++。
今天決定在此復(fù)盤這個程序編寫的思路,具體完整代碼實(shí)現(xiàn)在文末

需求分析——編程思路
結(jié)構(gòu)體、類對象——座位
按照題目的描述,我們對于一個座位類,其至少有4個屬性,所以我們實(shí)現(xiàn)的思路有:
1、根據(jù)菜單中的c)按字母順序(編號)來顯示座位表,所以我們可以使用字符形式來存儲編號;
2、使用一個bool值來判斷座位是否被預(yù)定;
3、使用兩個字符串分別表示預(yù)定人的性和名。
然后由于題目中,一共有12個座位,我們不妨使用一個座位數(shù)組,作者在代碼使用了類嵌套的手法,當(dāng)時是想通過座位表類對象指針去訪問節(jié)省傳入空間,同時,由于后邊的統(tǒng)計座位數(shù)量的時候的會比較好用。
初始化
創(chuàng)建座位表對象時,不妨對其初始化,用一個循環(huán)按A—L賦值給座位表的對應(yīng)對象座位編號屬性賦值。
功能實(shí)行——菜單
1、菜單顯示,和之前做過的通訊錄差不多,只需要在外部封裝一個函數(shù),循環(huán)調(diào)用即可,同時為了一定的視覺效果,每次循環(huán)做一次按任意鍵繼續(xù) + 清屏 操作。
2、調(diào)用結(jié)構(gòu),首先如上面提到的,循環(huán),然后使用另一個判別分支結(jié)構(gòu)——switch,每個選項對應(yīng)一個函數(shù)調(diào)用。
3、刪除座位和預(yù)定座位的功能實(shí)現(xiàn)邏輯:
對于刪除,需要注意判斷是否座位匹配(即此時座位是否空,和客戶姓名是否匹配)
對于預(yù)定,則需要判斷輸入是否合乎要求(是否座位編號是空座)
代碼
#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;?? ??? ?// 預(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");?? ??? ?// 清屏操作
}
// 顯示空座列表即顯示座位編號
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)
{
?? ?// 調(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
?? ??? ??? ?{
?? ??? ??? ??? ?// 按照字母編號將對應(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(刪除一個座位的合約)
// 說實(shí)話,這個機(jī)制有點(diǎn)問題,應(yīng)該不是給客戶操作, 應(yīng)該是工作人員操作
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;
?? ?// 初始化,實(shí)際被坐的座位為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)顯示菜單進(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;
}以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Qt編寫自定義控件實(shí)現(xiàn)抽獎轉(zhuǎn)盤
這篇文章主要為大家詳細(xì)介紹了Qt編寫自定義控件實(shí)現(xiàn)抽獎轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-06-06
C語言深入淺出講解直接插入排序算法的實(shí)現(xiàn)
插入排序也是最簡單的一類排序方法,我今天介紹的也是插入排序里最直觀且淺顯易懂的直接插入排序。對這個很簡單的排序,記得當(dāng)時也是花了近兩個晚上才搞懂它的原理的,接下來就來介紹一下2022-05-05
淺談C結(jié)構(gòu)和C++結(jié)構(gòu)之間的區(qū)別
這篇文章主要介紹了淺談C結(jié)構(gòu)和C++結(jié)構(gòu)之間的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
關(guān)于單片機(jī)按鍵問題性能提升總結(jié)
今天小編就為大家分享一篇關(guān)于關(guān)于單片機(jī)按鍵問題性能提升總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
OpenCV實(shí)現(xiàn)無縫克隆算法的步驟詳解
借助無縫克隆算法,您可以從一張圖像中復(fù)制一個對象,然后將其粘貼到另一張圖像中,從而形成一個看起來無縫且自然的構(gòu)圖。本文將詳解OpenCV實(shí)現(xiàn)無縫克隆算法的步驟,需要的可以參考一下2022-06-06

