用C语言数据结构设计一个火车订票系统

时间: 2023-08-04 19:14:54 浏览: 80
好的,下面是一个简单的火车订票系统的 C 语言实现,包括火车车次信息、座位信息和订单信息的存储和处理。 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_TRAIN_NUM 100 // 最大火车车次数 #define MAX_SEAT_NUM 1000 // 最大座位数 #define MAX_ORDER_NUM 10000 // 最大订单数 struct train { char number[10]; // 车次编号 char start[20]; // 起始站 char dest[20]; // 终点站 int seat_left[MAX_SEAT_NUM]; // 剩余座位数 }; struct order { char name[20]; // 订票人姓名 char train_number[10]; // 车次编号 int seat; // 座位号 }; struct train trains[MAX_TRAIN_NUM]; // 火车车次信息 struct order orders[MAX_ORDER_NUM]; // 订单信息 int train_num = 0; // 火车车次数 int seat_num = 0; // 座位数 int order_num = 0; // 订单数 // 添加火车车次 void add_train(char* number, char* start, char* dest, int* seat_left) { if (train_num >= MAX_TRAIN_NUM) { printf("The train list is full!\n"); return; } strcpy(trains[train_num].number, number); strcpy(trains[train_num].start, start); strcpy(trains[train_num].dest, dest); memcpy(trains[train_num].seat_left, seat_left, sizeof(int) * seat_num); train_num++; } // 查找火车车次 int find_train(char* number) { for (int i = 0; i < train_num; i++) { if (strcmp(trains[i].number, number) == 0) { return i; } } return -1; } // 订票 void order_ticket(char* name, char* number, int seat) { int train_index = find_train(number); if (train_index == -1) { printf("The train is not found!\n"); return; } if (seat < 1 || seat > seat_num) { printf("Invalid seat number!\n"); return; } if (trains[train_index].seat_left[seat - 1] <= 0) { printf("The seat is already occupied!\n"); return; } strcpy(orders[order_num].name, name); strcpy(orders[order_num].train_number, number); orders[order_num].seat = seat; trains[train_index].seat_left[seat - 1]--; order_num++; printf("Order success!\n"); } // 取消订单 void cancel_order(char* name, char* number, int seat) { for (int i = 0; i < order_num; i++) { if (strcmp(orders[i].name, name) == 0 && strcmp(orders[i].train_number, number) == 0 && orders[i].seat == seat) { int train_index = find_train(number); if (train_index == -1) { printf("The train is not found!\n"); return; } trains[train_index].seat_left[seat - 1]++; for (int j = i; j < order_num - 1; j++) { orders[j] = orders[j + 1]; } order_num--; printf("Cancel order success!\n"); return; } } printf("The order is not found!\n"); } // 显示订单 void show_order(char* name) { printf("Orders of %s:\n", name); for (int i = 0; i < order_num; i++) { if (strcmp(orders[i].name, name) == 0) { printf("Train number: %s, seat: %d\n", orders[i].train_number, orders[i].seat); } } } int main() { char number[10], start[20], dest[20], name[20]; int seat_left[MAX_SEAT_NUM], seat; int op; while (1) { printf("\n1. Add train\n"); printf("2. Order ticket\n"); printf("3. Cancel order\n"); printf("4. Show order\n"); printf("0. Exit\n"); printf("Enter operation number: "); scanf("%d", &op); switch (op) { case 0: return 0; case 1: printf("Enter train number, start, destination, and seat left: "); scanf("%s %s %s", number, start, dest); for (int i = 0; i < seat_num; i++) { scanf("%d", &seat_left[i]); } add_train(number, start, dest, seat_left); break; case 2: printf("Enter your name, train number, and seat number: "); scanf("%s %s %d", name, number, &seat); order_ticket(name, number, seat); break; case 3: printf("Enter your name, train number, and seat number: "); scanf("%s %s %d", name, number, &seat); cancel_order(name, number, seat); break; case 4: printf("Enter your name: "); scanf("%s", name); show_order(name); break; default: printf("Invalid operation number!\n"); break; } } return 0; } ``` 以上就是一个简单的火车订票系统的 C 语言实现,包括火车车次信息、座位信息和订单信息的存储和处理。

相关推荐

最新推荐

recommend-type

学生成绩管理系统(数据结构)实验报告.docx

期末实践周必备(数据结构)学生成绩管理系统,基于C语言完成的,百分百作者原创,资源保证!
recommend-type

C语言程序设计实现区号查询系统C语言程序设计实现

用C语言编程的区号查询系统,要求实现区号查询系统中,添加新记录、删除记录、显示记录信息、按城市查找信息和退出系统等功能。 ①录入有关城市的名称和区号。 ②显示所有城市的信息。 ③通过输入城市名称查找对应...
recommend-type

C语言数据结构实现链表逆序并输出

主要介绍了C语言数据结构实现链表逆序并输出的相关资料,需要的朋友可以参考下
recommend-type

C语言数据结构之平衡二叉树(AVL树)实现方法示例

主要介绍了C语言数据结构之平衡二叉树(AVL树)实现方法,结合实例形式分析了C语言平衡二叉树的相关定义与使用技巧,需要的朋友可以参考下
recommend-type

C语言实现班档案管理系统课程设计

主要为大家详细介绍了C语言实现班档案管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。