数据结构课程设计——航空客运订票系统

news2024/10/5 21:18:12

航空客运订票系统

一、引言

1.1 问题的提出

   随着时代的发展,智能化生产给社会带来方便与精确,本系统以方便大众,妥善管理机场票务操作为基旨而开发。

本程序以数据结构(c语言描述)存储结构进行开发。利用单链表等存储方式为基础进行开发。

本系统可以向客户提供订票业务。若航班票已售完,可以询问顾客是否排队等候。可退票,退票后修改相关数据文件并查看是否有排队等候此航班,若有,则按排队,先后售票。客户资料有姓名,证件号,订票数量及航班情况,订单有编号。修改航班信息:当航班信息改变可以修改航班数据文件。

1.2 任务需求分析

(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);

(2)系统能实现的操作和功能如下:

①录入:可以录入航班情况,全部数据可以只放在内存中,最好存储在文件中;

②查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;

③承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补;

④承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。

二、组件设计

2.1系统设计方案

(1)菜单:包括(航线信息,已订票客户信息,查询航线,订票业务,退票业务,余票排序和退出菜单)

(2)抽象数据类型定义

status InitList (LinkList &L)

(4)存储结构:本程序采用了单链表存储方式。用单链表增加订票乘员名单域的客户信息和排队等候的顾客信息。

(5)算法设计

顾客订票:运用单链表建立空表,用单链表增加订票乘员名单域的客户信息。时间复杂度为o(n);空间复杂度为o(1)。

排队候票顾客:运用单链表,若原排队等候客户名单域为空,则增加排队用户。若有空票,利用单链表指针查找有需要的客户,并对其售票。时间复杂度为o(n);空间复杂度为o(1)。

退票:调用查询函数,根据客户提供的航线进行搜索,根据客户提供的姓名,在订票客户名单域进行查询。若信息查询成功,删除订票客户名单域中的信息,重新将航线名单域指向订票单链表的头指针。时间复杂度为o(n);空间复杂度为o(1)。

完整资料私信我:

图1功能模块图


2.2功能设计模块

2.3详细设计

图2根据终点站名查询系统模块图


(1)根据客户需要输入终点站名 Info->ter_name,用strcmp函数即strcmp(name,info->ter_name)比较,若相同,则输出该航班信息,若不同则输出“对不起,该航班没找到!”该模块功能图如图2所示:

(2)办理订票模块

调用查询模块,若客户订票额超过乘员定票总额,退出。若客户订票额末超过余票量,订票成功并等记信息.若满员则询问是否排队等候。如图3所示:

图3办理订票系统模块图

(3)查看余票并排序模块

三、系统集成

3.1数据结构定义

typedef struct wat_ros {

    char name[10];//姓名

    int req_amt;//订票量

    struct wat_ros* next;

}qnode, *qptr;

typedef struct pqueue {

    qptr front;//等候替补客户名单域的头指针

    qptr rear;//等候替补客户名单域的属指针

}linkqueue;

typedef struct ord_ros {

    char name[10];//客户姓名

    int ord_amt;//订票量

    int grade;//舱位等级

    struct ord_ros* next;

}linklist;

3.2调试与测试

3.2.1 调试

1.程序在起初设计的时候,经常出现溢出错误,而且不只一处。为了修正这些溢出错误,耗费了大量的时间,修正解释之后再看源程序,才发现原来只是因为开始的函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了后期大量的纠错工作。

2.由于忘记了一些c语言的规范使得在调试过程中一些错误没有发现。例如,调用函数时,数组只需要传递数组名即可;字符‘0’和整形的0是不同的文明不可以直接对其画等号。

3.测试用例具有一定的广泛性。运行程序时输入了多种不同字符信息,经过多次修改结果达到了预期效果。说明程序具有一定的可靠性和稳定性。

3.2.2测试

(1)浏览航线信息功能测试输入数据1: 1

预期结果:终点站名航班号飞机号飞行日期乘员定额余票量

"beijing","1","B8571","SUN",3,3,

"shanghai", "2", "S1002","MON",15,5,

"london", "3","L1003","FRI",30,20

运行结果:终点站名航班号飞机号飞行日期乘员定额余票量

"beijing","1","B8571","SUN",3,3,

"shanghai", "2", "s1002",“MON",15,5,

"london", "3",“L1003","FRI",30,20

说明:预期和运行结果相同。

(2)浏览已订票客户信息测试

输入数据1:2,需要查询的航班

预期结果:该航线没有客户信息(当无人在该航班订票时)

输出该航线已订票客户名单(当有人在该航班订票时)

运行结果:该航线没有客户信息(当无人在该航班订票时)

输出该航线已订票客户名单(当有人在该航班订票时)

说明:预期和运行结果相同。

(3)查询航班测试

输入数据1:3,需要查询的终点站名

预期结果:对不起,该航班没找到(内存中没有要查找的信息)

输出该航班信息(内存中已存要查找的信息)

运行结果:对不起,该航班没找到(内存中没有要查找的信息)

输出该航班信息(内存中已存要查找的信息)

说明:预期和运行结果相同。

(4)办理订票业务测试

输入数据1:4

预期结果:输入客户信息,未满员,订票成功;满员,询问是否排队等候

运行结果:输入客户信息,未满员,订票成功;满员,询问是否排队等候

说明:预期和运行结果相同。

(5)办理退票业务测试

输入数据1:5

预期结果:订票成功并自动为替补客户办理该航班订票。

运行结果:订票成功并自动为替补客户办理该航班订票。

说明:预期和运行结果相同。

(6)查看余票并排队等候输入数据1:6

预期结果:按余票正序排列输出航班信息。

运行结果:按余票正序排列输出航班信息。

说明:预期和运行结果相同。

3.3运行效果图:

(1)点击运行,首先出现的是登录界面,选择选项。

 


(2)选择1,浏览内存中已存航线信息。

 


(3)选择3,根据终点站名查询航班信息


(4)选择4,办理订票业务,输入需要的订票的航班号及客户信息,当余票额未满时操作成功,如图3.3.4(1)所示。当余票额已满时,询问是否排队等候。如图3.3.4(2)所示。


3.3.4(1)办理订票业务(余票额未满)

3.3.4(2)办理订票业务(余票额已满)


(5)选择5,办理退票,查看是否有排队等候该航班票务的,若有,则自动替补,若没有,则返回主菜单。


(6)选择6,查看余票并排序,通过输入查询条件的任意项即可查询。

四、课程设计总结

经过这一段时间的程序设计,该课设任务书中的内容基本达到。并且比任务书要求更高。可以自动生成座位号,且自动询问客户是否排队等候,退票后也可以即使售出给排队的客户,不会浪费资源,也方便操作员管理

在两周的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间遇到很多问题:

⑴因本人能力有限,在编写的时候只使用了相对较为简单的基础语言﹐代替了相对较为复杂的语言,降低了运行效率。

(2)程序在起初设计的时候,经常出现溢出错误,而且不只一处。为了修正这些溢出错误,耗费了大量的时间,修正解释之后再看源程序,才发现原来只是因为开始的函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了后期大量的纠错工作,

(3)测试用例具有一定的广泛性。运行程序时输入了多种不同字符信息,经过多次修改结果达到了预期效果。说明程序具有一定的可靠性和稳定性。

经过这次数据结构课程设计,我对调试掌握的更加熟练了,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,意识到了程序语言的规范性以及我们在编程时要有严谨的态度,同时在写程序时如果加一定量的注释,既增加了程序的可读性,也可以使自己在读程序时更容易。

参考文献

[1]谭浩强.C语言程序设计(第三版).清华大学出版社,2007

[2]姜灵芝,余健.C语言课程设计案例精编.清华大学出版社,2008

[3] 菜鸟教程 网站https://www.runoob.com/

[4]吴伟民,严蔚敏.数据结构.清华大学出版社,2008

[5]吕映芝.编译原理.清华大学出版社,2008

[6]严蔚敏.数据结构C语言版[M].清华大学出版社,2007.

[7]严蔚敏.数据结构C语言版[M].清华大学出版社,2007.
[8] CSDN 网站 CSDN - 专业开发者社区

[9]《大话数据结构》

[10] 《算法》作者: [美] Robert Sedgewick

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/554854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字节技术面都过了,薪资都谈好了20K*13结果还是被刷了,问HR,原因是。。

面试被拒开端 分享下自己的求职小故事。在一家公司软件测试技术面试已经过了,然后和最终面试官沟通了下,面试官提出来一个薪资数字,我接受了这个提议并和hr同步了这个数字。再然后被拒了,理由就是期望薪资和职级不匹配。我询问后…

鸿蒙元服务万能卡片开发-stage模型和fa模型的卡片区别

一、项目类型 Application: 应用开发 Atomic Service:原子化服务开发 这里选择Empty Ability模板创建项目。 二、Stage模型卡片开发 Api:9 Model:stage Language:ArkTS AppScope :应用的全局配置信息。…

Flutter非常常用的几个布局小控件Center,SizeBox,Divider

Center简介 Center是Flutter中的一个布局小部件,用于将其子部件居中显示在父部件中。 Center的特点 Center小部件具有以下特点: 将子部件在水平和垂直方向上居中显示。默认情况下,Center会尽可能将子部件展开以填充可用空间。如果Center没…

docker未授权rce+docker逃逸复现

docker未授权rcedocker逃逸复现 前言:这段时间跟着bnessy师傅一起打内网,跟着bnessy师傅也学到了很多有用的姿势,这里就来复现几个内网的漏洞(大佬轻喷) 1、老规矩,还是fscan扫到的漏洞 通过访问&#xff1…

AI突袭景观设计界,这次是真的卷起来了!

目前,AI已经成为内容创作者的灵感来源和效率工具,从设计、内容、视频等创意性工作中,我们看到AI助力下提升了数倍效率,正是如此,也迎来了更多企业的关注,想要将AI融入到各行各业中。 神采PromeAI在不断更新…

Mybatis源码

Mybatis简介 持久层ORM框架,执行sql比较简单,扩展性强,与传统jdbc相比,省去了手写连接的几个步骤,可以通过配置。 节约数据库连接资源,代码易于维护。mybatis 在SqlMapConfig.xml 中配置数据库连接池&#…

【服务器数据恢复】raid离线磁盘上线失败导致分区不识别的数据恢复

服务器数据恢复环境: HP ProLiant DL某系列服务器,三块SAS硬盘组建raid阵列。 上层系统部署有数据库,数据库存放在D分区,备份存放在E分区。 服务器故障: 磁盘故障导致RAID瘫痪,其中一块硬盘状态灯显示红色…

接口测试:Eolink Apikit 和 Postman 哪个更好用?

接口测试:Eolink Apikit 和 Postman 哪个更好用? 很多做服务端开发的同学,应该基本都用过 Postman 来测试接口,虽然 Postman 能支撑日常工作,但是总感觉还是少了点什么,比如需要 Swagger 来维护接口文档&am…

故障分析 | innodb_thread_concurrency 导致数据库异常的问题分析

作者通过分析源码定位数据库异常,梳理参数 innodb_thread_concurrency 设置的注意事项。 作者:李锡超 一个爱笑的江苏苏宁银行数据库工程师,主要负责数据库日常运维、自动化建设、DMP 平台运维。擅长 MySQL、Python、Oracle,爱好骑…

【coding加油站】vue单页面手机商城设计

1、引言 设计结课作业,课程设计无处下手,网页要求的总数量太多?没有合适的模板?数据库,java,python,vue,html作业复杂工程量过大?毕设毫无头绪等等一系列问题。你想要解决的问题&am…

【Python】判断语句 ② ( if else 语句 | if else 语句语法 | Python 中的空格缩进 | 代码示例 )

文章目录 一、if else 语句语法二、Python 中的空格缩进三、代码示例 一、if else 语句语法 if else 语句语法 : if 条件判定:满足条件要执行的代码1满足条件要执行的代码2满足条件要执行的代码3 else:不满足条件要执行的代码1不满足条件要执行的代码2不满足条件要执行的代码3…

佳能打印机删掉又会自动加载的原因及解决方案

驱动人生分析出现佳能打印机删掉又会自动加载的原因可能是因为在系统中,存在着佳能打印机的自动驱动程序。将打印机删除后,系统会自动重新安装该驱动程序,导致打印机重新加载。 特别在一台新的佳能打印机设备到位时,也会出现电脑…

2023自动化测试工具还有什么新鲜事?

我们准备了一份详细指南,介绍了在一个好的测试自动化工具中应该寻找什么,以及哪些工具在 2023 年值得考虑。 尽管手动测试仍然是软件质量保证的强大工具,正如我们在最近关于手动测试与自动测试的长期阅读中再次确立的那样,越来越…

1700页,卷S人的 软件测试《八股文》PDF手册,涨薪跳槽拿高薪就靠它了

大家好,最近有不少小伙伴在后台留言,又得准备面试了,不知道从何下手! 不论是跳槽涨薪,还是学习提升!先给自己定一个小目标,然后再朝着目标去努力就完事儿了! 为了帮大家节约时间&a…

【Linux】权限管理,谁动了我代码?!

目录 一,shell命令以及运行原理 二 ,Linux用户权限 1. su —— 用户切换 三,权限管理 1. 理解 2. 用户 3. 文件类型 4. 文件基本权限 5. 设置文件权限方法 1. chmod —— 修改文件访问权限 2. chown —— 修改文件拥有者 3. chg…

2023年5大风口行业

今天就来和大家分享一下,在时代的洪流下,普通人如何顺应大势抓住机遇! 实现人在风口上,猪都会飞起来。 根据对市场的观察及各平台数据分析结果,小编总结了了2023年将会迎来大爆发的5个行业,带大家看看新的…

最近公司招人面试了一位5年的测试,一问三不知,最后还反怼我...

最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。 在沟通中发现,由…

xxl-sso 单点登录

目录 1 项目启动修改Host文件运行路径SSO登录/注销流程验证 2 分析登录流程 单点登录原理及简单实现:https://www.cnblogs.com/ywlaker/p/6113927.html xxl-sso是一款基于redis轻量级分布式高可用的SSO实现组件,支持web端(Cookie实现)和app端(Token实现)两种方式,两…

[WGAN] Wasserstein GAN

看这个解析讲的也挺好的:令人拍案叫绝的Wasserstein GAN - 知乎 1、背景 GAN的训练是delicate和unstable的。需要定义一个连续的距离,来衡量模型distribution和真实distribution之间的差异。 2、贡献 提出了Wasserstein-GAN,用Earth Mover (…

常用五大类RFID系统,实践领域广泛,加强现代化管理

随着信息技术的不断进步,RFID技术已逐渐成为企业管理及社会服务领域中不可或缺的一种重要技术手段。根据其不同的应用场景,RFID技术广泛应用于药品监管、固定资产管理、仓储管理、智慧工厂和消费服务等领域。本文将从五个方面介绍常用的RFID系统。 一、…