数据结构课程设计航空订票系统.docx
- 文档编号:3578157
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:33
- 大小:188.46KB
数据结构课程设计航空订票系统.docx
《数据结构课程设计航空订票系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计航空订票系统.docx(33页珍藏版)》请在冰豆网上搜索。
数据结构课程设计航空订票系统
数据结构课程设计报告
1.航空订票系统
1.需求分析
试设计一个航空订票系统,基本要求如下:
每条航班所涉及的信息有:
航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,乘员定额,余票量,订定票的客户名单(包括姓名,订票量,舱位等级(头等舱、公务舱、经济仓)以及等候替补的客户名单(包括姓名、所需数量)。
采用链式存储结构。
系统能实现的操作和功能如下:
(1)航班信息管理。
(2)查询航线,按以下几种方式查询:
1按航班号查询;
2按起点站查询;
3按终点站查询;
4按日期查询;
每种查询方式中,查询后输出如下信息:
航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,余票量。
(3)承办订票业务:
根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。
若需要,可登记排队候补。
(4)承办退票业务:
根据客户提出的情况(日期,航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
2.设计
2.1设计思想
(1)数据结构设计
typedefstructkeHu//客¨户信息
{
charnameofKeHu[20];//客户名字
intnumofPiao;//客¨户需要票的数量
inttype;//仓位等级1:
头等Ì舱2:
公务舱3:
经济舱
structkeHu*next;/下个客户
};
typedefstructhangBan
{
intnumofHangBan;//航班号
chartypeofHB[20];//航班机型¨
charstartFly[20];//起飞¦机场
charendFly[20];//降¦落机场
charDataofHB[20];//日期格式为(20120312星期¨一)
charstartTime[20];//起飞¦时间
charendTime[20];//到达时À间
floatflyTime;//飞行时长
floatprise;//价格
intlargeNum;//成员定额
intleaveNum;//余票数量
keHu*custemer;//乘客信息名单
keHu*orderofKeHu;//替补客户
};
typedefstructNode
{
hangBan*exam;//航班信?
息¡é
intnumofN;//航班数量
structNode*next;
};
(2)算法设计
总体设计:
在Fly.h文件中设计舱位的信息处理以及订票退票和对舱位信息的管理方面的功能
然后在main,h中设计用户界面功能部分。
相应的处理函数为
FLY.H
◆voidInitiateKeHu(keHu**head);客户信息的初始化;
◆voidInitiateHangBan(hangBan**head);航班信息的初始化
◆voidInitiateNode(Node**head)机舱信息的初始化;
◆voidhangBanInsert(Node**head,intnumHB,chartypeHB[],charstartF[],charendF[],charstartT[],charendT[],charData[],floatFT,floatprise,intLM)航班插入操作。
◆inthangbanDelete(Node**head,intN)航班删除功能;
◆voidsearchforNumofHB(Node*head,intN)按舱号查询
◆voidsearchforStartF(Node*head,charsartF[])按起始站查询
◆voidsearchforEndF(Node*head,charendF[])按终点站查询
◆voidsearchforData(Node*head,charData[])按日期查询
◆voidinsertKeHu(keHu**head,charname[],intsum)//插入客户信息
◆intdeleteKeHu(keHu**head,charname[],intsum)删除客户信息
◆inlinevoidpopKeHu(keHu*head,keHu**pop)取第一个排队的客户
◆voidpopDKeHu(keHu*head)删除第一个客户
◆voidbookKeHu(Node**head,intN,charname[],intsum)//客¨户订票
◆voidreturnKeHu(Node*head,intN,charData[],charname[],intsum,intflag=0)客户退票处理
MAIN.H
◆voidGongNeng(Node*head)
◆voidhangBanM(Node*head)
◆voidhangBanSearch(Node*head)
◆voidhangBanBook(Node*head)
◆voidhangBanReturn(Node*head)
2.2设计表示
(1)函数调用关系图
用户界面:
voidGongNeng(Node*head)
voidhangBanM(Node*head)
voidhangBanSearch(Node*head)
voidhangBanBook(Node*head)
voidhangBanReturn(Node*head)
信息管理函数
voidInitiateNode
voidInitiateKeHu
voidInitiateHangBan
voidhangBanInsert
inthangbanDelete
voidsearchforNumofHB
voidsearchforStartF
voidsearchforEndF
voidsearchforDat
voidinsertKeHu
intdeleteKeHu
inlinevoidpopKeHu
voidpopDKeHu
voidbookKeHu
voidreturnKeHu
调用
调用
主函数
voidmain()
3.调试分析
◆主要遇见嵌套数据结构之后内存的初始化步骤,如果不全部初始化,有时候还需要涉及到给他申请内存空间的问题,这以后要好好注意!
◆未能实现实际时间的问题,其实可以调用系统的时间来完成这个程序的日期和其他部分,但是时间关系未能实现!
4.用户手册
●按程序提示运用即可!
5.测试数据及测试结果
主界面:
信息管理:
设置成默认设置
查询航线按航班号查询:
订票业务:
退票业务:
6.源程序清单
ØFly.h//头文件
#include"string"
usingnamespacestd;
typedefstructkeHu//客¨ª户¡ì信?
息¡é
{
charnameofKeHu[20];//客¨ª户¡ì名?
字Á?
intnumofPiao;//客¨ª户¡ì需¨¨要°a票¡À的Ì?
数ºy量¢?
inttype;//仓?
位?
等̨¨级?
1:
êo头ª¡¤等̨¨舱?
2:
êo公?
务?
舱?
3:
êo经-济?
舱?
structkeHu*next;//下?
一°?
个?
客¨ª户¡ì
};
typedefstructhangBan
{
intnumofHangBan;//航?
班㨤号?
chartypeofHB[20];//航?
班㨤机¨²型¨ª
charstartFly[20];//起e飞¤¨¦机¨²场?
charendFly[20];//降¦Ì落?
机¨²场?
charDataofHB[20];//日¨?
期¨²;ê?
格?
式º?
为a(ê¡§20120312星?
期¨²一°?
)ê?
charstartTime[20];//起e飞¤¨¦时º¡À间?
charendTime[20];//到Ì?
达ä?
时º¡À间?
floatflyTime;//飞¤¨¦行D时º¡À长¡è
floatprise;//价?
格?
intlargeNum;//成¨¦员¡À定¡§额?
intleaveNum;//余®¨¤票¡À数ºy量¢?
keHu*custemer;//乘?
客¨ª信?
息¡é名?
单Ì£¤
keHu*orderofKeHu;//替¬?
补1客¨ª户¡ì
};
typedefstructNode
{
hangBan*exam;//航?
班㨤信?
息¡é
intnumofN;//航?
班㨤数ºy量¢?
structNode*next;
};
voidInitiateHangBan(hangBan**head);
voidInitiateKeHu(keHu**head);
voidInitiateNode(Node**head)
{
*head=(Node*)malloc(sizeof(Node));
(*head)->numofN=0;
InitiateHangBan(&(*head)->exam);
(*head)->next=NULL;
}
voidInitiateHangBan(hangBan**head)
{
*head=(hangBan*)malloc(sizeof(hangBan));
(*head)->numofHangBan=0;
strcpy((*head)->typeofHB,"");
strcpy((*head)->startFly,"");
strcpy((*head)->endFly,"");
strcpy((*head)->startTime,"");
strcpy((*head)->endTime,"");
strcpy((*head)->DataofHB,"");
(*head)->flyTime=0;
(*head)->prise=0;
(*head)->largeNum=0;
(*head)->leaveNum=0;
InitiateKeHu(&((*head)->custemer));
InitiateKeHu(&((*head)->orderofKeHu));
}
voidInitiateKeHu(keHu**head)
{
*head=(keHu*)malloc(sizeof(keHu));
strcpy((*head)->nameofKeHu,"");
(*head)->numofPiao=0;
(*head)->type=0;
(*head)->next=NULL;
}
voidhangBanInsert(Node**head,intnumHB,chartypeHB[],charstartF[],charendF[],charstartT[],charendT[],charData[],floatFT,floatprise,intLM)
{
Node*p;
p=(Node*)malloc(sizeof(Node));
//InitiateHangBan(&p->exam);
/*InitiateNode(&p);*/
p->exam=(hangBan*)malloc(sizeof(hangBan));
p->exam->numofHangBan=numHB;
strcpy(p->exam->startFly,startF);
strcpy(p->exam->endFly,endF);
strcpy(p->exam->startTime,startT);
strcpy(p->exam->DataofHB,Data);
strcpy(p->exam->endTime,endT);
strcpy(p->exam->typeofHB,typeHB);
p->exam->flyTime=FT;
p->exam->prise=prise;
p->exam->largeNum=LM;
p->exam->leaveNum=LM;
p->numofN=(*head)->numofN+1;
p->next=NULL;
/*p->exam->custemer=(keHu*)malloc(sizeof(keHu));
p->exam->orderofKeHu=(keHu*)malloc(sizeof(keHu));*/
InitiateKeHu(&p->exam->custemer);
InitiateKeHu(&p->exam->orderofKeHu);
if((*head)->numofN==0)
{
(*head)=p;
return;
}
(*head)->numofN++;
p->next=(*head);
(*head)=p;
p=(*head);
while(p!
=NULL)
{
p->numofN=(*head)->numofN;
p=p->next;
}
}
inthangbanDelete(Node**head,intN)
{
Node*p,*q,*s;
s=(Node*)malloc(sizeof(Node));
p=(Node*)malloc(sizeof(Node));
q=(Node*)malloc(sizeof(Node));
if(((*head)!
=NULL)&&((*head)->next==NULL))
{
if(((*head)->exam->numofHangBan==N))
InitiateNode(head);
return1;
}
else
{
if(((*head)->exam->numofHangBan==N))
{
(*head)=(*head)->next;
s=(*head);
(*head)->numofN--;
while(s!
=NULL)
{
s->numofN=(*head)->numofN;
s=s->next;
}
return1;
}
}
p=*head;q=*head;
while(p!
=NULL)
{
if((p->exam->numofHangBan==N)&&(p->next!
=NULL))
{
q->next=p->next;
s=(*head);
(*head)->numofN--;
while(s!
=NULL)
{
s->numofN=(*head)->numofN;
s=s->next;
}
return1;
}
if((p->exam->numofHangBan==N)&&(p->next==NULL))
{
q->next=NULL;
s=(*head);
(*head)->numofN--;
while(s!
=NULL)
{
s->numofN=(*head)->numofN;
s=s->next;
}
return1;
}
q=p;
p=p->next;
}
if(p==NULL)return0;
}
voidsearchforNumofHB(Node*head,intN)
{
Node*p;
inti=0;
p=(Node*)malloc(sizeof(Node));
p=head;
while(p!
=NULL)
{
if(p->exam->numofHangBan==N)
{
i++;
printf("航?
班㨤号?
:
êo%d\n航?
班㨤机¨²型¨ª:
êo%s日¨?
期¨²:
êo%s起e飞¤¨¦机¨²场?
:
êo%s\n降¦Ì落?
机¨²场?
:
êo%s起e飞¤¨¦时º¡À间?
:
êo%s降¦Ì落?
时º¡À间?
:
êo%s\n飞¤¨¦行D时º¡À长¡è:
êo%f航?
班㨤价?
格?
:
êo%f航?
班㨤余®¨¤票¡À量¢?
:
êo%d\n",p->exam->numofHangBan,p->exam->typeofHB,p->exam->DataofHB,p->exam->startFly,p->exam->endFly,p->exam->startTime,p->exam->endTime,p->exam->flyTime,p->exam->prise,p->exam->leaveNum);
/*system("pause");*/
}
p=p->next;
}
system("pause");
if(i==0)
{
printf("\n无T此ä?
航?
班㨤…-…-…-…-…-…-!
ê?
\n");
system("pause");
}
}
voidsearchforStartF(Node*head,charsartF[])
{
Node*p;
inti=0;
p=(Node*)malloc(sizeof(Node));
p=head;
while(p!
=NULL)
{
if(strcmp(p->exam->startFly,sartF)==0)
{
i++;
printf("航?
班㨤号?
:
êo%d\n航?
班㨤机¨²型¨ª:
êo%s日¨?
期¨²:
êo%s起e飞¤¨¦机¨²场?
:
êo%s\n降¦Ì落?
机¨²场?
:
êo%s起e飞¤¨¦时º¡À间?
:
êo%s降¦Ì落?
时º¡À间?
:
êo%s\n飞¤¨¦行D时º¡À长¡è:
êo%f航?
班㨤价?
格?
:
êo%f航?
班㨤余®¨¤票¡À量¢?
:
êo%d\n",p->exam->numofHangBan,p->exam->typeofHB,p->exam->DataofHB,p->exam->startFly,p->exam->endFly,p->exam->startTime,p->exam->endTime,p->exam->flyTime,p->exam->prise,p->exam->leaveNum);
/*system("pause");*/
}
p=p->next;
}
system("pause");
if(i==0)
{
printf("\n无T此ä?
航?
班㨤…-…-…-…-…-…-!
ê?
\n");
system("pause");
}
}
voidsearchforEndF(Node*head,charendF[])
{
Node*p;
inti=0;
p=(Node*)malloc(sizeof(Node));
p=head;
while(p!
=NULL)
{
if(strcmp(p->exam->endFly,endF)==0)
{
i++;
printf("航?
班㨤号?
:
êo%d\n航?
班㨤机¨²型¨ª:
êo%s日¨?
期¨²:
êo%s起e飞¤¨¦机¨²场?
:
êo%s\n降¦Ì落?
机¨²场?
:
êo%s起e飞¤¨¦时º¡À间?
:
êo%s降¦Ì落?
时º¡À间?
:
êo%s\n飞¤¨¦行D时º¡À长¡è:
êo%f航?
班㨤价?
格?
:
êo%f航?
班㨤余®¨¤票¡À量¢?
:
êo%d\n",p->exam->numofHangBan,p->exam->typeofHB,p->exam->DataofHB,p->exam->startFly,p->exam->endFly,p->exam->startTime,p->exam->endTime,p->exam->flyTime,p->exam->prise,p->exam->leaveNum);
/*system("pause");*/
}
p=p->next;
}
system("pause");
if(i==0)
{
printf("\n无T此ä?
航?
班㨤…-…-…-…-…-…-!
ê?
\n");
system("pause");
}
}
voidsearchforData(Node*head,charData[])
{
Node*p;
inti=0;
p=(Node*)malloc(sizeof(Node));
p=head;
while(p!
=NULL)
{
if(strcmp(p->exam->DataofHB,Data)==0)
{
i++;
printf("航?
班㨤号?
:
êo%d\n航?
班㨤机¨²型¨ª:
êo%s日¨?
期¨²:
êo%s起e飞¤¨¦机¨²场?
:
êo%s\n降¦Ì落?
机¨²场?
:
êo%s起e飞¤¨¦时º¡À间?
:
êo%s降¦Ì落?
时º¡À间?
:
êo%s\n飞¤¨¦行D时º¡À长¡è:
êo%f航?
班㨤价?
格?
:
êo%f航?
班㨤余®¨¤票¡À量¢?
:
êo%d\n",p->exam->numofHangBan,p->exam->typeofHB,p->exam->DataofHB,p->exam->startFly,p->exam->endFly,p->exam->startTime,p->exam->endTime,p->exam->flyTime,p->exam->prise,p->exam->leaveNum);
/*system("pause");*/
}
p=p->next;
}
system("pause");
if(i==0)
{
printf("\n无T此ä?
航?
班㨤…-…-…-…-…-…-!
ê?
\n");
system("pause");
}
}
voidinsertKeHu(keHu**head,charname[],intsum)//插?
入¨?
客¨ª户¡ì信?
息¡é
{
keHu*p,*q;
p=(k
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 航空 订票 系统
