当前位置:文档之家› 航空客运订票系统

航空客运订票系统

这是我上网搜的一个材料,大家看一下,我们这次课程设计用java语言来实现,大家仔细看一下项目需求分析,基本要实现的功能如下,大家自己也在网上下些资料,共享一下,人多力量大,好好研究研究项目,下周会聚集大家讨论一下,定下每个人要完成的任务,大家一定要仔细研究,到时候有什么要添加修改的都提出来,做到让项目完美。

航空客运定票系统应该为客户提供三个基本的功能:查询航线、客票预定和办理退票。

(一)查询航线:能够根据客户提出终点站名输出相关的信息,包括航班号、飞机号、飞行日期、载员定额、余票量、已定票的客户名单(包括该客户的姓名、定票量、舱位等级)以及等候替补的客户名单(包括姓名和所需票量)、最近一天航班的日期和余票额;由于航空公司的航班保持基本不变,所以应该采用顺序存储结构将各条航线的基本情况登陆在一张线性表上,按照终点站名有序排列。

(二)客票预定:根据客户提出的要求(航班号和定票数额)查询该航班的余票情况。

如余票能够满足客户的要求则为客户办理定票手续并输出相应的座位号;若该航班已经满员或余票额少于客户的定票额,则需重新询问客户需求。

若需要可登记排队候补并留下客户的联系方式,不需要则退出。

在客票预定这一环节里将出现两个客户名单:已定票客户名单和需定票客户名单。

两客户名单可分别由线性表和队列实现。

为查找方便,已定票客户的线性表应按姓名有序,同时为了插入和删除方便,,应以链表作为存储结构。

由于无法知道预约的人数,队列也应该以链表作为存储结构。

(三)办理退票:根据客户提供的情况(日期航班),为客户办理退票手续,同时在系统中删除该客户的基本信息。

然后查询该航班是否有人排队替补,首先访问排在第一的客户,若退票额能够满足他的要求,则为他办理定票手续,否则依次询问其他排队候补的客户。

从问题的提出可以看到,我们需要的只是能实现对数据的插入,删除,检索这样一个软件。

由于乘客的数量较大并且不固定,因此选择用链表来保存乘客的基本信息:包括乘客的姓名,身份证号,搭乘班机的航班号,以及预定的座位号(假设座位预先订号)。

为了将这些信息保存起来以备下次程序运行时调用,将必需的信息写入文件中,在程序的初始化时读入。

综合一下来看,我们需要做的是建立一个可以插入和删除节点的链表,并能检索这个链表,在必要的时候将链表的内容保存到文件中。

任何一家航空公司都想尽可能的为客户提供优质的服务。

设计这样一个面向顾客的航空订票系统,最重要的就是设计的功能人性化,这就要求:采用先进的设计理念与开发工具,用技术全面提升服务,保证系统功能的强大与完整;具有高可靠性和强大有效的容错能力是系统设计的重要前提,不能影响平台的运行。

在系统设计过程中应充分考虑系统的可扩展性,使系统可满足不断优化、不断升级和新业务整合切入的需求。

1、航空客运订票系统【问题描述】航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。

试设计一个航空客运订票系统,以便上述业务可以借助计算机来实现。

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

若需要,可登记排队候补;(3)承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘客定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。

下面这个C编写代码我之所以没删,是想让大家看看各部分功能在C中是怎样实现的,比如说订票的多种情况,不同情况,不同的提示等,这都是可以借鉴的。

用顺序表的查找和链队列实现#include <stdio.h>#include <string.h>#include <conio.h>#include <ctype.h>#include <stdlib.h>#include <malloc.h>#include <math.h>//overflow#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{//创建一个含有六个信息的结构体char hangbanhao[15];//航班号-char feijihao[15];//飞机号int feixingriqi;//起飞时间int chenkerenshu;//座位数int yupiao;//余票char zhongdianzhai[15];//降落城市struct Hangxian *next;//指向下一个链结点的指针struct Yidingkehu *yiding;//定义一个指向已订票客户的头结点指针struct Weidingkehu *yudingqueue;}Hangxian,*Linklist;struct Hangxian *L=NULL;//struct Yidingkehu *H;//为已订票客户链队来申请空间linkQueue Q;//linkQueue类型的来申请空间Linklist InitLinklist();//01int InsertLinklist(Linklist &head1);//02void 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: chaxungongnen();//查询功能break;case 3: dingpiaogongnen();//订票功能break;case 4:tuipiaogongnen();//退票功能break;default :exit(0);//退出}}while(n==1||n==2||n==3||n==4);}void lurugongneng()//初始化的单链表*********************************************************录入功能{int j=1,m;do{if(!InsertLinklist((Linklist) L)) //向其中加入航班信息{printf("内存已满\n"); exit(OVERFLOW);}//向链表中加一结点printf("\t是否要输入下一个航线记录?\n");printf("\t是请输入1\n");printf("\t否请输入2\n\t");scanf("%d",&m); //在这里依靠人来决定是否输入下一条航线记}while(m==1);}Linklist InitLinklist(){//01L=(Linklist)malloc(sizeof(Hangxian));if(!L) exit(OVERFLOW);L->next=NULL;//建立一个带有头结点的单链表return (L);}int InsertLinklist(Linklist &L)//02向航线链表添加新的结点{Linklist p;//int m,n;p=(Linklist)malloc(sizeof(Hangxian));//为一个新的结点分配空间if(!p) exit(OVERFLOW);printf("\t请依次输入下面几项内容:\n\n");//这里的输入采用一个个单独输入,避免了乱赋值的现象printf("航班号\n");gets(p->hangbanhao);//这里的二个gets主要是因为在回车键的输入,其中的第一个是来接收上次的回车gets(p->hangbanhao);printf("飞机号\n");gets(p->feijihao);printf("终点站\n");gets(p->zhongdianzhai);printf("飞行日期\n");scanf("%d",&p->feixingriqi);printf("乘客总数\n");scanf("%d",&p->chenkerenshu);printf("余票数\n");scanf("%d",&p->yupiao);p->yiding=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));//为它申请空间p->yudingqueue=Q.front=Q.rear=(Qptr)malloc(sizeof(Weidingkehu));//为它申请空间p->next=L->next;//L->next=p;//这二句是链表中的头插法插入一个结点return (ok);}voidchaxungongnen()//*************************************************************** ***查询功能{int n;printf("\t 查找航线信息\n");printf("\t+++++++++++++++++++++++++++++\n");printf("\t==>1. 通过目的地查询==\n");printf("\t==>2. 通过航班号查询==\n");printf("\t+++++++++++++++++++++++++++++\n");printf("\t请选择:");scanf("%d",&n);printf("\n");//格式化switch(n){case 1:mddchaxun();break;case 2:hbhchaxun();break;default :break;}}void mddchaxun()//通过目的地查询{char c[15];int m;Linklist p=L;printf("\t请输入要查询的目的地:");gets(c);gets(c);//原因同上do{p=p->next;if(p){m=strcmpi((*p).zhongdianzhai,c);//如果==的话则m=0;if(m==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];int m;Linklist p=L;printf("\t请输入要查询的航班号:");gets(c); gets(c);printf("\n");do{p=p->next;if(p){m=strcmpi((*p).hangbanhao,c);//如果==的话则m=0;这里的(*p).与p->的作用是一样的if(m==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类型的来,方便插入与删除char c[15];int m=1,piao,ydpiao=0,yd=0,n;//gets(c);printf("请输入终点站名:"); gets(c); printf("\n");p=L->next;if(p) {do{//查找一下,是否有这个航班if(!p){printf("对不起,没有你要找的航班:\n\n");goto loop1;}m=strcmpi(p->zhongdianzhai,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);}else p=p->next;}while(m!=0);if(m==0){do{printf("\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("请输入你的名字:");gets(h->name);gets(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\n",p->yupiao);printf(" 是否要重新订票?\n");printf("需要请输入1 否则请按2 预订请输入3 : ");scanf("%d",&m);printf("\n");if(m==3) goto loop3;}}while(m==1);}}else if(!p) {loop3: struct Weidingkehu *q3;printf("对不起,该航班的票已售完\n");q.front=p->yudingqueue;if(q.front==q.rear) printf("没有人预订票,是否要预订?\n");else if(q.front!=q.rear) printf("已有人预订票,是否要预订?\n");printf("预订请输入1 否则输入2 : ");scanf("%d",&n);printf("\n");if(n==1){q3=(Qptr)malloc(sizeof(Weidingkehu));printf("请输入你的姓名"); gets(q3->name); gets(q3->name);//q3不能指向nameprintf("请输入订票数"); scanf("%d",&q3->yudingpiao);q3->next2=NULL;q.rear->next2=q3;q.rear=q3;printf(" 你已经预订了!\n");}}loop1:;}voidtuipiaogongnen()//***************************************************************退票功能{Linklist p=L;Yidingkehu *h=H,*h1,*h2;linkQueue q=Q;char c[15],name1[15];int m=1,piao,n;//gets(c);printf("请输入航班号:"); gets(c);p=L;//->next;if(p){do{ //使用do while来查找是否有此航班if(!p){//如果是到了表尾且没有匹配,goto至再输入航班号printf("\n对不起,没有你要找的航班:\n");goto loop1;}m=strcmpi(p->hangbanhao,c);//如果匹配的话,m=0if(m==0){printf("\t航班信息:\n");printf("航班号:%s\n",p->hangbanhao);printf("飞机号:%s\n",p->feijihao);printf("飞行时间:周%d\n",p->feixingriqi);printf("余票量:%d\n",p->yupiao);}else p=p->next;}while(m!=0);if(m==0){//如果找到了,就来给他退票do{h=p->yiding;if(h){printf("请输入你的姓名:");gets(name1);//gets(name1);printf("请输入你订的票数:");scanf("%d",&piao);printf("\n");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\n");struct Weidingkehu *q3;q.front=p->yudingqueue;if(q.front==q.rear) {printf("没有人预订票:\n"); goto loop1;}if((p->yupiao)>=(q.front->next2->yudingpiao)){h2=(struct 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 ");scanf("%d",&m);printf("\n");}}}while(m==1);}}loop1: ;}。

相关主题