【功能需求】
程序启动后显示主菜单,包括下面的选项:
1. 显示航班列表
2. 增加航班
3. 删除航班
4. 航班订票
5. 航班退票
6. 航班乘客显示
7. 航班存盘
8. 从文件调入航班信息
9. 退出
按下相应的数字键后进入各自的子功能,每个子功能执行完毕后,返回并
显示主菜单
【功能说明】
1. 显示航班列表:在屏幕显示已登记的航班总数,及各航班的信息,包括航班号,出发地和目的地,起飞时间,落地时间,所用机型,座位数,价格。(假设航班为每日一次)
2. 增加航班:输入航班信息,包括航班号,出发地和目的地,起飞时间,落地时间,所用机型,座位数,价格。
3. 删除航班:输入要删除的航班号,删除该航班信息。
4. 航班订票:输入航班名,日期,乘客姓名,身份证号。
5. 航班退票:输入航班名,日期,身份证号,删除乘客信息。
6. 航班乘客显示:输入航班号和日期,显示该航班的座位号及乘客姓名,以及空余座位数。
7. 航班存盘:输入文件名,将航班信息存入文件。
8. 从文件调入:输入文件名,读取文件将数据调入,重新生成航班信息
9. 退出:退出程序,返回操作系统
课程设计成绩评定的依据有设计文档资料、具体实现设计方案的程序,采用百分制,不设平时分。
优(90分以上):必须要有一定的创意,有自己独特的算法。按要求完成课题的
全部功能,有完整的符合标准的文档,文档有条理、文笔通顺,
格式正确,其中有总体设计思想的论述,有正确的流程图,程序
完全实现设计方案,设计方案先进,软件可靠性好;
最终实现代码:
#include
#include
#include
#include
#include
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; kdate);
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;iID,
(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<
菜单页面展示
局部具体功能执行:
添加航班信息
航班信息列表:
更多功能等你发现哦!听说点赞关注的都会幸运满满哦!