数据结构课程设计报 告航空订票系统

更新时间:2024-06-02 13:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

武汉长江工商学院 计算机科学与技术系

项目名称: 航空客运订票系统 学生姓名: 刘威

学 号: 1008041118 班 级: 10811 指导教师: 刘莹

2011年12 月23 日

武汉长江工商学院计算机技术系

目 录

1系统需求分析 ....................................................................................................................................... 1

1.1 问题分析··························································································································1 1.2 任务意义··························································································································1

2 设数据结构设计及用法说明 .............................................................................................................. 2 3 详细设计和编码 .................................................................................................................................. 4

3.1初始化 ······························································································································4 3.2浏览客户信息 ··················································································································5

3.3客户订票信息 ............................................................................................................................... 6 4 实验结果 .............................................................................................................................................. 7

4.1菜单函数的功能测试 ·······································································································7 4.2录入函数的功能测试 ·······································································································8 4.3查询函数的功能测试 ·······································································································9 4.4订票函数的功能测试 ····································································································· 10 4.5退票函数的功能测试 ····································································································· 11

5 体会 .................................................................................................................................................... 12 致谢 ........................................................................................................................................................ 13 参考文献 ................................................................................................................................................ 14 附录:源代码 ........................................................................................................................................ 15

1

武汉长江工商学院计算机技术系

1系统需求分析

1.1 问题分析

从课程设计的题目要求可以知道,我们需要建立的是具有能对数据的插入、删除、检索功能的软件。由于存储的数量较大且不固定,因此选择用链表来保存基本信息:终点站名、航班号、飞机号、飞行时间(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。由于在航线这个主链表上,每个航班上的已经订票名单这个链表和等候替补的名单这个链表队列,所以建立一个十字交叉链表,在纵行上开辟一个链表存储所有航班的基本信息,再在各个航班节点横向展开一个链表和一个链表队列,展开的链表存储已经订票的客户名单,展开的链表队列存储等候替补的客户名单。同时,由于预约人数无法预计,队列也应以链表作存储结构。系统主要实现的操作和功能是:添加航线、查询航线、订票功能、退票功能。要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。另外,在时间的处理上,为了保证年月日与相应的星期几对应,只要求输入年月日,星期几是由年、月、日这些数据算出来。

1.2 任务意义

飞机场每天要接受大量的订票退票服务,对于这些数量巨大的数据,需要一个专门的软件来进行管理和操作。软件至少需要具备的基本功能包括:接受订票,处理退票,查询航班信息等等。面对这些实际问题,航空客运系统的制作无疑要全面的考察一个学生的知识及能力。

1

武汉长江工商学院计算机技术系

2 设数据结构设计及用法说明

如图2为程序总的存储结构,中间纵列,为各个航班的基本信息,用一链表存储,其中一个节点为一个航班,其中包括终点站名、航班号、飞机号、飞行时间(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。横向是各个航班的订票情况,即从该指定的航班中用链表的形式横向存储已经订票了的客户信息和药等候替补的客户的信息,其中包括客户姓名和相应的需票量。其中,应订票的客户的存储方式为线性链表,等待的客户的存储方式为链表队列。

图2 数据存储结构图

相应的存储结构代码为:

typedef struct TimeNode //航班飞行时间 {

int Year,Month,Day; char *Week;

}Time;

typedef struct AlreadyBookNode//已经订票的客户名单------链表 {

char *Name;//姓名

int NeedTicketNumber;//订票量 AlreadyBookNode *next;

}AlreadyBook;

typedef struct WaitingBookNode//等候替补的客户名单-------链队 {

char *Name;//姓名

int NeedTicketNumber;//订票量

2

武汉长江工商学院计算机技术系

WaitingBookNode *next;

}WaitingBook;//链队数据节点类型定义 typedef struct {

WaitingBook *front; WaitingBook *rear;

}WaitingBookLink;//链队类型定义

typedef struct TicketSystemNode//航空客运订票信息---------链表 {

char *Destination;//终点站名 char *FlightNumber;//航班号 char *AircraftNumber;//飞机号 int MemberQuota;//乘员定额 int Remain;//剩余票量 Time DepartureTime;//飞行日期 AlreadyBook *BookedGuest;//已定票名单

WaitingBookLink *WaitingGuest;//等候替补客户名单 TicketSystemNode *next;

}Ticket;

3

武汉长江工商学院计算机技术系

3 详细设计和编码

3.1初始化

图3-1为初始化函数的流程图,主要是对链表中数据域置空,对链表中的链表和链表队列进行初始化

开始建立链表初始化已订票的客户信息存储链表初始化等候替补的客户信息链表返回 图3-1 初始化函数流程图

4

武汉长江工商学院计算机技术系

3.2浏览客户信息

图3-2为浏览客户信息的流程图,主要是对刻录录入的信息进行查询

开始 调用Dingpiao() P=NULL ? 该航线没有客户信息 P不为空 输出客户信息 结束

图3-2浏览客户信息流程图

5

武汉长江工商学院计算机技术系

3.3客户订票信息

图3-3为客户订票信息的流程图,通过记录客户的姓名,终点站,订票数量,看是否能达到客户的要求从而进行订票

开 始 调用Tuipiao() 客户订票额不超过乘员定票总额, 登记信息 在排队等候乘员名单域中添加客户信息 加到客户名单域 结束

图3-3客户订票信息流程图

6

武汉长江工商学院计算机技术系

4 实验结果

4.1菜单函数的功能测试

系统运行后就会自动显示如图4-1的主菜单,选项包括:1、录入,2、查询,3、订票,4、退票,5、退出。当用户选择相应的代号就进入相应的功能模块。

图4-1 主菜单函数功能检测

7

武汉长江工商学院计算机技术系

4.2录入函数的功能测试

录入航班的基本信息包括航班的数目和每一航班的终点站,航班号,飞机号,飞行日

期,余票量和客户的人数姓名,订票量。

图4-2 主菜单录入功能检测

8

武汉长江工商学院计算机技术系

4.3查询函数的功能测试

通过终点站名和航班号两种方式进行查询所需查询的航班

图4-3 主菜单查询功能检测

9

武汉长江工商学院计算机技术系

4.4订票函数的功能测试

在主菜单中选择客户订票输入客户的终点站名,姓名和订票数目。

图4-4 主菜单订票功能检测

10

武汉长江工商学院计算机技术系

4.5退票函数的功能测试

在主菜单中选择客户订票输入客户的姓名,飞行日期,飞机航班号实现退票。

图4-5 主菜单退票功能检测

11

武汉长江工商学院计算机技术系

5 体会

本程序基本上能安全的运行,具备的功能符合题目的要求。用了十字交叉链表操作,是此程序的最大优点。程序写的还算简练,结构清晰,各个模块的分工和功能明确。在整个设计多的时间来完善整个程序。

12

武汉长江工商学院计算机技术系

致谢

谢谢同学,谢谢老师,谢谢战友,谢谢他们对我的帮助~~/~~~~~·。·~~~~~\\~~~~

13

武汉长江工商学院计算机技术系

参考文献

数据结构教程/李春堡等编著.—3版.—北京:清华大学出版社,2009.3 数据结构教程(第3版)上机实验指导/李春堡等编著. —北京:清华大学出版社,2009.3

14

武汉长江工商学院计算机技术系

附录:源代码

#include\#include\#include\#include\struct flight_course {

char terminus[30], flight[30],plane[30],flydate[10]; //从左往右依次为终点

站、航班号、飞机号、飞行日期 量 量 };

15

int passenger,remain_vote; //从左往右依次为乘员定额、余票量 struct yidingkehu //已经订票的客户名单,包括姓名、订票

{

char names[5][20]; int order_vote[5];

}passenger1;

struct houbukehu //等候替补的客户名单,包括姓名、所需票

{

char names[5][20]; int need_vote[5];

}passenger2;

武汉长江工商学院计算机技术系

typedef flight_course ElemType; typedef struct DNode {

ElemType data; int length;

struct DNode *prior; struct DNode *next;

}DLinkList; //双链表类型定义 void CreateList(DLinkList *&L) //初始化航班表 {

DLinkList *s; int n,m,i,j;

L=(DLinkList *)malloc(sizeof(DLinkList)); //创建头结点 L->prior=L->next=NULL; cout<<\请输入航班数目:\cin>>n;

cout<<\请输入各航班情况:\for(i=0;i

s=(DLinkList *)malloc(sizeof(DLinkList));//创建新结点 cout<<\终点站:\cin>>s->data.terminus;

16

武汉长江工商学院计算机技术系

cout<<\航班号:\cin>>s->data.flight; cout<<\飞机号:\cin>>s->data.plane; cout<<\飞行日期(星期):\cin>>s->data.flydate; cout<<\余票量:\

cin>>s->data.remain_vote; cout<<\请输入已定客户数:\cin>>m;

s->data.passenger=0; for(j=0;j

cout<<\乘员定额:\

s->next=L->next; //将*s插在原开始结点之前,头结点之后 if(L->next!=NULL)

cout<<\客户姓名:\

cin>>s->data.passenger1.names[j]; cout<<\订票量:\

cin>>s->data.passenger1.order_vote[j];

s->data.passenger+=s->data.passenger1.order_vote[j];

17

武汉长江工商学院计算机技术系

}

}

L->next->prior=s;

L->next=s; s->prior=L;

L->length=n;

void LocateElem(DLinkList *L) //按终点站名进行查询 {

DLinkList *p=L->next; //p指向第1个数据结点 char terminus1[30];

cout<<\请输入查找航班的终点站名:\cin>>terminus1;

while(p!=NULL&&strcmp(terminus1,p->data.terminus)!=0)

p=p->next;

if(p==NULL)

cout<<\不存在该航班!\

else {

cout<<\该航班的信息如下:\cout<<\航班号:\cout<<\飞机号:\

cout<<\飞行日期(星期):\

18

武汉长江工商学院计算机技术系

}

cout<<\余票量:\

}

void GetElem(DLinkList *L) //按航班号进行查询 { }

DLinkList *p=L->next; char flight[30];

cout<<\请输入查找航班的航班号:\cin>>flight;

while(p!=NULL&&strcmp(flight,p->data.flight)!=0)

p=p->next;

if(p==NULL)

cout<<\不存在该航班!\

else {

cout<<\该航班的信息如下:\

cout<<\终点站名:\cout<<\飞机号:\

cout<<\飞行日期(星期):\cout<<\余票量:\

}

19

武汉长江工商学院计算机技术系

void Dingpiao(DLinkList *&L) //客户订票函数 {

DLinkList *p=L->next;

char terminus2[30],name1[20],m; int order_vote1,j=0;

cout<<\请输入订票要求:\cout<<\姓名:\cin>>name1; cout<<\终点站名:\cin>>terminus2; cout<<\订票数量:\cin>>order_vote1;

while(p!=NULL&&strcmp(p->data.terminus,terminus2)!=0) //根据终点站查找

订票航班

p=p->next;

if(p->data.remain_vote

否排队候补

{

cout<<\余票量不够,是否排队候补(是:Y,否:N)?\cin>>m; if(m=='Y') {

while(p->data.passenger2.names[j][0]!=0) //判断候补乘客数组一维

20

武汉长江工商学院计算机技术系

元素是否为空

j++;

strcpy(p->data.passenger2.names[j],name1);

p->data.passenger2.need_vote[j]=order_vote1-p->data.remain_vote; 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; p->data.remain_vote-=order_vote1;

}

}

void Tuipiao(DLinkList *&L) //退票函数 { DLinkList *p=L->next;

char name2[20],flydate1[10],flight1[30]; int i=0,j;

cout<<\请输入退票客户信息:\

21

判断已定票乘客数组一维武汉长江工商学院计算机技术系

cout<<\客户姓名:\cin>>name2;

cout<<\飞行日期(星期):\cin>>flydate1; cout<<\飞机航班号:\cin>>flight1;

while(p!=NULL&&strcmp(p->data.flight,flight1)!=0) //查找退票航班

p=p->next;

while(strcmp(p->data.passenger1.names[i],name2)) //查找具体的退票乘客信

i++;

for(;!p->data.passenger1.names[i+1][0];i++) //在该航班的已定

票字符串数组中删除此乘客

{ }

if(p->data.passenger2.names[0]) //判断候票乘客数组

strcpy(p->data.passenger1.names[i],p->data.passenger1.names[i+1]); p->data.passenger1.order_vote[i]=p->data.passenger1.order_vote[i+1];

是否为空

for(j=0;p->data.remain_vote>p->data.passenger2.need_vote[j];j++) {

strcpy(p->data.passenger1.names[i+j],p->data.passenger2.names[j]);

p->data.passenger1.order_vote[i+j]=p->data.passenger2.need_vote[j];

22

武汉长江工商学院计算机技术系

}

}

p->data.remain_vote-=p->data.passenger2.need_vote[j];

void main() {

DLinkList *L; int n; char m;

/// CreateList(L);

do {

cout<<\航空客运订票系统**********\cout<<\cout<<\

cout<<\、录 入I |\

cout<<\、查询航班I | \cout<<\、客户订票I | \cout<<\、客户退票I | \cout<<\、退出程序I |\cout<<\

cout<<\

cout<<\

23

武汉长江工商学院计算机技术系

cout<<\cout<<\cout<<\cout<<\

cout<<\cin>>n; system(\while(n<1||n>5) { } switch(n) {

case 1:CreateList(L);break; case 2:

{

cout<<\、按终点站名查询 B、按航班号查询\cout<<\请输入查询方式的字母:\cin>>m; if(m=='A')

LocateElem(L);

cout<<\cin>>n;

24

武汉长江工商学院计算机技术系

else

GetElem(L);

}break;

case 3:Dingpiao(L);break; case 4:Tuipiao(L) ;break; default:exit(0);break;

}

}while(n!=0);

}

25

武汉长江工商学院计算机技术系

数据结构课程设计

成绩评定

成绩评定: (百分制)

指导教师签字:

检查时间:

26

本文来源:https://www.bwwdw.com/article/kkq6.html

Top