C语言实现航班售票系统:结构体与文件存储实践
本文介绍一种基于C语言的简单航班售票系统实现思路。该系统利用结构体和数组管理航班数据及乘客订单,核心功能包括班次信息的录入与维护、多条件检索、座位选定以及票款交易的逻辑判断,同时展示了如何使用标准库函数将内存中的结构化数据写入本地文件以实现简单的数据持久化。
设计目标与功能概述
该系统旨在模拟真实的航空售票流程,侧重于掌握数据结构的运用。主要设计要求如下:
- 座位规划:设定客机布局为20排,每排4个座位(A/B/C/D)。
- 交互选择:允许用户自定义搜索条件(如时间、目的地),并根据需求完成选座或改乘其他航班的操作。
- 身份验证:购票环节需采集乘客姓名与身份证号,确保记录完整。
- 数据管理:支持查看历史订单及当前航班状态。
数据结构定义
为了实现高效的数据存取,本程序使用了两个核心结构体。第一个用于存储航班的静态属性,第二个用于记录动态的乘客订单。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100
typedef struct plane {
char ID[10]; /* 航班代号 */
char BePlace[10]; /* 起飞地点 */
char EnPlace[10]; /* 降落终点 */
char data[15]; /* 起飞时间 */
int max; /* 最大载客人数 */
int num; /* 已售票数 */
} PLANE; PLANE ti[N]; /* 全局变量,存储所有航班 */
typedef struct user {
char name[20]; /* 乘客姓名 */
int number; /* 身份证号 */
char id[20]; /* 关联的航班ID */
char seat[3]; /* 分配的座位号 (如 "19A") */
} USER; USER si[N]; /* 全局变量,存储所有订舱乘客 */
int n, n1; /* 现有航班总数及新增数量 */
int e, r; /* 全局计数器 */
核心操作模块
系统通过控制台菜单驱动各项操作。以下是几个关键步骤的实现细节。
第1步:录入航班信息
此模块用于初始化系统数据。用户按提示输入航班代号、起降地、时间及座位上限。enter()函数调用内嵌的 input() 循环填充数组 ti。
第2步:查找与浏览航班
提供了两种维度的检索方式:search_time()按起飞时间精确匹配,serch_end()按目的地模糊筛选。检索命中后调用 printf_one() 格式化打印表头及数据行。
第3步:执行订票交易
这是最复杂的逻辑节点。操作流程如下:
- 读取出发地与终点,计算是否存在对应航班的
i索引。 - 核对
num是否已达max。若已满则拒绝并建议改签。 - 若有余位,递增计数并将乘客姓名、身份证、选定座位存入
si[e],同时将航班ID绑定至乘客记录中。
第4步:退票与数据处理
退票时,系统首先通过输入的信息定位对应的乘客记录 k。确认有效后,通过 dele() 函数覆盖该位置数据以维持数组连续性,并在航班表中递减已售票数。
第5步:数据文件持久化
为了保留历史记录,程序使用二进制模式将结构体序列写入文件。这在运行结束前至关重要,否则内存中的数据随进程终止而消失。
void save() {
FILE *fp; // 假设已初始化并检查成功
for(int i = 0; i < n+n1; i++) {
fwrite(&ti[i], sizeof(struct plane), 1, fp); // 写入航班表
}
fclose(fp);
}
主界面与控制流
程序入口在 main() 中直接调用 menu() 进入无限循环。主菜单分为三类子功能:信息维护(1/2)、票务办理(3/4/5)及系统工具(6/7)。当用户在菜单中输入 9 时,触发 exit(0) 正常退出进程。
以上就是C语言航班售票系统的设计与实现详细内容,更多关于C语言结构与算法的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













