> # ♻️ 资源
> **大小:** 1.30MB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010193**](https://www.yuque.com/sxbn/ks/100010193)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87347643**](https://download.csdn.net/download/s1t16/87347643)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 模拟火车票售票系统
## 一、**课题内容和要求**
模拟火车票售票系统即一火车站每天有 n 个发车班次,每个班次都有班次号,固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。该系统要求对一个文件中所存储的票务信息进行各种常规操作,如:查询、计算、显示等功能。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些算法思想的应用,实现一个模拟火车售票系统。
该系统的功能要求如下:
(1)管理员:
根据密码登录,修改班次信息(信息用文件保存 number.dat),可随时增加新车次数据,设定提前售票时间等;可以查看各车次购票人员的信息。
(2)用户:
注册登录:以身份证注册,以密码登录后可以浏览班次信息,显示出所有车次当前状况(如果当前系统时间超过了某班次的发车时间,则显示“此车已发出”的提示信息);
查询路线:可按班次号、起点和终点站查询;根据发车时间给出顺序的发车时间表(排序方法自选),存入文件保存(sort.dat);
售票和退票:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新余票数量;退票时,输入退票的班次,当本车次发出前半小时才可以退票,自动更新已售票人数;
(3)实名制售票,系统设置每张身份证只允许购买一张火车票;
(4)售票时根据用户名,自动填入身份证信息;
(5)提供菜单选择项,如角色选择、时间选择、功能选择等
此外该系统还有一些选做要求:
(1)对用户的输入进行一定的正确性检查。
(2)用户可以查看历史购票记录。
## **二、**需求分析
模拟火车票售票系统的功能框架图如图 1 所示。
![ae327479da6ce237347a3dc25f73bafc.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1705368682791-32736344-594e-452b-9daf-17c467bd4956.png#averageHue=%23f9f8f8&clientId=u5852877a-b127-4&from=paste&height=784&id=uaafae5d2&originHeight=980&originWidth=936&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=101755&status=done&style=none&taskId=u4fbd1764-d458-4a40-b4fb-28b4269b2c1&title=&width=748.8)
图 1 模拟火车票售票系统功能框架图
(1)主函数进行系统的运行,由主函数带入火车票管理菜单。
(2)管理员登陆函数,根据特定的用户名和密码实现管理员的登陆,以满足特定用户登陆要求,登陆成功进入管理员菜单。
(3)管理员菜单,包括班次录入(由管理员手动录入当前班次总信息保存到相应文件),浏览班次信息,查询火车票系统(可以根据车次和终点站进行查询),购票,退票函数也放入其中,满足管理员的一写购票退票需求。
(4)用户注册函数,建立文件,保存用户信息,注册成功直接进入用户登陆界面,用户通过已经注册好的用户名和密码进行登陆,登陆成功,进入用户菜单。
(5)用户菜单,用户菜单可以让用户浏览目前班次信息,进行合理购票。也可以通过查询函数,用班次和终点站进行查询。购票,退票函数也能相应实现。
## 三、概要设计
### 1 主要存储结构
```
struct time { //时间结构体,为了与系统时间做比较.
int hour; //记录小时
int minutes; //记录分钟
};
struct ticket { //车票结构体
string Number; //车次
struct time Setout; //时间结构体
char Qidian[MAX]; //起点
char Zhongdian[MAX]; //终点
float Lasttime; //行车时间
int Fixnumber; //额定载客量
int Fixednumber; //已订票人数
} car[N];
```
### 2 主要函数流程
(1)装载函数:用于从文件中通过流式操作读取信息至文件流中,再从文件流中数据对结构体变量进行赋值,因对文件使用的是流式操作,不再需要单独对读取的信息申请空间,装载函数流程图如图 2 所示。
![f0438f52ce574805bc13c48eec101b2f.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1705368706380-bd461678-c87d-4e2d-8e90-83f61495ff3b.png#averageHue=%23f9f8f8&clientId=u5852877a-b127-4&from=paste&height=526&id=u1f7a18e8&originHeight=658&originWidth=341&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=39584&status=done&style=none&taskId=uf6ca5a0c-3351-4555-8bef-9e5b44c0394&title=&width=272.8)
图 2 装载函数
(2)查询班次信息函数:利用用户输入的班次信息名称进行顺序查找并将找到的客户信息输出,流程图如图 3、图 4 所示。
![863bd1b74d6c6f5e62998e6dbf81c62e.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1705368723536-ffe5a199-c398-4342-91c0-d5a3024e3d01.png#averageHue=%23f8f8f8&clientId=u5852877a-b127-4&from=paste&height=381&id=ua1c04a2b&originHeight=476&originWidth=420&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=32848&status=done&style=none&taskId=uc663012f-b4c5-4cc8-afaf-6b6d13a18dc&title=&width=336)
图 3 查询班次信息函数流程图
![f0b38ab5e05f08d51a0930c049559255.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1705368737584-2e7cd27f-c352-4734-bdbf-22b1d9e4745f.png#averageHue=%23f8f8f8&clientId=u5852877a-b127-4&from=paste&height=379&id=u42eccaa7&originHeight=474&originWidth=565&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=50746&status=done&style=none&taskId=u7e4ee627-5693-4178-b160-a4f0fa14a46&title=&width=452)
图 4 班次查询函数、终点站查询函数具体实现流程图
(3)主函数:使用多个函数组合来实现判断、查询、售票、退票等多层功能。函数实现流程如图 5 所示。
![899afc7d2e0741fc68f719c734e1fad9.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1705368750221-31951369-d2d0-4f00-af8a-6dc7cd3a337b.png#averageHue=%23f9f9f9&clientId=u5852877a-b127-4&from=paste&height=556&id=u39b3e411&originHeight=695&originWidth=760&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=63414&status=done&style=none&taskId=u7e040d68-f5df-4dd0-ba97-5214f9eb89f&title=&width=608)
图 5 主函数功能实现流程图
(4)退票操作函数:使用判断和查询函数组合来实现退票功能。函数实现流程如图 6 所示。
![23c0fcb12e11d5dd62d0d53ec2d7dd77.PNG](https://cdn.nlark.com/yuque/0/2024/png/2469055/1705368763964-7bf605e6-679e-4a58-9a92-f5b612cb9f6e.png#averageHue=%23f8f8f8&clientId=u5852877a-b127-4&from=paste&height=565&id=u5121d22f&originHeight=706&originWidth=466&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=41136&status=done&style=none&taskId=uef60c9b5-b995-49f7-802e-86f2a63463f&title=&width=372.8)
图 6 退票函数功能实现流程图
## 四、源程序代码
```
# include <iostream>
# include <fstream>
# include<stdio.h>
# include <string.h>
# include<time.h>
using namespace std;
void welcome();
//欢迎子函数
void choose(); //选择子函数
void banciluru(); //班�
- 1
- 2
- 3
前往页