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

合集下载

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

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

信息科学和工程学院课程设计报告课题:航空客运订票系统目录1.课程设计内容 (3)1.1、课程设计目的 (3)1.2、课程设计题目 (3)1.3、课程设计内容 (3)1.4、实现提示 (3)2.需求分析 (4)3.概要设计 (4)3.1、系统结构图 (5)3.2、算法设计 (5)3.3、存储结构设计 (5)4.详细设计 (6)4.1、数据类型定义 (7)4.2、函数定义 (8)4.3、函数流程图 (8)4.4、程序的设计思想 (12)5.调试分析 (12)5.1、程序测试 (12)5.2 、时间复杂度分析 (13)5.3 、算法的改进设想 (13)6.问题分析及课程设计的心得体会 (14)7.使用手册 (15)8. 源程序 (15)9 参考资料 (22)一、课程设计内容1.1 课程设计目的1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的使用系统。

2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握使用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的使用。

3.学会将知识使用于实际的方法,提高分析和解决问题的能力,增加综合能力。

(1)熟练掌握链表存储结构及其建立过程和常用操作;(2)熟练掌握队列的建立过程和常用操作;(3)学会自己调试程序的方法并掌握一定的技巧。

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

2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票量少余订票额,则需重新询问客户要求。

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

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

第一部分:需求分析1、系统名称:航空客运订票系统航空客运订票的业务活动包括:查询航线、客票预定和办理退票等。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(贵州大学计算机科学与信息学院贡献)#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');}。

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

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

(贵州大学计算机科学与信息学院贡献)#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');}。

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

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

课程设计报告设计名称:数据结构课程设计选题名称:航空客运订票系统专业班级:计算机科学与技术系(院):计算机工程学院设计时间:设计地点:软件工程实验室、教室指导教师评语:成绩:签名:年月日1.课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。

2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。

2.课程设计任务与要求:任务根据教材《数据结构-C语言描述》(耿国华主编)和参考书《数据结构题集(C语言版)》(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。

设计题目从任务书所列选题表中选取,每班每题不得超过2人。

学生自选课题学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。

学生自选课题需在18周前报课程设计指导教师批准方可生效。

要求:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。

前期准备工作完备与否直接影响到后序上机调试工作的效率。

在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。

2、设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。

3、程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);6、课程设计实践作为培养学生动手能力的一种手段,单独考核。

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

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

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

基本要求有:(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. 需求分析描述要求编程解决的问题。

以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定:(a) 输入的形式和输入值的范围;(b) 输出的形式;(c) 程序所能达到的功能;(d) 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

2. 概要设计给出程序要达到的具体的要求。

描述解决相应问题算法的设计思想。

描述所设计程序的各个模块(即函数)功能。

说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

3. 详细设计实现概要设计中定义的所有数据类型,对每个操作只需要写出流程或伪码算法;对主程序和其他模块也都需要写出流程或伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数的调用关系图。

给出所使用的基本抽象数据类型,所定义的具体问题的数据类型,以及新定义的抽象数据类型。

设计出良好的输入输出界面(清晰易懂)。

4. 调试分析内容包括:(a)调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;(b)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;(c)经验和体会等。

5. 用户使用说明说明如何使用你编写的程序,详细列出每一步的操作步骤。

6. 测试结果设计测试数据,或具体给出测试数据。

要求测试数据能全面地测试所设计程序的功能。

列出你的测试结果,包括输入和输出。

这里的测试数据应该完整和严格,最好多于需求分析中所列。

7. 测试情况:给出程序的测试情况,并分析运行结果附录(非必须,按照需要添加)带注释的源程序。

可以只列出程序文件名的清单。

需求分析任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

(完整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()函数查询并以指针形式返回。

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

课程设计报告
设计名称:数据结构课程设计
选题名称:航空客运订票系统
专业班级:计算机科学与技术
系(院):计算机工程学院
设计时间:
设计地点:软件工程实验室、教室
指导教师评语:
成绩:
签名:
年月日
1.课程设计目的
1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。

2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。

2.课程设计任务与要求:
任务
根据教材《数据结构-C语言描述》(耿国华主编)和参考书《数据结构题集(C语言版)》(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。

设计题目从任务书所列选题表中选取,每班每题不得超过2人。

学生自选课题
学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。

学生自选课题需在18周前报课程设计指导教师批准方可生效。

要求:
1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象
数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。

前期准备工作完备与否直接影响到后序上机调试工作的效率。

在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。

2、设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。

3、程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释;
4、每位同学需提交可独立运行的程序;
5、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代
码不算);
6、课程设计实践作为培养学生动手能力的一种手段,单独考核。

3.课程设计说明书
一 需求分析
1.每条航线所设计的信息有:终点站名,航班号,飞机号,飞行周日(星期几),乘员定额,余票量,已订票的客户名单(包括姓名,订票量,舱位等级1,2或3)以及等候替补的客户名单(包括姓名,所需票量);
2.作为示意系统,全部数据可以只存放在内存中;
3.系统能实现的操作功能如下:
a)查询航线:
根据旅客提出的终点站名输出下列信息:航班号,飞机号,星期几飞行,最近一天航班的日期和余票额; b.) 承办订票业务:
根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若尚余票则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。

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

二 概要设计
系统结构图
(2)简介 主函数:主要运用了switch 函数和do 语句。

航线信息:显示已初始化的全部航线信息,定义了函数类型以及打印函数,运用了while 语句以及指针。

客户信息:浏览已订票客户信息,定义了函数类型,运用了if 和 while 语句。

查询航线:调用find ()函数寻找航线信息,定义了函数类型,运用了if 和 while 语句以及指针。

订票办理:定义了函数类型,运用了
if 语句及指针。

退票办理:定义了函数类型,调用查询函数,退票成功后,重新将航线名单域指向订票单链表的头指针。

根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。

运用了if 和 while 语句以及指针。

剩票排序:定义了函数类型,运用了if 和 for 语句及指针。

退出系统:直接退出。

三 详细设计
航空客运订票系统:
主函数:
int menu_select()
/*菜单界面*/
{ int c;
char s[20];
printf("\n");
printf("\t\t\t 航空客运订票系统\n");
printf("\t\t--------------------------------------\n");
printf("\t\t--------------------------------------\n");
主函数
航 线 信 息 客 户 信 息 查 询 航 线 订 票 办 理 退 票 办 理 剩 票 排 序 退 出 系 统。

相关文档
最新文档