溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c++怎么實(shí)現(xiàn)值機(jī)系統(tǒng)

發(fā)布時間:2022-03-15 12:35:03 來源:億速云 閱讀:106 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下c++怎么實(shí)現(xiàn)值機(jī)系統(tǒng)的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

需求分析,編程思路

結(jié)構(gòu)體、類對象,座位

按照題目的描述,我們對于一個座位類,其至少有4個屬性,所以我們實(shí)現(xiàn)的思路有:
1、根據(jù)菜單中的c)按字母順序(編號)來顯示座位表,所以我們可以使用字符形式來存儲編號;
2、使用一個bool值來判斷座位是否被預(yù)定;
3、使用兩個字符串分別表示預(yù)定人的性和名。
然后由于題目中,一共有12個座位,我們不妨使用一個座位數(shù)組,作者在代碼使用了類嵌套的手法,當(dāng)時是想通過座位表類對象指針去訪問節(jié)省傳入空間,同時,由于后邊的統(tǒng)計(jì)座位數(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,每個選項(xiàng)對應(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;
}

以上就是“c++怎么實(shí)現(xiàn)值機(jī)系統(tǒng)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI