数据结构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. 黑名单影响:被加入黑名单的乘客,无法购票、改签,但可退票。
相关推荐
不穿格子的程序员3 小时前
从零开始写算法——二叉树篇7:从前序与中序遍历序列构造二叉树 + 二叉树的最近公共祖先
数据结构·算法
开开心心就好4 小时前
内存清理工具显示内存,优化释放自动清理
java·linux·开发语言·网络·数据结构·算法·电脑
CodeByV5 小时前
【算法题】队列&广度优先搜索
数据结构·算法
学嵌入式的小杨同学5 小时前
【嵌入式 C 语言实战】手动实现字符串四大核心函数(strcpy/strcat/strlen/strcmp)
c语言·开发语言·前端·javascript·数据结构·数据库·算法
人工干智能5 小时前
Pandas核心数据结构:Series与DataFrame
数据结构·python·pandas
Yolo_TvT5 小时前
数据结构:初识“树”
数据结构
信奥卷王6 小时前
2025年9月GESPC++四级真题解析(含视频)
数据结构·c++·算法
jimy16 小时前
创建链表注意项(三):使用内存池减少malloc开销(用标志位或空闲链表)
数据结构·链表
源代码•宸6 小时前
Golang原理剖析(Sync.Map)
数据结构·经验分享·后端·golang·sync.map·readmap·dirtymap