在C语言用链表写一个航班管理系统要求展示出五组航班信息和三组用户信息航班信息班次号始发地目的地出发时间到达时间金额人数管理员可以进行航班的添加和删除查询航班信息单一查询管理员可以进行票数的加减
下面是一个使用链表写的简单航班管理系统的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 航班信息结构体
typedef struct {
char flightNo[10];
char departure[20];
char destination[20];
char departureTime[10];
char arrivalTime[10];
float price;
int count;
} Flight;
// 用户信息结构体
typedef struct {
char username[20];
int tickets;
} User;
// 节点结构体
typedef struct Node {
Flight flight;
struct Node* next;
} Node;
// 全局变量,头节点指针
Node* head = NULL;
// 添加航班信息
void addFlight() {
Node* newNode = (Node*)malloc(sizeof(Node));
printf("请输入航班信息:\n班次号:");
scanf("%s", newNode->flight.flightNo);
printf("始发地:");
scanf("%s", newNode->flight.departure);
printf("目的地:");
scanf("%s", newNode->flight.destination);
printf("出发时间:");
scanf("%s", newNode->flight.departureTime);
printf("到达时间:");
scanf("%s", newNode->flight.arrivalTime);
printf("金额:");
scanf("%f", &newNode->flight.price);
printf("人数:");
scanf("%d", &newNode->flight.count);
newNode->next = NULL;
if (head == NULL) {
// 如果链表为空,将头节点指向新节点
head = newNode;
} else {
// 遍历链表找到最后一个节点,并将其next指向新节点
Node* current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
printf("航班信息添加成功!\n");
}
// 删除航班信息
void deleteFlight() {
char flightNo[10];
printf("请输入要删除的航班班次号:");
scanf("%s", flightNo);
Node* current = head;
Node* prev = NULL;
int found = 0;
while (current != NULL) {
if (strcmp(current->flight.flightNo, flightNo) == 0) {
found = 1;
break;
}
prev = current;
current = current->next;
}
if (found) {
if (prev == NULL) {
// 如果要删除的节点是头节点
head = current->next;
} else {
// 将前一个节点的next指向要删除节点的next
prev->next = current->next;
}
free(current);
printf("航班信息删除成功!\n");
} else {
printf("未找到该航班信息!\n");
}
}
// 查询航班信息
void queryFlight() {
char flightNo[10];
printf("请输入要查询的航班班次号:");
scanf("%s", flightNo);
Node* current = head;
int found = 0;
while (current != NULL) {
if (strcmp(current->flight.flightNo, flightNo) == 0) {
found = 1;
printf("航班信息如下:\n");
printf("班次号:%s\n", current->flight.flightNo);
printf("始发地:%s\n", current->flight.departure);
printf("目的地:%s\n", current->flight.destination);
printf("出发时间:%s\n", current->flight.departureTime);
printf("到达时间:%s\n", current->flight.arrivalTime);
printf("金额:%f\n", current->flight.price);
printf("人数:%d\n", current->flight.count);
break;
}
current = current->next;
}
if (!found) {
printf("未找到该航班信息!\n");
}
}
// 管理员进行票数的加减
void adjustTicketCount() {
char flightNo[10];
printf("请输入要调整票数的航班班次号:");
scanf("%s", flightNo);
Node* current = head;
int found = 0;
while (current != NULL) {
if (strcmp(current->flight.flightNo, flightNo) == 0) {
found = 1;
int adjustment;
printf("请输入票数的调整值(正数为增加,负数为减少):");
scanf("%d", &adjustment);
current->flight.count += adjustment;
printf("票数调整成功!当前票数为:%d\n", current->flight.count);
break;
}
current = current->next;
}
if (!found) {
printf("未找到该航班信息!\n");
}
}
// 程序入口
int main() {
// 添加五组航班信息
for (int i = 0; i < 5; i++) {
addFlight();
}
// 显示航班信息
printf("航班信息如下:\n");
Node* current = head;
while (current != NULL) {
printf("班次号:%s\n", current->flight.flightNo);
printf("始发地:%s\n", current->flight.departure);
printf("目的地:%s\n", current->flight.destination);
printf("出发时间:%s\n", current->flight.departureTime);
printf("到达时间:%s\n", current->flight.arrivalTime);
printf("金额:%f\n", current->flight.price);
printf("人数:%d\n", current->flight.count);
printf("\n");
current = current->next;
}
// 删除航班信息
deleteFlight();
// 查询航班信息
queryFlight();
// 管理员进行票数的加减
adjustTicketCount();
return 0;
}
以上代码实现了航班管理系统的基本功能,包括添加航班、删除航班、查询航班和调整票数。你可以根据实际需求进行修改和扩展
原文地址: https://www.cveoy.top/t/topic/iAOU 著作权归作者所有。请勿转载和采集!