课程设计航空客运订票系统.docx

上传人:b****5 文档编号:8524160 上传时间:2023-01-31 格式:DOCX 页数:22 大小:95.52KB
下载 相关 举报
课程设计航空客运订票系统.docx_第1页
第1页 / 共22页
课程设计航空客运订票系统.docx_第2页
第2页 / 共22页
课程设计航空客运订票系统.docx_第3页
第3页 / 共22页
课程设计航空客运订票系统.docx_第4页
第4页 / 共22页
课程设计航空客运订票系统.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

课程设计航空客运订票系统.docx

《课程设计航空客运订票系统.docx》由会员分享,可在线阅读,更多相关《课程设计航空客运订票系统.docx(22页珍藏版)》请在冰豆网上搜索。

课程设计航空客运订票系统.docx

课程设计航空客运订票系统

数据结构课程设计报告

课程名称______数据结构

题目名称航空客运订票系统

学生学院计算机学院

专业班级11级软件1班

 

2012年6月29日

一.需求分析

设计一个航空客运订票系统

基本要求:

1.每条航线所涉及的信息有:

终点站名、航班号、飞机好、飞行周日、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、仓位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);

2.作为示意系统,全部数据可以只放在内存中;

3.系统能实现的操作和功能如下:

(1)查询航线:

根据旅客提出的终点站名输出下列信息:

航班号、飞机好、星期几飞行,最近一天航班的日期和与票额;

(2)承办订票业务:

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

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

(3)承办退票业务:

根据客户提供的情况(日期、航班)。

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

2.概要设计

用链队储存客户信息,用线性表储存航线

函数声明

voidfromAirlineNum();//通过航班号查询

voidfromEndCity();//通过目的地查询

voidfromDay();//通过时间查询

voidInitialize();//初始化录入功能

voidairLineCheck();//查询功能

voidcustomerBooking();//订票功能

voidcancelFuntion();//退票功能

voidcustomerInformation();//用户信息查询

三.详细设计

#include

#include

#include

#include

#defineok1

typedefstructBooking

{//单链表

charname[15];//已订票的客户姓名

intticket;//已订票数量

structBooking*next1;

}Booking,*Link;

typedefstructyetBooking{//单链队

charname[15];//预订票的客户姓名

intmoreticket;//要订票数量

structyetBooking*next2;//下一个链队结点指针

}yetBooking,*Qptr;

typedefstruct{

Qptrfront;//单链队头结点

Qptrrear;//单链队尾结点

}linkQueue;

typedefstructairLine{//创建一个航线的结构体

charfightNum[15];//航班号-

charplaneNum[15];//飞机号

intfightTime;//起飞时间

intlevel;//舱位等级

intmoreTicket;//余票

charendCity[15];//降落城市

inttotalTicket;//票数总额

structairLine*next;//指向下一个链结点的指针

structBooking*bookingedList;//定义一个指向已订票客户的头结点指针

structyetBooking*bookdingQueue;

linkQueueQ;

}airLine,*Linklist;

structairLine*L=NULL;//定义全局量

structBooking*H;//为已订票客户链队来申请空间

//linkQueueQ;//linkQueue类型的来申请空间

LinklistInitLinklist();//声明

intInsertLinklist(Linklist&head1);//声明

voidfromAirlineNum();//通过航班号查询

voidfromEndCity();//通过目的地查询

voidfromDay();//通过时间查询

voidInitialize();//初始化录入功能

voidairLineCheck();//查询功能

voidcustomerBooking();//订票功能

voidcancelFuntion();//退票功能

voidcustomerInformation();//用户信息查询

voidmain()

{

H=(structBooking*)malloc(sizeof(Booking));

//Q.front=Q.rear=(Qptr)malloc(sizeof(yetBooking));

InitLinklist();

intn;

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==>6.退出==\n");

printf("\t+++++++++++++++++++++++++++++\n");

printf("\t请选择:

");

scanf("%d",&n);printf("\n");

switch(n)

{

case1:

Initialize();//录入功能

break;

case2:

airLineCheck();//查询功能

break;

case3:

customerBooking();//订票功能

break;

case4:

cancelFuntion();//退票功能

break;

case5:

customerInformation();

break;

default:

exit(0);//退出

}

}while(n==1||n==2||n==3||n==4||n==5);

}

voidInitialize()//航班录入功能

{

intj=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);

}

LinklistInitLinklist()

{

L=(Linklist)malloc(sizeof(airLine));

if(!

L)exit(OVERFLOW);

L->next=NULL;//建立一个带有头结点的单链表

return(L);

}

intInsertLinklist(Linklist&L)//向航线链表添加新的结点

{

Linklistp;

p=(Linklist)malloc(sizeof(airLine));//为一个新的结点分配空间

if(!

p)exit(OVERFLOW);

printf("\t请依次输入下面几项内容:

\n\n");//这里的输入采用一个个单独输入,避免了乱赋值的现象

printf("航班号\n");

scanf("%s",p->fightNum);

printf("飞机号\n");

scanf("%s",p->planeNum);

printf("终点站\n");

scanf("%s",p->endCity);

printf("飞行日期(星期)\n");

scanf("%d",&p->fightTime);

printf("舱位等级\n");

scanf("%d",&p->level);

printf("票数总额\n");

scanf("%d",&p->totalTicket);

p->moreTicket=p->totalTicket;

p->bookingedList=(Booking*)malloc(sizeof(Booking));//为它申请空间

p->bookdingQueue=p->Q.front=p->Q.rear=(Qptr)malloc(sizeof(yetBooking));//为它申请空间

p->next=L->next;

L->next=p;//这二句是链表中的插入一个结点

p->Q.front->next2=NULL;

returnok;

}

voidairLineCheck()//查询功能

{

intn;

printf("\t查找航线信息\n");

printf("\t+++++++++++++++++++++++++++++\n");

printf("\t==>1.通过目的地查询==\n");

printf("\t==>2.通过航班号查询==\n");

printf("\t==>3.通过日期查询==\n");

printf("\t+++++++++++++++++++++++++++++\n");

printf("\t请选择:

\n");

scanf("%d",&n);

switch(n)

{

case1:

fromEndCity();

break;

case2:

fromAirlineNum();

break;

case3:

fromDay();

break;

default:

break;

}

}

 

voidfromEndCity()//通过目的地查询

{

charc[15];

Linklistp=L;

intm=1;

printf("\t请输入要查询的目的地:

\n");

scanf("%s",c);

do{

p=p->next;

if(p)

{

if(strcmpi((*p).endCity,c)==0)

{

printf("\t航班号:

%s\n",p->fightNum);

printf("\t飞机号:

%s\n",p->planeNum);

printf("\t飞行时间:

周%d\n",p->fightTime);

printf("\t票数总额%d\n",p->totalTicket);

printf("\t余票量:

%d\n\n\n",p->moreTicket);

m=0;

}

}

elsem=1;

}while(m!

=1);

if(m==1)printf("\t对不起没有你要找的航班号:

\n");

}

voidfromAirlineNum()//通过航班号查询

{

charc[15];

Linklistp=L;

intm=1;

printf("\t请输入要查询的航班号:

\n");

scanf("%s",c);

do{

p=p->next;

if(p)

{

if(strcmpi((*p).fightNum,c)==0)

{

printf("\t航班信息:

\n");

printf("\t航班号:

%s\n",p->fightNum);

printf("\t飞机号:

%s\n",p->planeNum);

printf("\t飞行时间:

周%d\n",p->fightTime);

printf("\t票数总额%d\n",p->totalTicket);

printf("\t余票量:

%d\n\n",p->moreTicket);

m=0;

}

}

else

{//如果不匹配的话就做

printf("\t对不起没有你要找的航班号:

\n");m=0;

}

}while(m!

=0);

}

voidfromDay()//通过日期查询航班

{

inti;

Linklistp=L;

intm=2;

printf("\t请输入日期:

\n");

scanf("%d",&i);

printf("\t航班信息:

\n");

do{

p=p->next;

if(p)

{

if((*p).fightTime==i)

{

printf("\t航班号:

%s\n",p->fightNum);

printf("\t飞机号:

%s\n",p->planeNum);

printf("\t飞行时间:

周%d\n",p->fightTime);

printf("\t票数总额%d\n",p->totalTicket);

printf("\t余票量:

%d\n\n\n",p->moreTicket);

m=0;

}

}

elsem=1;

}while(m!

=1);

if(m==1)printf("\t对不起没有你要找的航班号:

\n");

}

voidcustomerBooking()//订票功能

{

Linklistp=L;//Linklist类型的L来指向链表头

Booking*h,*h1;//Booking定义客户的结点,方便插入与删除

//linkQueueq;//linkQueue类型的来,方便插入与删除

structyetBooking*q3;

charc[15];

intm=1,ticket,n;

intydticket=0,yd=0;

printf("请输入航班号:

\n");

scanf("%s",c);

//p=L->next;

if(p){

do{//查找一下,是否有这个航班

if(!

p)

{

printf("对不起,没有你要找的航班:

\n\n");

m=-1;

break;

//gotoloop1;

}

m=strcmpi(p->fightNum,c);

//通过比较来判定

if(m==0)

{

printf("航班信息:

\n");

printf("航班号:

%s\n",p->fightNum);

printf("飞机号:

%s\n",p->planeNum);

printf("飞行时间:

周%d\n",p->fightTime);

printf("票数总额%d\n",p->totalTicket);

printf("余票量:

%d\n",p->moreTicket);

}

else

p=p->next;

}while(m!

=0);

if(m==0)

{//当有该航班时,进行订票

do{

printf("\n请输入你要订的票数:

\n");

scanf("%d",&ticket);

while(ticket<=0){

printf("票数应该大于0\n");

scanf("%d",&ticket);

}

if(ticket<=p->moreTicket)

{

h=p->bookingedList;

if(h)

{

h1=h;

h=h->next1;

h=(structBooking*)malloc(sizeof(Booking));

printf("请输入你的名字:

\n");

scanf("%s",h->name);

h->ticket=ticket;

h->next1=h1->next1;

h1->next1=h;

p->moreTicket=p->moreTicket-ticket;

printf("订票成功:

\n");

m=2;

}

}

else//余票量不足时

{

printf("余票量:

%d\n",p->moreTicket);

printf("对不起,余票%d张不足,不能完成订票\n",p->moreTicket);

printf("是否要重新订票?

\n");

printf("需要请输入1\n");

printf("取消请按2:

\n");

printf("预订请输入3:

\n");

scanf("%d",&m);

if(m==3)

{

q3=(yetBooking*)malloc(sizeof(yetBooking));

printf("请输入你的姓名\n");

scanf("%s",q3->name);

q3->moreticket=ticket;

q3->next2=NULL;

p->Q.rear->next2=q3;

p->Q.rear=q3;

printf("恭喜,预订成功!

\n");

}

}

}while(m==1);

}

}

}

voidcancelFuntion()//***************************************************************退票功能

{

Linklistp=L;

Booking*h=H,*h1,*h2;

//linkQueueq=Q;

charc[15],name1[15];

intm=1,ticket,n;//定义相应变量

printf("请输入航班号:

\n");

scanf("%s",c);

p=L->next;

if(p)

{

do{//使用dowhile来查找是否有此航班

if(!

p)

{//如果是到了表尾且没有匹配,

printf("\n对不起,没有你要找的航班:

\n");

m=-1;

}

if(strcmpi(p->fightNum,c)==0)//比较航班号输出信息

{

printf("\t航班信息:

\n");

printf("航班号:

%s\n",p->fightNum);

printf("飞机号:

%s\n",p->planeNum);

printf("飞行时间:

周%d\n",p->fightTime);

printf("票数总额%d\n",p->totalTicket);

printf("余票量:

%d\n",p->moreTicket);

m=0;

}

elsep=p->next;

}while(m>0);

if(m==0)

{//如果找到了,则退票

inti=1;

do{

h=p->bookingedList;

printf("请输入你的姓名:

\n");

scanf("%s",name1);

printf("请输入你订的票数:

\n");

scanf("%d",&ticket);

while(ticket<=0)

{

printf("票数不能小于等于零,请重新输入:

\n");

scanf("%d",&ticket);

}

while(h)

{

if(h)

if(strcmpi((*h).name,name1)==0&&h->ticket==ticket)//如果名字和订的票数相等,则就给他取消订票

{

p->moreTicket+=h->ticket;

h2=h;

if(i==1)

{

h=h->next1;

free(h2);

}

else{

h1->next1=h->next1;

free(h2);

}

printf("你取消订票成功\n");

structyetBooking*q3;

if(p->Q.front==p->Q.rear)

{

printf("没有人预订票:

\n");

break;

}

if((p->moreTicket)>=(p->Q.front->next2->moreticket))

{

h2=(Booking*)malloc(sizeof(Booking));

strcpy(h2->name,p->Q.front->next2->name);

h2->ticket=p->Q.front->next2->moreticket;

n=p->moreTicket-p->Q.front->next2->moreticket;

p->moreTicket=n;

q3=p->Q.front;//

if(p->Q.rear==q3){free(q3);p->Q.front=p->Q.rear=NULL;}

else{

p->Q.front=p->Q.front->next2;//这二语句来删除结点

free(q3);

}

printf("链队中删除成功\n");

h2->next1=p->bookingedList->next1;

p->bookingedList->next1=h2;//为之插入进已订票客户链表中

printf("为预订的客户订票成功\n");

break;

}

elseprintf("余票数不够,不能为预订客户订票!

\n");

}else{

h1=h;

h=h->next1;

}

}

if(!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1