c++值机系统
物联黄同学 人气:0本项目为大家分享了c++实现值机系统的具体代码,供大家参考,具体内容如下
前言
上周帮同学做了一个项目作业,具体要求见下图,实现语言为c++。
今天决定在此复盘这个程序编写的思路,具体完整代码实现在文末
需求分析——编程思路
结构体、类对象——座位
按照题目的描述,我们对于一个座位类,其至少有4个属性,所以我们实现的思路有:
1、根据菜单中的c)按字母顺序(编号)来显示座位表,所以我们可以使用字符形式来存储编号;
2、使用一个bool值来判断座位是否被预定;
3、使用两个字符串分别表示预定人的性和名。
然后由于题目中,一共有12个座位,我们不妨使用一个座位数组,作者在代码使用了类嵌套的手法,当时是想通过座位表类对象指针去访问节省传入空间,同时,由于后边的统计座位数量的时候的会比较好用。
初始化
创建座位表对象时,不妨对其初始化,用一个循环按A—L赋值给座位表的对应对象座位编号属性赋值。
功能实行——菜单
1、菜单显示,和之前做过的通讯录差不多,只需要在外部封装一个函数,循环调用即可,同时为了一定的视觉效果,每次循环做一次按任意键继续 + 清屏 操作。
2、调用结构,首先如上面提到的,循环,然后使用另一个判别分支结构——switch,每个选项对应一个函数调用。
3、删除座位和预定座位的功能实现逻辑:
对于删除,需要注意判断是否座位匹配(即此时座位是否空,和客户姓名是否匹配)
对于预定,则需要判断输入是否合乎要求(是否座位编号是空座)
代码
#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; }
加载全部内容