火车票订票系统 Revised at 2 pm on December 25, 2020. 目 录 软件技术基础课程设计说明书 题目: 火车订票系统的设计 学生姓名: 学 号: 院 (系): 电气与信息工程学院 专 业: 电子信息科学与技术 指导教师: 杨帆
2015 年 06月26日课程设计报告 1 课程设计介绍
课程设计内容 软件技术基础课程是非计算机本科专业学习计算机软件基础知识的综合性基础课程。学习本课程,要求学生对软件技术的各个组成部分的基础知识、发展趋势有全面、系统的了解;掌握基本数据结构,达到能熟练运用解决实际问题的程度;掌握操作系统基本原理和类型,了解系统各种管理功能。通过自学了解软件工程的基本概念,软件设计开发的过程和相关技术。 实践环节具体任务:设计、开发一种火车订票系统。通过此系统可以实现如下功能:火车车次信息录入、车次信息查询、火车票订票、火车票退票等。 课程设计要求 系统应该至少提供以下模块: 火车车次信息录入: 可以录入车次情况(包含车次编号、出发时间、出发站、到达站、到达时间、途经主要大站(需要考虑如何保存这些信息)等信息) 车次信息查询: 可以查询某个车次的情况(如,输入车次号,查询出站、到站时间,票价,票价折扣,确定车次是否满员);可以输入出发站点、到达站点城市,查询火车车次情况; 火车票订票: 可以订票,如果该车次已经无票,可以提供相关可选择车次(同样到达点、途经出发站的其他火车)——订票时需要提供时间、车次、车厢号、座位号、票价、订票人姓名、订票人联系方式、证件号码、订票数量、订单号等,只能比这个多,不能少于这些信息; 火车票退票: 可退票,退票后修改相关数据;客户资料有姓名,证件号,订票数量及车次情况,订单要有编号。 要求: 根据以上功能说明,设计火车票订票系统订票环节涉及的信息,订票信息的存储结构,设计程序完成功能。
2 概要介绍 系统总体设计 首先考虑好选用链表结构存储通讯录。经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,每一个模块对应一个函数。这些函数分别为:火车信息录入函数,火车车次查询函数,火车票订票函数,火车票退票函数,显示火车信息函数,主函数(包括菜单控制程序函数)。 各子模块设计 实现程序最初运行时的菜单界面,以及对其他模块的调用。同时建立火车信息单链表。其中采用switch函数实现对菜单目录的每个模块的运行。 结构框图: 主要实现程序最初运行时火车信息的录入。用头插入法建立带有头结点的单链表。 结构框图:
实现的功能是查询到火车信息后,客户购买火车票,输入客户的姓名、手机号、身份证号等基本信息并依次保存到客户链表位置。 结构框图:
实现的是查询已订票的客户,然后退票并输出订单号。 结构框图:
实现的是查询目前链表里火车的信息。该模块又细分为3个小模块,分别是按编号查询、按出发站查询、按终点站查询,用if选择语句实现对这三个小模块的运行选择。查询功能用strcmp比较函数实现, Strcmp函数比较原理: 例如:strcmp(str1,str2); 比较的结果由函数值带回。 如果字符串1=字符串2,则函数值为0. 如果字符串1>字符串2,则函数值为一个正整数. 如果字符串1流程图: 实现功能为显示链表中所有的火车信息。原理是遍历链表,并输出所有信息。
运行录入函数 依次输入编号、出发时间、到达时间,出发站、终点站、途径大站、票价、剩余票数。并将其分别保存在所建立的链表中 返回主菜单
运行订票函数 调用查询函数,查询所需求的列车信息 购买火车票,输入客户的姓名、手机号、身份证号
自动生成车厢号、座位号及订单号
运行退票函数 查询已订票的客户信息并输出 退订查询的客户火车票,输出订单号 返回到主菜单
返回主菜单界面 结构框图: 3 详细设计 主函数模块所涉及的函数分析 源代码: #include<> #include<> #include<>车信息录入\n"); printf(" \ 2.火车信息查询\n"); printf(" \ 3.购票\n"); printf(" \ 4.退票\n"); printf(" \ 5.显示火车信息\n"); printf(" \ 6.退出管理系统\n"); printf(" \ 请按键选择\n"); while(true) { printf("请按键选择操作:\n"); fflush(stdin); 按编号查询 \n"); printf(" 2. 按出发站查询 \n"); printf(" 3. 按到达站查询 \n"); printf("==================\n"); printf(" 请 选 择: "); p=head->next; scanf("%d",&y); if (y==1) { printf("请输入要查找的编号:"); scanf("%s",num); while(p!=NULL) {
运行显示函数 遍历链表,输出所有火车信息 返回主菜单界面 if(strcmp(p->num,num)==0) { printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; } p=p->next; } } else if(y==2) { printf(" 请输入要查找的出发站:"); scanf("%s",leave); while(p!=NULL) { if(strcmp(p->leave,leave)==0) { printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; } p=p->next; } printf("不存在此出发站的车次\n"); } else if(y==3) { printf(" 请输入要查找的到达站:"); scanf("%s",arrive); while(p!=NULL) { if(strcmp(p->arrive,arrive)==0) { printf("编号:%s\n",p->num); printf("出发时间:%s\n",p->ltime); printf("到达时间:%s\n", p->atime); printf("出发站:%s\n",p->leave); printf("到达站:%s\n",p->arrive); printf("票价:%s\n",p->price); printf("途经城市:%s\n",p->through); printf("剩票:%s\n",p->shengpiao); return; } p=p->next; } printf("不存在此终点站的车次\n"); } } void show(train *head)编号查询: 2.按出发站查询: 3:按终点站查询: 如果没有该列车的截图:
显示功能模块运行结果截图
5 总结 设计中出现的问题以及解决的办法汇总(调试过程记录) 没有解决的问题: 设计中有一些问题没有在软件中得以实现,比如老师要求的在火车票订票模块中,如果该车次已经无票,可以提供相关可选择车次,该系统中没有实现这一功能;没有折扣等列车基本信息。 在订票模块中,输入客户信息时,信息错位,如下图: 在输入客户信息时有错,输入名字后本应该输入手机号,但是系统没有弹出手机号而是需要继续输入,这样就导致后边退票时查询的客户信息发生错位,问题原因所在应该是指针的问题。 完成订票后,没有将单链表中火车剩余票数修改,没有将俩个单链表联系起来所以没有实现这一功能。 实现车厢号和座位号时,原计划是车厢号从1开始,每节车厢30个座位,座位满30后车厢号加一,然后座位号从一号重新开始,但是代码一直没有编译通过。 已经解决的问题: 在录入信息输入后,一开始输出的页面是说有信息在一行,后面运行后发现会发生错位现象,后来在每输完一个信息后就换行,输出也同样如此,这样就可以更加直观的浏览到信息,不会错位。而且一开始的输出方法录入信息时必须制定信息长度,比如编号是四位,手机号是十一位,时间地点等都有输入字数限制,后来发现这一弊端后进行改进,在换成了换行输入输出后,都不用规定长度。但是这样有个缺陷就是数据输错后不容易发现,而且不符合常理,比如手机号只有11位,身份证号应该是18位。
课程设计心得体会 本来一开始做的时通讯录系统,后来又在假期重新做的火车票订票系统。如今系统还不是很完善,就如上文所说,有部分小细节还不能实现,而且还有点问题没有解决。 经过这次课程设计的训练,我的编程能力有了较明显的提高,尤其是对顺序表和链表的认识和使用有了显着的提高。然而,虽然只是编写这么一个小小的程序,却是我意识到自己的不足以及需要提高的地方。程序语句的不熟练使我在编程初期工作效率相当的低下。不断地翻书让我很痛苦,而且浪费了很多时间。 最后,通过这两周的编程,我感觉到了程序的来之不易。平时惯用的免费软件没觉得有什么,但通过本次的编程后我感觉到了编程者的艰辛。这次编程我学到了很多,也懂得了很多。我的C语言又有了新的提高,质的升华。
所有源代码:
#include<> #include<> #include<>按编号查询 \n"); printf(" 2. 按出发站查询 \n"); printf(" 3. 按到达站查询 \n"); printf("==================\n");