使用c++实现:共有100个座位,分20排,每排5个位子,编号为A、B、C、D、E让乘客自己选择座号

使用c++实现:共有100个座位,分20排,每排5个位子,编号为A、B、C、D、E让乘客自己选择座号

问题描述:

#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靠窗,本系统可让乘客自己选择座号,直到乘客满意为止,无法满足的话,只能改乘另一个航班。定上票的乘客需给出姓名和身份证号,最后要打印出乘客清单。

是否可以先描述一下现在程序存在的问题。

估计错误不少,比如

for(l=0;l<100;l++)

 

{

 

if(zw[l]==0)break;//有空座位

 

if(l==100)

 

{

 

cout<<"本次飞机已满客!"<<endl;

 

return ;

 

}

 

}

这个if(l==100)根本就不可能执行到啊,因为循环条件要求l<100才进来,所以这个if是永远执行不到的,要放到循环外面才对

if(k==1){cout << "座位预定成功!" <<endl;

 

a[index-1][(int)(pos-'A')+1] = 'X';

 

num=k*100;continue;}

这里最后的continue应该为break,都选完座位了啊,还continue干啥呢?另外num=k*100也没啥用。

while(num<100)也没什么意义,你能确保用户100次都输入不同的座位号么?用户哪有那么厉害呢

}//让输入的字母座位号转换为1~100的数字编号

 

zw[l]=s;

这个也是不对的。在函数开始时循环时,判断zw[l]==0,你的意思是想给这个序号设上标志,但你要知道for循环结束后,zh这个l自动加1了啊,所以这里的zw[l]并不是你循环里判断的那个zw[l]了

 

总体来说问题比较多,想法也比较乱啊

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632