当在A.TXT文件中删除一个学生时,自动地在B.TXT文件中删除此人所有信息;
时间: 2024-02-15 20:04:06 浏览: 57
实现这个功能,需要先读取A.TXT文件中的所有学生信息,并找到需要删除的学生信息。然后,将B.TXT文件中对应学生的所有信息删除。最后,将A.TXT文件中删除该学生信息后的所有信息重新写入A.TXT文件中。
以下是一个简单的示例代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
typedef struct {
char name[50];
int age;
char id[50];
} Student;
// 从文件中读取学生信息
void read_students(const char* filename, Student students[], int* count) {
FILE* fp = fopen(filename, "r");
if (fp == NULL) {
printf("Failed to open file %s\n", filename);
exit(1);
}
*count = 0;
while (!feof(fp)) {
fscanf(fp, "%s %d %s", students[*count].name, &students[*count].age, students[*count].id);
(*count)++;
}
fclose(fp);
}
// 将学生信息写入文件
void write_students(const char* filename, Student students[], int count) {
FILE* fp = fopen(filename, "w");
if (fp == NULL) {
printf("Failed to open file %s\n", filename);
exit(1);
}
for (int i = 0; i < count; i++) {
fprintf(fp, "%s %d %s\n", students[i].name, students[i].age, students[i].id);
}
fclose(fp);
}
// 从A.TXT文件中删除指定学生信息,并在B.TXT文件中删除所有信息
void remove_student(const char* a_filename, const char* b_filename, const char* student_id) {
Student students[100];
int count;
// 从A.TXT文件中读取学生信息
read_students(a_filename, students, &count);
// 找到需要删除的学生信息
int remove_index = -1;
for (int i = 0; i < count; i++) {
if (strcmp(students[i].id, student_id) == 0) {
remove_index = i;
break;
}
}
if (remove_index == -1) {
printf("Cannot find student with id %s\n", student_id);
exit(1);
}
// 从B.TXT文件中删除学生所有信息
FILE* fp = fopen(b_filename, "r");
if (fp == NULL) {
printf("Failed to open file %s\n", b_filename);
exit(1);
}
char line[100];
char new_lines[100][100];
int new_lines_count = 0;
while (!feof(fp)) {
fgets(line, 100, fp);
if (strstr(line, student_id) == NULL) {
strcpy(new_lines[new_lines_count], line);
new_lines_count++;
}
}
fclose(fp);
// 将修改后的B.TXT文件写回
fp = fopen(b_filename, "w");
if (fp == NULL) {
printf("Failed to open file %s\n", b_filename);
exit(1);
}
for (int i = 0; i < new_lines_count; i++) {
fprintf(fp, "%s", new_lines[i]);
}
fclose(fp);
// 从A.TXT文件中删除指定学生信息
for (int i = remove_index; i < count - 1; i++) {
students[i] = students[i + 1];
}
count--;
// 将修改后的A.TXT文件写回
write_students(a_filename, students, count);
}
int main() {
remove_student("A.TXT", "B.TXT", "123456");
return 0;
}
```
请注意,在这个示例代码中,我们假设A.TXT和B.TXT中的每一行都是一个学生的所有信息,以空格分隔。如果您的文件格式不同,需要适当修改代码以适应不同的文件格式。
阅读全文