C语言 VC6.0 飞机订票系统(程序可运行).docx
文本预览下载声明
课程设计说明书
PAGE \* MERGEFORMAT 20
1、设计目的和要求
1、 录入航线信息:每条航线信息包括航班号、飞机号、目的地、订票数、余票数共5项。假设现在有3条航线, 目的地分别是北京, 上海, 广州, 飞机上可乘坐100人( 即初始订票数为0, 余票数为100)。
2、 订票业务:客户信息包括姓名, 航班号, 座位号(初始为0)。有新客户订票时, 先输入客户的姓名和他提出的航班号, 查询该航线的订票情况, 若有余票, 则为客户办理订票手续, 分配给客户一个座位号, 然后将新客户的信息添加, 并修改该航线的订票数和余票数。若无余票, 则输出客满信息。进一步可实现如果该航班已经无票,可以提供相关可选择航班信息。
3、退票业务:根据客户提出的航班号, 办理退票,删除该客户的信息, 并修改文件相应航线的订票数和余票数。
4、 修改航班信息:当航班信息改变可以修改。
2、设计原理
1、线性链表
1.1线性链表简介
线性表的链式存储结构称为线性链表,是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接来实现的。因此,在链式存储方式中,每个结点由两部分组成:一部分用于存放数据元素的值,称为数据域;另一部分用于存放指针,称为指针域,用于指向该结点的前一个或后一个结点(即前件或后件)
1.2线性链表分类
线性链表分为单链表、双向链表和循环链表三种类型。
在单链表中,每一个结点只有一个指针域,由这个指针只能找到其后件结点,而不能找到其前件结点。因此,在某些应用中,对于线性链表中的每个结点设置两个指针,一个称为左指针,指向其前件结点;另一个称为右指针,指向其后件结点,这种链表称为双向链表。
1.3线性链表的基本运算
(1)在线性链表中包含指定元素的结点之前插入一个新元素。在线性链表中插入元素时,不需要移动数据元素,只需要修改相关结点指针即可,也不会出现“上溢”现象。
(2)在线性链表中删除包含指定元素的结点。*:在线性链表中删除元素时,也不需要移动数据元素,只需要修改相关结点指针即可。
(3)将两个线性链表按要求合并成一个线性链表。
(4)将一个线性链表按要求进行分解。
(5)逆转线性链表。
(6)复制线性链表。
(7)线性链表的排序。
(8)线性链表的查找。线性链表不能随机存取。
1.4线性表顺序存储的缺点:
(1)插入或删除的运算效率很低。在顺序存储的线性表中,插入或删除数据元素时需要移动大量的数据元素;
(2)线性表的顺序存储结构下,线性表的存储空间不便于扩充;
线性表的顺序存储结构不便于对存储空间的动态分配。
2、航班的信息
为了便于查找和修改,航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞达到的时间、空座和目的的、票价以及限座七个数据项:
降落城市航班号飞机号飞行时间余票量总座位数起飞城市h
D1
D2
D3
单链表如下:
每个结点包括数据域和指针域:
数据域指针域旅客的资料
为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号码、航班号和座位号四个数据项:
旅客姓名航班号座位号票的张数每个结点包括数据域和指针域:
数据域指针域客户链表
每个数据元素包括头指针和尾指针两个数据项:每个结点包括两个指针域:
头指针域尾指针域
3、设计内容
1、总体设计
总体设计的流程图如图2-1,飞机订票系统的总的界面图如图2-2。
图2-1
图2-2
2、录入航班信息模块
首先是需要进行管理员密码验证,设置的密码为char password[20]=guanliyuan;
int addflight(air plane)调用if(strcmp(ps,password)==0)进行密码验证,密码正确后,调用createlistcorrect(plane);增加航班信息。会依次要求输入:站名-航班号-飞机号-飞行时间客机容量-总余票量。将新航班结点插入航班链表中。如图3-1图3-1
3、删除航班模块
添加、删除航班信息的流程图如图3-5所示。
首先是需要进行管理员密码验证,设置的密码为char password[20]=guanliyuan; int deleteflight(air plane)会调用if(strcmp(ps,password)==0)进行密码验证,密码正确后,调用scanf(%s,banci);锁定班次,后用语句delep=plane-next; frontp=plane;将此航班删除。如图3-2。
图3-2
删除前的全部航班显示: 如图3-3
图3-5
图3-3
显示全部