C语言面向对象的航班订票系统,使用文件存储,关键是文件读取怎么写?
在C语言中,实现一个面向对象的航班订票系统涉及到文件的存储和读取。C语言本身不支持面向对象编程(OOP),但可以通过结构体和函数模拟面向对象的概念。以下是实现这一系统的详细步骤和示例代码,重点在于如何处理文件的读取和存储。
1. 设计结构体
首先定义航班和乘客的结构体,用于存储相关信息。
c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_FLIGHTS 100
#define MAX_PASSENGERS 100
typedef struct {
int flight_id;
char destination[50];
char departure_time[20];
int available_seats;
} Flight;
typedef struct {
int passenger_id;
char name[50];
int flight_id;
} Passenger;
2. 文件存储格式
为了方便存储和读取数据,可以选择简单的文本格式。例如:
航班信息:
sqlflight_id,destination,departure_time,available_seats 1,New York,2024-08-01 10:00,100
乘客信息:
passenger_id,name,flight_id 1,John Doe,1
3. 写入数据到文件
编写函数来将航班和乘客信息写入文件。
3.1 写入航班信息
cvoid write_flights_to_file(const char *filename, Flight flights[], int num_flights) {
FILE *file = fopen(filename, "w");
if (file == NULL) {
perror("Failed to open file");
return;
}
for (int i = 0; i < num_flights; i++) {
fprintf(file, "%d,%s,%s,%d\n", flights[i].flight_id, flights[i].destination,
flights[i].departure_time, flights[i].available_seats);
}
fclose(file);
}
3.2 写入乘客信息
cvoid write_passengers_to_file(const char *filename, Passenger passengers[], int num_passengers) {
FILE *file = fopen(filename, "w");
if (file == NULL) {
perror("Failed to open file");
return;
}
for (int i = 0; i < num_passengers; i++) {
fprintf(file, "%d,%s,%d\n", passengers[i].passenger_id, passengers[i].name,
passengers[i].flight_id);
}
fclose(file);
}
4. 读取数据从文件
编写函数来从文件中读取航班和乘客信息,并将其加载到内存中。
4.1 读取航班信息
cvoid read_flights_from_file(const char *filename, Flight flights[], int *num_flights) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
perror("Failed to open file");
return;
}
*num_flights = 0;
while (fscanf(file, "%d,%49[^,],%19[^,],%d\n", &flights[*num_flights].flight_id,
flights[*num_flights].destination,
flights[*num_flights].departure_time,
&flights[*num_flights].available_seats) == 4) {
(*num_flights)++;
}
fclose(file);
}
4.2 读取乘客信息
cvoid read_passengers_from_file(const char *filename, Passenger passengers[], int *num_passengers) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
perror("Failed to open file");
return;
}
*num_passengers = 0;
while (fscanf(file, "%d,%49[^,],%d\n", &passengers[*num_passengers].passenger_id,
passengers[*num_passengers].name,
&passengers[*num_passengers].flight_id) == 3) {
(*num_passengers)++;
}
fclose(file);
}
5. 示例使用
cint main() {
Flight flights[MAX_FLIGHTS];
Passenger passengers[MAX_PASSENGERS];
int num_flights = 0, num_passengers = 0;
// 读取数据
read_flights_from_file("flights.txt", flights, &num_flights);
read_passengers_from_file("passengers.txt", passengers, &num_passengers);
// 显示读取的数据
for (int i = 0; i < num_flights; i++) {
printf("Flight ID: %d, Destination: %s, Departure: %s, Seats: %d\n",
flights[i].flight_id, flights[i].destination,
flights[i].departure_time, flights[i].available_seats);
}
for (int i = 0; i < num_passengers; i++) {
printf("Passenger ID: %d, Name: %s, Flight ID: %d\n",
passengers[i].passenger_id, passengers[i].name,
passengers[i].flight_id);
}
return 0;
}
总结
- 设计结构体:定义航班和乘客的结构体。
- 文件格式:选择适当的文本格式存储数据。
- 写入数据:使用
fprintf
写入数据到文件。 - 读取数据:使用
fscanf
从文件中读取数据到结构体中。
通过上述步骤和代码示例,你可以实现一个简单的航班订票系统,能够有效地读取和存储数据。