Advertisement

C语言课设飞机票订购系统

阅读量:

一、问题描述: 某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟。通过该系统来实现机票的订购问题。
二、功能要求:1、本系统采用一个包含M×N个数据的结构体数组,每个数据的结构应当包括:起飞地、目的地、 航班号、座次号码、座次订出与否标记、订座者的姓名和订座者的身份证号码。
2、本系统显示这样的菜单:
(1)输入航班信息
(2)输出航班信息
(3)查找航班信息
a、按线路查询
b、按目的地查询
(4)订票预约
(5)删除订票预约
(6)退出系统注:本系统成功执行菜单的每个信息,选项4)和5)将要求额外的输入。
查找航班信息既可按线路查,也可按目的地查。查询结果显示空座的信息、数量、已订座的信息、起飞时间等。
3、执行一个具体的功能之后,程序将重新显示菜单。
三、测试数据:飞机架数M=5,每架飞机的座位数N=12

*查找航班信息功能的实现有点小复杂,还请耐心
流程图
在这里插入图片描述

复制代码
    #include<stdio.h> 
    #include<stdlib.h> 
    #include<string.h>
     
    #define M 5//飞机数宏定义
    #define N 12//座位数宏定义
     
    struct zuoci 
    { 
      int haoma;//座次数
      int biaoji;// 座位订出的标记
      char xingming[20];//订座者姓名
      char zhengjian[30];//订座者的身份证号码
    }zuowei[N]; 
    struct plane 
    { 
     int no;//航班号
     char qidian[30];//起飞地
     char zhongdian[30];//目的地
     char time[30];//起飞时间
     int left;// 余票
     struct zuoci zuowei[N];//座位订出信息
    }plane[M];//M 个航班容量
     
    int num=0,i,j,t;// 定义外部变量(全局变量)
     
    void shuru() //输入航班的功能
    {  
    char c; 
    printf(" 请输入您要增加的航班信息 :\n"); 
    printf(" 请输入航班号 :\n"); 
    scanf("%d",&plane[num].no); 
    printf(" 请输入起飞地 \n"); 
    scanf("%s",plane[num].qidian); 
    printf(" 请输入目的地 \n"); 
    scanf("%s",plane[num].zhongdian); printf(" 请输入起飞时间 (例:20190226)\n"); 
    scanf("%s",plane[num].time); 
    printf(" 请输入航班余量 \n"); 
    scanf("%d",&plane[num].left); 
    for(i=0;i<plane[num].left;i++)// 订出标记
        { 
            plane[num].zuowei[i].biaoji=0;
        } 
    num++; 
    getchar();//继续
    } 
     
    void shuchu() //输出航班信息的功能
    { 
    printf(" 目前航班 :\n"); 
    printf(" 航班号 \t 起飞地 \t 目的地 \t 起飞时间 \t 票数\t\n"); 
    for(i=0;i<num;i++) 
    printf("%d\t\t%s\t\t%s\t\t%s\t\t%d\t\n",plane[i].no,plane[i].qidian,
    plane[i].zhongdian,plane[i].time,plane[i].left);
    getchar();//继续
    } 
     
    //查找航班信息-一级子函数
    int chazhao()
    {
    int chazhao1(int x);
    int i, j, no;
    char a[20], b[20];
    printf("您已选只有择3.查找航班信息。\n");
    for (;;)//for循环使程序只有一个出口,即输入0返回上一菜单
    {
        no= 1;
        printf("请选择查找航班信息方式(0返回菜单) : \n1.按线路查找\n2.按目的地查找\n");
        scanf("%d", &i);
        getchar();
        if(i==0)
        return 0;
        else if(i==1)
        {
            for ( ; ;)
            {
                if (no==0)
                break;
                printf("您已选择1.按线路查找。\n");
                printf("请输入查询线路的起点和目的地: \n");
                printf("请输入起点: \n");
                scanf("%s",a);
                getchar();
                printf("请输入目的地: \n");
                scanf("%s", b);
                getchar();
                for(j= 0;j< M;j++)
                    if ((strcmp(a, plane[j].qidian)==(strcmp(b, plane[j].zhongdian)))==0)
                    {
                        chazhao1(j);
                        break;
                    }
                    else
                    {
                        if(j= M- 1)
                        {
                            printf("查找失败,请核对线路后按任意数字继续查找或按0用其他方式查找! \n");
                            scanf("%d", &no);
                            getchar();
                            if (no == 0)
                            break;
                        }
                    }
            }
        }
        else if(i==2)
        {
            for (; ;)
            {
                if (no==0)
                break;
                printf("您已选择2.按目的地查找。\n");
                printf("请输入目的地: \n");
                scanf("%s", a);
                getchar();
                for(j=0;j < M;j++)
                {
                    if (strcmp(a, plane[j].zhongdian)==0)
                    {
                        chazhao1(j);
                        break;
                    }
                    else
                    {
                        if(j==M- 1)
                        {
                            printf("查找失败,请核对目的地后按任意数字继续查找或按0用其他方式查找! \n");
                            scanf("%d", &no);
                            getchar();
                            if (no==0)
                            break;
                        }
                    }
                }
            }
        }   
        else
        {
            printf("输入错误,请重新输入! \n"); 
            system("pause");//等待用户按一个建,然后返回 
        }
    } 
    return 0;
    } 
     
    int chazhao1( int x)//查找航班信息二级子函数 
    { 
    int chazhao11( int x);
    int chazhao12( int x);
    int chazhao13( int x);
    int chazhao14( int x);
    int i;
    printf("成功匹配到%d航班。\n", plane[x].no);
    for (; ;)
    { 
        printf("请选择查询选项(0返回菜单) : \n1.显示空座的数量\n2.显示空座的信息\n3.显示已订座的信息\n4.显示起飞时间\n");
        scanf("%d", &i);
        getchar();
        switch (i)
        {
            case 0:return 0;
            case 1:chazhao11(x); break;
            case 2:chazhao12(x); break;
            case 3:chazhao13(x);break;
            case 4:chazhao14(x);break;
            default:printf("错误,重新输入.\n");
        }
    }
    }
     
    int chazhao11(int x)
    {
    int i, k=0;
    for(i= 0;i<N;i++)
    if (plane[x].zuowei[i].biaoji =='N')
    k+=1;
    printf("%d 航班剩余%d个空座\n",plane[x].no, k);
    system("pause");
    return 0;
    }
     
    int chazhao12(int x)
    {
    int i;
    printf("%d剩余空座有:\n", plane[x].no);
    for(i= 0;i<N;i++)
    if (plane[x].zuowei[i].biaoji=='N')
    printf("%d号座%c", plane[x].zuowei[i].haoma,(i+ 1)%5==0 ?'\n':'t');
    system("pause");
    return 0;
    }
     
    int chazhao13(int x)
    {
    int i;
    printf("航班号: %d\n起飞时间:%s\n,目的地:%s\n\n", plane[x].no, plane[x].time, plane[x].qidian, plane[x].zhongdian);
    for(i= 0;i<N;i++)
    if (plane[x].zuowei[i].biaoji != 'N')
    printf("姓名:%s\n座号:%d\n身份证号:%s\n\n", plane[x].zuowei[i].xingming,plane[x].zuowei[i].haoma, plane[x].zuowei[i].zhengjian);
    system("pause");
    return 0;
    }
     
    int chazhao14(int x)
    {
    printf("航班号: %d\n起飞时间: %s\n", plane[x].no, plane[x].time);
    system("pause");
    return 0;
    }
     
    void dingpiao() //订票的功能
    { 
    int n; 
    printf(" 请输入订票的航班号: \n"); 
    scanf("%d",&n); 
    for(i=0;i<num;i++) 
    if(plane[i].no==n) 
    break; 
    printf(" 余票: %d\n",plane[i].left); 
    for(j=0;plane[i].zuowei[j].biaoji==1;j++);
    printf(" 请输入姓名拼音: "); 
    scanf("%s",plane[i].zuowei[j].xingming); 
    printf(" 请输入身份证号码: "); 
    scanf("%s",plane[i].zuowei[j].zhengjian); 
    printf(" 分配给座位是 :%d 号\n",j+1); 
    plane[i].zuowei[j].biaoji=1; 
    plane[i].left--; 
    getchar();//继续
    } 
    void cancel() //删除订票的功能
    { 
    int n,m; 
    char judge; 
    printf(" 请输入删除的订票航班号: "); 
    scanf("%d",&n); 
    for(i=0;i<num;i++) 
    if(plane[i].no==n) break; 
    printf(" 请输入删除的座位号: "); 
    scanf("%d",&m); 
    plane[i].zuowei[m-1].biaoji=0;
    plane[i].left++; 
    getchar();//继续
    } 
     
    void main()//主函数
    { 
    int menu; 
    do
    { 
        menu=0; 
        printf(" ——欢迎使用飞机订票系统 ——\n"); 
        printf("[ 请选择需要的功能 ]\n"); 
        printf("|| 1、输入航班信息 ||\n"); 
        printf("|| 2、输出航班信息 ||\n"); 
        printf("|| 3、查找航班信息 ||\n"); 
        printf("|| 4、订 票 预 约 ||\n"); 
        printf("|| 5、删除订票预约 ||\n"); 
        printf("|| 6、退 出 系 统 ||\n"); 
        printf(">>>>>>>>>>>>>><<<<<<<<<<<<<\n"); 
        printf(" 输入选择功能序号 : "); 
        scanf("%d",&menu); 
     
        switch(menu) 
        { 
            case 1: shuru();break; 
            case 2: shuchu();break; 
            case 3: chazhao();break; 
            case 4: dingpiao();break; 
            case 5: cancel();break; 
            case 6: break; 
        } //如果没有符合的序号,则不执行,流转下一条
        getchar();//子函数配合输入继续
    } //循环体位置
    while(menu!=6); //判断条件
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

全部评论 (0)

还没有任何评论哟~