数据结构课程设计报告文档格式.docx
《数据结构课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计报告文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/30/fcb49ae3-2d54-4993-8426-b2aa5ddd713e/fcb49ae3-2d54-4993-8426-b2aa5ddd713e1.gif)
可以建立一个主链表,存储航班信息,利用是十字链表建立两个队列,分别为订票客户和候补订票客户。
其难点在于易用性,初步设计时的框架设计必须有前瞻性。
另外就是整个系统的逻辑需要在写代码之前就需要非常的清晰。
否则对于代码的修改将是一个大的工程
1.2任务意义
飞机场每天人流量巨大,有着不同素质的人群,需要简单而迅速的订购飞机的票务、退票、查询航班等等不同的需求,对于一个航空客运订票系统的设计者来说,更需要全方位的考虑到各种客户的需求。
从而根据市场的需求设计出最完善、便捷的系统,对于我们每一个志于成为一个程序员的同学来说都是一个挑战。
2设数据结构设计及用法说明
程序总的存储结构,中间纵列,为各个航班的基本信息,用一链表存储,其中一个节点为一个航班,其中包括终点站名、航班号、飞机号、飞行时间(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。
横向是各个航班的订票情况,即从该指定的航班中用链表的形式横向存储已经订票了的客户信息和药等候替补的客户的信息,其中包括客户姓名和相应的需票量。
如图2-1
图2-1数据存储结构图
相应的存储结构代码为:
typedefstructTimeNode//航班飞行时间
{
intYear,Month,Day;
char*Week;
}Time;
typedefstructAlreadyBookNode//已经订票的客户名单------链表
char*Name;
//姓名
intNeedTicketNumber;
//订票量
AlreadyBookNode*next;
}AlreadyBook;
typedefstructWaitingBookNode//等候替补的客户名单-------链队
WaitingBookNode*next;
}WaitingBook;
//链队数据节点类型定义
typedefstruct
WaitingBook*front;
WaitingBook*rear;
}WaitingBookLink;
//链队类型定义
typedefstructTicketSystemNode//航空客运订票信息---------链表
char*Destination;
//终点站名
char*FlightNumber;
//航班号
char*AircraftNumber;
//飞机号
intMemberQuota;
//乘员定额
intRemain;
//剩余票量
TimeDepartureTime;
//飞行日期
AlreadyBook*BookedGuest;
//已定票名单
WaitingBookLink*WaitingGuest;
//等候替补客户名单
TicketSystemNode*next;
}Ticket;
3详细设计和编码
3.1初始化
初始化函数的流程图,对双链表进行定义并对链表中数据域置空,创建头结点,对链表中的链表和链表队列进行初始化,为信息的储存创建基础。
如图3-1
图3-1初始化函数流程图
3.2浏览客户信息
浏览客户信息的流程图,通过调用Dingpiao()函数主要是对刻录录入的信息进行查询。
如图3-2
图3-2浏览客户信息流程图
3.3客户订票信息
客户订票信息的流程图,通过调用Tuipiao()函数记录客户的姓名,终点站,订票数量,看是否能达到客户的要求从而进行订票。
如图3-3
图3-3客户订票信息流程图
4实验结果
4.1菜单函数的功能测试
系统运行后就会自动显示主菜单,选项包括:
1、录入,2、查询,3、订票,4、退票,5、退出。
当用户选择相应的代号就进入相应的功能模块。
如图4-1
图4-1主菜单函数功能检测
4.2录入函数的功能测试
录入航班的基本信息包括航班的数目和每一航班的终点站,航班号,飞机号,飞行日期,余票量和客户的人数姓名,订票量。
如图4-2
图4-2主菜单录入功能检测
4.3查询函数的功能测试
通过终点站名和航班号两种方式进行查询所需查询的航班.如图4-3
图4-3主菜单查询功能检测
4.4订票函数的功能测试
在主菜单中选择客户订票输入客户的终点站名,姓名和订票数目。
如图4-4
图4-4主菜单订票功能检测
4.5退票函数的功能测试
在主菜单中选择客户订票输入客户的姓名,飞行日期,飞机航班号实现退票。
如图4-5
图4-5主菜单退票功能检测
5体会
本程序基本上能安全的运行,具备的功能符合题目的要求。
用了十字交叉链表操作,是此程序的最大优点。
程序写的还算简练,结构清晰,各个模块的分工和功能明确。
在整个设计多的时间来完善整个程序。
致谢
谢谢同学,谢谢老师,谢谢战友,谢谢他们对我的帮助~。
参考文献
[1]数据结构教程/李春堡等编著.北京:
清华大学出版社,2009.3
[2]数据结构教程(第3版)上机实验指导/李春堡等编著.北京:
源代码
#include"
iostream.h"
stdlib.h"
malloc.h"
string.h"
structflight_course
charterminus[30],flight[30],plane[30],flydate[10];
//从左往右依次为终点站、航班号、飞机号、飞行日期
intpassenger,remain_vote;
//从左往右依次为乘员定额、余票量
structyidingkehu//已经订票的客户名单,包括姓名、订票量
{
charnames[5][20];
intorder_vote[5];
}passenger1;
structhoubukehu//等候替补的客户名单,包括姓名、所需票量
intneed_vote[5];
}passenger2;
};
typedefflight_courseElemType;
typedefstructDNode
ElemTypedata;
intlength;
structDNode*prior;
structDNode*next;
}DLinkList;
//双链表类型定义
voidCreateList(DLinkList*&
L)//初始化航班表
DLinkList*s;
intn,m,i,j;
L=(DLinkList*)malloc(sizeof(DLinkList));
//创建头结点
L->
prior=L->
next=NULL;
cout<
<
"
请输入航班数目:
endl;
cin>
>
n;
请输入各航班情况:
for(i=0;
i<
i++)
s=(DLinkList*)malloc(sizeof(DLinkList));
//创建新结点
cout<
终点站:
;
cin>
s->
data.terminus;
航班号:
data.flight;
飞机号:
data.plane;
飞行日期(星期):
data.flydate;
余票量:
data.remain_vote;
请输入已定客户数:
m;
s->
data.passenger=0;
for(j=0;
j<
j++)
{
cout<
客户姓名:
cin>
data.passenger1.names[j];
订票量:
data.passenger1.order_vote[j];
s->
data.passenger+=s->
}
乘员定额:
data.passenger<
next=L->
next;
//将*s插在原开始结点之前,头结点之后
if(L->
next!
=NULL)
L->
next->
prior=s;
L->
next=s;
prior=L;
}
length=n;
}
voidLocateElem(DLinkList*L)//按终点站名进行查询
DLinkList*p=L->
//p指向第1个数据结点
charterminus1[30];
请输入查找航班的终点站名:
terminus1;
while(p!
=NULL&
&
strcmp(terminus1,p->
data.terminus)!
=0)
p=p->
if(p==NULL)
不存在该航班!
else
该航班的信息如下:
p->
data.flight<
data.plane<
data.flydate<
data.remain_vote<
}
voidGetElem(DLinkList*L)//按航班号进行查询
charflight[30];
请输入查找航班的航班号:
flight;
strcmp(flight,p->
data.flight)!
=0)
终点站名:
data.terminus<
voidDingpiao(DLinkList*&
L)//客户订票函数
charterminus2[30],name1[20],m;
intorder_vote1,j=0;
请输入订票要求:
姓名:
name1;
terminus2;
订票数量:
order_vote1;
strcmp(p->
data.terminus,terminus2)!
=0)//根据终点站查找订票航班
if(p->
order_vote1)//余票量不够时,询问顾客是否排队候补
余票量不够,是否排队候补(是:
Y,否:
N)?
if(m=='
Y'
)
while(p->
data.passenger2.names[j][0]!
=0)//判断候补乘客数组一维元素是否为空
j++;
strcpy(p->
data.passenger2.names[j],name1);
p->
data.passenger2.need_vote[j]=order_vote1-p->
data.remain_vote=0;
else
while(p->
data.passenger1.names[j][0]!
='
\0'
)//判断已定票乘客数组一维元素是否为空
j++;
strcpy(p->
data.passenger1.names[j],name1);
p->
data.passenger1.order_vote[j]=order_vote1;
data.remain_vote-=order_vote1;
voidTuipiao(DLinkList*&
L)//退票函数
charname2[20],flydate1[10],flight1[30];
inti=0,j;
请输入退票客户信息:
name2;
flydate1;
飞机航班号:
flight1;
data.flight,flight1)!
=0)//查找退票航班
while(strcmp(p->
data.passenger1.names[i],name2))//查找具体的退票乘客信息
i++;
for(;
!
data.passenger1.names[i+1][0];
i++)//在该航班的已定票字符串数组中删除此乘客
data.passenger1.names[i],p->
data.passenger1.names[i+1]);
data.passenger1.order_vote[i]=p->
data.passenger1.order_vote[i+1];
data.passenger2.names[0])//判断候票乘客数组是否为空
data.remain_vote>
data.passenger2.need_vote[j];
data.passenger1.names[i+j],p->
data.passenger2.names[j]);
data.passenger1.order_vote[i+j]=p->
data.remain_vote-=p->
voidmain()
DLinkList*L;
intn;
charm;
///CreateList(L);
do
**********航空客运订票系统**********"
._________________."
|_______________|"
|I1、录入I|"
|I2、查询航班I|"
|I3、客户订票I|"
|I4、客户退票I|"
|I5、退出程序I|"
|I_____________I|"
!
_________________!
"
._[_______]_."
.___|___________|___."
|:
:
____|"
|~~~~[CD-ROM]|"
___________________!
Pleaseenterthefunctionnumber(1~5):
system("
cls"
);
while(n<
1||n>
5)
Pleaseenterthefunctionnumberagain:
switch(n)
case1:
CreateList(L);
break;
case2:
{
cout<
A、按终点站名查询B、按航班号查询"
请输入查询方式的字母:
cin>
if(m=='
A'
LocateElem(L);
else
GetElem(L);
}break;
case3:
Dingpiao(L);
case4:
Tuipiao(L);
default:
exit(0);
}while(n!
=0);
数据结构课程设计
成绩评定
成绩评定:
(百分制)
指导教师签字:
检查时间: