这是我大二上学期《数据结构》课程设计写的一个 C 语言控制台项目,主题是火车售票系统。
当时主要想把链表、结构体、文件读写这些知识点放到一个稍微完整一点的场景里练一遍,所以项目没有做图形界面,也没有接数据库,整体就是一个在控制台里运行的小系统。现在整理出来上传到 GitHub,一方面留个记录,另一方面也方便以后回头看自己当时的代码和设计思路。
目前实现的功能主要有:
- 用户注册
- 用户登录
- 密码找回
- 车次信息录入
- 按车次编号查询车次
- 按终点站查询车次
- 登录用户订票
- 登录用户退票
- 用户信息本地保存
系统里的用户、车次、站点、订单都用了结构体来表示,多个对象之间通过链表组织起来。用户信息会保存到 users.txt,下次启动程序时会自动读取。
这个项目的重点不是界面,而是数据组织方式:
- 用户信息使用链表存储
- 车次信息使用链表存储
- 每个车次下面的站点也使用链表存储
- 每个用户下面的订单使用链表存储
整体结构比较直观,适合作为数据结构课程设计里的练习项目。虽然现在回头看还有不少可以改进的地方,但它基本覆盖了链表增删查改、结构体嵌套、文件持久化等内容。
.
├── main.c # 程序源码
├── ex3.cbp # Code::Blocks 项目文件
├── .gitignore # Git 忽略规则
└── README.md # 项目说明
下面这些文件是编译或 IDE 自动生成的,不需要提交到 GitHub:
bin/obj/*.exe*.o*.depend*.layout
users.txt 是程序运行时生成的本地数据文件,也已经加入 .gitignore。如果你只是看代码或重新编译项目,不需要提前准备这个文件。
这是当时写课程设计时主要使用的方式:
- 打开 Code::Blocks。
- 选择
File -> Open,打开ex3.cbp。 - 选择
Debug或Release。 - 点击 Build and Run。
如果本机已经配置好 GCC,也可以直接在项目根目录编译:
gcc main.c -o ex3Windows PowerShell 下运行:
.\ex3.exeLinux/macOS 下运行:
./ex3程序启动后会进入主菜单,可以根据提示选择对应功能。订票和退票需要先登录用户;车次信息需要先手动录入,之后才能查询或订票。
当前版本只会持久化保存用户信息,车次信息和订单信息还没有写入文件,所以程序退出后这些数据会丢失。这一点是后续可以继续完善的地方。
这个项目是课程设计阶段写的,整体偏练习性质,所以还有一些明显可以改进的地方:
- 输入校验还不够完整,比如菜单输入非数字时处理不够友好。
- 车次和订单没有持久化保存。
- 密码是明文保存的,只适合课程练习,不适合真实项目。
- 界面依赖
system("cls"),更适合在 Windows 控制台运行。 - 代码都放在
main.c中,后续可以按用户、车次、订单等模块拆分文件。
这些问题没有刻意隐藏,因为它们本身也是学习过程的一部分。课程设计的重点是把核心逻辑跑通,并尽量把数据结构用清楚。
如果以后继续完善,可以考虑:
- 增加车次信息和订单信息的文件保存
- 拆分
.h和.c文件,让项目结构更清晰 - 增加更严格的输入检查
- 加一个管理员和普通用户的权限区分
- 优化订票逻辑,比如检查起点站和终点站顺序
这个仓库主要用于记录我的课程设计代码。项目规模不大,但对当时的我来说,是一次把 C 语言基础和数据结构知识串起来的练习。