c语言用文件编译添加功能:程序能够添加到达停车场的车辆信息,要求车辆的车牌号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
时间: 2023-11-27 08:49:06 浏览: 36
实现这个功能的关键是读取文件中已有的车辆信息,判断新添加的车辆是否与已有的车辆重复。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 20 // 车牌号最大长度
// 定义车辆信息结构体
typedef struct {
char plate_number[MAX_LENGTH]; // 车牌号
// 其他车辆信息...
} Car;
// 从文件中读取已有车辆信息
int read_cars_from_file(Car* cars, int max_cars, const char* filename) {
FILE* fp = fopen(filename, "rb");
if (!fp) {
printf("Failed to open file %s\n", filename);
return 0;
}
int num_cars = 0;
while (num_cars < max_cars && fread(&cars[num_cars], sizeof(Car), 1, fp) == 1) {
num_cars++;
}
fclose(fp);
printf("Read %d cars from file %s\n", num_cars, filename);
return num_cars;
}
// 将新车辆信息添加到文件中
int add_car_to_file(Car* cars, int num_cars, const char* filename) {
// 获取新车辆信息
Car new_car;
printf("Enter the plate number of the new car: ");
scanf("%s", new_car.plate_number);
// 判断车牌号是否重复
for (int i = 0; i < num_cars; i++) {
if (strcmp(new_car.plate_number, cars[i].plate_number) == 0) {
printf("Plate number %s already exists\n", new_car.plate_number);
return 0;
}
}
// 添加新车辆信息到文件末尾
FILE* fp = fopen(filename, "ab");
if (!fp) {
printf("Failed to open file %s\n", filename);
return 0;
}
fwrite(&new_car, sizeof(Car), 1, fp);
fclose(fp);
printf("Added car with plate number %s to file %s\n", new_car.plate_number, filename);
return 1;
}
int main() {
const char* filename = "cars.dat";
const int max_cars = 100;
Car cars[max_cars];
int num_cars = read_cars_from_file(cars, max_cars, filename);
if (num_cars == 0) {
// 文件读取失败,退出程序
return 1;
}
if (!add_car_to_file(cars, num_cars, filename)) {
// 添加车辆信息失败,退出程序
return 1;
}
return 0;
}
```
在上面的代码中,我们使用 `read_cars_from_file` 函数从文件中读取已有的车辆信息,使用 `add_car_to_file` 函数将新车辆信息添加到文件中。在 `add_car_to_file` 函数中,我们首先获取新车辆信息,并判断车牌号是否与已有的车辆重复。如果重复,则提示数据添加重复并返回失败;否则,将新车辆信息添加到文件末尾。注意,我们使用了 `"ab"` 模式打开文件,以确保新车辆信息会被添加到文件末尾而不是覆盖原有数据。