航班管理系统(最全最细)

简介: 航班管理系统(最全最细)

程序启动后显示主菜单,包括下面的选项:

1. 显示航班列表

6. 航班乘客显示

8. 从文件调入航班信息

 按下相应的数字键后进入各自的子功能,每个子功能执行完毕后,返回并

 1. 显示航班列表:在屏幕显示已登记的航班总数,及各航班的信息,包括航班号,出发地和目的地,起飞时间,落地时间,所用机型,座位数,价格。(假设航班为每日一次)

2. 增加航班:输入航班信息,包括航班号,出发地和目的地,起飞时间,落地时间,所用机型,座位数,价格。

 3. 删除航班:输入要删除的航班号,删除该航班信息。

 4. 航班订票:输入航班名,日期,乘客姓名,身份证号。

 5. 航班退票:输入航班名,日期,身份证号,删除乘客信息。

 6. 航班乘客显示:输入航班号和日期,显示该航班的座位号及乘客姓名,以及空余座位数。

 7. 航班存盘:输入文件名,将航班信息存入文件。

 8. 从文件调入:输入文件名,读取文件将数据调入,重新生成航班信息

 9. 退出:退出程序,返回操作系统

课程设计成绩评定的依据有设计文档资料、具体实现设计方案的程序,采用百分制,不设平时分。

优(90分以上):必须要有一定的创意,有自己独特的算法。按要求完成课题的

            全部功能,有完整的符合标准的文档,文档有条理、文笔通顺,

            格式正确,其中有总体设计思想的论述,有正确的流程图,程序

            完全实现设计方案,设计方案先进,软件可靠性好;

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <iostream>
using namespace std;
 
#define PERSON_MAXNUM 100     //记录乘客信息的空间 
#define PERSONNOTICKET_MAX 20  //记录乘客候补名单数量 
//航班数量 ,可更改航班数量 
#define MAXsizeNumber 50    
int sizeNumber = 0;   //记录添加的航班数量 
int passengerSizeNumber = 0;  //记录订票乘客数量 
int _personnoticketsizeNumber = 0;  //记录候补人数 
 
//定义航班信息结构体
typedef struct Flight
{
  /*已登记的航班总数及各航班的信息,包括航班号,出发地和目的地,起飞时间,落地时间,所用机型,座位数,价格*/ 
    char ID[10];           //航班编号 
    char takeOffPlace[10]; //出发地 
    char Destination[10];  //目的地 
    char dateTime[20];     //起飞时间 
    char dateTime1[20];    //落地时间 
    char flightStyle[10];  //航班机型 
    float Price;           //价格 
    int buyTicketNum;       //卖出机票数量 
    int MaxTicketNum;       //最大机票数量 
}Flight;
 
//定义乘客信息结构体
typedef struct Person
{
    int AirFlight_Num;   //飞机编号 
    char person_name[20];//乘客姓名 
    char person_id[18];  //乘客身份证
  char date[10]; 
 
}Person;
 
 
void home(Flight* p,Person* person, Person* person_noticket);//1、初始页面
 
void initFlight(Flight** p);//2、初始化航班信息内存
 
void InputFlightDate(Flight* p);//3、添加航班信息
 
void FlightDateShow(Flight* p);//4、查看航班信息
 
void DelFlightDate(Flight* p);//5、删除航班信息
 
void FlightDateShowOrder(Flight* p,Person* person);//6、查看航班订单
 
void PrintPassengers(Flight* p, Person* person, int i);//7、打印航班乘客
 
void InitPassenger(Person** person);//8、初始化乘客信息内存
 
void BookFlightTicket(Flight* p, Person* person,Person* person_noticket);//预定航班
 
int CheckPerson(Flight* p, Person* person);//查看乘客订单信息
 
void ChangeAirFlight(Flight* p, Person* person);//修改订票信息 
 
void CancelTicket(Flight* p, Person* person);//退票
 
void PrintPassengers(Flight* p, Person* person, int i);//输出乘客信息 
 
void CheckPersonNoTicket(Flight* p, Person* person_noticket);//查看候补名单
 
//7、航班信息存盘 
void FlightSaveFile(Flight* p);
//8、从文件中调入航班信息 
void FlightFindFile(void);
 
 
void home(Flight* p, Person* person, Person* person_noticket)
{
    int a, i, j;
    printf("\n*****************************欢迎来到五邑航班管理系统*****************************\n");
    printf("\n*******************请登录身份!管理员请按1;乘客请按2;退出系统请按0*****************\n");
    printf("请选择:");
    scanf("%d", &a);
    //航班管理人员操作
    if (a == 1)
        do{
            printf("\n****************** 1.添加航班信息 *******************\n");
            printf("\n****************** 2.删除航班信息 *******************\n");
            printf("\n****************** 3.显示航班列表 *******************\n");
            printf("\n****************** 4.查询已订票信息 *************\n");
            printf("\n****************** 5.查看候补名单 *******************\n");
            printf("\n****************** 6.航班信息存盘 *******************\n");
            printf("\n****************** 7.从文件中调入航班信息 ***********\n");
            printf("\n****************** 0.退出管理员登录********************\n");
            printf("请选择:");
            scanf("%d", &i);
            switch (i)
            {
                case 0: break;
                case 1:InputFlightDate(p);break;
                case 2:DelFlightDate(p);break;
                case 3:FlightDateShow(p);break;
                case 4:FlightDateShowOrder(p, person); break;
                case 5:CheckPersonNoTicket(p, person_noticket); break;
                case 6:FlightSaveFile(p); break;
                case 7:FlightFindFile(); break;
                default:
                    printf("输入错误!\n");
                    break;
            }
        } while (i != 0);
    //乘客操作
    if (a == 2)
        do{
            printf("\n*********************** 1.乘客订票 ***********************\n");
            printf("\n*********************** 2.更改订票信息 *******************\n");
            printf("\n*********************** 3.乘客退票 ***********************\n");
            printf("\n*********************** 4.查询航班信息 *******************\n");
            printf("\n*********************** 5.查询个人订票信息 ***************\n");
            printf("\n*********************** 0.退出乘客登录 *******************\n");
            printf("请选择:");
            scanf("%d", &j);
            switch (j)
            {
                case 0:break;
               case 1:BookFlightTicket(p, person,person_noticket);
               break;
                case 2:ChangeAirFlight(p, person);
               break;
                case 3:CancelTicket(p, person);
               break;
                case 4:FlightDateShow(p);
               break;
                case 5:CheckPerson(p, person);
                 break;
            }
        } while (j != 0);
    if( a==0 ){
      printf("感谢你的体验!欢迎下次光临哦!!");
    exit(0);   //结束进程,退出系统。 
  }    
}
 
//初始化航班信息 
void initFlight(Flight** p)
{
 
    assert(p);//清除缓冲区,准备声请空 
    //申请空间
    *p = (Flight*)malloc(sizeof(Flight)*MAXsizeNumber);
    if (NULL == *p)
    {
        printf("开辟空间失败!\n");
        return;
    }
    (*p)->buyTicketNum = 0;
}
//输入航班信息
void InputFlightDate(Flight* p)
{
    if (sizeNumber <= MAXsizeNumber)
    {
        printf("航班编号:%d\n", sizeNumber);
        printf("请输入航班ID:");
        scanf("%s", (p+sizeNumber)->ID);
        printf("请输入航班出发地:");
        scanf("%s", (p + sizeNumber)->takeOffPlace);
        printf("请输入航班目的地:");
        scanf("%s", (p + sizeNumber)->Destination);
        printf("请输入航班起飞时间:");
        scanf("%s", (p + sizeNumber)->dateTime);
        printf("请输入航班到达时间:");
        scanf("%s", (p + sizeNumber)->dateTime1);
        printf("请输入航班机型:");
        scanf("%s", (p + sizeNumber)->flightStyle);
        printf("请输入航班订票价格:");
        scanf("%f", &(p + sizeNumber)->Price);
        printf("输入航班可乘坐最大人数:");
        scanf("%d", &(p + sizeNumber)->MaxTicketNum);
        do
        {
            printf("目前卖出机票数量:");
            scanf("%d", &(p + sizeNumber)->buyTicketNum);
            if ((p + sizeNumber)->buyTicketNum > (p + sizeNumber)->MaxTicketNum)
            {
                printf("输入已卖出机票数量错误!\n");
                printf("请重新输入!\n\n");
            }
        } while ((p + sizeNumber)->buyTicketNum > (p + sizeNumber)->MaxTicketNum);
        sizeNumber++;
        printf("添加航班信息成功!\n\n");
    }
    else
    {
        printf("内存已满!\n");
        return;
    }
}
 
void FlightDateShow(Flight* p)
{
    int i = 0;
    printf("目前在售的航班信息:\n\n");
    printf("\n******************五邑国际机场航班信息*********************\n");
    printf("航班编号\t航班ID\t出发地\t目的地\t起飞时间\t落地时间\t飞机机型\t剩余座位数\t价格\n");
    printf("-------------------------------------------------------------------------------------------------------\n");
    for (i = 0; i < sizeNumber; i++)
    {
  printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%.2f\n",
                i,
               (p+i)->ID,
         (p + i)->takeOffPlace,
                 (p + i)->Destination,
         (p + i)->dateTime,
         (p + i)->dateTime1,
         (p + i)->flightStyle,
                 ((p + i)->MaxTicketNum - (p + i)->buyTicketNum),
         (p + i)->Price); 
    }
    printf("已登记航班总数:");
    printf("%d\n",sizeNumber);
    printf("------------------------------------------------------------------------------------------------------\n");
}
//删除航班信息
void DelFlightDate(Flight* p)
{
    int j = 0;
    int i = -1;
    assert(p);
    printf("请输入要删除的航班编号:");
    scanf("%d", &i);
    for (j = i; j < sizeNumber; j++)
    {
        strcpy((p + j)->ID, (p + j + 1)->ID);
        strcpy((p + j)->takeOffPlace, (p + j + 1)->takeOffPlace);
        strcpy((p + j)->Destination, (p + j)->Destination);
        strcpy((p + j)->dateTime, (p + j + 1)->dateTime);
        (p + j)->Price = (p + j + 1)->Price;
        (p + j)->MaxTicketNum = (p + j + 1)->MaxTicketNum;
        (p + j)->buyTicketNum = (p + j + 1)->buyTicketNum;
    }
    sizeNumber--;
}
//初始化乘客信息
void InitPassenger(Person** person)
{
    assert(person);
    *person = (Person*)malloc(sizeof(Person)*PERSON_MAXNUM);
    if (NULL == *person)
    {
        printf("开辟空间失败!\n");
        return;
    }
}
 
//订票
void BookFlightTicket(Flight* p, Person* person, Person* person_noticket)
{
    int i = -1;
    FlightDateShow(p);
    printf("请选择你要预定的航班编号:");
    scanf("%d", &i);
    if ((p + i)->MaxTicketNum == (p + i)->buyTicketNum)
    {
        printf("对不起,该航班机票已售完!\n");
        printf("请输入您的姓名(我们将把您添加进候补名单):");
        scanf("%s", (person_noticket+_personnoticketsizeNumber)->person_name);
        (person_noticket + _personnoticketsizeNumber)->AirFlight_Num = i;
        _personnoticketsizeNumber++;
        printf("添加候补名单成功!\n\n");
        return;
    }
    else
    {
        if (passengerSizeNumber > PERSON_MAXNUM)
        {
            printf("存储容量不足!\n");
            return;
        }
        printf("请输入姓名:");
        scanf("%s", (person + passengerSizeNumber)->person_name);
        printf("请输入日期:"); 
        scanf("%s",(person + passengerSizeNumber)->date);
        printf("请输入你的身份证号:");
        scanf("%s",(person + passengerSizeNumber)->person_id);
        (person + passengerSizeNumber)->AirFlight_Num = i;
        passengerSizeNumber++;
        (p + i)->buyTicketNum++;
        printf("订票成功!\n");
    }
}
//查看个人订票信息
int CheckPerson(Flight* p, Person* person)
{
    int flag = 0;
    int i = 0;
    char _name[20] = { 0 };
    printf("请输入您的姓名:");
    scanf("%s", &_name);
    printf("您的个人订票信息:\n\n");
      printf("\n订单编号 姓名 航班编号 航班ID 始发地 目的地 起飞时间 机票价格\n") ;
    printf("-----------------------------------------------------------------------------\n");
    for (i = 0; i < passengerSizeNumber; i++)
    {
        if (0 == strcmp(_name, (person + i)->person_name))
        {
    flag = 1;
        
        printf("%d\t%s\t%d\t%s\t%s\t%s\t%s\t%0.2f\n",i, (person + i)->person_name, (person + i)->AirFlight_Num,(p + (person + i)->AirFlight_Num)->ID, (p + (person + i)->AirFlight_Num)->takeOffPlace,(p + (person + i)->AirFlight_Num)->Destination,(p + (person + i)->AirFlight_Num)->dateTime,(p + (person + i)->AirFlight_Num)->Price);
             }
    }
    if (0 == flag)
    {
        printf("未找到该乘客订票信息!\n");
        return 0;
    }
    return 1;
}
//改签
void ChangeAirFlight(Flight* p, Person* person)
{
    int i = -1;
    int j = -1;
    if (0 == CheckPerson(p, person))
    {
        return;
    }
    printf("请输入要改签的订单编号:");
    printf("\n");
    scanf("%d", &i);
    (p + i)->buyTicketNum--;
    FlightDateShow(p);
    do
    {
        printf("请输入要改签的航班编号:");
        scanf("%d", &j);
        if ((p + j)->buyTicketNum >= (p + j)->MaxTicketNum)
        {
            printf("该次航班已满员,请重新选择!\n");
        }
    } while ((p + j)->buyTicketNum >= (p + j)->MaxTicketNum);
    (person + i)->AirFlight_Num = j;
    (p + j)->buyTicketNum++;
    printf("改签成功!\n\n");
}
 
//删除订单,输入航班名,日期,身份证号,删除乘客信息
void CancelTicket(Flight* p, Person* person)
{
    int i = -1;
    int j = 0;
    int n=0;
    char L_date[10];
    char L_person_id[18];
    int flag1;
    int flag2;
    CheckPerson(p, person);
    printf("\n请输入要删除的订单编号:");
    scanf("%d", &i);
    printf("请输入订票日期:");
    scanf("%s", &L_date);
    printf("请输入你的身份证:");
    scanf("%s", &L_person_id);
    //做判断
   
    for(int k=0; k<passengerSizeNumber;k++){
       flag1 = strcmp(L_date, (person+k)->date);
       flag2 = strcmp(L_person_id,(person+k)->person_id);
       if((!flag1) && (!flag2)){
        for (j = i; j < passengerSizeNumber; j++)
                {
                  (person + j)->AirFlight_Num = (person + j + 1)->AirFlight_Num;
                  strcpy((person + j)->person_name, (person + j + 1)->person_name);
                }
                
                n++;
            break;
     }
  }
  if(n){
        printf("退票成功!\n");  
  }else{
    printf("你输入的信息有误,请退出选择重新输入哦!");
  }
}
 
//查看目前订票信息
void FlightDateShowOrder(Flight* p, Person* person)
{
    int i = -1;
    for (i = 0; i < sizeNumber; i++)
    {
        printf("航班编号:%d\n", i);
        printf("ID:%s\n", (p + i)->ID);
        printf("始发地:%s\n", (p + i)->takeOffPlace);
        printf("目的地:%s\n", (p + i)->Destination);
        printf("起飞时间:%s\n", (p + i)->dateTime);
        printf("机票价格:%2f\n", (p + i)->Price);
        printf("剩余机票:%d\n", ((p + i)->MaxTicketNum - (p + i)->buyTicketNum));
        printf("买票人信息:"); PrintPassengers(p,person, i);
    }
}
void PrintPassengers(Flight* p, Person* person,int i)
{
    int ticket_num = 0;
    int j = 0;
    for (j = 0; j < passengerSizeNumber; j++)
    {
        if ((person + j)->AirFlight_Num == i)
        {
            printf("%s ,", (person + j)->person_name);
            ticket_num++;
        }
    }
    printf("\n\n");
}
 
//候补名单初始化
void InitPassengerNoTicket(Person** person_noticket)
{
    assert(person_noticket);
    *person_noticket = (Person*)malloc(sizeof(Person)*PERSONNOTICKET_MAX);
    if (NULL == *person_noticket)
    {
        printf("开辟空间失败!\n");
        return;
    }
}
 
//查看候补名单
void CheckPersonNoTicket(Flight* p, Person* person_noticket)
{
    int i = 0;
    printf("候补名单:\n\n");
    if (0 == _personnoticketsizeNumber)
    {
        printf("候补名单为空!\n\n");
        return;
    }
    for (i = 0; i < _personnoticketsizeNumber; i++)
    {
        printf("姓名:%s\n", (person_noticket + i)->person_name);
        printf("所需要航班编号:%d\n", (person_noticket + i)->AirFlight_Num);
        printf("航班ID:%s\n", (p + ((person_noticket + i)->AirFlight_Num))->ID);
        printf("始发地:%s\n", ((p + ((person_noticket + i)->AirFlight_Num))->takeOffPlace));
        printf("目的地:%s\n", (p + ((person_noticket + i)->AirFlight_Num))->Destination);
    }
}
//7、航班信息存盘 
void FlightSaveFile(Flight* p)
{
  int n=0;
  FILE *fp = NULL;
  char fileName[100];
  printf("请输入文件名:");
  //scanf("%s",&fileName);
  //scanf(fileName);为什么用这个输入就不行? 
  cin>>fileName;
  fp = fopen(fileName , "wb" ); 
  fprintf(fp,"五邑机场航班信息\n航班号,出发地,目的地,起飞时间,落地时间,飞机机型,剩余座位数,价格\n");
  
    for(int i=0;i<sizeNumber;i++)
    {     
      fprintf(fp,"%s,%s,%s,%s,%s,%s,%d,%.2f;\n",(p+i)->ID,
                 (p + i)->takeOffPlace,
                 (p + i)->Destination,
           (p + i)->dateTime,
           (p + i)->dateTime1,
           (p + i)->flightStyle,
           ((p + i)->MaxTicketNum - (p + i)->buyTicketNum),
           (p + i)->Price);
        n++;
  }
  if(n>0){
    printf("航班信息存盘成功!"); 
  }else{
    printf("航班信息存盘失败!");
  }
  fclose(fp);
 }
 
 //8、从文件调入航班信息
void FlightFindFile(void)
{
   FILE *fp = NULL;
   char ch;
  char fileName[100];
  printf("请输入文件名:");
  //scanf("%s",&fileName);
  cin>>fileName;
  fp = fopen(fileName , "r" ); 
  while((ch=fgetc(fp))!=EOF)
  cout<<ch;
  while(!(feof(fp)))
  {
    cout<<fgetc(fp);
  }
 } 
 
//主函数
int main()
{
    Flight* p=NULL;
    Person* person=NULL;
    Person* person_noticket = NULL;
    InitPassengerNoTicket(&person_noticket);
    initFlight(&p);
    InitPassenger(&person);
    while (1)
    {
        home(p, person, person_noticket);
    }
    system("pause");
    return 0;
}

代码执行局部情况:

菜单页面展示

image.png

image.png

局部具体功能执行:

添加航班信息

image.png

航班信息列表:

image.png

相关文章
|
5月前
|
SQL JSON 程序员
程序员必知:元旦三天假期,实现一个电商退单管理系统【三】
程序员必知:元旦三天假期,实现一个电商退单管理系统【三】
17 0
|
6月前
|
JavaScript Java 关系型数据库
公寓报修|公寓报修管理系统|基于springboot公寓报修管理系统设计与实现(源码+数据库+文档)
公寓报修|公寓报修管理系统|基于springboot公寓报修管理系统设计与实现(源码+数据库+文档)
62 2
|
5月前
|
JavaScript Java 测试技术
基于小程序的民宿预订系统(2024全新定制)
基于小程序的民宿预订系统(2024全新定制)
36 0
|
6月前
|
小程序 安全 JavaScript
超市售货|超市售货管理小程序|基于微信小程序的超市售货管理系统设计与实现(源码+数据库+文档)
超市售货|超市售货管理小程序|基于微信小程序的超市售货管理系统设计与实现(源码+数据库+文档)
72 0
|
存储
实时入库不用愁
海量数据时代,如何实现数据实时入库与实时查询?GaussDB(DWS) HStore表为数据高效存储与查询提供了哪些助力?
50 1
|
6月前
|
存储 前端开发 JavaScript
开题报告-图书馆座位管理系统的设计与实现
开题报告-图书馆座位管理系统的设计与实现
303 1
|
6月前
|
前端开发 JavaScript Java
鲜花线上销售管理系统的设计与实现
鲜花线上销售管理系统的设计与实现
277 0
|
BI C# 数据库
C# 机房重构——周结账单、报表设计
C# 机房重构——周结账单、报表设计
103 1
|
BI 测试技术 数据库连接
基于C#的药房销售管理系统设计开题报告
基于C#的药房销售管理系统设计开题报告
147 0
|
JSON 关系型数据库 数据库
下一篇
无影云桌面