#include <stdlib.h>
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
//定义一个乘客类
class chengke
{
public:
chengke()
{
id="";name="";
}
void xinxi()
{
cin>>id>>name;
}
string id;//身份证
string name;//姓名
};
chengke ck[100];//用对象数组存储100个座位
void xuanzhe_zw(int zw[]);//选择座位
void quxiao_zw(int zw[]);//取消座位
/*void chaxun_zw(int zw[]);//查询座位*/
void display_zw(int zw[]);//打印乘客座位
//主函数,加入菜单
int main()
{
int p,zw[100],i;
for(i=0;i<100;i++)
{zw[i]=0;}//座位清零
do
{
cout<<"|------------ 考场系统座位设计 -----------|"<<endl
<<"|------------ 请输入选项编号(0-4) -----------|"<<endl
<<" | 1-选择飞机座位 | "<<endl
<<" | 2-取消飞机座位 | "<<endl
<<" | 3-查询乘客座位 | "<<endl
<<" | 4-显示飞机座次表 | "<<endl
<<" | 0-退出! | "<<endl
<<"|------------------------------------------------|"<<endl;
cin>>p;
if (1 == p) xuanzhe_zw(zw);
else if (2 == p) quxiao_zw(zw);
/* else if (3 == p) chaxun_zw(zw);*/
else if (4 == p) display_zw(zw);
else exit(1);
} while(p);
}
//选择1 飞机乘客选择座位,方法:用户输入座位号(数字+字母)
void xuanzhe_zw(int zw[])
{
int l;
for(l=0;l<100;l++)
{
if(zw[l]==0)break;//有空座位
if(l==100)
{
cout<<"本次飞机已满客!"<<endl;
return ;
}
}
char a[20][6] = {
{1,'A','B','C','D','E'},{2,'A','B','C','D','E'},{3,'A','B','C','D','E'},{4,'A','B','C','D','E'},{5,'A','B','C','D','E'},
{6,'A','B','C','D','E'},{7,'A','B','C','D','E'},{8,'A','B','C','D','E'},{9,'A','B','C','D','E'},{10,'A','B','C','D','E'},
{11,'A','B','C','D','E'},{12,'A','B','C','D','E'},{13,'A','B','C','D','E'},{14,'A','B','C','D','E'},{15,'A','B','C','D','E'},
{16,'A','B','C','D','E'},{17,'A','B','C','D','E'},{18,'A','B','C','D','E'},{19,'A','B','C','D','E'},{20,'A','B','C','D','E'},
};//20组A B C D E存储到a数组中
int num = 0;
int index;
int k,s=0;
char pos;
while( num < 100 )
{
cout << "请输入座位号(数字1~20 字母A~E): ";
cin>>index>>pos;
if ( (index < 1 || index > 20) ||
(pos < 'A' || pos > 'E'))
{
cout << "请输入正确的座位信息!" << endl;
continue;
}
if ( a[index-1][(int)(pos-'A')+1] == 'X')
{
cout << "座位已被预定,请重新选择!" << endl;
continue;
}
else
{
cout<<"是否确定选择该座位号:"<<endl;
cout<<"1.确定 2.重新选择 "<<endl<<endl;
cin>>k;
if(k==1){cout << "座位预定成功!" <<endl;
a[index-1][(int)(pos-'A')+1] = 'X';
num=k*100;continue;}
else {num++;}
}//循环输入,让乘客选到满意为止
}
switch(pos)
{
case 'A':
s=index*6-5;break;
case 'B':
s=index*6-4;break;
case 'C':
s=index*6-3;break;
case 'D':
s=index*6-2;break;
case 'E':
s=index*6-1;break;
case 'F':
s=index*6;break;
}//让输入的字母座位号转换为1~100的数字编号
zw[l]=s;
cout<<"请输入身份证号和姓名:";
ck[s].xinxi();//把信息存储到乘客信息类中
for(l=0;l<100;l++)
{
if(l != s)//同一身份证不能重复选座
if(ck[s].id == ck[l].id)
{
cout<<"抱歉!该身份证已选座,请核对后再输入:";
ck[s].xinxi();
l--;
}
}
cout<<"操作成功!"<<endl;
}
//选项2 取消已选座位
void quxiao_zw(int zw[])
{
string id_1;
int i,l;
cout<<"输入要取消座位的身份证号:";
cin>>id_1;
for(i=0;i<100;i++)
{
if(ck[i].id == id_1)
{
zw[i]=0;//赋值为0代表座位无人
ck[i].id="";//清空存储的身份证
ck[i].name="";//清空存储的姓名
cout<<"操作成功!"<<endl;
return ;
}
}
cout<<"该飞机航班无此人!"<<endl;
cout<<endl;
}
//选择3 输入某身份证号,然后显示该乘客的座位号
/*void chaxun_zw(int zw[])
{
int l;
string id_2;
cout<<"请输入查询的身份证号:";
cin>>id_2;
for(l=0;l<100;l++)
{
if(id_2 == ck[l].id)
{
cout<<"查询结果:"<<endl<<"座位号:"<<ck[l].shuzi<<ck[l].zimu<<endl;
return ;
}
}
cout<<"身份证号错误!"<<endl;
cout<<endl;
}*/
//选项4 显示已选座位的乘客清单
void display_zw(int zw[])
{
int l;
cout<<"本次航班座位情况如下:"<<endl;
for(l=0;l<100;l++)
{
if(zw[l] != 0)
{
cout.setf(ios::left);
cout<<setw(10)<<(ck[l].name)<<(ck[l].id);
}
}
cout<<endl<<endl;
}
在网上找了一些代码改了一下,但运行没法实现要求的功能,功能:本飞机共有100个座位,分20排,每排5个位子,编号为A、B、C、D、E,如10A表示10排A座,A和E靠窗,本系统可让乘客自己选择座号,直到乘客满意为止,无法满足的话,只能改乘另一个航班。定上票的乘客需给出姓名和身份证号,最后要打印出乘客清单。