C语言链表实现航班管理系统:添加、删除、查询、购票、退票
首先,我们需要定义航班和用户的结构体:
// 航班信息结构体
typedef struct {
char flightNo[10]; // 班次号
char departure[20]; // 始发地
char destination[20]; // 目的地
char departureTime[20]; // 出发时间
char arrivalTime[20]; // 到达时间
float price; // 金额
int numOfPassengers; // 人数
} Flight;
// 用户信息结构体
typedef struct {
char username[20]; // 用户名
char password[20]; // 密码
float balance; // 余额
int isVip; // 是否为会员,0表示普通用户,1表示会员
} User;
接下来,我们定义航班管理系统的函数:
// 添加航班信息
void addFlight(Flight *flights, int *numOfFlights) {
// 输入航班信息
printf("请输入航班信息:\n");
printf("班次号:");
scanf("%s", flights[*numOfFlights].flightNo);
printf("始发地:");
scanf("%s", flights[*numOfFlights].departure);
printf("目的地:");
scanf("%s", flights[*numOfFlights].destination);
printf("出发时间:");
scanf("%s", flights[*numOfFlights].departureTime);
printf("到达时间:");
scanf("%s", flights[*numOfFlights].arrivalTime);
printf("金额:");
scanf("%f", &flights[*numOfFlights].price);
printf("人数:");
scanf("%d", &flights[*numOfFlights].numOfPassengers);
(*numOfFlights)++;
}
// 删除航班信息
void deleteFlight(Flight *flights, int *numOfFlights, char *flightNo) {
int i, j;
for (i = 0; i < *numOfFlights; i++) {
if (strcmp(flights[i].flightNo, flightNo) == 0) {
for (j = i+1; j < *numOfFlights; j++) {
strcpy(flights[j-1].flightNo, flights[j].flightNo);
strcpy(flights[j-1].departure, flights[j].departure);
strcpy(flights[j-1].destination, flights[j].destination);
strcpy(flights[j-1].departureTime, flights[j].departureTime);
strcpy(flights[j-1].arrivalTime, flights[j].arrivalTime);
flights[j-1].price = flights[j].price;
flights[j-1].numOfPassengers = flights[j].numOfPassengers;
}
(*numOfFlights)--;
printf("航班删除成功!\n");
return;
}
}
printf("未找到该班次号的航班!\n");
}
// 查询航班信息
void queryFlight(Flight *flights, int numOfFlights) {
printf("航班信息如下:\n");
for (int i = 0; i < numOfFlights; i++) {
printf("班次号:%s\n", flights[i].flightNo);
printf("始发地:%s\n", flights[i].departure);
printf("目的地:%s\n", flights[i].destination);
printf("出发时间:%s\n", flights[i].departureTime);
printf("到达时间:%s\n", flights[i].arrivalTime);
printf("金额:%.2f\n", flights[i].price);
printf("人数:%d\n", flights[i].numOfPassengers);
printf("---------------------------\n");
}
}
// 票数加减
void changeNumOfPassengers(Flight *flights, int numOfFlights, char *flightNo, int change) {
for (int i = 0; i < numOfFlights; i++) {
if (strcmp(flights[i].flightNo, flightNo) == 0) {
flights[i].numOfPassengers += change;
printf("票数修改成功!\n");
return;
}
}
printf("未找到该班次号的航班!\n");
}
// 注册用户
void registerUser(User *users, int *numOfUsers) {
printf("请输入用户名:");
scanf("%s", users[*numOfUsers].username);
printf("请输入密码:");
scanf("%s", users[*numOfUsers].password);
users[*numOfUsers].balance = 10000;
users[*numOfUsers].isVip = 0;
(*numOfUsers)++;
printf("用户注册成功!\n");
}
// 登录用户
User* loginUser(User *users, int numOfUsers) {
char username[20], password[20];
printf("请输入用户名:");
scanf("%s", username);
printf("请输入密码:");
scanf("%s", password);
for (int i = 0; i < numOfUsers; i++) {
if (strcmp(users[i].username, username) == 0 && strcmp(users[i].password, password) == 0) {
printf("登录成功!\n");
return &users[i];
}
}
printf("用户名或密码错误!\n");
return NULL;
}
// 购票
void buyTicket(User *user, Flight *flights, int numOfFlights, char *flightNo) {
for (int i = 0; i < numOfFlights; i++) {
if (strcmp(flights[i].flightNo, flightNo) == 0) {
float price = flights[i].price;
if (user->isVip) {
price *= 0.9; // 会员九折
}
if (user->balance >= price) {
user->balance -= price;
flights[i].numOfPassengers++;
printf("购票成功!\n");
return;
} else {
printf("余额不足,购票失败!\n");
return;
}
}
}
printf("未找到该班次号的航班!\n");
}
// 退票
void refundTicket(User *user, Flight *flights, int numOfFlights, char *flightNo) {
for (int i = 0; i < numOfFlights; i++) {
if (strcmp(flights[i].flightNo, flightNo) == 0) {
float price = flights[i].price;
if (user->isVip) {
price *= 0.9; // 会员统一都是原价
}
time_t now = time(NULL);
struct tm *tm = localtime(&now);
// 计算退票金额
if (difftime(mktime(tm), mktime(departureTime)) <= 3600) {
price *= 0.8; // 起飞前一个小时80%
} else if (difftime(mktime(tm), mktime(departureTime)) <= 86400) {
price *= 0.9; // 起飞前一天90%
}
user->balance += price;
flights[i].numOfPassengers--;
printf("退票成功!\n");
return;
}
}
printf("未找到该班次号的航班!\n");
}
// 查询航班信息(单一查询)
void querySingleFlight(Flight *flights, int numOfFlights, char *flightNo) {
for (int i = 0; i < numOfFlights; i++) {
if (strcmp(flights[i].flightNo, flightNo) == 0) {
printf("班次号:%s\n", flights[i].flightNo);
printf("始发地:%s\n", flights[i].departure);
printf("目的地:%s\n", flights[i].destination);
printf("出发时间:%s\n", flights[i].departureTime);
printf("到达时间:%s\n", flights[i].arrivalTime);
printf("金额:%.2f\n", flights[i].price);
printf("人数:%d\n", flights[i].numOfPassengers);
return;
}
}
printf("未找到该班次号的航班!\n");
}
int main() {
Flight flights[5]; // 航班信息数组
int numOfFlights = 0; // 航班数量
User users[3]; // 用户信息数组
int numOfUsers = 0; // 用户数量
// 初始化航班信息
// ...
// 初始化用户信息
// ...
// 管理员登录
// ...
// 添加航班信息
// ...
// 删除航班信息
// ...
// 查询航班信息
// ...
// 票数加减
// ...
// 用户注册
// ...
// 用户登录
// ...
// 购票
// ...
// 退票
// ...
// 查询航班信息(单一查询)
// ...
return 0;
}
以上是一个简单的航班管理系统的实现,你可以根据需要添加更多功能和逻辑。
原文地址: https://www.cveoy.top/t/topic/qhJz 著作权归作者所有。请勿转载和采集!