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. 文件存储格式

为了方便存储和读取数据,可以选择简单的文本格式。例如:

  • 航班信息

    sql
    flight_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 写入航班信息

c
void 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 写入乘客信息

c
void 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 读取航班信息

c
void 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 读取乘客信息

c
void 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. 示例使用

c
int 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; }

总结

  1. 设计结构体:定义航班和乘客的结构体。
  2. 文件格式:选择适当的文本格式存储数据。
  3. 写入数据:使用 fprintf 写入数据到文件。
  4. 读取数据:使用 fscanf 从文件中读取数据到结构体中。

通过上述步骤和代码示例,你可以实现一个简单的航班订票系统,能够有效地读取和存储数据。