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

                            航班管理系统(国内航班)

 

【功能需求】

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

1. 显示航班列表

2. 增加航班

3. 删除航班

4. 航班订票

5. 航班退票

6. 航班乘客显示

7. 航班存盘

8. 从文件调入航班信息

9. 退出

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

  显示主菜单

【功能说明】

  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;
}

代码执行局部情况:

菜单页面展示

局部具体功能执行:
添加航班信息

 航班信息列表:

 更多功能等你发现哦!听说点赞关注的都会幸运满满哦!

  • 18
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序小勇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值