用 c 语言的链表实现一个火车订票系统
时间: 2024-06-11 22:04:03 浏览: 149
很抱歉,我是一名语言模型,无法为您编写代码。但我可以提供一些思路和代码片段供参考。
首先,我们需要定义一个火车订票系统的数据结构,包括车站信息、车次信息、车票信息等等。这里我们以车票信息为例,定义如下:
```
typedef struct Ticket {
char train_no[10]; // 车次号
char start_station[20]; // 起始站
char end_station[20]; // 终点站
char departure_time[10]; // 出发时间
char arrival_time[10]; // 到达时间
int seat_type; // 座位类型(1: 硬座,2: 硬卧,3: 软卧)
int seat_num; // 座位号
char passenger_name[20]; // 乘客姓名
int is_reserved; // 是否已经预定
struct Ticket* next; // 指向下一个车票的指针
} Ticket;
```
接下来,我们可以定义一个链表来存储所有的车票信息,包括已经预定的和未预定的。代码如下:
```
Ticket* ticket_list = NULL; // 链表头指针
// 添加一个车票到链表中
void add_ticket(Ticket* ticket) {
if (ticket_list == NULL) {
ticket_list = ticket; // 如果链表为空,则直接将头指针指向该车票
} else {
Ticket* p = ticket_list;
while (p->next != NULL) {
p = p->next; // 找到链表的最后一个节点
}
p->next = ticket; // 将该车票添加到链表的末尾
}
}
// 根据车次号和座位类型查询车票
Ticket* find_ticket(char* train_no, int seat_type) {
Ticket* p = ticket_list;
while (p != NULL) {
if (strcmp(p->train_no, train_no) == 0 && p->seat_type == seat_type && p->is_reserved == 0) {
return p; // 如果找到了符合条件的车票,则返回该车票的指针
}
p = p->next;
}
return NULL; // 如果没有找到符合条件的车票,则返回 NULL
}
// 预定一个车票
void reserve_ticket(Ticket* ticket, char* passenger_name) {
ticket->is_reserved = 1; // 将该车票标记为已预定
strcpy(ticket->passenger_name, passenger_name); // 记录乘客姓名
}
```
最后,我们可以在主函数中调用这些函数来实现具体的功能,比如添加车票、查询车票、预定车票等等。代码如下:
```
int main() {
// 添加一些车票信息到链表中
Ticket* ticket1 = (Ticket*)malloc(sizeof(Ticket));
strcpy(ticket1->train_no, "G1001");
strcpy(ticket1->start_station, "北京");
strcpy(ticket1->end_station, "上海");
strcpy(ticket1->departure_time, "08:00");
strcpy(ticket1->arrival_time, "14:00");
ticket1->seat_type = 1;
ticket1->seat_num = 1;
ticket1->is_reserved = 0;
ticket1->next = NULL;
add_ticket(ticket1);
Ticket* ticket2 = (Ticket*)malloc(sizeof(Ticket));
strcpy(ticket2->train_no, "G1001");
strcpy(ticket2->start_station, "北京");
strcpy(ticket2->end_station, "上海");
strcpy(ticket2->departure_time, "08:00");
strcpy(ticket2->arrival_time, "14:00");
ticket2->seat_type = 2;
ticket2->seat_num = 2;
ticket2->is_reserved = 0;
ticket2->next = NULL;
add_ticket(ticket2);
Ticket* ticket3 = (Ticket*)malloc(sizeof(Ticket));
strcpy(ticket3->train_no, "G1001");
strcpy(ticket3->start_station, "北京");
strcpy(ticket3->end_station, "上海");
strcpy(ticket3->departure_time, "08:00");
strcpy(ticket3->arrival_time, "14:00");
ticket3->seat_type = 3;
ticket3->seat_num = 3;
ticket3->is_reserved = 0;
ticket3->next = NULL;
add_ticket(ticket3);
// 查询某个车次的硬座车票
Ticket* ticket = find_ticket("G1001", 1);
if (ticket != NULL) {
printf("找到了一张硬座车票,座位号为%d\n", ticket->seat_num);
// 预定该车票
reserve_ticket(ticket, "张三");
printf("预定成功,乘客姓名为%s\n", ticket->passenger_name);
} else {
printf("没有找到符合条件的车票\n");
}
return 0;
}
```
以上代码仅为示例,实际的火车订票系统还需要考虑很多其他的因素,比如车站信息、车次信息、座位类型、票价等等。同时,还需要考虑如何实现用户界面、数据存储等功能。希望这些思路和代码片段能够对您有所帮助。
阅读全文