# 数据结构与算法大作业-高铁信息管理系统 **Repository Path**: bobo82529/Information-management-system ## Basic Information - **Project Name**: 数据结构与算法大作业-高铁信息管理系统 - **Description**: 高铁信息管理系统 - **Primary Language**: Unknown - **License**: AFL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-12-11 - **Last Updated**: 2024-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 数据结构与算法大作业 ### 介绍(高铁信息管理系统) #### 整体结构 * [app_ui](app_ui)文件夹内为UI绘制相关 * [app_ui.h](app_ui/app_ui.h)为UI绘制函数的声明和页面枚举类型的定义 * [app_ui.cpp](app_ui/app_ui.cpp)为UI绘制函数的定义实现 * [app_data](app_data)文件夹内为数据/文件操作相关 * [app_data.h](app_data/app_data.h)相关结构体的定义以及具体功能实现函数的声明 * [app_data.cpp](app_data/app_data.cpp)具体功能实现函数的定义 * [method.h](app_data/method.h)顺序表操作相关函数的声明 * [method.cpp](app_data/method.cpp)顺序表操作相关函数的定义 * [save](save)文件夹内为相关数据文件 #### 使用说明 直接运行[main.cpp](main.cpp)即可 ### 具体说明 1. 高铁、乘客、车票信息的物理结构 * 使用顺序表存储数据,相较于链表更易于操作,并且可以在任意函数内调用 2. 整个程序的框架结构、设计思路、主要函数的功能 * 整体框架结构如上面 ***整体结构*** 内所说 * 设计思路:首先根据功能进行分类,构思出整体的目录,然后进行分级,最后对各个功能进行实现 * 主要函数功能: * `int Print_UI(ui which); //绘制对应ui并返回选项 ` * `void print_train_data(); //打印高铁车次信息` * `void print_passenger_data(); //打印乘客信息` * `void print_booking_data(); //打印订票信息 ` * 车次信息管理相关功能 * `void state_management(); // 运行状态管理 ` * `void search_train_data(); // 查询车次信息 ` * `void change_train_data(); // 修改车次信息 ` * `void add_train_data(); // 添加车次信息` * 乘客信息管理相关功能 * `void search_passenger_data(); // 查询乘客信息` * `void change_passenger_data(); // 修改乘客信息` * `void add_passenger_data(); // 添加乘客信息` * `void del_passenger_data(); // 删除乘客信息` * 订票信息管理相关功能 * `void search_booking_data(); // 车票信息查询` * `void search_ticket_data(); // 余票查询` * `void print_booking_data_as_id(); // 打印车票` * `void book_ticket(); // 订票` * `void del_booking_data_as_id(); // 退票` 3. 订票程序的算法思路说明 * 订票算法主要是由如下部分组成: * 首先要从车次管理中确认是否有剩余座位,然后要进行基本信息录入,确定订票信息。 因为大部分信息都是可变的,所以查询剩余车票时,直接使用了车次号进行查询,给出三类座位剩余票数来选择, 选择后将train中的座位减1,realloc拓展空间然后列举出所有可供选择的起点站,以此起点站的列车离站时间作为车票发车时间. * 然后列举此站后的车站,进行终点站的选择,以终点站的进站时间作为车票的到达时间,然后计算出两站间的距离, 已知信息是起始站到本站距离,直接用车票上的终点站减起点站里程可获得车票的里程用于计算票价,乘上所选座位的每公里单价就可以得到票价。 * 最后拉取系统时间,进行单号,乘车日期生成。单号通过拉取过去信息以当天和同车次进行排列,确定本单尾号。 以车次和座位类型确认座位号,在文件中是从上到下递增。然后乘客基本信息进行键入,对证件类型进行了验证输入是否合法。 最后生成车票信息,添加进booking。 4. 自认为最难/最出彩的部分 * 自认为的优点 * 整体UI结构较为整洁(指预置的分页打印等处理) * 在获取用户输入的部分基本都有判断以筛除离谱的输入 * 自认为的难点 * 订票功能的实现 * 因为该功能各种信息繁杂,需要对不同的文件同时进行操作,许多需要录入booking的信息需要拉取train中信息,所以要进行的操作比较多,比较复杂。 * 首先,单号的生成是年月日-车次号-当日第几单,需要对日期和车次号进行校验然后在上一个单号的基础上加1。 日期可以通过拉取系统时间生成,车次号就是查询时的输入,单号则需要通过拉取booking以往数据进行比对然后在进行递增排列生成。 这部分的问题主要就是在和以往数据的比对上,数据的处理比较不友好。车站的生成和里程计算以及票价生成一脉相承。按步骤来的话中规中矩。 * 座位号的生成则是需要对本车次以及所选座位类型进行索引相当于在booking中进行一个两条件的索引然后找到当前最大座位号,找到后加1完成,没找到则赋值为1, 这部分的生成逻辑环环相扣,操作量很大,同时还要兼顾ui的显示,所以是比较难的一部分。 5. 主要功能运行截屏(在文件夹[screenshot](screenshot)中,这里只展示部分) * [home页](screenshot\home.png) * [打印车次信息1](screenshot\打印车次信息1.png) * [打印车次信息2](screenshot\打印车次信息2.png) * [打印乘客信息](screenshot\打印乘客信息.png) * [打印订票信息](screenshot\打印订票信息.png) * [车次信息管理](screenshot\车次信息管理.png) * [乘客信息管理](screenshot\乘客信息管理.png) * [订票信息管理](screenshot\订票信息管理.png) 6. 小组成员分工等 * XXX:程序整体UI结构构建,以及三个输出函数和车次信息管理相关函数的实现 * XXX:乘客信息管理以及订票信息管理相关功能的函数实现