📄 train_booking_unit.h
字号:
// train_booking_unit.h -- 系统数据单元定义
//
/////////////////////////////////////////////////////////////////////////////
#ifndef TRAIN_BOOKING_UNIT_H_
#define TRAIN_BOOKING_UNIT_H_
#include <time.h>
#include "train_booking_const.h"
/////////////////////////////////////////////////////////////////////////////
// 中途站点信息:双向链表
typedef struct station_info
{
char station_id[MAX_STATION_ID_LEN + 1]; // 车站名
char master[MAX_TRAIN_ID_LEN + 1]; // 从属列车号
char time_id[MAX_TIME_ID_LEN + 1]; // 从属列车发出时间标识符
int station_order; // 车站在某特定路线中的次序
int distance; // 存储距起点站的距离,单位km
struct tm reach_time; // 存储抵达时间
char reserve[RESERVE_BLOCK]; // 升级数据保留区
int offset; // 文件定位偏移量
struct station_info *pre; // 链表前趋指针
struct station_info *next; // 链表后继指针
}station_info;
/////////////////////////////////////////////////////////////////////////////
// 软卧车厢座位信息:顺序表
typedef struct sbed_info
{
int car_order; // 本节车厢在列车中的次序
int offset; // 文件定位偏移量
char master[MAX_TRAIN_ID_LEN + 1]; // 从属列车号
char time_id[MAX_TIME_ID_LEN + 1]; // 从属列车发出时间标识符
char info[DOT_PER_SB_CAR][MAX_STAION_AMOUNT - 1]; // 座位信息矩阵
}sbed_info;
/////////////////////////////////////////////////////////////////////////////
// 硬卧车厢座位信息:顺序表
typedef struct hbed_info
{
int car_order; // 本节车厢在列车中的次序
int offset; // 文件定位偏移量
char master[MAX_TRAIN_ID_LEN + 1]; // 从属列车号
char time_id[MAX_TIME_ID_LEN + 1]; // 从属列车发出时间标识符
char info[DOT_PER_HB_CAR][MAX_STAION_AMOUNT - 1]; // 座位信息矩阵
}hbed_info;
/////////////////////////////////////////////////////////////////////////////
// 硬座车厢座位信息:顺序表
typedef struct hseat_info
{
int car_order; // 本节车厢在列车中的次序
int offset; // 文件定位偏移量
char master[MAX_TRAIN_ID_LEN + 1]; // 从属列车号
char time_id[MAX_TIME_ID_LEN + 1]; // 从属列车发出时间标识符
char info[DOT_PER_HS_CAR][MAX_STAION_AMOUNT - 1]; // 座位信息矩阵
}hseat_info;
/////////////////////////////////////////////////////////////////////////////
// 根据时间标识符区分的每次车的列车列表:链表
typedef struct train_item
{
char master[MAX_TRAIN_ID_LEN + 1]; // 从属车次编号
char train_time_id[MAX_TIME_ID_LEN + 1]; // 该趟列车的时间标识符
char reserve[RESERVE_BLOCK]; // 升级数据保留区
int offset; // 文件定位偏移量
struct train_item *next; // 链表指针
}train_item;
/////////////////////////////////////////////////////////////////////////////
// 已注册用户名列表:链表
typedef struct user_item
{
char psngr[MAX_PSNGR_ID_LEN + 1]; // 注册用户名
char master[MAX_STATION_ID_LEN + 1]; // 注册的车站名
char reserve[RESERVE_BLOCK]; // 升级数据保留区
int offset; // 文件定位偏移量
struct user_item *next; // 链表指针
}user_item;
/////////////////////////////////////////////////////////////////////////////
// 列车信息:单向链表
typedef struct train_info
{
// 全局信息
char locked; // 锁定状态,1是,0否
char expired; // 过期状态,1是,0否
char master[MAX_TRAIN_ID_LEN + 1]; // 所属车次编号
char time_id[MAX_TIME_ID_LEN + 1]; // 列车发出时间标识符
int train_income; // 列车总收入
float price_fac; // 票价因子,由列车档次决定
int speed; // 列车速度,单位km/h
struct tm start_tm; // 起点站始发时间
struct tm finish_tm; // 抵达终点站时间
// 人员信息
int total_passengers; // 总已载员数
int total_waiters; // 已排队等票人数
char waiter[MAX_NOTIFY_AMOUNT][MAX_PSNGR_ID_LEN + 1]; // 排队等票乘客列表
struct sbed_info sbed_info_list[SOFT_BED_CAR]; // 软卧座位信息结构数组
struct hbed_info hbed_info_list[HARD_BED_CAR]; // 硬卧座位信息结构数组
struct hseat_info hseat_info_list[HARD_SEAT_CAR]; // 硬座座位信息结构数组
// 途经站点信息
int total_station; // 路过站点总数
char start[MAX_STATION_ID_LEN + 1]; // 起始站
char final[MAX_STATION_ID_LEN + 1]; // 终点站
struct station_info station_links; // 途经车站(包括起、终点)链表信息
// 附加信息
char reserve[RESERVE_BLOCK]; // 升级数据保留区
struct train_info *next; // 链表指针
}train_info;
/////////////////////////////////////////////////////////////////////////////
// 运营车次信息:单向链表
typedef struct train_sq_info
{
char train_sq_id[MAX_TRAIN_ID_LEN + 1]; // 车次编号
char master[MAX_STATION_ID_LEN + 1]; // 从属车站名
int running_amount; // 已运营列车总数
int running_amount_valid; // 有效的运营列车总数
int days_per_train; // 两趟车间隔天数
struct train_info train_list; // 该车次运营列车链表
struct train_item train_item_list; // 该车次运营列车时间标识符链表
char reserve[RESERVE_BLOCK]; // 升级数据保留区
int offset; // 文件定位偏移量
struct train_sq *next; // 链表指针
}train_sq_info;
/////////////////////////////////////////////////////////////////////////////
// 订票系统配置信息:独占文件
typedef struct system_info
{
// 全局信息
char open; // 是否开放订票
char locked; // 锁定状态,1是,0否
char location[MAX_STATION_ID_LEN + 1]; // 本地车站名称
int total_train_sq; // 运营车次总数
int total_train; // 运营列车总数
struct train_sq_info train_sq_list; // 车站管理车次信息链表
// 人员信息
int admin_amount; // 管理员人数
char admin[MAX_ADMIN_AMOUNT][MAX_PSNGR_ID_LEN + 1]; // 管理员列表
int psngr_amount; // 已注册乘客(包括管理员)总数
struct user_item psngr_item_list; // 已注册乘客名列表链表
// 帐目信息
float price_sbed_per_km; // 软卧每公里票价
float price_hbed_per_km; // 硬卧每公里票价
float price_hseat_per_km; // 硬座每公里票价
float bounce_off; // 乘客退票打折折数
float special_off; // 特殊乘客打折折数
int total_sold; // 总售出票数
long total_income; // 车站总收入
// 附加信息
char reserve[RESERVE_BLOCK]; // 升级数据保留区
}system_info;
/////////////////////////////////////////////////////////////////////////////
// 用户订票信息(对应某列列车):独占文件
typedef struct booked_info
{
char booked_train_sq_id[MAX_TRAIN_ID_LEN + 1]; // 订票对应的车次编号
char booked_train_time_id[MAX_TIME_ID_LEN + 1]; // 车次的某列列车时间标识符
char master[MAX_PSNGR_ID_LEN + 1]; // 所属用户名
int soft_bed; // 已订软卧数
int soft_bed_sq[SOFT_BED_CAR][MAX_BOOK_PER_PSNGR]; // 已订软卧车厢号、座位号
char soft_bed_st[MAX_BOOK_PER_PSNGR][MAX_STATION_ID_LEN * 2 + 2];
// 存储起点与终点车站名,两个名字一起存,中间用#隔开
int hard_bed; // 已订硬卧数
int hard_bed_sq[HARD_BED_CAR][MAX_BOOK_PER_PSNGR]; // 已订硬卧车厢号、座位号
char hard_bed_st[MAX_BOOK_PER_PSNGR][MAX_STATION_ID_LEN * 2 + 2];
// 存储起点与终点车站名,两个名字一起存,中间用#隔开
int hard_seat; // 已订硬座数
int hard_seat_sq[HARD_SEAT_CAR][MAX_BOOK_PER_PSNGR]; // 已订硬座车厢号、座位号
char hard_seat_st[MAX_BOOK_PER_PSNGR][MAX_STATION_ID_LEN * 2 + 2];
// 存储起点与终点车站名,两个名字一起存,中间用#隔开
char reserve[RESERVE_BLOCK]; // 升级数据保留区
int offset; // 文件定位偏移量
struct booked_info *next; // 链表指针
}booked_info;
/////////////////////////////////////////////////////////////////////////////
// 用户接收系统信息收件箱条目:单向链表
typedef struct msgbox_item
{
char title[MAX_TITLE_LEN + 1]; // 消息标题
char body[MAX_BODY_LEN + 1]; // 消息正文
char receiver[MAX_PSNGR_ID_LEN + 1]; // 接收用户名
char ifnew; // 是否已阅读;1否,0是
char reserve[RESERVE_BLOCK]; // 升级数据保留区
int offset; // 文件定位偏移量
struct msgbox_item *next; // 链表指针
}msgbox_item;
/////////////////////////////////////////////////////////////////////////////
// 前台用户信息:独占文件
typedef struct passenger_info
{
char passenger_id[MAX_PSNGR_ID_LEN + 1]; // 用户名
char password[MAX_PASS_LEN + 1]; // 用户密码
char station_id[MAX_STATION_ID_LEN + 1]; // 注册的车站名
char type; // 用户类型:0管理员;1普通用户;2特殊用户
int total_booked_train; // 已订票列车总数
int total_booked_tickets; // 已订票总数
int total_cost; // 订票总消费
int sysmsg_amount; // 系统发送消息数
int sysmsg_new; // 新到系统消息数
struct booked_info booked_links; // 订票信息链,每个结点对应一趟列车
struct msgbox_item sysmsg_links; // 系统消息链
char reserve[RESERVE_BLOCK]; // 升级数据保留区
struct passenger_info *next; // 链表指针:多文件读取式链表
}passenger_info;
/////////////////////////////////////////////////////////////////////////////
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -