一、实验目的
本次实验聚焦 C++ 结构化数据管理与面向对象编程的综合应用,通过实现完整的交通违章管理系统,掌握以下核心知识点与工程能力:
- 掌握 C++结构体的自定义设计,实现
toString()(序列化)与fromString()(反序列化)方法,完成复杂数据与文本字符串的双向转换; - 熟练运用 C++文件 IO(fstream) 实现数据持久化,掌握'启动加载文件 + 退出保存文件'的核心逻辑,兼容文件不存在、空文件等边界场景;
- 精通 std::vector 容器的增、删、改、查操作,利用
remove_if+erase实现高效的条件删除,替代静态数组完成动态数据管理; - 理解面向对象封装思想:将数据(机动车/驾驶员/违章信息)和业务逻辑(增删改查、加载保存)封装到类中,隐藏内部实现细节;
- 学会设计控制台交互界面,处理
cin与getline混合输入的异常问题,实现友好的菜单式操作流程; - 提升模块化程序设计能力,将系统拆分为'数据结构体定义''核心业务类''交互界面'三大独立模块。
二、实验要求
2.1 功能要求
(1)机动车信息管理模块
- 新增:录入车牌号、车架号、品牌、型号等完整机动车信息(车牌号为唯一标识);
- 修改:根据车牌号修改该车辆的所有信息;
- 浏览:展示所有已录入的机动车信息;
- 删除:根据车牌号删除指定机动车信息;
- 查询:根据车牌号精准查询机动车信息,无匹配时给出提示。
(2)驾驶员信息管理模块
- 新增:录入姓名、年龄、身份证号、驾驶证类型等完整驾驶员信息(身份证号为唯一标识);
- 修改:根据身份证号修改该驾驶员的所有信息;
- 浏览:展示所有已录入的驾驶员信息;
- 删除:根据身份证号删除指定驾驶员信息;
- 查询:根据身份证号精准查询驾驶员信息,无匹配时给出提示。
(3)违章信息管理模块
- 新增:录入车牌号、驾驶员编号、违章时间、地点、描述、处理状态等违章信息;
- 浏览:展示所有违章信息,清晰标识'已处理/未处理'状态;
- 处理:根据'车牌号 + 驾驶员编号 + 违章时间'组合条件,将指定违章标记为'已处理'。
(4)数据持久化要求
- 程序启动时自动从
vehicles.txt/drivers.txt/violations.txt加载数据; - 程序退出时自动将内存中的数据保存到上述文件(覆盖模式);
- 支持文件不存在的场景(首次运行自动创建空文件)。
(5)交互要求
- 提供层级清晰的菜单式操作界面,包含 14 个核心功能选项;
- 输入错误(如无效菜单编号、不存在的车牌号)时给出友好提示;
- 所有操作结果(如'添加成功''未找到该驾驶员''违章已处理')明确反馈。
2.2 技术要求
- 编程语言:C++11 及以上(需支持 lambda 表达式、
remove_if等特性); - 数据封装:
- 用
struct封装机动车(Vehicle)、驾驶员(Driver)、违章(Violation)信息,私有字段需通过方法访问; - 每个结构体必须实现
toString()(转为逗号分隔字符串)和fromString()(从字符串还原)静态方法;
- 用
- 容器使用:必须使用
std::vector存储所有数据,禁止使用静态数组; - 文件 IO:

