a_h_a_123 2021-05-22 18:14 采纳率: 0%
浏览 147

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

  • 写回答

5条回答 默认 最新

  • 关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题