航空客运订票系统 Company number:【0089WT-8898YT-W8CCB-BUUT-202108】课程设计报告课程名称数据结构课题名称航空客运订票系统专业通信工程班级学号姓名指导教师2013 年 6 月 29 日湖南工程学院课程设计任务书课程名称数据结构课题航空客运订票系统专业班级学生姓名学号指导老师张鏖烽田娟秀李杰君审批任务书下达日期 2013 年 6 月 23 日任务完成日期 2013 年 6 月 29 日目录1.需求分析 (1)2.概要设计 (1)定义“航线”类型 (2)主函数 (2)调用关系 (3)3.详细设计 (3)航线与客户的存储结构 (3)各个系统模块 (3)算法设计 (4)主函数功能 (6)整个系统的流程图 (7)存储结构设计 (7)4.调试分析 (7)5.用户使用说明 (8)6.测试结果 (10)7.心得体会 (12)8.附录 (13)课题名称航空客运订票系统1.需求分析航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。
试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
【基本要求】(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);(2)系统能实现的操作和功能如下:①录入:可以录入航班情况,全部数据可以只放在内存中,最好存储在文件中;②查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;③承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。
若需要,可登记排队候补;④承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
初始化航班信息如下:通过输入0~5这六个数字选择相应的操作,如:查询航班,订票,退票等操作;2.概要设计两个客户名单可分别由线性表和队列实现。
为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。
由于预约人数无法预计,队列也应以链表作存储结构。
整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。
每条航线是这张表上的一个记录,包含上述8个域、其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。
注:由于“航线”可只用一条单链表记录,故采用全局变量,减少参数的传递。
定义“航线”类型ADT Lairline{数据对象:D={ai|ai∈航线链表集,i=1,2,3……,n,n>=0}数据关系:R1={<ai-1,ai>| ai-1,ai∈D,i=1,2,3……,n }基本操作:Lairline search_line() 照航班查找Lairline search_line(){char a[10];airline *p;p=L->next;P("Please input the number of line:"); S("%s",a);for(;p;p=p->next)if(!strcmp(a,p->line_num )) break;return p;}注:通过建立节点p实现链表的遍历,利用for循环挨个查找,直到找到为止,再返回找到的这个节点,实现传递。
2.订票系统void book(){ int i; int flag=0;airline *p;customer *cst, *c;P("Please choose the way of viewing:\n"); 始化航线void InitLine() 班查询void search(){int i; int flag=0;airline *p;P("Please input the way of viewing the flight:\n");P("The number of the flight------------>1\n");照Array飞机型号查找{char a[10];airline *p;p=L->next;P("Please input the number of plane:");S("%s",a);for(;p;p=p->next)if(!strcmp(a,p->plane_num)) break;return p;}Lairline search_date()照日期查询航班{int a;airline *p;p=L->next;P("Please input the date of plane:");S("%d",&a); 航班终点查找航班{char a[20];airline *p; p=L->next;P("Please input the final address of the plane:");S("%s",a);for(;p;p=p->next)if(!strcmp(a,p->ter_address)) break;return p;}/******************主界面******************/void boundary(){P(" ***********欢迎您进入航空订票客服系统*********** \n ");P("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");P(" O(∩_∩)O 请选择您要进行的业务:\n");P("\t\t显示所有航线 ==>请输入1\n");P("\t\t查询航线信息 ==>请输入2\n");P("\t\t进入订票系统 ==>请输入3\n");P("\t\t进入退票系统 ==>请输入4\n");P("\t\t退出客服系统 ==>请输入0\n");P("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");P("\t\t清除屏幕信息 ==>请输入5\n");P("请按照以上的信息提示进行操作: \t");}/*********显示乘客信息*****************/void print_customer(airline *p){customer *c;if(p->booked){c=p->booked;P("已经购票的乘客的信息\n\t票数\t姓名\t\n");for(;c;c=c->next)P("%5d\t\t %s\n",c->num,c->name);P("\n\n");}else P("╮(╯_╰)╭暂时没有客户订票!\n\n");if(p->wait){c=p->wait;P("排队购票的乘客的信息\n\t票数\t姓名\t\n\n");for(;c;c=c->next)P("%5d\t\t %s\n",c->num,c->name);P("\n\n");}elseP("暂时没有客户排队订票\n\n");}/*********插入新航班(创建链表)*****************/void insert_line(){ airline *p,*q;int flag=1;for(;flag;){q=(Lairline)malloc(sizeof(airline));P("Please input the number of the plane: ");S("%s",q->line_num);for(p=L;p->next;p=p->next)if(strcmp(p->next->line_num,q->line_num)>=0) break;if(p->next&&strcmp(p->next->line_num,q->line_num)==0){P("航班已存在,请重新输入\n");continue; ,q->next->name,q->next->num);P("Do you want to book the tickets YES(1) NO(0)");S("%d",&flag);if(flag) //如果选择订票{ q0=q->next; q->next=q->next->next; //插入q0节点q0->next=p->booked; p->booked=q0;p->remain=p->remain-q0->num; //q0定完票后,余票进行修改P("SUCCESS O(∩_∩)O\n\n\n");}else q=q->next;//没有选择订票 }else q=q->next;//余票不足时} p->wait=h->next;}/***********************退票系统*****************************/void Refund(){int flag;char a[20];airline *p;customer *c,*c1;p=search_line(); //查找到对应的航班c=p->booked; //已经订票的客户为cif(!p){P("The airline is not exist\n\n");boundary(); //返回主界面return;}P("Please input your name:");S("%s",a);if(!p->booked->name) //如果未找到这个人的信息{P("Sorry!Your information isn't found!╮(╯_╰)╭\n");boundary(); //返回主界面return;}if(!strcmp(a,p->booked->name)) //{P("The information of returning tickets:\n"); //退票信息 P("Name:%s\t Final Address:%s\t Tickets:%d\t\n",p->booked->name,p->ter_address,p->booked->num);P("Do you want to return the tickets YES(1) NO(0)\n"); //是否退票S("%d",&flag);if(flag) //如果退票{p->booked=p->booked->next; //删除节点操作p->remain=p->remain+c->num; //余票数目增加free(c);P("SUCCESS! O(∩_∩)O \n\n\n\n\n"); //退票成功waited(p); //再次询问是否排队订票boundary(); //返回主菜单}}else{for(;c->next;c=c->next)if(!strcmp(a,c->next->name)) //查找这个订票人的信息break;if(!c->next) //没有找到这个人的信息{P("Sorry!Can't find your information!\n\n");boundary(); return;}else //找到了此人的订票信息{P("The information of returning tickets:\n");P("Name:%s\t Final Address:%s\t Tickets:%d\t\n",p->booked->name,p->ter_address,p->booked->num);P("Do you want to return the tickets YES(1)NO(0)\n"); //是否退票S("%d",&flag);if(flag) //确定退票{ c1=c->next;c->next=c->next->next; //删除节点p->remain=p->remain+c1->num; //余票数目增加free(c1);P("The operation is successful O(∩_∩)O\n\n");waited(p);boundary();}}}}/***************航班查询系统*****************************/void search(){int i; int flag=0;airline *p;P("Please input the way of viewing the flight:\n"); //请输入查询航班的方式P("The number of the flight------------>1\n"); //航班号P("The number of the plane------------->2\n"); //飞机号码P("The date of the flight-------------->3\n"); //航班日期P("The final address of the flight----->4\n"); //航班终点S("%d",&i); for(;!flag;)switch(i) //按照选择项进行操作{ case 1: p=search_line();flag=1;break;case 2: p=search_plane();flag=1;break;case 3: p=search_date();flag=1;break;case 4: p=search_address();flag-=1;break;default:P("Wrong,input again!\n");break;}if(p){P("终点站航班号飞机号飞行周日余票量\n");P("%-9s%9s%13s%10d%15d\n",p->ter_address,p->line_num,p->plane_num,p->date,p->remain);P("Booking the tickets(Sure,please input 1;Else input any number! )");S("%d",&i);if(i==1) book();Else P("\n\n\n\n");boundary();}Else P("The flight is not exist╮(╯_╰)╭\n\n\n"); } /********************显示所有航班信息***************************/void printline(){ int flag; airline *p; p=L->next;P("终点站航班号飞机号飞行周日余票量\n");for(;p;p=p->next){P("%-15s%7s%15s%8d%12d\n",p->ter_address,p->line_num,p->plane_num,p->date,p->remain);}P("\n\n\n\n\n");boundary(); }/*********************初始化航线信息****************************/void InitLine(){ airline *p,*q;L=(airline *)malloc(sizeof(airline)); L->booked=NULL;//初始化航线信息L->wait=NULL;L->next=NULL;strcpy(L->ter_address,"00000000");strcpy(L->line_num,"000");strcpy(L->plane_num,"0000000");L->date=L->remain=L->total=0;q=L;p=(airline *)malloc(sizeof(airline)); //航线一p->booked=NULL;p->wait=NULL;strcpy(p->ter_address,"jiangsu");strcpy(p->line_num,"003");strcpy(p->plane_num,"3333333");p->date=1;p->remain=120;p->total=120;p->next=q->next;q->next=p;p=(airline *)malloc(sizeof(airline)); //航线二p->booked=NULL;p->wait=NULL;strcpy(p->ter_address,"shanghai");strcpy(p->line_num,"002");strcpy(p->plane_num,"2222222");p->date=2;p->remain=120;p->total=120;p->next=q->next;q->next=p;p=(airline *)malloc(sizeof(airline)); //航线三p->booked=NULL;p->wait=NULL;strcpy(p->ter_address,"hunan");strcpy(p->line_num,"001");strcpy(p->plane_num,"1111111");p->date=3;p->remain=120;p->total=120;p->next=q->next;q->next=p;} void main(){ int flag=1; boundary(); InitLine();do{ switch(getchar()){case '1':printline();break;case '2':search();break;case '3':book();break;case '4':Refund();break;case '5':system("cls");boundary();break;case '0':flag=0;break;}}while(flag);}课程设计评分表课程名称:数据结构教师签名:日期:。