程序启动后显示主菜单,包括下面的选项:
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; }
代码执行局部情况:
菜单页面展示
局部具体功能执行:
添加航班信息
航班信息列表: