数据结构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. 黑名单影响:被加入黑名单的乘客,无法购票、改签,但可退票。
相关推荐
绝知此事7 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
LuminousCPP8 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
AI算法沐枫8 小时前
深度学习python代码处理科研测序数据
数据结构·人工智能·python·深度学习·决策树·机器学习·线性回归
m0_6294947310 小时前
LeetCode 热题 100-----26.环形链表 II
数据结构·算法·leetcode·链表
壹号用户10 小时前
用队列实现栈
数据结构·算法
欧米欧12 小时前
C++进阶数据结构之搜索二叉树
开发语言·数据结构·c++
小江的记录本12 小时前
【Java基础】反射与注解:核心原理、自定义注解、注解解析方式(附《思维导图》+《面试高频考点清单》)
java·数据结构·python·mysql·spring·面试·maven
Trouvaille ~13 小时前
【Redis篇】初识 Redis:特性、应用场景与版本演进
数据结构·数据库·redis·分布式·缓存·中间件·持久化
向日的葵00614 小时前
从IO视角深度对比:BST、红黑树、B树、B+树
数据结构·b树
小羊在睡觉15 小时前
力扣239. 滑动窗口最大值
数据结构·后端·算法·leetcode·go