火车订票以以下几个方面来编写程序:预处理,主函数,添加,查询,订票,修改,显示,保存,用c语言
时间: 2024-03-24 17:38:56 浏览: 47
好的,以下是火车订票系统的C语言编写程序:
1. 预处理:定义所需的数据类型和常量,例如定义火车、座位、订单等数据结构,以及定义菜单选项的常量等。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_TRAIN_NUM 100 // 最大火车数
#define MAX_SEAT_NUM 50 // 最大座位数
#define MAX_ORDER_NUM 500 // 最大订单数
typedef struct {
char train_number[10]; // 火车号
char start_station[20]; // 出发站
char end_station[20]; // 到达站
char start_time[10]; // 出发时间
char end_time[10]; // 到达时间
int seat_num; // 座位数
int seat_left[MAX_SEAT_NUM]; // 剩余座位数
} Train;
typedef struct {
char name[20]; // 姓名
char id[20]; // 身份证号
char train_number[10]; // 火车号
int seat_num; // 座位号
} Order;
Train train_list[MAX_TRAIN_NUM];
Order order_list[MAX_ORDER_NUM];
int train_num = 0;
int order_num = 0;
```
2. 主函数:定义程序的菜单,以供用户选择需要执行的操作。通过无限循环和switch语句,实现对用户输入的菜单选项进行判断和执行相应操作的功能。
```c
int main() {
int option;
while (1) {
printf("火车订票系统\n");
printf("1. 添加火车信息\n");
printf("2. 查询余票信息\n");
printf("3. 订票\n");
printf("4. 修改订单信息\n");
printf("5. 显示订单信息\n");
printf("6. 保存数据\n");
printf("7. 退出\n");
printf("请选择操作:");
scanf("%d", &option);
switch (option) {
case 1:
add_train();
break;
case 2:
query_seat();
break;
case 3:
book_ticket();
break;
case 4:
modify_order();
break;
case 5:
show_order();
break;
case 6:
save_data();
break;
case 7:
exit(0);
default:
printf("输入有误!\n");
break;
}
}
return 0;
}
```
3. 添加:定义一个添加火车信息的函数,让用户输入火车的相关信息,然后将信息存储到系统的数据结构中。可以使用链表或数组等数据结构来存储火车信息。
```c
void add_train() {
Train train;
printf("请输入火车号:");
scanf("%s", train.train_number);
printf("请输入出发站:");
scanf("%s", train.start_station);
printf("请输入到达站:");
scanf("%s", train.end_station);
printf("请输入出发时间:");
scanf("%s", train.start_time);
printf("请输入到达时间:");
scanf("%s", train.end_time);
printf("请输入座位数:");
scanf("%d", &train.seat_num);
for (int i = 0; i < train.seat_num; i++) {
train.seat_left[i] = train.seat_num;
}
train_list[train_num++] = train;
printf("添加成功!\n");
}
```
4. 查询:定义一个查询火车余票信息的函数。用户需要输入出发地、目的地、时间等信息,然后系统需要查询数据结构中的座位信息,将余票信息显示给用户。
```c
void query_seat() {
char start_station[20];
char end_station[20];
char start_time[10];
printf("请输入出发站:");
scanf("%s", start_station);
printf("请输入到达站:");
scanf("%s", end_station);
printf("请输入出发时间:");
scanf("%s", start_time);
printf("火车号 出发站 到达站 出发时间 到达时间 座位数 剩余座位数\n");
for (int i = 0; i < train_num; i++) {
if (strcmp(train_list[i].start_station, start_station) == 0 &&
strcmp(train_list[i].end_station, end_station) == 0 &&
strcmp(train_list[i].start_time, start_time) == 0) {
printf("%s %s %s %s %s %d ", train_list[i].train_number,
train_list[i].start_station, train_list[i].end_station,
train_list[i].start_time, train_list[i].end_time, train_list[i].seat_num);
for (int j = 0; j < train_list[i].seat_num; j++) {
printf("%d ", train_list[i].seat_left[j]);
}
printf("\n");
}
}
}
```
5. 订票:定义一个订票函数,让用户选择座位、输入相关信息,然后系统需要将座位信息更新到数据结构中,并且生成订单信息。如果座位已经被订走,需要提示用户重新选择座位。
```c
void book_ticket() {
char name[20];
char id[20];
char train_number[10];
int seat_num;
printf("请输入姓名:");
scanf("%s", name);
printf("请输入身份证号:");
scanf("%s", id);
printf("请输入火车号:");
scanf("%s", train_number);
printf("请输入座位号:");
scanf("%d", &seat_num);
for (int i = 0; i < train_num; i++) {
if (strcmp(train_list[i].train_number, train_number) == 0) {
if (train_list[i].seat_left[seat_num - 1] == 0) {
printf("座位已被预定,请重新选择!\n");
return;
} else {
train_list[i].seat_left[seat_num - 1]--;
order_list[order_num].seat_num = seat_num;
strcpy(order_list[order_num].name, name);
strcpy(order_list[order_num].id, id);
strcpy(order_list[order_num].train_number, train_number);
order_num++;
printf("订票成功!\n");
return;
}
}
}
printf("无此火车号,请重新输入!\n");
}
```
6. 修改:定义一个修改订单信息的函数。用户需要输入订单号和修改信息,然后系统需要更新数据结构中的订单信息。
```c
void modify_order() {
char id[20];
int seat_num;
printf("请输入身份证号:");
scanf("%s", id);
printf("请输入座位号:");
scanf("%d", &seat_num);
for (int i = 0; i < order_num; i++) {
if (strcmp(order_list[i].id, id) == 0 && order_list[i].seat_num == seat_num) {
printf("请输入新的姓名:");
scanf("%s", order_list[i].name);
printf("请输入新的身份证号:");
scanf("%s", order_list[i].id);
printf("请输入新的火车号:");
scanf("%s", order_list[i].train_number);
printf("请输入新的座位号:");
scanf("%d", &order_list[i].seat_num);
printf("修改成功!\n");
return;
}
}
printf("无此订单,请重新输入!\n");
}
```
7. 显示:定义一个显示函数,将数据结构中的信息显示给用户,例如显示火车信息、座位信息、订单信息等。
```c
void show_order() {
printf("姓名 身份证号 火车号 座位号\n");
for (int i = 0; i < order_num; i++) {
printf("%s %s %s %d\n", order_list[i].name, order_list[i].id,
order_list[i].train_number, order_list[i].seat_num);
}
}
```
8. 保存:定义一个保存数据的函数,将数据结构中的信息保存到文件中,以便下次使用时可以读取。
```c
void save_data() {
FILE *fp;
fp = fopen("data.txt", "w");
for (int i = 0; i < train_num; i++) {
fprintf(fp, "%s %s %s %s %s %d ", train_list[i].train_number,
train_list[i].start_station, train_list[i].end_station,
train_list[i].start_time, train_list[i].end_time, train_list[i].seat_num);
for (int j = 0; j < train_list[i].seat_num; j++) {
fprintf(fp, "%d ", train_list[i].seat_left[j]);
}
fprintf(fp, "\n");
}
for (int i = 0; i < order_num; i++) {
fprintf(fp, "%s %s %s %d\n", order_list[i].name, order_list[i].id,
order_list[i].train_number, order_list[i].seat_num);
}
fclose(fp);
printf("保存成功!\n");
}
```
以上是一个简单的火车订票系统的C语言程序,希望对你有所帮助。
阅读全文