数据结构课程设计航空客运订票系统.docx
《数据结构课程设计航空客运订票系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计航空客运订票系统.docx(49页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计航空客运订票系统.docx](https://file1.bdocx.com/fileroot1/2023-1/6/3b59b9bd-9c0e-44a2-97fd-fc9ff30f1e28/3b59b9bd-9c0e-44a2-97fd-fc9ff30f1e281.gif)
数据结构课程设计航空客运订票系统
湖南工业大学
课程设计
资料袋
计算机与通信学院(系、部)2009~2010学年第二学期
课程名称数据结构指导教师职称教授
学生姓名专业班级学号
题目航空客运订票系统
成绩起止日期2010年6月28日~2010年7月日
目录清单
序号
材料名称
资料数量
备注
1
课程设计任务书
1
2
课程设计说明书
1
3
课程设计图纸
1
张
4
5
6
湖南工业大学
课程设计任务书
2009—2010学年第二学期
计算机与通信学院(系、部)专业班级
课程名称:
数据结构
设计题目:
航空客运订票系统
完成期限:
自2010年6月28日至2010年7月日共1周
内
容
及
任
务
一、设计的主要技术参数
使用队列让预定客户排队等候已定客户退票后再实现买票功能
二、设计任务
使用C语言实现各个模块的功能.
三、设计工作量
本人独自完成这些基本要求,完成了航班信息的输入,查询航线的功能以及订票和退票等功能的实现!
进
度
安
排
起止日期
工作内容
2010-6-27
设计本程序思路
2010-6-28
实现子程序模块函数
2010-6-29
将子程序和主程序构建成完整的C源程序,并且进行相关编译调试
2010-6-30
数据测试、形成文档
主
要
参
考
资
料
<<面向对象C语言程序设计>>
<<数据结构(C语言版)>>
<<图算法>>
<>
指导教师(签字):
年月日
系(教研室)主任(签字):
年月日
数据结构
设计说明书
数据结构课程设计
航空客运订票系统
起止日期:
2010年6月28日至2010年7月日
学生姓名
班级
学号
成绩
指导教师(签字)
计算机与通信学院(部)
年月日
湖南工业大学课程设计情况分析表
课程设计名称
数据结构
设计周数
17周
学院(部)
计算机与通信学院
系(教研室)
通信工程系
指导教师
文志诚
学生专业、班级
通信工程0903
选题
航空客运订票系统
成绩分布
优
良
中
及格
不及格
学生数
百分比
学生课程设计存在的主要问题
改进措施及建议
指导教师(签字):
年月日
系(教研室)主任(签字):
年月日
备注:
本表在课程设计完成后由指导教师填写,与课程设计资料一起存档。
1.题目及需求分析……………………………VI
2.概要设计……………………………………VII
3.详细设计……………………………………X
4.调试分析……………………………………XIX
5.用户手册……………………………………XXI
6.测试结果……………………………………XXIII
7.附录程序清单……………………………XXV
题目:
航空客运订票系统
扩展:
增加了运行面板的颜色;
增加添加了进入要密码输入功能;
显示功能比要求的多了些,意在增加程序的智能化
一.需求分析
(1)以线性表存储航班信息,以队列存储预定客户的名单。
(2)设计交互界面,用户只需输入选择就可做想做的事情.
(3)用户可以自己输入航班信息的多少,然后由程序自动打印出航班信息.
(4)一切操作都有向导.
二.概要设计
1.设定线性表的抽象数据类型定义:
ADTList{
数据对象:
D={ai|ai∈int,i=0,1,2……n,n≥0}
数据关系:
R1={|ai-1,ai∈D,i=2,……n}
基本操作:
InitList(&L)
操作结果:
构造一个空的线性表L.
DestroyList(&L)
初始条件:
线性表L已存在。
操作结果:
销毁线性表L。
ClearList(&L)
初始条件:
线性表L已存在。
操作结果:
将L重新置为空表。
ListEmpty(L)
初始条件:
线性表L已存在。
操作结果:
判断线性表是否为空
}ADTList;
2.设定队列的抽象数据类型
ADTQueue{
数据对象:
D={ai|ai∈int,i=1,2,3,4,···,n,n>=0}
数据关系:
R1={|ai-1,ai∈D,i=2,……n}
基本操作:
InitQueue(&Q)
操作结果:
构造一个空队列Q.
DestoryQueue(&Q)
初始条件:
队列Q已存在。
操作结果:
队列Q被摧毁,不再存在。
ClearEmpty(Q)
初始条件:
队列Q已存在。
操作结果:
将队列Q清为空队列。
EnQueue(&Q,e)
初始条件:
队列Q已存在。
操作结果:
插入元素e为Q的新的队尾元素。
DeQueue(&Q,&e)
初始条件:
Q为非空队列。
操作结果:
删除Q的队头元素,并用e返回其值。
}ADTQueue;
3.本程序包含3个模块
1)主程序模块:
intmain()
{
主菜单函数,实现主要操作界面.
return0;
}//主函数
2)线性表模块----实现线性表抽象数据类型
3)队列模块----实现队列抽象数据类型
各模块之间的调用如下:
4.求解预定票实现的伪码算法:
设定当前订票的情况;
Do
{
若与票数足够,
则{
则为客户订票;
}
否则{
若客户愿意等候买票
则{
办理预定票手术
}
否则{
推出订票功能
}
}
}while(票数存在);
三.详细设计
工程文件视图:
类视图:
--------------------------头文件设计(部分)-----------------------
1.源程序头文件
#include"stdafx.h"
#include"malloc.h"
#include"math.h"
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#include"process.h"
typedefstructyidingkehu
{
intname;
intdingpiaoliang;
intchuangweidengji;
structyidingkehu*next1;
}yiding,*link;
typedefstructdenghoukehu
{
intname;
intpiaoshu;
intchuangweidengji;
structdenghoukehu*next2;
}denghou,*Qptr;
typedefstructhangxian
{
intzhongdianzhan;
inthangbanhao;
intfeijihao;
intfeixingzhouri;
intchengyuanzongshu;
intyupiaoliang;
structhangxian*next;
structyidingkehu*yiding;
structdenghoukehu*denghou;
}hangxian,*linklist;
typedefstruct
{
Qptrfront;
Qptrrear;
}linkqueue;
structhangxian*L=NULL;
structyidingkehu*H;
linkqueueQ;
-------------------------实现文件(部分)---------------------------
1.voidhangbanxinxi()
{
inti=1;
while(i==1)
{
if(!
insertlinklist((linklist)L))
{printf("不能再输入航班信息!
\n");
exit(0);
}
printf("是否输入航班信息?
\n");
printf("1:
是\n");
printf("2:
否\n");
scanf("%d",&i);
printf("\n");
}
}
2.intinsertlinklist(linklist&L)
{
linklistp;
p=(linklist)malloc(sizeof(hangxian));
if(!
p)exit(0);
printf("\t请依次输入下面几项内容:
\n\n");
printf("航班号\n");
scanf("%d",&p->hangbanhao);
printf("飞机号\n");
scanf("%d",&p->feijihao);
printf("终点站\n");
scanf("%d",&p->zhongdianzhan);
printf("飞行周日\n");
scanf("%d",&p->feixingzhouri);
printf("乘客总数\n");
scanf("%d",&p->chengyuanzongshu);
printf("余票数\n");
scanf("%d",&p->yupiaoliang);
p->yiding=(yidingkehu*)malloc(sizeof(yidingkehu));
p->denghou=Q.front=Q.rear=(Qptr)malloc(sizeof(denghoukehu));
p->next=L->next;
L->next=p;
return1;
}
3.voiddingpiaoyewu()
{
linklistp=(linklist)malloc(sizeof(hangxian));
p=L;
yiding*h=H,*h1;
linkqueueq=Q;
inti,j,k,piao,yudingpiao=0,yidingpiao=0;
if(!
p->next)
printf("没有航班信息!
\n请输入航班信息!
\n\n");
else
{
printf("请输入终点站:
");
scanf("%d",&i);
printf("\n");
p=L->next;
if(p){
do{
if(!
p)
{
printf("对不起!
没有你要查询的航班!
\n\n\n");
break;
}
j=p->zhongdianzhan-i;
if(j==0)
{
printf("\t航班信息:
\n");
printf("\t航班号:
%d\n",p->hangbanhao);
printf("\t飞机号:
%d\n",p->feijihao);
printf("\t乘客总数:
%d\n",p->chengyuanzongshu);
printf("\t飞行时间:
周%d\n",p->feixingzhouri);
printf("\t余票量:
%d\n",p->yupiaoliang);
}
else
p=p->next;
}while(j!
=0);
if(j==0)
{
do
{
printf("\n请输入你要定的票数:
");
scanf("%d",&piao);
printf("\n");
if(piao<=p->yupiaoliang)
{
h=p->yiding;
if(h)
{
h1=h;
h=h->next1;
h=(yiding*)malloc(sizeof(yiding));
printf("\t请输入你的名字:
");
scanf("%d",&h->name);
printf("\n");
printf("\t你要的窗位等级:
");
scanf("%d",&h->chuangweidengji);
printf("\n");
if((h->chuangweidengji>=1)&&(h->chuangweidengji<=3))
{
h->dingpiaoliang=piao;
h->next1=h1->next1;
h1->next1=h;
p->yupiaoliang=p->yupiaoliang-piao;
printf("订票成功!
\n");
j=2;
}
else
{
printf("没有这等窗位!
\n");
break;
}
}
}
else
{
printf("余票量:
%d\n",p->yupiaoliang);
printf("余票量%d张不能满足你的订票量\n\n\n",p->yupiaoliang);
printf("是否要订票?
");
printf("1:
需要2:
不需要3:
预定");
scanf("%d",&j);
printf("\n");
if(j==3)
{
structdenghoukehu*q1;
printf("航班的票已经售完!
\n");
q.front=p->denghou;
if(q.front==q.rear)
printf("没有人预定,是否预定?
\n");
else
printf("有人预定,是否预定?
\n");
printf("1预定:
2:
不预定\n");
scanf("%d",&k);
printf("\n");
if(k==1)
{
q1=(Qptr)malloc(sizeof(denghou));
printf("请输入你的名字:
");
scanf("%d",&q1->name);
printf("\n");
printf("请输入你要预定的票数:
");
scanf("%d",&q1->piaoshu);
printf("\n");
printf("请输入你要预定的窗位等级:
");
scanf("%d",&q1->chuangweidengji);
if((q1->chuangweidengji>3)||(q1->chuangweidengji<1))
{
printf("没有这等窗位等级!
\n");
break;
}
printf("\n");
q1->next2=NULL;
q.rear->next2=q1;
q.rear=q1;
printf("预定成功!
\n");
}
}
}
}while(j==1);
}
}
elseif(!
p)
{
structdenghoukehu*q1;
printf("航班的票已经售完!
\n");
q.front=p->denghou;
if(q.front==q.rear)
printf("没有人预定,是否预定?
\n");
else
printf("有人预定,是否预定?
\n");
printf("1预定:
2:
不预定\n");
scanf("%d",&k);
printf("\n");
if(k==1)
{
q1=(Qptr)malloc(sizeof(denghou));
printf("请输入你的名字:
");
scanf("%d",&q1->name);
printf("\n");
printf("请输入你要预定的票数:
");
scanf("%d",&q1->piaoshu);
printf("\n");
q1->next2=NULL;
q.rear->next2=q1;
q.rear=q1;
printf("预定成功!
\n");
}
}
}
}
4.voidchaxunhangxian()
{
inti;
printf("1:
特定查询2:
全部查询3:
最近一天航班信息\n");
printf("请选择功能:
");
scanf("%d",&i);
printf("\n");
switch(i)
{
case1:
tdcx();
break;
case2:
qbcx();
break;
case3:
zjyt();
break;
}
}
5.voidtdcx()
{
inti,j,k=1;
linklistp=(linklist)malloc(sizeof(hangxian));
p=L;
if(p->next==NULL)
printf("还没有航班信息!
\n请输入航班信息!
\n\n");
else
{
printf("请输入终点站名字:
");
scanf("%d",&i);
printf("\n");
do
{
p=p->next;
if(p)
{
j=p->zhongdianzhan-i;
if(j==0)
{
printf("\t航班信息%d如下:
\n",k);
printf("\t航班号:
%d\n",p->hangbanhao);
printf("\t飞机号:
%d\n",p->feijihao);
printf("\t飞行周日:
%d\n",p->feixingzhouri);
printf("\t余票量:
%d\n\n",p->yupiaoliang);
k++;
}
}
else
{
printf("\t没有你要查询的航班号!
\n\n");
break;
}
}while(j!
=0);
}
}
6.voidqbcx()
{
intk=1;
linklistp=(linklist)malloc(sizeof(hangxian));
p=L;
if(p->next==NULL)
printf("还没有航班信息!
\n请输入航班信息!
\n\n");
else
{
do
{
p=p->next;
if(p)
{
{
printf("\t航班信息%d如下:
\n",k);
printf("\t航班号:
%d\n",p->hangbanhao);
printf("\t飞机号:
%d\n",p->feijihao);
printf("\t飞行周日:
%d\n",p->feixingzhouri);
printf("\t余票量:
%d\n\n",p->yupiaoliang);
}
k++;
}
}while(p);
}
}
7.voidzjyt()
{
inti,j,k=1;
linklistp=(linklist)malloc(sizeof(hangxian));
p=L;
if(p->next==NULL)
printf("还没有航班信息!
\n请输入航班信息!
\n\n");
else
{
printf("请输入特定某天的航班信息的日期!
\n");
scanf("%d",&i);
printf("\t%d号最近一天的航班信息如下所示:
\n\n",i);
do
{
p=p->next;
j=p->feixingzhouri-i;
if(fabs(j)<=1)
{
{
printf("\t航班信息%d如下:
\n",k);
printf("\t航班号:
%d\n",p->hangbanhao);
printf("\t飞机号:
%d\n",p->feijihao);
printf("\t飞行周日:
%d\n",p->feixingzhouri);
printf("\t余票量:
%d\n\n",p->yupiaoliang);
k++;
}
}
elseif(p->next==NULL)
printf("\t没有航班信息!
\n");
}while(p->next);
}
}
8.voidtuipiaoyewu()
{
linklistp=(linklist)malloc(sizeof(hangxian));
p=L;
if(p->next==NULL)