(完整版)数据结构课程设计-航空客运订票系统

合集下载

数据结构课程设计(航空客运订票系统)

数据结构课程设计(航空客运订票系统)

(贵州大学计算机科学与信息学院贡献)#include <iostream.h> #include <process.h> #include <string.h> #include <conio.h> #include <stdio.h> #include <iomanip.h> #define MAX 60 #define NULL 0typedef struct Customer {char Name[8];int Amount;char Rank;int IDinfor;struct Customer *Next; }Customer;/* 乘客信息*//* 姓名*//* 定票数*//* 舱位等级*//* 个人信息*//* 指向下一乘客结点*/typedef struct Flight{char Des_Name[10]; char Flight_No[6];char Plane_No[6]; int Week_Day;int Customer_Amount; int Free_Amount;int Price[3];Customer *CustName; Customer *ReplName; struct Flight *Next;}Flight,*PFlight;/* 航线信息*//* 终点站名*//* 航班号*//* 飞机号*//* 飞行周日*//* 乘员定额*//* 剩余票数*//* 舱位等级的价格*//* 该航班的已定票乘客名单*//* 该航班的候补乘客名单*/ /* 指示下一航线结点*/int Customer_Count=0; Flight *Head;Flight *p2;Customer *Custp1[MAX];/* 所有航线的定票乘客总数*//* 航线头指针*//* 航线结点指针*/各条航线乘客结点指针Customer *Replp1[MAX]; int IsEmpty=1; int IsReplace=1; Customer *prior; int shouldsave=0; /* 各条航线候补结点指针 *//* ------------- 询问是否继续的函数 ------- */ char Continue(){char answer; while(1){printf("\n\t 您是否想继续 (Y/N)?"); scanf("%s",&answer); system("cls"); if(answer=='y'||answer=='Y') return 'y'; else if(answer=='n'||answer=='N')return 'n'; elseprintf("\n\t 输入有误,请重新输入 !");} }/* -------------- 操作出错函数 --------- */ void ErrorMess(){printf("\n\t 对不起,您的操作有误 !"); getch();}/* ------------- 系统退出函数 ---------- */ int ExitSystem(){char answer;printf("\n\t 您是否想要退出系统 (Y/N)?"); scanf("%s",&answer); if(answer=='y'||answer=='Y') return 1; else return 0;/* 是否有定票乘客 */ /* 是否有候补乘客 *//* 满足要求的定票乘客的前结点,以作删除操作/* ------------- 航线查找函数 -------- *//*Find_Line() 为重载函数*/int Find_Line(PFlight L,char *key)/* 核对航线是否唯一*/{int flag=0; /* 该标志位0 表示未找到相关信息,反之即找到,以下标志位同理*/Flight *p1;p1=L; /* 赋航线首地址*/if(p1==p2) /* 首航线不作比较*/return flag;while(p1!=p2&&p1!=NULL) /* 本航班号不纳入比较范围,否则会一直提示航线不唯一*/{ if(strcmp(p1->Flight_No,key)==0){flag=1;break;} p1=p1->Next;/* 指向下一航班结点*/}return flag;}int Find_Line(PFlight L,char *key,PFlight &p2,int &Flight_No)/* 航线查找函数*/ {int flag=0; /* 该标志位0 表示未找到相关信息,反之即找到*/Flight *p1;p1=L; /* 赋航线首结点*/ while(p1!=NULL){ if(strcmp(p1->Flight_No,key)==0)/* 不包括当前航线*/ {flag=1;p2=p1;break;}p1=p1->Next; /* 指向下一航班结点*/ if(p1!=NULL) /* 遇结束符不作统计范围*/ Flight_No++;}return flag;}/* ------------- 航班查找函数---------- */void Line_search(){Flight *p1;p1=Head;char Desname[50];// 查询终点站航班关键字if(Head==NULL){printf("\n\t 没有到达您想要的终点站的航班!");getch();return;}printf("\n\t 请输入终点站名:");scanf("%s",Desname);printf("\n\t 您所查询的航班的信息:\n");printf("\n _________________________________________________________________ \n");while(p1!=NULL){if(strcmp(p1->Des_Name,Desname)==0){printf("Des_Name Flight_No Plane_No Week_Day Cust_Num 1_PriceFree_Num 2_Price 3_Price\n");printf("\n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Flight_No,p1->Plane_No,p1->Week_Day,p1->Customer_Amount,p1->Free_Amount,p1->Price[0],p1->Price[1],p1->Price[2])J} p1=p1->Next;}printf("\n ___________________________________________________________________ \n");Continue();}/* ---------------- 航线添加函数-------- */void Line_Add(){Flight *p1; /* 建立临时航线结点*/ while(1){if(Head==NULL)/* 航线为空*/{ p1=p2=new Flight; /* 建立首个航线*/ Head=p2;}else{ p1=new Flight; /* 建立航线结点*/p2->Next=p1; /* 前一航线结点指向当前航班结点*/ p2=p1; /* 保留当前航班结点地址*/}printf("\n\t 添加新的航线!\n");printf("\n\t 请输入终点站名:");scanf("%s",&p2->Des_Name);while(1) /* 数据合法性检验*/{ printf("\n\t 请输入唯一的航班号:"); scanf("%s",&p2->Flight_No);if(Find_Line(Head,p2->Flight_No)) /* 存在航班号*/ printf("\n\t 航班号已经存在!\n");else break;}printf("\n\t 请输入飞机号:"); scanf("%s",&p2->Plane_No);while(1){printf("\n\t 请输入航班日期(请输入1—7 ):"); scanf("%d",&p2->Week_Day);if(p2->Week_Day<1||p2->Week_Day>7)printf("\n\t 输入日期有误,请重新输入!\n"); elsebreak;}printf("\n\t 请输入座位数量:"); scanf("%d",&p2->Customer_Amount);printf("\n\t 请输入头等舱的价钱:");scanf("%d",&p2->Price[0]);printf("\n\t 请输入二等舱的价钱:");scanf("%d",&p2->Price[1]);printf("\n\t 请输入三等舱的价钱 :"); scanf("%d",&p2->Price[2]);p2->Free_Amount=p2->Customer_Amount; p2->CustName=NULL; p2->ReplName=NULL; shouldsave=1; if(Continue()=='n'){p2->Next=NULL; return;} } }/* ----------- 航线是否为空函数 ------- */ int Empty_Flight(){if(Head==NULL){system("cls");printf("\n\t 对不起,航线不存在,按任意键返回 !"); getch(); return 1;}else return 0;}/* ----------- 航线查看函数 ---------- */ void Line_See(){system("cls"); Flight *p1; p1=Head;if(Empty_Flight()) /* 航班线为空 */return;printf("\n\n\t 航班信息 :\n");printf("\n ___________________________________________________________________ ______ \n");printf("Des_Name Flight_No Plane_No Week_Day Cust_Num Free_Num 1_Price 2_Price 3_Price\n"); while(p1!=NULL){printf("\n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Fl ight_No,p1->Plane_No,p1->Week_Day,/* 剩余票数与乘员定额相同 *//* 该航线定票乘客头指针为空 */ /* 初始候补名单为空 *//* 航线的下一结点为空 */p1->Customer_Amount,p1->Free_Amount,p1->Price[0],p1->Price[1],p1->Pric e[2]);p1=p1->Next;}printf("\n ___________________________________________________________________ ________ \n");printf("\n\t 按任意键返回!\n");getch();}/* ----------- 航线管理菜单-------- */void LinemanageMenu(){char c;system("cls");while(1){printf("\n\t\t 航线管理菜单:");printf("\n _______________ \n\n");printf("\t1. 添加新的航线\n");printf("\t2. 查询航线\n");printf("\t3. 查看航线\n");返回主菜单\n");printf("\t4.printf("\n ________________ \n");printf("\t 请选择您想要的服务:");scanf("%s",&c);switch(c){case '1':Line_Add();break;case '2':Line_search();break;case '3':Line_See();break;}case '4':return; }}}/* -------------- 订票办理函数 --------- */ void bookingMenu(){int Ticket_Count,IDinfor,i,flag=0;int Flight_No=0; /* 记录满足条件的航线的定票结点 */ Flight *p1; /* 记下满足条件的航线结点地址 *//* 临时性定票乘员结点 */ /* 临时性候补乘员结点 */ /* 用户输入的航班数据 *//* 候补乘客标志位 *//* 是否执行候补操作标志位 */ /* 航班线为空 */return; while(1) {printf("\n\t 现在您可以订票 !");flag=0; /* 标志位清零以重新作出判断 */ Flight_No=0; tag=0;printf("\n\t 请输入航线号 :"); scanf("%s",&answer);以下操作 */{while(1) /* 数据合法性检验 */ {printf("\n\t 请输入您想要订购的票的数量 :"); scanf("%d",&Ticket_Count); if(Ticket_Count==0){printf ("\n\t 请再次输入飞机号 :\n"); getch();Customer *p2; Customer *p3; char answer[7]; char temp; char c; int tag=0; int IsRepl=0;if(Empty_Flight()) if(Find_Line(Head,answer,p1,Flight_No)) /* 调用航线查找函数, 若存在则进行else break;}p1->CustName=Custp1[Flight_No]; }else /* 建立该航线的后续乘客结点 */{p2=new Customer; Custp1[Flight_No]->Next=p2; Custp1[Flight_No]=p2;}IsEmpty=0; /* 定票乘员不为空 */ Custp1[Flight_No]->Amount=Ticket_Count; /*订票数 */ IDinfor=p1->Customer_Amount-p1->Free_Amount+1; /* 算出 座位 号*/Custp1[Flight_No]->IDinfor=IDinfor; /* 赋座位号 */ p1->Free_Amount-=Ticket_Count; /* 减去定票数 */printf("\n\t 请输入您的姓名 :"); scanf("%s",&Custp1[Flight_No]->Name); while(1) /* 数据合法性检验 */ {printf("\n\t 请输入舱位等级 :"); scanf("%s",&Custp1[Flight_No]->Rank);if(!(Custp1[Flight_No]->Rank>='1'&&Custp1[Flight_No]->Rank<='3')){printf("\n\t 输入有误,请重新输入 !"); getch();}elsebreak;}printf("\n\t 请输入您的 ID 信息 :"); scanf("%d",&Custp1[Flight_No]->IDinfor);if(Ticket_Count<10) /* 为显示规整,作相应处理 */ printf("\n\t"); elseprintf("\n\t");printf("\n\t 恭喜您订票成功! \n"); for(i=1;i<=Ticket_Count;i++) /* 打印座位号 */{printf("\n\t 您所预定的座位号是 %d",IDinfor++); if(i%10==0) printf("\n\t");if(p1->Free_Amount>=Ticket_Count){Customer_Count++; flag=1; IsRepl=1;if(p1->CustName==NULL)*/{Custp1[Flight_No]=p2=new点*//* 定票乘客总数增 1*/ /* 表明进入了订票实际操作 */ /* 定票量满足,无需进入候补操作 *//* 首个定票乘客, 并记录相Customer; /* 建立该航线的首位乘客结}printf("\n");}/* 满足定票数*/else if(p1->Free_Amount==0){printf("\n\t 对不起,票已售完!\n");IsRepl=0;}else{printf("\n\t 对不起,当前没有多余的票!\n");IsRepl=0;}if(!IsRepl){printf("\n\t 您是否想成为候补乘客(Y/N)?");scanf("%s",&temp);if(temp=='y'||temp=='Y')/* 以下为候补操作*/{if(p1->ReplName==NULL){Replp1[Flight_No]=p3=new Customer; /* 建立该航线的首位候补乘客结点*/p1->ReplName=Replp1[Flight_No];}else{p3=new Customer;Replp1[Flight_No]->Next=p3;Replp1[Flight_No]=p3;}IsReplace=0; /* 候补乘客不为空*/tag=1; /* 已选择列入候补乘客名单*/Replp1[Flight_No]->Amount=Ticket_Count;printf("\n\t 请输入您的姓名:");scanf("%s",&Replp1[Flight_No]->Name);Replp1[Flight_No]->IDinfor=IDinfor; /* 候补乘客的座位*/Replp1[Flight_No]->Amount=Ticket_Count; /* 候补乘客的订票数*/while(1) /* 数据合法性检验*/{printf("\n\t 请输入舱位等级:"); scanf("%s",&Replp1[Flight_No]->Rank);printf("\n\t 请输入您的ID 信息:"); scanf("%d",&Replp1[Flight_No]->IDinfor);if(!(Replp1[Flight_No]->Rank>='1'&&Replp1[Flight_No]->Rank<='3')){printf("\n\t 输入有误,请重新输入.");getch();}elsebreak;}printf("\n\t 没有剩余座位!\n");/* 候补乘客无座提示*/shouldsave=1;}/* 进入候补名单*/}/* 票数满足*/}/* 航线存在*/elseprintf("\n\t 对不起,航线不存在!\n");/* 航线不存在*/ if(flag) /* 此处不作处理,则会地址溢出*/Custp1[Flight_No]->Next=NULL;/* 末位定票乘客的指针置空*/ if(tag){Replp1[Flight_No]->Next=NULL;/* 末位候补乘客的指针置空*/printf("\n\t 您已经成功排入候补订票队列中!\n");}printf("\n\t 是否退出菜单?:(y/n)");scanf("%s",&c);if(c=='y')return;}/*while*/}/* ---------------- 订票乘客信息----------- */void Display_Reserve(){system("cls");Flight *p1;Customer *p2;p1=Head;if(Empty_Flight())return;printf("\n\t 订票乘客信息");if(IsEmpty){printf("\n\t 对不起,没有订票乘客信息!\n"); getch();return;}printf("\n _______________________________________________________________ \n");printf("Name Flight_No Plane_No Tic_Amount Des_Name Rank_NoID\n");while(p1!=NULL){ if(p1->CustName!=NULL){ p2=p1->CustName; while(p2!=NULL){printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",p2->Name,p1->Flight_No,p1->Plane_No,p2->Amount,p1->Des_Name,p2->Rank,p2->IDinfor);if(p1->Free_Amount>=1) printf("\n\n\t 还有多余的票!\n");elseprintf("\n\n\t 票已售完!\n"); p2=p2->Next;} } p1=p1->Next;printf("\n\n ________________________________________________________________ \n");}printf("\n\t 按任意键返回!"); getch();return;/* ---------------- 候补乘客信息----------- */void Display_Replace(){system("cls");Flight *p1;Customer *p2;p1=Head;if(Empty_Flight())return;printf("\n\t 候补乘客信息!");if(IsReplace){printf("\n\t 对不起,没有候补乘客!\n");getch();return;}printf("\n ________________________________________________________________ \n");printf("Name Flight_No Plane_No Tic_Amount Des_Name Rank_NoID\n");while(p1!=NULL){if(p1->ReplName!=NULL){p2=p1->ReplName;while(p2!=NULL){printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",p2->Name,p1->Flight_No,p1->Plane_No,p2->Amount,p1->Des_Name,p2->Rank,p2->IDinfor);if( p1->Free_Amount>=1)printf("\n\t 还有多余的票!\n");elseprintf("\n\t 票已售完!\n");p2=p2->Next;}p2=p1->CustName; /* 指向该航线的乘客名单的首地址 */}p1=p1->Next;} printf("\n\n __________________________________________________________________ _________ \n");printf("\n\t 按任意键返回 !");getch();return;}/* ---------------- 退票办理函数 ----------- */printf ("\n\t 现在开始进行退票手续 ");if(IsEmpty){printf("\n\t 对不起,乘客不存在 !"); getch();return;}while(1){flag=0;tag=0;Flight_No=0;printf("\n\t 请输入航线 :");scanf("%s",&answer); if(Find_Line(Head,answer,p1,Flight_No)) {void RefundticketMenu(){int Flight_No=0,flag=0;Flight *p1; Customer *p2,*p4; Customer *p3,*p5; char answer[7],name[7]; int tag=0; */ int IDinfor;if(Empty_Flight()) return; /* 记录满足条件的航线的定票结点 /* 记下满足条件的航线结点地址/* 临时性定票乘员结点/* 临时性候补乘员结点 */*/ */ */*//* 若第二乘客满足条件,则它的首地址会发生冲突,注意此处/* 记录座位号 *//* 航班线为空*//* 航线存在 */printf("\n\t 请输入您的姓名 :"); scanf("%s",&name);if(p2==NULL) /* 该航线无定票乘客 {printf("\n\t 对不起,乘客不存在 !.");if(Continue()=='n')/* 是否继续操作 */ return;} elsewhile(p2!=NULL)/* 查找有无此乘客名 {if(strcmp(p2->Name,name)==0)/* { if(p2==p1->CustName) { prior=p1->CustName; /*IDinfor=p2->IDinfor; flag=1;break; }}else if(p2->Next!=NULL)/* 记录满足航线的的前结点地址 */{ if(strcmp(p2->Next->Name,name)==0){tag=1; /* 特别注意此处 */prior=p2; /* 记录满足定乘客的前一地址,以作删除操作 */IDinfor=p2->Next->IDinfor;flag=1;break;}}p2=p2->Next; /* 指向下一乘客结点 */ shouldsave=1;}/*while */ if(!flag)printf("\n\t 对不起,乘客不存在 !\n");}/* 存在该航线 */elseprintf("\n\t 对不起,航线不存在 !\n"); if(flag){if(prior==p1->CustName&&!tag) /* 首结点满足条件且一个乘客,则该航线定票乘客置空 */*/*/此外括号不能省略,否则功能会转变 *//* 若为首位乘客满足 */记录指针{if(prior->Next==NULL) /* 仅一乘客,头指针置空*/{ p1->Free_Amount+=prior->Amount; p1->CustName=NULL;}else{ p1->Free_Amount+=prior->Next->Amount; p1->CustName=prior->Next; /* 指向下一乘客结点*/}}else{p1->Free_Amount+=prior->Next->Amount; prior->Next=prior->Next->Next; /* 删除操作*/}Customer_Count--;if(Customer_Count==0)IsEmpty=1;shouldsave=1;}if(flag)/* 存在退票操作*/{p3=p1->ReplName;while(p3!=NULL){if(p3->Amount<=p1->Free_Amount)/* 候补乘客的定票数小于或等于剩余票数*/{printf("\n\t 候补乘客已经存在!\n"); p4=Custp1[Flight_No]->Next=newCustomer; p4->Next=NULL;IsEmpty=0; if(p1->CustName==NULL) p1->CustName=p4;strcpy(p4->Name,p3->Name); p4->Rank=p3->Rank; p4->Amount=p3->Amount;p4->IDinfor=IDinfor; p1->Free_Amount-=p3->Amount; /* 减去相应的票数*/Customer_Count++;if(p3->Next==NULL) /* 无候补乘客*/IsReplace=1;if(p1->ReplName==p3){if(p1->ReplName->Next==NULL) p1->ReplName=NULL;/* 删除*/ elsep1->ReplName=p3->Next;}elsep5->Next=p3->Next->Next;break;}if(p3->Next!=NULL)if(p3->Next->Amount<=p1->Free_Amount)p5=p3;p3=p3->Next; /* 指向下一候补乘客结点*/ shouldsave=1;}printf("\n\t 退票成功!");getch();return;}/* 存在此乘客*/shouldsave=1;if(Continue()=='n')return;}/*while*/}/* -------------- 乘客管理子菜单函数---------- */void CustomermagMenu(){char c;system("cls");while(1){printf("\n\t\t 乘客管理菜单:\n");printf("\n ____________________________________________________________________ _______ \n\n");printf("\t1. 乘客信息\n");printf("\t2. 候补乘客信息\n");printf("\t3. 返回主菜单 \n");printf("\n ____________________________________________________________________ _______ \n");printf("\t 请选择您想要的服务 :"); scanf("%s",&c);switch(c){case '1':Display_Reserve();break;case '2':Display_Replace();break;case '3':return; default:ErrorMess();}}}/* ------ 下面为主程序画面函数 ---- */void main(){system("color 1f"); // 屏幕颜色设定 system("mode con: cols=78 lines=35");Flight *p1;p1=Head;char c;do{system("cls");printf("\n\t\t 航空客运订票系统主菜单 \n");*************************\n");printf(" 请选择您想要的服务 :"); scanf("%s",&c);switch(c){case '1':LinemanageMenu();break; case'2':bookingMenu();break; case '3':RefundticketMenu();break;printf("\t 1. 航 线 管 理 菜 单 \n");printf("\t 2. 订 票 办 理 菜 单 \n");printf("\t 3. 退 票 办 理 菜 单 \n");printf("\t 4. 乘 客 管 理 菜 单 \n");printf("\t 5. 退 出 系 统\ n");printf("\n*************************谢 谢 使 用 航空客运订票系统!printf("\n******************************************************************************\n");/* 航线管理 *//* 订票办理 *//* 退票办理 */case '4':CustomermagMenu();break;/* 乘客管理*/ case '5':exit(0);default:break;}}while(c!='5');}。

航空客运订票系统课程设计(数据结构)解剖

航空客运订票系统课程设计(数据结构)解剖

XXXXXXXXX计算机技术系项目名称:航空客运订票系统学生姓名: XX学号:班级: 10801 指导教师:年月日目录1.系统需求分析 (3)1.1问题分析 (3)1.2任务意义 (3)2. 数据结构设计及用法说明 (4)3. 详细设计和编码 (5)3.1.主菜单 (5)3.2.录入航空信息 (5)3.3输出航空信息 (6)3.4订票 (7)3.5退票 (7)4. 实验结果 (9)4.1菜单函数的功能测试 (9)4.2录入函数的功能测试 (9)4.3查询航班函数的功能测试 (11)4.4订票功能地测试 (12)致谢 (17)参考文献 (18)附录:源程序清单 (19)1.系统需求分析1.1 问题分析这次的课程设计是设计一个航空系统。

由于存储的数量较大且不固定,因此选择用链表来保存基本信息:终点站名、航班号、飞机号、飞行时间、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。

由于在航线这个主链表上,每个航班上的已经订票名单这个链表和等候替补的名单这个链表队列,所以建立一个十字交叉链表,在纵行上开辟一个链表存储所有航班的基本信息,再在各个航班节点横向展开一个链表和一个链表队列,展开的链表存储已经订票的客户名单,展开的链表队列存储等候替补的客户名单。

同时,由于预约人数无法预计,队列也应以链表作存储结构。

系统主要实现的操作和功能是:添加航线、查询航线、订票功能、退票功能。

要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。

1.2 任务意义飞机场每天要接受大量的订票退票服务,对于这些数量巨大的数据,需要一个专门的软件来进行管理和操作。

软件至少需要具备的基本功能包括:接受订票,处理退票,查询航班信息等等。

面对这些实际问题,航空客运系统的制作无疑要全面的考察一个学生的知识及能力。

数据结构课程设计(航空客运订票系统)

数据结构课程设计(航空客运订票系统)

(贵州大学计算机科学与信息学院贡献)#include <iostream.h>#include <process.h>#include <string.h>#include <conio.h>#include <stdio.h>#include <iomanip.h>#define MAX 60#define NULL 0typedef struct Customer /*乘客信息*/{char Name[8]; /*姓名*/int Amount; /*定票数*/char Rank; /*舱位等级*/int IDinfor; /*个人信息*/struct Customer *Next; /*指向下一乘客结点*/}Customer;typedef struct Flight /*航线信息*/{char Des_Name[10]; /*终点站名*/char Flight_No[6]; /*航班号*/char Plane_No[6]; /*飞机号*/int Week_Day; /*飞行周日*/int Customer_Amount; /*乘员定额*/int Free_Amount; /*剩余票数*/int Price[3]; /*舱位等级的价格*/Customer *CustName; /*该航班的已定票乘客名单*/ Customer *ReplName; /*该航班的候补乘客名单*/ struct Flight *Next; /*指示下一航线结点*/}Flight,*PFlight;int Customer_Count=0; /*所有航线的定票乘客总数*/ Flight *Head; /*航线头指针*/Flight *p2; /*航线结点指针*/Customer *Custp1[MAX]; /*各条航线乘客结点指针*/Customer *Replp1[MAX]; /*各条航线候补结点指针*/int IsEmpty=1; /*是否有定票乘客*/int IsReplace=1; /*是否有候补乘客*/Customer *prior; /*满足要求的定票乘客的前结点,以作删除操作*/ int shouldsave=0;/*-------------询问是否继续的函数-------------*/char Continue(){char answer;while(1){printf("\n\t 您是否想继续(Y/N)?");scanf("%s",&answer);system("cls");if(answer=='y'||answer=='Y')return 'y';else if(answer=='n'||answer=='N')return 'n';elseprintf("\n\t输入有误,请重新输入!");}}/*---------------操作出错函数---------------*/void ErrorMess(){printf("\n\t对不起,您的操作有误!");getch();}/*--------------系统退出函数---------------*/int ExitSystem(){char answer;printf("\n\t 您是否想要退出系统(Y/N)?");scanf("%s",&answer);if(answer=='y'||answer=='Y')return 1;elsereturn 0;/*--------------航线查找函数-------------*//*Find_Line()为重载函数*/int Find_Line(PFlight L,char *key)/*核对航线是否唯一*/{int flag=0; /*该标志位0表示未找到相关信息,反之即找到,以下标志位同理*/ Flight *p1;p1=L; /*赋航线首地址*/if(p1==p2) /*首航线不作比较*/return flag;while(p1!=p2&&p1!=NULL) /*本航班号不纳入比较范围,否则会一直提示航线不唯一*/{if(strcmp(p1->Flight_No,key)==0){flag=1;break;}p1=p1->Next;/*指向下一航班结点*/}return flag;}int Find_Line(PFlight L,char *key,PFlight &p2,int &Flight_No)/*航线查找函数*/{int flag=0; /*该标志位0表示未找到相关信息,反之即找到*/Flight *p1;p1=L; /*赋航线首结点*/while(p1!=NULL){if(strcmp(p1->Flight_No,key)==0)/*不包括当前航线*/{flag=1;p2=p1;break;}p1=p1->Next; /*指向下一航班结点*/if(p1!=NULL) /*遇结束符不作统计范围*/Flight_No++;}return flag;}/*---------------航班查找函数---------------*/void Line_search(){Flight *p1;p1=Head;char Desname[50];//查询终点站航班关键字if(Head==NULL){printf("\n\t没有到达您想要的终点站的航班!");getch();return;}printf("\n\t请输入终点站名:");scanf("%s",Desname);printf("\n\t您所查询的航班的信息:\n");printf("\n_______________________________________________________________________ ______\n");while(p1!=NULL){if(strcmp(p1->Des_Name,Desname)==0){printf("Des_Name Flight_No Plane_No Week_Day Cust_Num Free_Num 1_Price 2_Price 3_Price\n");printf("\n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Flight_No,p1->P lane_No,p1->Week_Day,p1->Customer_Amount,p1->Free_Amount,p1->Price[0],p1->Price[1],p1->Price[2]);}p1=p1->Next;}printf("\n_______________________________________________________________________ _______\n");Continue();}/*-----------------航线添加函数-------------*/void Line_Add()Flight *p1; /*建立临时航线结点*/while(1){if(Head==NULL)/*航线为空*/{p1=p2=new Flight; /*建立首个航线*/Head=p2;}else{p1=new Flight; /*建立航线结点*/p2->Next=p1; /*前一航线结点指向当前航班结点*/p2=p1; /*保留当前航班结点地址*/}printf("\n\t添加新的航线!\n");printf("\n\t请输入终点站名:");scanf("%s",&p2->Des_Name);while(1) /*数据合法性检验*/{printf("\n\t请输入唯一的航班号:");scanf("%s",&p2->Flight_No);if(Find_Line(Head,p2->Flight_No)) /*存在航班号*/printf("\n\t航班号已经存在!\n");elsebreak;}printf("\n\t请输入飞机号:");scanf("%s",&p2->Plane_No);while(1){printf("\n\t请输入航班日期(请输入1—7):");scanf("%d",&p2->Week_Day);if(p2->Week_Day<1||p2->Week_Day>7)printf("\n\t输入日期有误,请重新输入!\n");elsebreak;}printf("\n\t请输入座位数量:");scanf("%d",&p2->Customer_Amount);printf("\n\t请输入头等舱的价钱:");scanf("%d",&p2->Price[0]);printf("\n\t请输入二等舱的价钱:");scanf("%d",&p2->Price[1]);printf("\n\t请输入三等舱的价钱:");scanf("%d",&p2->Price[2]);p2->Free_Amount=p2->Customer_Amount; /*剩余票数与乘员定额相同*/p2->CustName=NULL; /*该航线定票乘客头指针为空*/p2->ReplName=NULL; /*初始候补名单为空*/shouldsave=1;if(Continue()=='n'){p2->Next=NULL; /*航线的下一结点为空*/return;}}}/*------------航线是否为空函数-------------*/int Empty_Flight(){if(Head==NULL){system("cls");printf("\n\t对不起,航线不存在,按任意键返回!");getch();return 1;}elsereturn 0;}/*------------航线查看函数-----------------*/void Line_See(){system("cls");Flight *p1;p1=Head;if(Empty_Flight()) /*航班线为空*/return;printf("\n\n\t航班信息:\n");printf("\n_______________________________________________________________________ _____\n");printf("Des_Name Flight_No Plane_No Week_Day Cust_Num Free_Num 1_Price 2_Price3_Price\n");while(p1!=NULL){printf("\n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Flight_No,p1->P lane_No,p1->Week_Day,p1->Customer_Amount,p1->Free_Amount,p1->Price[0],p1->Price[1],p1->Price[2]);p1=p1->Next;}printf("\n_______________________________________________________________________ ______\n");printf("\n\t按任意键返回!\n");getch();}/*-------------航线管理菜单------------*/void LinemanageMenu(){char c;system("cls");while(1){printf("\n\t\t航线管理菜单:");printf("\n_______________________________________________________________________ ______\n\n");printf("\t1.添加新的航线\n");printf("\t2.查询航线\n");printf("\t3.查看航线\n");printf("\t4.返回主菜单\n");printf("\n_______________________________________________________________________ _______\n");printf("\t请选择您想要的服务:");scanf("%s",&c);switch(c){case '1':Line_Add();break;case '2':Line_search();break;case '3':Line_See();break;case '4':return;}}}/*---------------订票办理函数---------------*/void bookingMenu(){int Ticket_Count,IDinfor,i,flag=0;int Flight_No=0; /*记录满足条件的航线的定票结点*/Flight *p1; /*记下满足条件的航线结点地址*/Customer *p2; /*临时性定票乘员结点*/Customer *p3; /*临时性候补乘员结点*/char answer[7]; /*用户输入的航班数据*/char temp;char c;int tag=0; /*候补乘客标志位*/int IsRepl=0; /*是否执行候补操作标志位*/if(Empty_Flight()) /*航班线为空*/return;while(1){printf("\n\t现在您可以订票!");flag=0; /*标志位清零以重新作出判断*/Flight_No=0;tag=0;printf("\n\t请输入航线号:");scanf("%s",&answer);if(Find_Line(Head,answer,p1,Flight_No)) /*调用航线查找函数,若存在则进行以下操作*/{while(1) /*数据合法性检验*/{printf("\n\t请输入您想要订购的票的数量:");scanf("%d",&Ticket_Count);if(Ticket_Count==0){printf("\n\t请再次输入飞机号:\n");getch();}elsebreak;}if(p1->Free_Amount>=Ticket_Count){Customer_Count++; /*定票乘客总数增1*/flag=1; /*表明进入了订票实际操作*/IsRepl=1; /*定票量满足,无需进入候补操作*/if(p1->CustName==NULL) /*首个定票乘客,并记录相关属性*/ {Custp1[Flight_No]=p2=new Customer; /*建立该航线的首位乘客结点*/ p1->CustName=Custp1[Flight_No];}else /*建立该航线的后续乘客结点*/{p2=new Customer;Custp1[Flight_No]->Next=p2;Custp1[Flight_No]=p2;}IsEmpty=0; /*定票乘员不为空*/Custp1[Flight_No]->Amount=Ticket_Count; /*订票数*/IDinfor=p1->Customer_Amount-p1->Free_Amount+1; /*算出座位号*/Custp1[Flight_No]->IDinfor=IDinfor; /*赋座位号*/p1->Free_Amount-=Ticket_Count; /*减去定票数*/printf("\n\t请输入您的姓名:");scanf("%s",&Custp1[Flight_No]->Name);while(1) /*数据合法性检验*/{printf("\n\t请输入舱位等级:");scanf("%s",&Custp1[Flight_No]->Rank);if(!(Custp1[Flight_No]->Rank>='1'&&Custp1[Flight_No]->Rank<='3')){printf("\n\t输入有误,请重新输入!");getch();}elsebreak;}printf("\n\t请输入您的ID信息:");scanf("%d",&Custp1[Flight_No]->IDinfor);if(Ticket_Count<10) /*为显示规整,作相应处理*/printf("\n\t");elseprintf("\n\t");printf("\n\t恭喜您订票成功!\n");for(i=1;i<=Ticket_Count;i++) /*打印座位号*/{printf("\n\t您所预定的座位号是%d",IDinfor++);if(i%10==0)printf("\n\t");}printf("\n");}/*满足定票数*/else if(p1->Free_Amount==0){printf("\n\t对不起,票已售完!\n");IsRepl=0;}else{printf("\n\t对不起,当前没有多余的票!\n");IsRepl=0;}if(!IsRepl){printf("\n\t您是否想成为候补乘客(Y/N)?");scanf("%s",&temp);if(temp=='y'||temp=='Y')/*以下为候补操作*/{if(p1->ReplName==NULL){Replp1[Flight_No]=p3=new Customer; /*建立该航线的首位候补乘客结点*/p1->ReplName=Replp1[Flight_No];}else{p3=new Customer;Replp1[Flight_No]->Next=p3;Replp1[Flight_No]=p3;}IsReplace=0; /*候补乘客不为空*/tag=1; /*已选择列入候补乘客名单*/Replp1[Flight_No]->Amount=Ticket_Count;printf("\n\t请输入您的姓名:");scanf("%s",&Replp1[Flight_No]->Name);Replp1[Flight_No]->IDinfor=IDinfor; /*候补乘客的座位*/Replp1[Flight_No]->Amount=Ticket_Count; /*候补乘客的订票数*/while(1) /*数据合法性检验*/{printf("\n\t请输入舱位等级:");scanf("%s",&Replp1[Flight_No]->Rank);printf("\n\t请输入您的ID信息:");scanf("%d",&Replp1[Flight_No]->IDinfor);if(!(Replp1[Flight_No]->Rank>='1'&&Replp1[Flight_No]->Rank<='3')){printf("\n\t输入有误,请重新输入.");getch();}elsebreak;}printf("\n\t没有剩余座位!\n");/*候补乘客无座提示*/shouldsave=1;}/*进入候补名单*/}/*票数满足*/}/*航线存在*/elseprintf("\n\t对不起,航线不存在!\n");/*航线不存在*/if(flag) /*此处不作处理,则会地址溢出*/Custp1[Flight_No]->Next=NULL;/*末位定票乘客的指针置空*/ if(tag){Replp1[Flight_No]->Next=NULL;/*末位候补乘客的指针置空*/printf("\n\t您已经成功排入候补订票队列中!\n");}printf("\n\t是否退出菜单?:(y/n)");scanf("%s",&c);if(c=='y')return;}/*while*/}/*-----------------订票乘客信息-----------------*/void Display_Reserve(){system("cls");Flight *p1;Customer *p2;p1=Head;if(Empty_Flight())return;printf("\n\t订票乘客信息");if(IsEmpty){printf("\n\t对不起,没有订票乘客信息!\n");getch();return;}printf("\n_______________________________________________________________________ ______\n");printf("Name Flight_No Plane_No Tic_Amount Des_Name Rank_No ID\n");while(p1!=NULL){if(p1->CustName!=NULL){p2=p1->CustName;while(p2!=NULL){printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",p2->Name,p1->Flight_No,p1->Plane_No,p2->A mount,p1->Des_Name,p2->Rank,p2->IDinfor);if(p1->Free_Amount>=1)printf("\n\n\t还有多余的票!\n");elseprintf("\n\n\t票已售完!\n");p2=p2->Next;}}p1=p1->Next;printf("\n\n______________________________________________________________________ _______\n");}printf("\n\t按任意键返回!");getch();return;}/*-----------------候补乘客信息-----------------*/void Display_Replace(){system("cls");Flight *p1;Customer *p2;p1=Head;if(Empty_Flight())return;printf("\n\t候补乘客信息!");if(IsReplace){printf("\n\t对不起,没有候补乘客!\n");getch();return;}printf("\n_______________________________________________________________________ ______\n");printf("Name Flight_No Plane_No Tic_Amount Des_Name Rank_No ID\n");while(p1!=NULL){if(p1->ReplName!=NULL){p2=p1->ReplName;while(p2!=NULL){printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",p2->Name,p1->Flight_No,p1->Plane_No,p2->A mount,p1->Des_Name,p2->Rank,p2->IDinfor);if( p1->Free_Amount>=1)printf("\n\t还有多余的票!\n");elseprintf("\n\t票已售完!\n");p2=p2->Next;}}p1=p1->Next;}printf("\n\n______________________________________________________________________ _______\n");printf("\n\t按任意键返回!");getch();return;}/*-----------------退票办理函数-----------------*/void RefundticketMenu(){int Flight_No=0,flag=0; /*记录满足条件的航线的定票结点*/Flight *p1; /*记下满足条件的航线结点地址*/Customer *p2,*p4; /*临时性定票乘员结点*/Customer *p3,*p5; /*临时性候补乘员结点*/char answer[7],name[7]; /*用户输入的航班数据*/int tag=0; /*若第二乘客满足条件,则它的首地址会发生冲突,注意此处*/ int IDinfor; /*记录座位号*/if(Empty_Flight()) /*航班线为空*/return;printf("\n\t现在开始进行退票手续");if(IsEmpty){printf("\n\t对不起,乘客不存在!");getch();return;}while(1){flag=0;tag=0;Flight_No=0;printf("\n\t请输入航线:");scanf("%s",&answer);if(Find_Line(Head,answer,p1,Flight_No)) /*航线存在*/{p2=p1->CustName; /*指向该航线的乘客名单的首地址*/printf("\n\t请输入您的姓名:");scanf("%s",&name);if(p2==NULL) /*该航线无定票乘客*/{printf("\n\t对不起,乘客不存在!.");if(Continue()=='n')/*是否继续操作*/return;}elsewhile(p2!=NULL)/*查找有无此乘客名*/{if(strcmp(p2->Name,name)==0)/*此外括号不能省略,否则功能会转变*/{if(p2==p1->CustName) /*若为首位乘客满足*/{prior=p1->CustName; /*记录指针*/IDinfor=p2->IDinfor;flag=1;break;}}else if(p2->Next!=NULL)/*记录满足航线的的前结点地址*/{if(strcmp(p2->Next->Name,name)==0){tag=1; /*特别注意此处*/prior=p2; /*记录满足定乘客的前一地址,以作删除操作*/IDinfor=p2->Next->IDinfor;flag=1;break;}}p2=p2->Next; /*指向下一乘客结点*/shouldsave=1;}/*while */if(!flag)printf("\n\t对不起,乘客不存在!\n");}/*存在该航线*/elseprintf("\n\t对不起,航线不存在!\n");if(flag){if(prior==p1->CustName&&!tag) /*首结点满足条件且一个乘客,则该航线定票乘客置空*/{if(prior->Next==NULL) /*仅一乘客,头指针置空*/{p1->Free_Amount+=prior->Amount;p1->CustName=NULL;}else{p1->Free_Amount+=prior->Next->Amount;p1->CustName=prior->Next; /*指向下一乘客结点*/}}else{p1->Free_Amount+=prior->Next->Amount;prior->Next=prior->Next->Next; /*删除操作*/}Customer_Count--;if(Customer_Count==0)IsEmpty=1;shouldsave=1;}if(flag)/*存在退票操作*/{p3=p1->ReplName;while(p3!=NULL){if(p3->Amount<=p1->Free_Amount)/*候补乘客的定票数小于或等于剩余票数*/ {printf("\n\t候补乘客已经存在!\n");p4=Custp1[Flight_No]->Next=new Customer;p4->Next=NULL;IsEmpty=0;if(p1->CustName==NULL)p1->CustName=p4;strcpy(p4->Name,p3->Name);p4->Rank=p3->Rank;p4->Amount=p3->Amount;p4->IDinfor=IDinfor;p1->Free_Amount-=p3->Amount; /*减去相应的票数*/Customer_Count++;if(p3->Next==NULL) /*无候补乘客*/IsReplace=1;if(p1->ReplName==p3){if(p1->ReplName->Next==NULL)p1->ReplName=NULL;/*删除*/elsep1->ReplName=p3->Next;}elsep5->Next=p3->Next->Next;}if(p3->Next!=NULL)if(p3->Next->Amount<=p1->Free_Amount)p5=p3;p3=p3->Next; /*指向下一候补乘客结点*/shouldsave=1;}printf("\n\t退票成功!");getch();return;}/*存在此乘客*/shouldsave=1;if(Continue()=='n')return;}/*while*/}/*---------------乘客管理子菜单函数-----------------*/void CustomermagMenu(){char c;system("cls");while(1){printf("\n\t\t乘客管理菜单:\n");printf("\n_______________________________________________________________________ ______\n\n");printf("\t1.乘客信息\n");printf("\t2.候补乘客信息\n");printf("\t3.返回主菜单\n");printf("\n_______________________________________________________________________ ______\n");printf("\t请选择您想要的服务:");scanf("%s",&c);switch(c){case '1':Display_Reserve();break;case '2':Display_Replace();break;default:ErrorMess();}}}/*-------下面为主程序画面函数----------*/void main(){system("color 1f"); //屏幕颜色设定system("mode con: cols=78 lines=35");Flight *p1;p1=Head;char c;do{system("cls");printf("\n\t\t 航空客运订票系统主菜单\n");printf("\n*********************************************************************** *******\n");printf("\t 1.航线管理菜单\n");printf("\t 2.订票办理菜单\n");printf("\t 3.退票办理菜单\n");printf("\t 4.乘客管理菜单\n");printf("\t 5.退出系统\n");printf("\n************************* 谢谢使用航空客运订票系统!*************************\n");printf("请选择您想要的服务:");scanf("%s",&c);switch(c){case '1':LinemanageMenu();break; /*航线管理*/case '2':bookingMenu();break; /*订票办理*/case '3':RefundticketMenu();break; /*退票办理*/case '4':CustomermagMenu();break; /*乘客管理*/case '5':exit(0);default:break;}}while(c!='5');}。

数据结构课程设计源代码(完整版)

数据结构课程设计源代码(完整版)

算法与数据结构课程设计报告设计题目:专业班级学生学号指导教师2014年第1学期第一部分:需求分析1、系统名称:航空客运订票系统航空客运订票的业务活动包括:查询航线、客票预定和办理退票等。

要求在TC或VC环境下设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。

2、要求:(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)以及等候替补的客户名单(包括姓名、所需票量)。

(2)作为模拟系统,全部数据可以只存放在内存中。

(3)通过此系统可以实现如下功能:①录入功能:可以录入航班情况②查询功能:根据客户提供的终点站名进行查询,可以输出以下信息:航班号、飞机号、星期几飞行和余票量等。

也可以根据航班号,查询飞机某个航线的情况。

③订票功能:根据客户提出的要求(姓名、终点站名、订票数量)查询该航班的余票量情况。

如尚有足够的余票,则为客户办理订票手续;若已满员或余票量少于订票数量,则需要重新询问客户要求,如需要,可登记排队候补。

④退票功能:根据客户提供的情况(姓名、日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,若有人排队,则为排在第一位的客户办理订票手续。

第二部分:系统设计图样一:设计说明1:添加航班:整个航班的信息保存在一个结构体flight中,采用结构体数组,每一个航班信息包含航班号、起飞时间、起飞城市、降落时间、降落城市、余票数量。

航班信息通过lulu()函数进行添加。

添加的信息保存在航班flight结构体数组中。

2:查询航班:查询板块分为两个部分,按姓名查找和按站名查找。

按姓名查找:通过所输入的姓名和已定客户的姓名相匹配,匹配成功则查找成功。

按站名查找:通过所输入的起始站名和终点站名进行匹配,匹配成功则查找成功。

3:订票功能:根据用户的姓名和航班号进行订票,如果所查找的航班号的余票满足用户需要的票数,则订票成功,该信息保存在Customer中,才用结构体数组,包含已定客户的姓名、客户ID、订的票数、起飞时间、起飞城市、降落时间、降落城市、航班号。

数据结构课程设计报告格式及要求(航空购票系统)

数据结构课程设计报告格式及要求(航空购票系统)

数据结构课程设计报告题目航空客运订票系统专业班级学号姓名指导教师成绩一、设计任务航空客运订票的业务包括查询(航线和客票预订的)信息、客票预订和办理退票等。

基本要求有:(1)系统必须存储的数据信息i.航班信息:飞机抵达城市、航班号、飞机号、起降时间、航班票价、票价折扣、总位置和剩余位置、已订票的客户名单。

ii.客户信息:客户姓名、证件号、座位号。

(2)系统能实现的功能i.承办订票业务:根据客户提出的要求(飞机低达城市、起降时间、订票数量)查询该航班信息(包括票价、折扣和剩余位置),若满足要求,则为客户办理订票手续,输出座位号。

ii.承办退票业务:根据客户提供的情况(航班号、订票数量),为客户办理退票手续。

(3)查询功能i.查询航线信息:根据飞机降落地点,输出下列信息:航班号、飞机号、起降时间、航班票价、票价折扣和剩余位置。

ii.查询客户预订信息:根据客户证件号,输出下列信息:航班号、飞机号和座位号。

提供的参考程序已经基本实现以上功能,但有很多不足之处,要求进行程序改进和完善。

具体任务有:(1)分析参考程序实现了哪些功能?指出存在的缺陷。

(2)从以下几方面完善程序:i.功能上的完善ii.程序结构上的完善iii.程序控制上的完善二、设计要点1、改变了订票系统主界面格式及背景颜色;2、增加了清屏功能,避免语句过多的结果;3、实现了订票与否;4、实现了只能输入正确航班;5、实现了选择性别只能选择男女;6、订票成功余票减少三、算法实现#include<stdio.h>#include <stdlib.h>#include<malloc.h>#include<string.h>#define OK 1#define ERROR 0typedef struct airline{ /* 飞机航班的结构定义*/ char air_num[8]; //航班号char plane_num[8];//飞机号char end_place[20];//抵达城市int total; //总位置int left; //剩余位置struct airline *next;}airline;/*顾客信息的结构定义*/typedef struct customer{char name[8]; //姓名char sex[8]; //性别char id[20]; //身份证char air_num[8]; //航班号int seat_num; //座位号struct customer *next; //指向下一个旅客}customer;/*创建航班链表*/airline *start_air(){airline *a;a=(airline*) malloc(sizeof(airline));if(a==NULL) printf("空间不足");return a;}/*创建顾客链表*/customer *start_cus(){customer *c;c=(customer*)malloc(sizeof(customer));if(c==NULL) printf("空间不足");return c;}/* 修改航班的空余座位信息*/airline *modefy_airline(airline *l,char *air_num){airline *p;p=l->next;for(;p!=NULL;p=p->next){if(strcmp(air_num,p->air_num)==0){p->left++;return l;}printf("NO the airline!");return 0;}}/* 增加航班信息*/int insert_air(airline **p,char *air_num,char *plane_num,char *end_place,int total,int left) {airline *q;q=(airline*)malloc(sizeof(airline));strcpy(q->air_num,air_num);strcpy(q->plane_num,plane_num);strcpy(q->end_place,end_place);q->total=total;q->left=left;q->next=NULL;(*p)->next=q;(*p)=(*p)->next;return OK;}/*增加某航班的顾客信息*/int insert_cus(customer **p,char *name,char *sex,char *id,char *air_num,int seat_num) {customer *q;q=(customer*)malloc(sizeof(customer));strcpy(q->name,name);strcpy(q->sex,sex);strcpy(q->id,id);strcpy(q->air_num,air_num);q->seat_num=seat_num;q->next=NULL;(*p)->next=q;(*p)=(*p)->next;return OK;}/*订票操作*/int book(airline *a,char *air_num,customer *c,char *name,char *sex,char *id){airline *p=a;customer *q=c->next;p=a->next;for(;p->next!=NULL;p=p->next){if(strcmp(p->air_num,air_num)==0)break;}while(q->next!=NULL){q=q->next;}{if(p->left>0){printf("您的座位号是%d",(p->total-p->left+1));printf("\n");insert_cus(&q,name,sex,id,air_num,p->total-p->left+1);--p->left;p=p->next;return OK;}else{printf("没您的座啦!");return 0;}}}/*取消订票信息操作*/int del_cus(customer *c,airline *l,char *name){customer *p,*pr;char air_num[8];pr=c;p=pr->next;while(p!=NULL){if(strcmp(p->name,name)==0||strcmp(p->air_num,air_num)==0){strcpy(air_num,p->air_num);l=modefy_airline(l,air_num);pr->next=p->next;p=pr->next;printf("取消订票成功!\n");return OK;}pr=pr->next;p=pr->next;}printf("没有这个人儿啊\n");return ERROR;}/*查找航班信息操作*/int search_air(airline *head){airline *p=head->next;printf("air_num plane_num end_place total left\n");for(;p!=NULL;p=p->next){printf("%s %-10s %-8s %-8d%-8d\n", p->air_num, p->plane_num,p->end_place,p->total,p->left);}return OK;}/*查找顾客信息操作*/int search_cus(customer *head){struct customer *q=head->next;printf(" name sex id air_num seat_num\n");for(;q!=NULL;q=q->next){printf("%-8s%-8s%-8s%-12s%-d\n",q->name,q->sex,q->id,q->air_num,q->seat_num);}return OK;}/*预先设置航班信息*/int creat_air(airline **l){airline *p=*l;int i=0;char *air_num[3]={"007af","008af","009af"};char *plane_num[3]={"航班1","航班2","航班3"};char *end_place[3]={"美国","德国","法国"};int total[3]={100,100,100};int left[3]={52,54,76};for(i=0;i<3;i++)insert_air(&p,air_num[i], plane_num[i], end_place[i],total[i], left[i]);return OK;}/*预先设置已订票的顾客信息*/int creat_cus(customer **l){customer *p=*l;int i=0;char *name[3]={"张三","李四","王五"};char *sex[8]={"nan","nan","nan"};char *id[20]={"123456","654321","741852"};char *air_num[3]={"007af","008af","009af"};int seat_num[3]={2,5,7};for(i=0;i<3;i++)insert_cus(&p,name[i],sex[i],id[i],air_num[i],seat_num[i]);return OK;}void main(){system("color 8E");int t=1;customer *cus=start_cus();airline *air=start_air();char name[8],air_num[8],ch,m;char sex[8],id[20];creat_air(&air);creat_cus(&cus);search_air(air);while(t==1){printf("\n\n\n");printf("*********************************\n");printf(" * 欢迎来订票哦,亲!*\n");printf(" * 订票----------1 *\n");printf(" * 退票----------2 *\n");printf(" * 查询----------3 *\n");printf(" * 退出----------4 *\n");printf("*********************************\n");scanf("%s",&ch);if(ch=='1'){system("cls");printf("亲,想乘坐哪辆航班嘞:");scanf("%s",air_num);if(strcmp(air_num,"007af")==0||strcmp(air_num,"008af")==0||strcmp(air_num,"009af")==0){printf("亲叫啥嘞:");scanf("%s",name);y1: printf("您的性别(nan or nv):");scanf("%s",sex);if(strcmp(sex,"nan")==0||strcmp(sex,"nv")==0){printf("您的id:");scanf("%s",id);}else {goto y1;}printf("*确认请输入Y否则输入N:");scanf("%s",&m);if(m=='Y'||m=='y'){printf("订票成功!");book(air,air_num,cus,name,sex,id);}else if(m=='n'||m=='N')printf("取消航班成功!\n");else{printf("您的输入有误\n");}} elseprintf("对不起,没有你要找的航班:\n\n");system("pause");}elseif(ch=='2'){system("cls");printf("您不想座哪个航班号啦:");scanf("%s",air);printf("您的姓名是啥来着:");scanf("%s",name);del_cus(cus,air,name);}elseif(ch=='3'){system("cls");search_air(air);printf("\n");search_cus(cus);}elseif(ch=='4'){t=0;}}}四、运行结果分析1.订票系统主界面2、订票成功操作3、订票航班输入错误操作4、选择男女操作5、选择订票是与否操作6、订票成功余票减少五、设计总结这次课程设计使用了C语言来编写程序,使我们的基础知识和数据结构的链表等知识得到了巩固,使我们在实践中得到了锻炼。

数据结构:航空客运订票系统

数据结构:航空客运订票系统

课程设计报告课程名称:数据结构设计题目:航空客运订票系统院系:班级:设计者:学号:指导教师:课程设计报告一、题目分析主要功能包括:1、录入:可以录入航班情况(如:输入航班号,飞机编号,查询起降时间,起飞抵达城市,剩余的票数)。

2、查询:可以查询某个航线的情况(如:输入航班号,飞机编号,查询起降时间,起飞抵达城市,剩余的票数);可以输入降落城市及航班号,查询飞机航班情况。

3、订票:根据客户要求(航班号、订票数量)查询该航班的余票数情况,若有余票,则可以订票;若余票数不足,则需要重新询问客户要求,否则不能完成订票。

4、退票:可退票,根据客户的姓名,订票数量查询是否为真实信息,为客户办理退票。

5、退出系统。

二、总体设计拿到课程设计题目后,经过仔细的研究,还是决定做航空客运订票系统,它可以使自己很好的巩固在数据结构当中所学到的知识以及各算法,做到学以致用,并在运用的基础上,进一步去创新。

1、主程序流程图及其说明主程序的流程图如下图所示:利用switch语句,用户只需根据自己的需要,输入相应的命令即可达到效果。

例如,若需要查询航班信息时,则输入2;需要为客户预定机票时,则输入4;若需要退出系统,则输入5即可。

2、子程序流程图及其说明⑴、录入航班信息的流程图及其说明:主要功能是将新的航班信息写入新建链表中,然后把新链表与储存航班的链表合并,得到新的航班信息,实现对新航班的增加。

录入航班信息的流程图如下图所示:⑵、查询航班信息流程图及其说明:先输入所要查找的航班,可通过降落城市查询或根据航班号查询。

然后判断该航班是否存在,若存在,则输出相关的航班信息;若不存在,则提示该航班不存在。

查询航班信息的流程图如下图所示:⑶、订票、退票流程图及其说明:订票说明:先输入降落城市,找到该航班并显示该航班信息,若找不到则提示不存在该航班。

再通过需要订票的数量来判断余票量是否足够。

若足够则录入客户姓名,完成订票;若余票不足,则提示是否要取消并重新订票。

(完整word版)数据结构课程设计 航空客运订票系统分解

(完整word版)数据结构课程设计 航空客运订票系统分解

《数据结构课程设计》报告设计题目航空客运订票系统专业班级学号姓名电话完成日期2017.04.13目录1. 问题描述 (2)2. 系统设计 (2)3. 数据结构与算法描述 (4)4. 测试结果与分析 (6)5. 总结 (10)6. 参考文献 (10)附录程序源代码 (10)课程设计题目1. 问题描述基于人们对航空客运使用需求的日益提高,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序是为实现航班情况的查询,订票,退票以及客户信息浏览与票务信息浏览等基本功能。

2. 系统设计2.1 设计目标(1)可以浏览航线信息;包括终点站名、航班号、飞机号、飞行日期、乘员定额和余票量;(2)可以浏览已订票客户信息;包括客户姓名、订票数额和舱位等级;(3)可以查询航线;包括终点站名、航班号、飞机号、飞行日期、乘员定额和余票量;(4)可以办理订票业务;需提供航班号、所需票数、客户姓名和舱位等级,生成客户座位号;(5)可以办理退票业务;提供航班号和客户姓名,即可退票;(6)可以查看剩余票数;(7)要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。

2.2 设计思想(1)运行环境(软硬件环境):DEV-C++;(2)输入的形式和输入值的范围:由航空公司输入航线情况并以单链表的形式存储在内存里面;(3)输出的形式描述:通过客户的输入,输出相应内容;(4)功能描述:用户可通过本系统实现对航班的查询、订票和退票功能。

2.3 系统模块划分2.3.1主函数输出菜单界面。

输入指令,显示,敲击回车开始工作。

2.3.2浏览航线信息编写void list()函数实现打印全部航线信息的功能,调用void display()函数实现打印struct airline链表中存储的航线的基本信息的功能。

2.3.2浏览已订票客户信息编写void prtlink()函数实现打印订票乘员名单域的客户名单信息的功能,调用find()函数查询并以指针形式返回。

(完整版)数据结构课程设计-航空客运订票系统

(完整版)数据结构课程设计-航空客运订票系统

嘉应学院计算机学院实验报告课程名称:数据结构课程设计开课学期:2017-2018学年第2学期班级:1503指导老师:***实验题目:航空客运订票系统学号:姓名:上机时间:1.需求分析(1)航空管理。

每条航班所涉及的信息有:终点站名、航班号、飞机型号、飞行周日(星期几)、乘员定额、余票量。

(2)客户管理。

有关订票的客户信息(包括姓名、订票量、航位等级(1,2和3))以及等候替补的客户名单(包括姓名、所需票量)。

(3)系统实现的主要操作和功能。

系统实现的主要操作和功能如下:①查询航班。

根据旅客提出的终点站名输入下列信息:航班号、飞机型号、飞机日期、余票额。

②承办订票业务。

根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满或者余票少于订票额,则需要重新询问客户要求;若需要,可等待排队后补。

③承办退票业务。

根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先查询排在第一的客户,若所退票额能满足该客户的要求,则为其办理订票手续,否则询问其他排队候补的客户。

2.概要设计1)本系统设计了一个含有多个菜单项的主控菜单,系统主控菜单运行界面2)存储结构设计本系统主要采用链表结构类型存储航班信息和订票的乘客信息。

航班信息链表结点由10个分量构成,乘客信息链表由5个分量构成。

3)系统功能设计本系统分为以下5个功能模块。

(1)航班管理。

航班管理子模块可完成添加新的航班,按终点站点名查询航班,浏览所有航班。

(2)订票办理。

在添加了航班的基础上可办理订票业务。

乘客根据所需航班输入终点站名和订票量订票。

如果订票量超过余票量,则会提示是否成为候补乘客;如果订票成功,则会要求输入订票乘客的姓名及所订票的舱位等级。

(3)退票办理。

已办理订票业务的乘客可根据所订票的航班和乘客姓名办理退票业务。

、(4)乘客管理。

可以查看已经订票的乘客信息和候补乘客的信息。

航空客运订票系统课程设计(数据结构)

航空客运订票系统课程设计(数据结构)

XXXXXXXXX计算机技术系项目名称:航空客运订票系统学生姓名:XX学号:班级:10801指导教师:年月日目录1.系统需求分析 (3)1.1问题分析 (3)1.2任务意义 (3)2. 数据结构设计及用法说明 (4)3. 详细设计和编码 (5)3.1.主菜单 (5)3.2.录入航空信息 (5)3.3输出航空信息 (6)3.4订票 (7)3.5退票 (7)4. 实验结果 (9)4.1菜单函数的功能测试 (9)4.2录入函数的功能测试 (9)4.3查询航班函数的功能测试 (11)4.4订票功能地测试 (12)致谢 (17)参考文献 (18)附录:源程序清单 (19)1.系统需求分析1.1 问题分析这次的课程设计是设计一个航空系统。

由于存储的数量较大且不固定,因此选择用链表来保存基本信息:终点站名、航班号、飞机号、飞行时间、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。

由于在航线这个主链表上,每个航班上的已经订票名单这个链表和等候替补的名单这个链表队列,所以建立一个十字交叉链表,在纵行上开辟一个链表存储所有航班的基本信息,再在各个航班节点横向展开一个链表和一个链表队列,展开的链表存储已经订票的客户名单,展开的链表队列存储等候替补的客户名单。

同时,由于预约人数无法预计,队列也应以链表作存储结构。

系统主要实现的操作和功能是:添加航线、查询航线、订票功能、退票功能。

要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。

1.2 任务意义飞机场每天要接受大量的订票退票服务,对于这些数量巨大的数据,需要一个专门的软件来进行管理和操作。

软件至少需要具备的基本功能包括:接受订票,处理退票,查询航班信息等等。

面对这些实际问题,航空客运系统的制作无疑要全面的考察一个学生的知识及能力。

在全面理解客户的需求下面,来进行设计出最能够满足客户的程序出来,并且能够根据不同的要求来将其进行改动,最能考察到对代码活用的程度。

数据结构课程设计---航空订票系统

数据结构课程设计---航空订票系统

数据结构课程设计报告1.航空订票系统1.需求分析试设计一个航空订票系统,基本要求如下:每条航班所涉及的信息有:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,乘员定额,余票量,订定票的客户名单(包括姓名,订票量,舱位等级(头等舱、公务舱、经济仓)以及等候替补的客户名单(包括姓名、所需数量)。

采用链式存储结构。

系统能实现的操作和功能如下:(1)航班信息管理。

(2)查询航线,按以下几种方式查询:①按航班号查询;②按起点站查询;③按终点站查询;④按日期查询;每种查询方式中,查询后输出如下信息:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,余票量。

(3)承办订票业务:根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。

若需要,可登记排队候补。

(4)承办退票业务:根据客户提出的情况(日期,航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。

2.设计2.1 设计思想(1)数据结构设计typedefstruct keHu//客¨户信息{char nameofKeHu[20];//客户名字int numofPiao;//客¨户需要票的数量int type;//仓位等级1:头等Ì舱2:公务舱3:经济舱struct keHu* next;/下个客户};typedefstruct hangBan{int numofHangBan;//航班号char typeofHB[20];//航班机型¨char startFly[20];//起飞¦机场char endFly[20];//降¦落机场char DataofHB[20];//日期格式为(20120312星期¨一)char startTime[20];//起飞¦时间char endTime[20];//到达时À间float flyTime;//飞行时长float prise;//价格int largeNum;//成员定额int leaveNum;//余票数量keHu *custemer;//乘客信息名单keHu *orderofKeHu;//替补客户};typedefstruct Node{hangBan *exam;//航班信?息¡éint numofN;//航班数量struct Node *next;};(2)算法设计总体设计:在Fly.h文件中设计舱位的信息处理以及订票退票和对舱位信息的管理方面的功能然后在main,h中设计用户界面功能部分。

数据结构.航空客运订票系统

数据结构.航空客运订票系统

《数据结构》课程设计报告书题目:航空客运订票系统专业:班级:学号:姓名:完成时间:一、需求分析1.1问题描述设计一个航空客运订票系统,为乘客提供各种航空客运信息服务。

1.2 基本要求每条航线所涉及的信息有:终点站名、航班号、飞机号、星期几飞行、乘员定额、余票量、订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。

已订票客户和预订票客户名单可分别由线性表linklist和队列linkqueue 来实现。

为了插入和删除方便,两者皆采用链表作为存储结构。

系统需实现的操作和功能如下。

(1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票量。

(2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。

若需要,可登记排队候补。

(3)承办退票业务:根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若退票能满足他人要求,则为他办理订票手续,否则依次询问其他排队候补的客户。

二、概要设计1.1 链表的抽象数据类型定义ADT ListData:D={ai|ai∈ElemtSet,i=1,2,…,n,n≥0}Relation:R={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}Operation:airline *find_fin()//根据客户提出的终点站名输出航线信息airline *find_air()//根据客户提出的航班号查询航班信息airline *find_plane()//根据客户提出的飞机号查询航班信息airline *find_date()//根据客户提出的飞行日期查询航班信息void search()//根据客户提出的要求输出航线信息void list()//全部航线的信息void booklist()//订票客户名单linklist *addlink(linklist*,int,char,int)//增加订票的客户信息 void sort_ticket()//按剩余票数排序endADT1.2 队列的抽象数据类型定义ADT QueueData:D={ai|ai∈ElemtSet,i=1,2,…,n,n≥0}Relation:R={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}Operation:linkqueue plusqueue(linkqueue,char,int)//增加排队等候的客户名单endADT2、本程序包含三个模块(1)主程序模块:void main(){初始化;Do{输入指令;处理指令;}while (指令!=”退出”);}(2)已买票的乘客的链表模块——实行对买票乘客信息的管理(3)排队买票乘客的队列模快——实行对排队买票乘客信息的管理3、各模块之间的调用关系三、详细设计1、为简化问题,本系统假设只有五条航线#define MAX 5//定义航线量的最大值2、客户的存储信息:结点中保存的信息包括姓名,订票量,舱位等级typedef struct book{char name[10];//客户姓名int amount;//订票量int level;//舱位等级book *next;}linklist;3、航班的存储信息:结点中保存的信息包括终点站名,航班号,飞机号,飞行日期,乘员定额,余票量。

数据结构课程设计-航空客运订票系统

数据结构课程设计-航空客运订票系统

2.作为示意系统,全部数据可以只存放在内存中;
3.系统能实现的操作功能如下:
a)查询航线:
根据旅客提出的终点站名输出下列信息:航班号,飞机号,星期几飞行,最近一天航班的日期和余票额;
b.) 承办订票业务:
根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若尚余票则为客户办理订票手续,输出
座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要可登记排队候补;
退出系统:直接退出。
三 详细设计 航空客运订票系统:
主函数: int menu_select() /*菜单界面*/ { int c;
char s[20]; printf("\n"); printf("\t\t\t 航空客运订票系统\n"); printf("\t\t--------------------------------------\n"); printf("\t\t--------------------------------------\n");
6、课程设计实践作为培养学生动手能力的一种手段,单独考核。
3.课程设计说明书
一 需求分析
文档来源为:从网络收集整理.word 版本可编辑.欢迎下载支持.
1.每条航线所设计的信息有:终点站名,航班号,飞机号,飞行周日(星期几),乘员定额,余票量,已订票
的客户名单(包括姓名,订票量,舱位等级 1,2 或 3)以及等候替补的客户名单(包括姓名,所需票量);
***5.退 票 办 理***\n");
printf("
f("
***7.退 出 系 统***\n");
printf("\t\t--------------------------------------\n");

(完整word版)数据结构课程设计航空客运订票系统

(完整word版)数据结构课程设计航空客运订票系统

(完整word版)数据结构课程设计航空客运订票系统《数据结构课程设计》报告设计题目航空客运订票系统专业班级学号姓名电话完成日期2017.04.13(完整word版)数据结构课程设计航空客运订票系统目录1. 问题描述 (2)2. 系统设计 (2)3. 数据结构与算法描述 (4)4. 测试结果与分析 (6)5. 总结 (10)6. 参考文献 (10)附录程序源代码 (10)课程设计题目1. 问题描述基于人们对航空客运使用需求的日益提高,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序是为实现航班情况的查询,订票,退票以及客户信息浏览与票务信息浏览等基本功能。

2. 系统设计2.1 设计目标(1)可以浏览航线信息;包括终点站名、航班号、飞机号、飞行日期、乘员定额和余票量;(2)可以浏览已订票客户信息;包括客户姓名、订票数额和舱位等级;(3)可以查询航线;包括终点站名、航班号、飞机号、飞行日期、乘员定额和余票量;(4)可以办理订票业务;需提供航班号、所需票数、客户姓名和舱位等级,生成客户座位号;(5)可以办理退票业务;提供航班号和客户姓名,即可退票;(6)可以查看剩余票数;(7)要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。

2.2 设计思想(1)运行环境(软硬件环境):DEV-C++;(2)输入的形式和输入值的范围:由航空公司输入航线情况并以单链表的形式存储在内存里面;(3)输出的形式描述:通过客户的输入,输出相应内容;(4)功能描述:用户可通过本系统实现对航班的查询、订票和退票功能。

2.3 系统模块划分2.3.1主函数输出菜单界面。

输入指令,显示,敲击回车开始工作。

2.3.2浏览航线信息编写void list()函数实现打印全部航线信息的功能,调用void display()函数实现打印struct airline链表中存储的航线的基本信息的功能。

航空客运订票系统数据结构课程设计

航空客运订票系统数据结构课程设计

#include <stdio.h> #include <string.h> #include <stdlib.h> #include<math.h>#define ok 1typedef struct Yidingkehu{// 单链表char name[15];// 已订票的客户姓名int dingpiaoshu;// 已订票数量struct Yidingkehu *next1;}Yidingkehu,*Link;typedef struct Weidingkehu{// 单链队char name[15];// 预订票的客户姓名int yudingpiao;// 要订票数量struct Weidingkehu *next2;// 下一个链队结点指针}Weidingkehu,*Qptr;typedef struct {Qptr front;// 单链队头结点Qptr rear;// 单链队尾结点}linkQueue;typedef struct Hangxian{// 创建一个航线的结构体charhangbanhao[15];// 航班号- char feijihao[15];// 飞机号intfeixingriqi;// 起飞时间int level;// 仓位int yupiao;// 余票charzhongdianzhan[15];// 降落城市struct Hangxian *next;// 指向下一个链结点的指针struct Yidingkehu *yiding;// 定义一个指向已订票客户的头结点指针struct Weidingkehu *yudingqueue;}Hangxian,*Linklist;struct Hangxian *L=NULL;// 定义全局量struct Yidingkehu *H;// 为已订票客户链队来申请空间linkQueue Q;//linkQueue 类型的来申请空间Linklist InitLinklist();// 声明int InsertLinklist(Linklist &head1);// 声明void hbhchaxun();// 通过航班号查询 void mddchaxun();// 通过目的地查询void lurugongneng();// 初始化录入功能 void chaxungongnen();// 查询功能 void dingpiaogongnen();// 订票功能 void tuipiaogongnen();// 退票功能void main(){H=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu)); InitLinklist();int n;do{ // 打印主界面printf("\t 欢迎使用航空客运订票系统 \n");printf("\t+++++++++++++++++++++++++++++\n");printf("\t==>1. 录入功能 ==\n");printf("\t==>2. 查询功能 ==\n");printf("\t==>3. 订票功能 ==\n");printf("\t==>4. 退票功能 ==\n");printf("\t==>5. 退出 ==\n");printf("\t+++++++++++++++++++++++++++++\n");printf("\t 请选择: ");scanf("%d",&n);printf("\n");switch(n){case 1: lurugongneng();// 录入功能break;case 2: chax ungongnen();// 查询功能 break;case 3: din gpiaogo ngnen();〃 订票功能break;case 4:tuipiaogo ngnen();// 退票功能break;default :exit(0);// 退出}}while(n==1||n==2||n==3||n==4);}********************************************************* int j=1,m;do{if(!InsertLinklist((Linklist) L)) // 向其中加入航班信息{printf(" 内存已满 \n"); exit(OVERFLOW);void lurugongneng()// 初始化 的单链表录入功能}// 向链表中加一结点printf("\t 是否要输入下一个航线记录?\n");printf("\t 是请输入1\n");printf("\t 否请输入2\n\t");scanf("%d",&m); // 在这里依靠人来决定是否输入下一条航线记}while(m==1);}Linklist InitLinklist(){L=(Linklist)malloc(sizeof(Hangxian));if(!L) exit(OVERFLOW);L->next=NULL;// 建立一个带有头结点的单链表return (L);}int InsertLinklist(Linklist &L)// 向航线链表添加新的结点{Linklist p;p=(Linklist)malloc(sizeof(Hangxian));// 为一个新的结点分配空间if(!p) exit(OVERFLOW);printf("\t 请依次输入下面几项内容:\n\n");// 这里的输入采用一个个单独输入,避免了乱赋值的现象printf(" 航班号\n"); scanf("%s",p->hangbanhao);printf(" 飞机号\n"); scanf("%s",p->feijihao);printf(" 终点站\n"); scanf("%s",p->zhongdianzhan);printf(" 飞行日期\n"); scanf("%d",&p->feixingriqi);printf(" 仓位\n");scanf("%d",&p->level);printf(" 余票数\n");scanf("%d",&p->yupiao);p->yiding=(Yidingkehu*)malloc(sizeof(Yidingkehu));// 为它申请空间p->yudingqueue=Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu));// 为它申请空间p->next=L->next;L->next=p;// 这二句是链表中的插入一个结点return (ok);void chaxungongnen()//*************************************************************** *** 查询功能{int n;printf("\t 查找航线信息\n");printf("\t+++++++++++++++++++++++++++++\n");printf("\t==>1. 通过目的地查询==\n");printf("\t==>2. 通过航班号查询==\n");printf("\t+++++++++++++++++++++++++++++\n");printf("\t 请选择:\n");scanf("%d",&n);switch(n){case 1:mddchaxun();break;case 2:hbhchaxun();break;default :break;}}void mddchaxun()// 通过目的地查询{char c[15];Linklist p=L;int m;printf("\t 请输入要查询的目的地:\n");scanf("%s",c);do{p=p->next;if(p){if(strcmpi((*p).zhongdianzhan,c)==0){printf("\t 航班信息:\n");printf("\t 航班号:%s\n",p->hangbanhao);printf("\t 飞机号:%s\n",p->feijihao);printf("\t 飞行时间:周%d\n",p->feixingriqi); printf("\t 余票量:%d\n",p->yupiao);}else{// 如果不匹配的话就做printf("\t 对不起没有你要找的目的地:\n\n"); m=0;}}while(m!=0);}void hbhchaxun()// 通过目的地查询{char c[15];Linklist p=L;int m;printf("\t 请输入要查询的航班号:\n");scanf("%s",c);do{p=p->next;if(p){if(strcmpi((*p).hangbanhao,c)==0){printf("\t 航班信息:\n");printf("\t 航班号:%s\n",p->hangbanhao);printf("\t 飞机号:%s\n",p->feijihao);printf("\t 飞行时间:周%d\n",p->feixingriqi);printf("\t 余票量:%d\n\n",p->yupiao);}}else{// 如果不匹配的话就做printf("\t 对不起没有你要找的航班号:\n"); m=0;}}while(m!=0);}voiddingpiaogongnen()//************************************************************** *订票功能{Linklist p=L;//Linklist 类型的L 来指向链表头Yidingkehu *h=H,*h1;//Yidingkehu 定义客户的结点,方便插入与删除linkQueue q=Q;//linkQueue 类型的来,方便插入与删除struct Weidingkehu *q3;char c[15];int m=1,piao,n;int ydpiao=0,yd=0;printf(" 请输入终点站名:\n");scanf("%s",c);p=L->next;if(p) {do{// 查找一下,是否有这个航班if(!p){printf(" 对不起,没有你要找的航班:\n\n"); //goto loop1;}m=strcmpi(p->zhongdianzhan,c);//通过比较来判定if(m==0){printf(" 航班信息:\n");printf(" 航班号:%s\n",p->hangbanhao); printf(" 飞机号:%s\n",p->feijihao);printf(" 飞行时间:周%d\n",p->feixingriqi); printf(" 余票量:%d\n",p->yupiao);}elsep=p->next;}while(m!=0);if(m==0){// 当有该航班时,进行订票do{printf("\n 请输入你要订的票数:\n"); scanf("%d",&piao);if(piao<=p->yupiao){h=p->yiding;if(h){h1=h;h=h->next1;h=(struct Yidingkehu*)malloc(sizeof(Yidingkehu)); printf(" 请输入你的名字:\n");scanf("%s",h->name);h->dingpiaoshu=piao;h->next1=h1->next1;h1->next1=h;p->yupiao=p->yupiao-piao;printf(" 订票成功:\n");m=2;}}else //余票量不足时{printf(" 余票量:%d\n",p->yupiao);printf(" 对不起,余票%d 张不足,不能完成订票\n",p->yupiao); printf("是否要重新订票?\n");printf(" 需要请输入 1 否则请按 2 预订请输入 3 : \n"); scanf("%d",&m);while(m==3){printf(" 对不起,该航班的票已售完\n");q.front=p->yudingqueue;if(q.front==q.rear)printf(" 没有人预订票,是否要预订?\n");else if(q.front!=q.rear)printf(" 已有人预订票,是否要预订?\n"); printf(" 预订请输入1 否则输入2 : \n"); scanf("%d",&n);if(n==1){ q3=(Qptr)malloc(sizeof(Weidingkehu)); printf(" 请输入你的姓名\n");scanf("%s",q3->name); printf(" 请输入订票数\n");scanf("%d",&q3->yudingpiao); q3->next2=NULL;q.rear->next2=q3; q.rear=q3;printf(" 你已经预订了!\n");}}}}while(m==1);}}}void tuipiaogongnen()//*************************************************************** 退票功能Linklist p=L;Yidingkehu *h=H,*h1,*h2;linkQueue q=Q;char c[15],name1[15];int m=1,piao,n;// 定义相应变量printf(" 请输入航班号:\n");scanf("%s",c);p=L->next;if(p){do{ // 使用do while 来查找是否有此航班if(!p){// 如果是到了表尾且没有匹配,printf("\n 对不起,没有你要找的航班:\n");}if(strcmpi(p->hangbanhao,c)==0)// 比较航班号输出信息{printf("\t 航班信息:\n");printf(" 航班号:%s\n",p->hangbanhao);printf(" 飞机号:%s\n",p->feijihao); printf(" 飞行时间: 周%d\n",p->feixingriqi);printf(" 余票量:%d\n",p->yupiao);m=0;}else p=p->next;}while(m!=0);if(m==0){// 如果找到了,就来给他退票do{h=p->yiding;if(h){printf(" 请输入你的姓名:\n");scanf("%s",name1);printf(" 请输入你订的票数:\n");scanf("%d",&piao);h1=h;h=h->next1; if(strcmpi(h->name,name1)==0&&h->dingpiaoshu==piao)// 订的票数相等,则就给他取消订票如果名字和{p->yupiao+=h->dingpiaoshu;h2=h; h1->next1=h->next1;free(h2);printf(" 你取消订票成功\n");struct Weidingkehu *q3;q.front=p->yudingqueue;if(q.front==q.rear){printf(" 没有人预订票:\n");}if((p->yupiao)>=(q.front->next2->yudingpiao)){ h2=(Yidingkehu*)malloc(sizeof(Yidingkehu));strcpy(h2->name,q.front->next2->name);h2->dingpiaoshu=q.front->next2->yudingpiao; n=p->yupiao-q.front->next2->yudingpiao; p->yupiao=n;q3=Q.front->next2;//q.front->next2=q3->next2;// 这二语句来删除结点if(q.rear==q3)q.rear=q.front;free(q3);// 释放空间printf(" 链队中删除成功\n"); h2->next1=h->next1;h->next1=h2;// 为之插入进已订票客户链表中printf(" 为预订的客户订票成功\n");}else printf(" 余票数不够,不能为预订客户订票!\n");}else{ // 如果没有找到,即系统中没有该人的信息,提示是否来重新查找printf(" 对不起,该航班没有人订票或者是你没有订该航班的票\n");printf(" 是否要重新查找并取消订票?\n");printf(" 需要请输入 1 否则请按 2 \n");scanf("%d",&m);}}}while(m==1);}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嘉应学院计算机学院实验报告课程名称:数据结构课程设计开课学期:2017-2018学年第2学期班级:1503指导老师:***实验题目:航空客运订票系统学号:姓名:上机时间:1.需求分析(1)航空管理。

每条航班所涉及的信息有:终点站名、航班号、飞机型号、飞行周日(星期几)、乘员定额、余票量。

(2)客户管理。

有关订票的客户信息(包括姓名、订票量、航位等级(1,2和3))以及等候替补的客户名单(包括姓名、所需票量)。

(3)系统实现的主要操作和功能。

系统实现的主要操作和功能如下:①查询航班。

根据旅客提出的终点站名输入下列信息:航班号、飞机型号、飞机日期、余票额。

②承办订票业务。

根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满或者余票少于订票额,则需要重新询问客户要求;若需要,可等待排队后补。

③承办退票业务。

根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先查询排在第一的客户,若所退票额能满足该客户的要求,则为其办理订票手续,否则询问其他排队候补的客户。

2.概要设计1)本系统设计了一个含有多个菜单项的主控菜单,系统主控菜单运行界面2)存储结构设计本系统主要采用链表结构类型存储航班信息和订票的乘客信息。

航班信息链表结点由10个分量构成,乘客信息链表由5个分量构成。

3)系统功能设计本系统分为以下5个功能模块。

(1)航班管理。

航班管理子模块可完成添加新的航班,按终点站点名查询航班,浏览所有航班。

(2)订票办理。

在添加了航班的基础上可办理订票业务。

乘客根据所需航班输入终点站名和订票量订票。

如果订票量超过余票量,则会提示是否成为候补乘客;如果订票成功,则会要求输入订票乘客的姓名及所订票的舱位等级。

(3)退票办理。

已办理订票业务的乘客可根据所订票的航班和乘客姓名办理退票业务。

、(4)乘客管理。

可以查看已经订票的乘客信息和候补乘客的信息。

(5)退出系统。

退出整个航空客运订票系统。

3.模块设计1)模块设计本程序包括主程序模块、菜单选择模块和队列操作模块。

主程序模块 -> 菜单选择模块 -> 队列操作模块2)系统子程序及功能设计本系统共设置14个函数,其中包括主函数。

个函数名及功能说明如下。

(1)char Continue( ) //询问是否继续的函数(2)void ErrorMess( ) //操作出错函数(3-1)int Find_Line1( ) //航班核对函数(3-2)int Find_Line2( ) //按航班号查询函数(4)void Line_search( ) //按目录地查询航班函数(5)void Line_Add( ) //航班添加函数(6)int Empty_Flight( ) //航班是否为空函数(7)int Line_See( ) //航班查看函数(8)void LinemanageMenu() //航班管理菜单(9)void bookingMenu( ) //订票办理函数(10)void Display_Reserve( ) //订票乘客信息(11)void Display_Replace( ) //候补乘客信息(12)void RefundticketMenu( ) //退票办理函数(13)void CustomermagMenu( ) //乘客管理子菜单函数(14)void main( ) //主程序画面函数4.详细设计1)数据类型定义(1)乘客信息的结构体定义(2)航班信息的结构体定义(3)全局变量定义2)系统主要子程序详细设计(1)主程序模块设计主函数。

设定用户操作界面以及界面的颜色和大小,调用菜单子模块函数。

(2)航班管理模块子菜单界面函数(3)航班管理的主要工作函数(4)订票办理函数,用于办理订票业务5.测试分析1)航班管理菜单在主菜单下,用户输入1并按下回车键,运行。

该子模块可以实现添加新航班,按终点站名查找航班的信息,浏览查看所有航班信息这三项航班管理操作。

2)订票业务办理在进行了航班添加之后,即航班不为空时,在主菜单下输入2并回车办理订票业务,在界面提示下输入订票的相关航班信息和订票客户信息。

运行。

如果需要订票数超过余票量,则可选择等待成为候补乘客或选择放弃订票。

3)退票业务办理办理订票业务之后,可以办理对应的退票业务。

在主菜单下输入3并按下回车键办理订票业务,在界面提示下输入匹配的退票航班信息和订票客户姓名即可退票成功,运行。

4)乘客管理子菜单办理了订票业务之后,系统可以管理办理了订票业务的乘客信息。

在主菜单下输入4并按下回车键进入乘客管理菜单界面,运行。

在此子功能模块下可以进行查看订票和候补乘客的信息。

6.退出在主菜单下输入5并按下回车键,即退出“航空客运订票系统”。

完整代码如下:#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#define MAX 60/* run this program using the console pauser or add your own getch, system("pause") or input loop */typedef struct Customer{char Name[8];int Amount;char Rank;int IDinfor;struct Customer *Next;}Customer;typedef struct Flight{char Des_Name[10];char Flight_No[6];char Plane_No[6];int Week_Day;int Customer_Amount;int Free_Amount;int Price[3];Customer *CustName;Customer *ReplName;struct Flight *Next;}Flight,*PFlight;//全局变量int Customer_Count = 0;Flight *Head = NULL;Flight *p2;Customer *Custp1[MAX];Customer *Replp1[MAX];int IsEmpty = 1;int IsReplace = 1;Customer *prior;int shouldsave = 0;//1.询问是否继续的函数char Continue(){char answer;while(1){printf("\n\t 您是否想继续(Y/N)?");scanf("%s",&answer);system("cls");if(answer == 'y' || answer == 'Y')return 'y';else if(answer == 'n' || answer == 'N')return 'n';else printf("\n\t输入有误,请重新输入!");}}//2.操作出错函数void ErrorMess(){printf("\n\t 对不起,您的操作有误!"); getch();}//3-1.核对航班函数int Find_Line1(PFlight L, char *key){int flag = 0;Flight *p1;p1=L;if(p1 == p2) return flag;while(p1 != p2 && p1 != NULL){if(strcmp(p1 -> Flight_No,key) == 0){flag=1;break;}p1=p1->Next;}return flag;}//3-2.按航班号查询函数int Find_Line2(PFlight L, char *key, PFlight *pp, int *Flight_No){int flag=0;Flight *p1;p1=L;while(p1!=NULL){if(strcmp(p1->Flight_No,key)==0){flag=1;*pp=p1;break;}p1=p1->Next;if(p1!=NULL) Flight_No++;}return flag;}//4. 按目录地查询航班函数void Line_search(){char Desname[50];Flight *p1=Head;if(Head==NULL){printf("\n\t没有到达您想要的终点站的航班!"); getch();return;}printf("\n\t请输入终点站名:");scanf("%s",Desname);printf("\n\t您所查询的航班的信息:\n");printf("\n_________________________________________________ \n");while(p1!=NULL){if(strcmp(p1->Des_Name,Desname)==0){printf("目的地航班号飞机型号星期座位号头等舱价格普通舱价格经济舱价格\n");printf("\n%-9s%-8s%-8s%-7d%-8d%-10d%-12d%-8d",p1->Des_Name,p1->Flight_No,p1->Plane_No,p1->Week_Day,p1->Customer_Amount,p1->Price[0],p1->Price[1],p1->Price[2]);}p1=p1->Next;}printf("\n__________________________________________________ \n");Continue();}//5. 航班添加函数void Line_Add(){PFlight p,*p1;p1=&Head;while(1){if(Head==NULL){*p1=(PFlight)malloc(sizeof(Flight));(*p1)->Next=NULL;p2=Head;}else{p1=&p;*p1=(PFlight)malloc(sizeof(Flight));p2->Next=*p1;p2=*p1;}printf("\n\t添加新的航班!\n");printf("\n\t请输入终点站名:");scanf("%s",&p2->Des_Name);while(1){printf("\n\t请输入唯一的航班号:");scanf("%s",&p2->Flight_No);if(Find_Line1(Head,p2->Flight_No))printf("\n\t航班号已经存在!\n");else break;}printf("\n\t请输入航班号:");scanf("%s",&p2->Plane_No);while(1){printf("\n\t请输入航班日期(请输入1-7):");scanf("%d",&p2->Week_Day);if(p2->Week_Day<1 || p2->Week_Day>7)printf("\n\t输入日期有误,请重新输入!\n");else break;}printf("\n\t请输入座位数量:");scanf("%d",&p2->Customer_Amount);printf("\n\t请输入头等舱的价钱:");scanf("%d",&p2->Price[0]);printf("\n\t请输入二等舱的价钱:");scanf("%d",&p2->Price[1]);printf("\n\t请输入三等舱的价钱:");scanf("%d",&p2->Price[2]);p2->Free_Amount=p2->Customer_Amount;p2->CustName=NULL;p2->ReplName=NULL;shouldsave=1;if(Continue()=='n'){p2->Next=NULL;return;}}}//6. 判断航班是否为空函数int Empty_Flight(){if(Head == NULL){system("cls");printf("\n\t对不起,航班不存在,按任意键返回!"); getch();return 1;}else return 0;}//7.航班查看函数int Line_See(){Flight *p1;system("cls");p1=Head;if(Empty_Flight()) return 0;printf("\n\n\t 航班信息:\n");printf("\n______________________________________________________________\n" );printf("目的地航班号飞机型号星期座位数头等舱价格普通舱价格经济舱价格\n");while(p1 != NULL){printf("\n%-9s%-8s%-8s%-7d%-8d%-10d%-12d%-8d",p1->Des_Name,p1->Flight_No,p1->Plane_No,p1->Week_Day,p1->Customer_Amount, p1->Price[0],p1->Price[1],p1->Price[2]);p1=p1->Next;}printf("\n______________________________________________________________\n" );printf("\n\t按任意键返回!\n"); getch();}//8.航班管理菜单void LinemanageMenu(){char c;system("cls");while(1){printf("\n\t\t航班管理菜单:\n");printf("\n______________________________________________________________\n" );printf("\t 1. 添加新的航班\n");printf("\t 2. 查询航班 \n");printf("\t 3. 查看航班 \n");printf("\t 4. 返回主菜单 \n");printf("\n\n______________________________________________________________\ n");printf("\t请选择您想要的服务:");scanf("%s",&c);switch(c){case '1': Line_Add(); break;case '2': Line_search(); break;case '3': Line_See(); break;case '4': return;default: ErrorMess();}}}//9.订票办理函数void bookingMenu(){int Ticket_Count,IDinfor,i,flag=0;int Flight_No=0;Flight *p1;Customer *c1;Customer *c2;char answer[7];char temp,c;int tag=0;int IsRepl=0;if(Empty_Flight()) return;while(1){printf("\n\t现在您可以订票!");flag=0;tag=0;printf("\n\t请输入航班号:");scanf("%s",&answer);if(Find_Line2(Head,answer,&p1,&Flight_No)){while(1){printf("\n\t请输入您想要订购的数量:");scanf("%d",&Ticket_Count);if(Ticket_Count==0){printf("\n\t请再次输入飞机型号:\n");getch();}else break;}if(p1->Free_Amount >= Ticket_Count){Customer_Count++;flag=1;IsRepl=1;if(p1->CustName==NULL){Custp1[Flight_No]=c1=(Customer*)malloc(sizeof(Customer));p1->CustName=Custp1[Flight_No];}else{c1=(Customer*)malloc(sizeof(Customer));Custp1[Flight_No]->Next=c1;Custp1[Flight_No]=c1;}IsEmpty=0;Custp1[Flight_No]->Amount=Ticket_Count;IDinfor = p1->Customer_Amount-p1->Free_Amount+1;Custp1[Flight_No]->IDinfor = IDinfor;p1->Free_Amount -= Ticket_Count;printf("\n\t请输入您的姓名:");scanf("%s",&Custp1[Flight_No]->Name);while(1){printf("\n\t请输入舱位等级:");scanf("%s",&Custp1[Flight_No]->Rank);if(!(Custp1[Flight_No]->Rank >= '1' && Custp1[Flight_No]->Rank <= '3')){printf("\n\t输入有误,请重新输入!");getch();}elsebreak;}printf("\n\t请输入您的ID信息:");scanf("%d",&Custp1[Flight_No]->IDinfor);if(Ticket_Count<10)printf("\n\t");elseprintf("\n\t");printf("\n\t恭喜您订票成功!\n");for(i=1;i<=Ticket_Count; i++){printf("\n\t您所预定的座位号是%d",IDinfor++);if(i%10==0)printf("\n\t");}printf("\n");}else if(p1->Free_Amount==0){printf("\n\t对不起,票已售完!\n");IsRepl=0;}else{printf("\n\t对不起,当前没有多余的票!\n");IsRepl=0;}if(!IsRepl){printf("\n\t您是否想成为候补乘客(Y/N)?:");scanf("%s",&temp);if(temp=='y' || temp=='Y'){if(p1->ReplName==NULL){c2=(Customer*)malloc(sizeof(Customer));Replp1[Flight_No]=c2;p1->ReplName = Replp1[Flight_No];}else{c2=(Customer*)malloc(sizeof(Customer));Replp1[Flight_No]->Next = c2;Replp1[Flight_No] =c2;}IsReplace=0;tag=1;Replp1[Flight_No]->Amount = Ticket_Count;printf("\n\t请输入您的姓名:");scanf("%s",&Replp1[Flight_No]->Name);Replp1[Flight_No]->IDinfor = IDinfor;Replp1[Flight_No]->Amount = Ticket_Count;while(1){printf("\n\t请输入舱位等级:");scanf("%s",&Replp1[Flight_No]->Rank);printf("\n\t请输入您的ID信息:");scanf("%d",Replp1[Flight_No]->IDinfor);if(!(Replp1[Flight_No]->Rank >='1' && Replp1[Flight_No]->Rank <= '3')){printf("\n\t输入有误,请重新输入.");getch();}else break;}printf("\n\t没有剩余座位!\n");shouldsave=1;}}}elseprintf("\n\t对不起,航班不存在!\n");if(flag)Custp1[Flight_No]->Next=NULL;if(tag){Replp1[Flight_No]->Next=NULL;printf("\n\t您已经成功排入候补订票队列中!\n");}printf("\n\t是否退出菜单?:(y/n)");scanf("%s",&c);if(c=='y') return;}}//10.订票乘客信息void Display_Reserver(){Flight *p1;Customer *c1;system("cls");p1=Head;if(Empty_Flight()) return;printf("\n\t订票乘客信息");if(IsEmpty){printf("\n\t对不起,没有订票乘客信息!\n"); getch();return;}printf("\n______________________________________________________________\n" );printf("Name Flight_No Plane_No Tic_Amount Des_Name Rank_No ID\n");while(p1 != NULL){if(p1->CustName != NULL){c1 = p1->CustName;while(c1 != NULL){printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",c1->Name,p1->Flight_No,p1->Plane_No,c1->Amount,p1->Des_Name,c1->Rank,c1->IDinfor);if(p1->Free_Amount >= 1)printf("\n\n\t还有多余的票!\n");else printf("\n\n\t票已售完!\n");c1=c1->Next;}}p1=p1->Next;printf("\n______________________________________________________________\n" );}printf("\n\t按任意键返回!"); getch();return;}//11.候补乘客信息void Display_Replace(){Flight *p1;Customer *c1;system("cls");p1=Head;if(Empty_Flight()) return;printf("\n\t候补乘客信息!");if(IsReplace){printf("\n\t对不起,没有候补乘客!\n"); getch();return;}printf("\n______________________________________________________________\n" );printf("姓名航班号飞机型号订票数目的地舱位等级顾客号\n");while(p1 != NULL){if(p1->ReplName != NULL){c1=p1->ReplName;while(c1 != NULL){printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",c1->Name,p1->Flight_No,p1->Plane_No,c1->Amount,p1->Des_Name,c1->Rank,c1->IDinfor);if(p1->Free_Amount >= 1)printf("\n\n\t还有多余的票!\n");else printf("\n\n\t票已售完!\n");c1=c1->Next;}}p1=p1->Next;}printf("\n\n______________________________________________________________\ n");printf("\n\t按任意键返回!"); getch();return;}//12.退票办理函数void RefundticketMenu(){int Flight_No=0,flag=0;Flight *p1;Customer *c2,*c4;Customer *c3,*c5;char answer[7],name[7];int tag=0;int IDinfor;if(Empty_Flight()) return;printf("\n\t现在开始进行退票手续");if(IsEmpty){printf("\n\t对不起,乘客不存在!"); getch();return;}while(1){flag = 0; tag=0; Flight_No=0;printf("\n\t请输入航班:"); scanf("%s",&answer);if(Find_Line2(Head,answer,&p1,&Flight_No)){c2=p1->CustName;printf("\n\t请输入您的姓名:");scanf("%s",&name);if(c2==NULL){printf("\n\t对不起,乘客不存在!");if(Continue() == 'n') return;}elsewhile(c2 != NULL){if(strcmp(c2->Name,name) == 0){if(c2==p1->CustName){prior=p1->CustName;IDinfor=c2->IDinfor;flag=1; break;}}else if(c2->Next != NULL){if(strcmp(c2->Next->Name,name)==0){tag=1;prior=c2;IDinfor=c2->Next->IDinfor;flag=1; break;}}c2 = c2->Next;shouldsave = 1;}if(!flag)printf("\n\t对不起,乘客不存在!\n");}else printf("\n\t对不起,乘客不存在!\n");if(flag){if(prior == p1->CustName && !tag){if(prior->Next == NULL){p1->Free_Amount += prior->Next->Amount;p1->CustName = NULL;}else{p1->Free_Amount += prior->Next->Amount;p1->CustName = prior->Next;}}else{p1->Free_Amount += prior->Next->Amount;prior->Next = prior->Next->Next;}Customer_Count--;if(Customer_Count == 0) IsEmpty = 1;shouldsave =1;}if(flag){c3=p1->ReplName;while(c3!=NULL){if(c3->Amount <=p1->Free_Amount);{printf("\n\t候补乘客已经存在!\n");c4=(Customer*)malloc(sizeof(Customer));Custp1[Flight_No]->Next=c4;c4->Next=NULL;IsEmpty=0;if(p1->CustName == NULL) p1->CustName = c4;strcpty(c4->Name,c3->Name);c4->Rank = c3->Rank;c4->Amount = c3->Amount;c4->IDinfor = c3->IDinfor;p1->Free_Amount -= c3->Amount;Customer_Count++;if(c3->Next == NULL) IsReplace=1;if(p1->ReplName==c3){if(p1->ReplName->Next==NULL)p1->ReplName==NULL;else p1->ReplName = c3->Next;}else c5->Next=c3->Next->Next;break;}if(c3->Next!=NULL)if(c3->Next->Amount <= p1->Free_Amount)c5=c3;c3=c3->Next;shouldsave=1;}printf("\n\t退票成功!"); getch();return;}shouldsave=1;if(Continue() == 'n') return;}}//13.乘客管理子菜单函数void CustomermagMenu(){char c;system("cls");while(1){printf("\n\t\t乘客管理菜单:\n");printf("\n______________________________________________________________\n" );printf("\t 1. 乘客信息 \n");printf("\t 2. 候补乘客信息 \n");printf("\t 3. 返回主菜单 \n");printf("\n\n______________________________________________________________\ n");printf("\t请选择您想要的服务:");scanf("%s",&c);switch(c){case '1': Display_Reserve(); break;case '2': Display_Replace(); break;case '3': return;default: ErrorMess();}}}int main(int argc, char *argv[]) {char c;Flight *p1;system("color 1f");system("mode con: colos=78 lines=35");p1=Head;do{system("cls");printf("\n\t\t 航空客运订票系统主菜单\n");printf("\n********************************************************\n");printf("\t 1.航班管理菜单\n");printf("\t 2.订票办理菜单\n");printf("\t 3.退票办理菜单\n");printf("\t 4.乘客管理菜单\n");printf("\t 5.退出系统\n");printf("\n*************谢谢使用航空客运订票系统!*****************\n");printf("请选择您想要的服务:");scanf("%s",&c);switch(c){case '1': LinemanageMenu(); break;case '2': bookingMenu(); break;case '3': RefundticketMenu();break;case '4': CustomermagMenu(); break;case '5': exit(0);default: break;}while(c!='5');}while(c!='5');return 0;}。

相关文档
最新文档