要求用C语言编写:1.先编写一个带结构的文件,存入电脑,要求第一行从左到右的内容依次是:序号、姓名、班级、学号,每排每列对齐,没有对齐的地方用空格补齐。2.从电脑中能够读入这个带结构的文件,并进行删增改后,重新存入电脑,3.这个文件要有纵横结构,每横表示一个记录4. 编出来的代码要能够在c的运行界面进行后续的插入、删除和修改
时间: 2024-03-18 17:39:03 浏览: 15
好的,以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 50 // 定义每个字段最大长度
typedef struct {
int id;
char name[MAX_LEN];
char class[MAX_LEN];
char number[MAX_LEN];
} Student;
void print_table(Student *students, int count);
void add_student(Student *students, int count);
void delete_student(Student *students, int count);
void modify_student(Student *students, int count);
int main() {
FILE *fp;
int count = 0;
// 打开或创建文件
fp = fopen("students.txt", "a+");
if (fp == NULL) {
printf("Failed to open file!\n");
exit(1);
}
// 读取文件内容到结构体数组中
Student students[100];
char buffer[MAX_LEN * 3 + 10];
while (fgets(buffer, MAX_LEN * 3 + 10, fp) != NULL) {
sscanf(buffer, "%d %s %s %s", &students[count].id, students[count].name, students[count].class, students[count].number);
count++;
}
// 输出初始表格
print_table(students, count);
// 选择操作
int choice;
do {
printf("\n请选择操作:\n");
printf("1. 增加记录\n");
printf("2. 删除记录\n");
printf("3. 修改记录\n");
printf("4. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student(students, count);
count++;
break;
case 2:
delete_student(students, count);
count--;
break;
case 3:
modify_student(students, count);
break;
case 4:
break;
default:
printf("无效的选择,请重新输入!\n");
}
if (choice != 4) {
// 输出更新后的表格
print_table(students, count);
// 将结构体数组写入文件
rewind(fp);
for (int i = 0; i < count; i++) {
fprintf(fp, "%-4d %-10s %-10s %-10s\n", students[i].id, students[i].name, students[i].class, students[i].number);
}
fflush(fp);
}
} while (choice != 4);
// 关闭文件
fclose(fp);
return 0;
}
// 输出表格
void print_table(Student *students, int count) {
printf("\n 序号 姓名 班级 学号\n");
printf("------------------------------------\n");
for (int i = 0; i < count; i++) {
printf("%2d. %-10s %-10s %-10s\n", students[i].id, students[i].name, students[i].class, students[i].number);
}
}
// 增加记录
void add_student(Student *students, int count) {
printf("\n请输入要增加的学生信息:\n");
printf("姓名:");
scanf("%s", students[count].name);
printf("班级:");
scanf("%s", students[count].class);
printf("学号:");
scanf("%s", students[count].number);
students[count].id = count + 1;
}
// 删除记录
void delete_student(Student *students, int count) {
int id;
printf("\n请输入要删除的学生的序号:");
scanf("%d", &id);
for (int i = id - 1; i < count - 1; i++) {
students[i] = students[i + 1];
students[i].id--;
}
}
// 修改记录
void modify_student(Student *students, int count) {
int id;
printf("\n请输入要修改的学生的序号:");
scanf("%d", &id);
printf("姓名:");
scanf("%s", students[id - 1].name);
printf("班级:");
scanf("%s", students[id - 1].class);
printf("学号:");
scanf("%s", students[id - 1].number);
}
```
这个程序会创建一个名为 `students.txt` 的文件,并将学生信息存储在其中。每次运行程序时,它会读取该文件中的所有记录,并显示在屏幕上。然后,用户可以选择要执行的操作:增加记录、删除记录、修改记录或退出程序。每个操作完成后,程序会将更新后的学生信息重新写入文件中。