数据结构day06小项目

一、项目整体功能

这是一个基于 C 语言实现的简易航班管理系统,支持普通用户管理员两种角色操作,核心实现用户管理、航班购票 / 退票 / 改签、航班信息管理、黑名单管控等功能。

二、核心文件说明

文件名 作用
yonhu.h/.c 定义用户信息结构体、用户链表操作(初始化 / 创建节点 / 尾插)、登录 / 注册校验
hangban.h/.c 定义航班信息结构体、航班链表操作、黑名单管理、航班改签 / 修改 / 查询等功能
6. 航班管理系统.c 主函数入口,提供菜单交互,整合用户和航班的所有功能逻辑

三、核心数据结构

1. 用户信息结构体(yonhuxingxi)

c

运行

复制代码
struct yonhuxingxi {
    char zhang_hao[50];   // 账号
    int mi_ma;            // 密码(整数)
    struct yonhuxingxi *next; // 双向链表下一个节点
    struct yonhuxingxi *prev; // 双向链表上一个节点
};
  • 采用双向链表存储,支持用户注册、登录校验。

2. 航班信息结构体(hangbanxingxi)

c

运行

复制代码
struct hangbanxingxi {
    char qi_fai_time[50];  // 起飞时间(格式化后)
    char dao_da_time[50];  // 到达时间(格式化后)
    char gong_si_name[30]; // 航空公司名称
    char hang_ban_hao[30]; // 航班号(如"航班号123456")
    char myname[30];       // 乘客姓名
    char dian_hua[30];     // 联系方式(如"联系方式15013117629")
    int is_black;          // 黑名单标记:0=正常,1=黑名单
    struct hangbanxingxi *next; // 双向链表下一个节点
    struct hangbanxingxi *prev; // 双向链表上一个节点
};
  • 核心扩展:is_black 字段实现黑名单管控,黑名单用户禁止购票、改签。

四、核心功能模块(简单易懂版)

1. 普通用户功能(需先登录)

功能 操作说明
注册 输入账号 + 整数密码,校验账号不重复则创建用户节点,插入用户链表
登录 输入账号 + 密码,校验账号存在且密码正确,登录成功后才能操作航班相关功能
查询航班 输入姓名,查询该乘客的所有航班信息(含状态:正常 / 黑名单)
买票 输入起飞 / 到达时间、手机号、姓名、航班号,支付 50 元;黑名单用户禁止购票
退票 输入姓名,删除该乘客的所有航班信息
改签 输入姓名 + 新航班号 + 新起降时间,黑名单用户禁止改签

2. 管理员功能(需登录管理员账号:vip / 密码 wsvip)

功能 操作说明
查询所有航班 展示系统中所有航班信息,含乘客黑名单状态
修改航班 支持修改航班号、修改起降时间(按旧时间匹配航班)
添加航班 输入航班信息(起降时间、手机号、姓名、航班号),新增航班节点到链表
黑名单管理 1. 设置黑名单(标记乘客为黑名单);2. 解除黑名单;3. 查看黑名单列表

3. 通用功能

  • 退出系统:释放用户链表和航班链表的所有内存,避免内存泄漏。

五、关键技术点

  1. 双向链表:用户和航班都采用双向链表存储,支持尾插、删除、遍历操作,便于增删改查。
  2. 内存管理 :使用malloc创建节点,退出时用free释放所有节点,避免内存泄漏。
  3. 时间格式化time_Init函数将 10 位数字(如 2024050616)转为 "2024 年 05 月 06 日 16 时" 格式。
  4. 字符串处理 :用strcmp比较账号 / 姓名,strcpy/sprintf拼接字符串(如航班号、联系方式)。
  5. 合法性校验
    • 登录 / 注册时校验账号是否存在、密码格式(整数);
    • 购票 / 改签时校验是否为黑名单用户;
    • 所有链表操作前校验头节点是否为空。

六、使用注意事项

  1. 输入格式要求:
    • 时间需输入 10 位数字(年 4 + 月 2 + 日 2 + 小时 2,如 2024050616);
    • 密码、航班号为整数;
    • 姓名 / 账号为无空格的字符串。
  2. 管理员账号固定:账号vip,密码wsvip,仅管理员可操作黑名单、修改 / 添加航班。
  3. 黑名单影响:被加入黑名单的乘客,无法购票、改签,但可退票。
相关推荐
Darling噜啦啦4 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠5 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾5 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres8215 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q5 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒5 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记5 天前
单项不带头不循环链表
数据结构·链表
小糯米6015 天前
JS 数组
数据结构·算法·排序算法
小欣加油5 天前
leetcode3612 用特殊操作处理字符串I
数据结构·c++·算法·leetcode·职场和发展
凌波粒5 天前
LeetCode--90.子集II(回溯算法)
数据结构·算法·leetcode