飞机选座系统C++语言

编写一个程序安排一架飞机上的座位。假设一架飞机上有20个头等舱座位(共5排,每排4个座位并被一个通道分隔),另有180个经济舱位置(共30排,每排6个座位,被一个通道从中分隔)。程序需要完成3个功能:增加乘客,显示座位安排情况,退出系统。在增加乘客时,要求输入客舱的等级和结伴旅行的人数(头等舱为1至2人,经济舱为1至3人),此外,还可以输入对座位的要求(头等舱可选靠窗或靠通道),经济舱可选靠窗、中间或靠通道)。然后,为乘客分配合适的位置。如果没有符合要求的座位,则给出相应信息。用户界面可以使文本方式或者图形方式。利用CRC卡片设计类和类中的方法,同时给出UML图并实现该程序。
扩展功能:1)减少乘客;

参考一下车票售票系统:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define BANCI 100
typedef struct Time
{
    int hour;
    int mint;
} Time;
typedef struct Ticketsinfo
{
    int id;  //班次
    Time tt; //时间
    char start[20]; //起点站
    char dst[20]; //终点站
    float time;  //行车时间
    int max;  //额定载量
    int sales;  //已订票人数
}Ticketinfo;
 
//获取当前时间
Time GetCurrTime()
{
    Time tt;
    time_t timep;
    struct tm *p;
    time(&timep);
    p = gmtime(&timep);
    tt.hour = p->tm_hour;
    tt.mint = p->tm_min;
    return tt;
}
 
//判断是否已经发车,1表示已发车
int isOut(Time tt)
{
    Time cur = GetCurrTime();
    if (cur.hour > tt.hour)
    {
        return 1;
    }else if (cur.hour < tt.hour)
    {
        return 0;
    }else
    {
        if(cur.mint > tt.mint)
            return 1;
        else
            return 0;
    }
}
//显示所有班次
void ShowInfo(Ticketinfo all[],int size)
{
    int i;
    for (i = 0; i < size;i++)
    {
        if(isOut(all[i].tt))
            printf("%d\t%d:%d\t%s\t%s\t%.1f\t%d\t%d\t此班已发出\n",all[i].id,all[i].tt.hour,all[i].tt.mint,all[i].start,all[i].dst,all[i].time,all[i].max,all[i].sales);
        else
            printf("%d\t%d:%d\t%s\t%s\t%.1f\t%d\t%d\n",all[i].id,all[i].tt.hour,all[i].tt.mint,all[i].start,all[i].dst,all[i].time,all[i].max,all[i].sales);
    }
}
//查询路线
void CLine(Ticketinfo all[],int size)
{
    int i;
    char buf[40] = {0};
    int id;
    printf("请输入班次或者终点站:");
    scanf("%s",buf);
    id = atoi(buf);
    for (i = 0; i < size; i++)
    {
        if (all[i].id == id || strcmp(buf,all[i].dst) == 0)
        {
            printf("%d\t%d:%d\t%s\t%s\t%.1f\t%d\t%d\n",all[i].id,all[i].tt.hour,all[i].tt.mint,all[i].start,all[i].dst,all[i].time,all[i].max,all[i].sales);
            break;
        }
    }
}
 
//售票
void BuyTickets(Ticketinfo all[],int size)
{
    char buf[20]={0};
    int i,id;
    printf("请输入班次或者目的地:");
    scanf("%s",buf);
    id = atoi(buf);
    for (i = 0; i< size; i++)
    {
        if (all[i].id == id || strcmp(buf,all[i].dst) == 0) //查找班次
        {
            //判断是否还有票
            if (all[i].sales < all[i].max)
            {
                printf("当前剩余票数:%d,出票成功\n",all[i].max - all[i].sales);
                all[i].sales += 1;
                break;
            }
        }
    }
}
 
 
 
//退票
void ReturnTickets(Ticketinfo all[],int size)
{
    char buf[20]={0};
    int i,id;
    printf("请输入需要退票的班次:");
    scanf("%d",buf);
    id = atoi(buf);
    for (i = 0; i< size; i++)
    {
        if (all[i].id == id ) //查找班次
        {
            if (isOut(all[i].tt))
            {
                printf("该班次已经发车,无法退票\n");
                break;
            }else
            {
                all[i].sales -= 1;
                printf("退票成功\n");
                break;
            }
        }
    }
}
 
int main()
{
    Ticketinfo all[BANCI];
    int nmb = 0;  //文件中的班次数
    int opt,i = 0;
    int loops = 1;
    FILE* fp;
 
    if(!(fp = fopen("car.txt","r"))) //假设信息在car.txt中
    {
        printf("文件打开失败\n");
        return 0;
    }
    while(!feof(fp))
    {
        fscanf(fp,"%d\t%d:%d\t%s\t%s\t%f\t%d\t%d",&all[nmb].id,&all[nmb].tt.hour,&all[nmb].tt.mint,all[nmb].start,all[nmb].dst,&all[nmb].time,&all[nmb].max,&all[nmb].sales);
        nmb++;
    }
    fclose(fp);
    printf("--------------车票管理系统------------\n");
    printf("|    1.浏览全部班次                  |\n");
    printf("|    2.查询路线                      |\n");
    printf("|    3.售票                          |\n");
    printf("|    4.退票                          |\n");
    printf("|    9.退出系统                      |\n");
    printf("--------------------------------------\n");
    
    while(loops)
    {
        scanf("%d",&opt);
        switch(opt)
        {
        case 1:
            ShowInfo(all,nmb);
            break;
        case 2:
            CLine(all,nmb);
            break;
        case 3:
            BuyTickets(all,nmb);
            break;
        case 4:
            ReturnTickets(all,nmb);
            break;
        case 9:
            loops = 0;
            break;
        default:
            break;
        }
    }
    return 0;
}