今天小编给大家分享一下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;
}
以上就是“c++怎么实现值机系统”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。