用C语言编写一份火车订票退票系统的代码,并结合队列的知识
时间: 2024-02-29 14:52:59 浏览: 15
好的,下面是一个使用队列来管理火车座位的火车订票退票系统的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SEATS 100
struct Train {
int num_seats;
int available_seats[MAX_SEATS];
int reserved_seats[MAX_SEATS];
int num_reserved_seats;
};
struct Train* create_train(int num_seats) {
struct Train* train = malloc(sizeof(struct Train));
train->num_seats = num_seats;
train->num_reserved_seats = 0;
for (int i = 0; i < num_seats; i++) {
train->available_seats[i] = i + 1;
train->reserved_seats[i] = 0;
}
return train;
}
int book_seat(struct Train* train) {
if (train->num_reserved_seats == train->num_seats) {
return 0; // No available seats
}
int seat = train->available_seats[0];
train->available_seats[0] = 0;
for (int i = 1; i < train->num_seats; i++) {
train->available_seats[i-1] = train->available_seats[i];
}
train->available_seats[train->num_seats-1] = 0;
train->reserved_seats[train->num_reserved_seats++] = seat;
return seat;
}
int return_seat(struct Train* train, int seat) {
for (int i = 0; i < train->num_reserved_seats; i++) {
if (train->reserved_seats[i] == seat) {
train->reserved_seats[i] = 0;
for (int j = 0; j < train->num_seats; j++) {
if (train->available_seats[j] == 0) {
train->available_seats[j] = seat;
break;
}
}
train->num_reserved_seats--;
return 1; // Successfully returned seat
}
}
return 0; // Seat not found
}
void print_seats(struct Train* train) {
printf("Available seats: ");
for (int i = 0; i < train->num_seats; i++) {
if (train->available_seats[i] != 0) {
printf("%d ", train->available_seats[i]);
}
}
printf("\n");
printf("Reserved seats: ");
for (int i = 0; i < train->num_seats; i++) {
if (train->reserved_seats[i] != 0) {
printf("%d ", train->reserved_seats[i]);
}
}
printf("\n");
}
int main() {
struct Train* train = create_train(10);
print_seats(train);
book_seat(train);
book_seat(train);
print_seats(train);
return_seat(train, 1);
print_seats(train);
return 0;
}
```
在这个火车订票退票系统中,我们使用了一个 Train 结构体来表示火车。在 create_train() 函数中,我们初始化了火车的可用座位和已预订座位列表。
在 book_seat() 函数中,我们从可用座位列表的开头获取一个座位,并将其添加到已预订座位列表的末尾。在 return_seat() 函数中,我们检查该座位是否在已预订座位列表中,如果是,则将其从该列表中删除,并将其添加回可用座位列表中。
我们使用一个 num_reserved_seats 变量来跟踪已预订座位的数量,使用 available_seats 数组来管理可用座位,使用 reserved_seats 数组来管理已预订座位。在 book_seat() 函数中,我们将可用座位列表中的第一个座位添加到已预订座位列表的末尾,并将该座位从可用座位列表中删除。在 return_seat() 函数中,我们将该座位从已预订座位列表中删除,并将其添加回可用座位列表中。
在 print_seats() 函数中,我们输出可用座位和已预订座位列表。
这个简单的火车订票退票系统可以根据需要进行扩展,以更好地满足实际需求。