详细飞机订票系统C语言实现
时间: 2023-12-22 17:04:37 浏览: 142
C语言实现飞机订票系统
好的,下面我将详细介绍如何用C语言实现一个飞机订票系统。
1. 定义数据结构
首先,我们需要定义一些数据结构,例如航班信息结构体、用户信息结构体等。例如:
```
typedef struct flight {
char flight_no[10]; // 航班号
char depart_city[20]; // 出发城市
char arrive_city[20]; // 到达城市
char depart_time[20]; // 出发时间
char arrive_time[20]; // 到达时间
int price; // 价格
int seats_left; // 剩余座位数
} FLIGHT;
typedef struct user {
char name[20]; // 用户名
char password[20]; // 密码
int flights[5]; // 用户订购的航班号
} USER;
```
2. 客户端实现
客户端实现主要包括用户输入的处理逻辑和界面的实现。用户输入的处理逻辑可以包括以下功能:
- 查询航班信息
- 订票
- 退票
界面的实现可以使用C语言的图形库或者命令行界面来实现。以下是一个简单的命令行界面的实现示例:
```
void show_menu() {
printf("1. 查询航班信息\n");
printf("2. 订票\n");
printf("3. 退票\n");
printf("4. 退出\n");
}
int main() {
int choice;
do {
show_menu();
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
// 查询航班信息
break;
case 2:
// 订票
break;
case 3:
// 退票
break;
case 4:
// 退出
break;
default:
printf("无效操作,请重新选择。\n");
break;
}
} while (choice != 4);
return 0;
}
```
3. 服务器实现
服务器实现主要包括航班信息和用户信息的存储和管理。可以使用文件来存储这些信息,也可以使用数据库来管理。以下是一个简单的文件存储实现示例:
```
// 读取航班信息
void load_flights(FLIGHT flights[], int *n) {
FILE *fp = fopen("flights.dat", "rb");
if (fp == NULL) {
printf("无法读取航班信息!\n");
exit(1);
}
fread(n, sizeof(int), 1, fp);
fread(flights, sizeof(FLIGHT), *n, fp);
fclose(fp);
}
// 保存航班信息
void save_flights(FLIGHT flights[], int n) {
FILE *fp = fopen("flights.dat", "wb");
if (fp == NULL) {
printf("无法保存航班信息!\n");
exit(1);
}
fwrite(&n, sizeof(int), 1, fp);
fwrite(flights, sizeof(FLIGHT), n, fp);
fclose(fp);
}
// 读取用户信息
void load_users(USER users[], int *n) {
FILE *fp = fopen("users.dat", "rb");
if (fp == NULL) {
printf("无法读取用户信息!\n");
exit(1);
}
fread(n, sizeof(int), 1, fp);
fread(users, sizeof(USER), *n, fp);
fclose(fp);
}
// 保存用户信息
void save_users(USER users[], int n) {
FILE *fp = fopen("users.dat", "wb");
if (fp == NULL) {
printf("无法保存用户信息!\n");
exit(1);
}
fwrite(&n, sizeof(int), 1, fp);
fwrite(users, sizeof(USER), n, fp);
fclose(fp);
}
```
4. 功能实现
查询航班信息功能可以根据用户输入的出发城市和到达城市来查询符合条件的航班信息,并显示在界面上。
订票功能可以让用户选择一个航班,然后输入用户名和密码进行登录,最后将该航班信息添加到用户信息中。
退票功能可以让用户选择一个已订购的航班,然后从用户信息中删除该航班信息。
以下是一个简单的功能实现示例:
```
void query_flights(FLIGHT flights[], int n) {
char depart_city[20], arrive_city[20];
printf("请输入出发城市:");
scanf("%s", depart_city);
printf("请输入到达城市:");
scanf("%s", arrive_city);
for (int i = 0; i < n; i++) {
if (strcmp(flights[i].depart_city, depart_city) == 0 && strcmp(flights[i].arrive_city, arrive_city) == 0) {
printf("航班号:%s,出发城市:%s,到达城市:%s,出发时间:%s,到达时间:%s,价格:%d,剩余座位数:%d\n",
flights[i].flight_no, flights[i].depart_city, flights[i].arrive_city, flights[i].depart_time, flights[i].arrive_time,
flights[i].price, flights[i].seats_left);
}
}
}
void book_flight(FLIGHT flights[], int n, USER users[], int m) {
char flight_no[10], name[20], password[20];
int user_index = -1, flight_index = -1;
printf("请输入航班号:");
scanf("%s", flight_no);
for (int i = 0; i < n; i++) {
if (strcmp(flights[i].flight_no, flight_no) == 0) {
flight_index = i;
break;
}
}
if (flight_index == -1) {
printf("无效的航班号!\n");
return;
}
printf("请输入用户名:");
scanf("%s", name);
printf("请输入密码:");
scanf("%s", password);
for (int i = 0; i < m; i++) {
if (strcmp(users[i].name, name) == 0 && strcmp(users[i].password, password) == 0) {
user_index = i;
break;
}
}
if (user_index == -1) {
printf("用户名或密码错误!\n");
return;
}
if (users[user_index].flights[0] != 0) {
printf("每位用户只能订购一次航班!\n");
return;
}
if (flights[flight_index].seats_left == 0) {
printf("该航班已无空余座位!\n");
return;
}
users[user_index].flights[0] = flight_index;
flights[flight_index].seats_left--;
save_users(users, m);
save_flights(flights, n);
printf("订票成功!\n");
}
void cancel_flight(FLIGHT flights[], int n, USER users[], int m) {
char flight_no[10], name[20], password[20];
int user_index = -1, flight_index = -1;
printf("请输入航班号:");
scanf("%s", flight_no);
for (int i = 0; i < n; i++) {
if (strcmp(flights[i].flight_no, flight_no) == 0) {
flight_index = i;
break;
}
}
if (flight_index == -1) {
printf("无效的航班号!\n");
return;
}
printf("请输入用户名:");
scanf("%s", name);
printf("请输入密码:");
scanf("%s", password);
for (int i = 0; i < m; i++) {
if (strcmp(users[i].name, name) == 0 && strcmp(users[i].password, password) == 0) {
user_index = i;
break;
}
}
if (user_index == -1) {
printf("用户名或密码错误!\n");
return;
}
if (users[user_index].flights[0] != flight_index) {
printf("该用户未订购该航班!\n");
return;
}
users[user_index].flights[0] = 0;
flights[flight_index].seats_left++;
save_users(users, m);
save_flights(flights, n);
printf("退票成功!\n");
}
```
5. 总结
以上是一个简单的飞机订票系统C语言实现的示例。具体实现细节需要根据具体的需求来确定。实现一个完整的飞机订票系统需要考虑到很多方面,例如并发访问、安全性等问题,这里只是一个简单的示例。
阅读全文