用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 语言实现,包括火车车次信息、座位信息和订单信息的存储和处理。