服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - c++实现值机系统

c++实现值机系统

2022-10-19 13:41物联黄同学 C/C++

这篇文章主要为大家详细介绍了c++实现在线值机系统程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本项目为大家分享了c++实现值机系统的具体代码,供大家参考,具体内容如下

前言

上周帮同学做了一个项目作业,具体要求见下图,实现语言为c++。
今天决定在此复盘这个程序编写的思路,具体完整代码实现在文末

c++实现值机系统

需求分析——编程思路

结构体、类对象——座位

按照题目的描述,我们对于一个座位类,其至少有4个属性,所以我们实现的思路有:
1、根据菜单中的c)按字母顺序(编号)来显示座位表,所以我们可以使用字符形式来存储编号;
2、使用一个bool值来判断座位是否被预定;
3、使用两个字符串分别表示预定人的性和名。
然后由于题目中,一共有12个座位,我们不妨使用一个座位数组,作者在代码使用了类嵌套的手法,当时是想通过座位表类对象指针去访问节省传入空间,同时,由于后边的统计座位数量的时候的会比较好用。

初始化

创建座位表对象时,不妨对其初始化,用一个循环按A—L赋值给座位表的对应对象座位编号属性赋值。

功能实行——菜单

1、菜单显示,和之前做过的通讯录差不多,只需要在外部封装一个函数,循环调用即可,同时为了一定的视觉效果,每次循环做一次按任意键继续 + 清屏 操作。
2、调用结构,首先如上面提到的,循环,然后使用另一个判别分支结构——switch,每个选项对应一个函数调用。
3、删除座位和预定座位的功能实现逻辑:
对于删除,需要注意判断是否座位匹配(即此时座位是否空,和客户姓名是否匹配)
对于预定,则需要判断输入是否合乎要求(是否座位编号是空座)

代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
#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;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_54891898/article/details/120761860

延伸 · 阅读

精彩推荐
  • C/C++Qt模仿IOS滑动按钮效果

    Qt模仿IOS滑动按钮效果

    这篇文章主要为大家详细介绍了Qt模仿IOS滑动按钮效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    番茄炒蛋不要蛋7492021-09-24
  • C/C++c语言随机数函数示例

    c语言随机数函数示例

    这篇文章主要介绍了c语言随机数函数示例,需要的朋友可以参考下...

    C语言程序设计5982021-01-18
  • C/C++Cmemcpy和strncpy以及snprintf 的性能比较

    Cmemcpy和strncpy以及snprintf 的性能比较

    以下是对字符串拷贝函数memcpy和strncpy以及snprintf它们之间的性能进行了比较,需要的朋友可以过来参考下...

    C语言教程网5052020-12-20
  • C/C++C++优先队列用法案例详解

    C++优先队列用法案例详解

    这篇文章主要介绍了C++优先队列用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    华山青竹12092021-12-14
  • C/C++C语言实现航班管理系统

    C语言实现航班管理系统

    这篇文章主要为大家详细介绍了C语言实现航班管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    dandelionLYY8222021-08-11
  • C/C++C语言代码实现简单扫雷小游戏

    C语言代码实现简单扫雷小游戏

    这篇文章主要为大家详细介绍了C语言实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    H_Strong7472021-10-21
  • C/C++opencv3/C++绘制几何图形实例

    opencv3/C++绘制几何图形实例

    今天小编就为大家分享一篇opencv3/C++绘制几何图形实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    阿卡蒂奥10872021-08-08
  • C/C++C语言函数调用的三种实现方法实例

    C语言函数调用的三种实现方法实例

    C语言中函数的调用主要有如下三种方法,直接调用,函数指针调用,函数指针传递调用其中后两种本质一样,但在有无返回值时还稍有差别,下面这篇文章主要给...

    ML__LM11662022-09-03