本项目为大家分享了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