用c语言按下列要求:1. 设计文件数据结构:设计文件的存储结构,将每个学生的学号、姓名、性别、年龄和总 绩点保存为一个记录,以便进行随机存取。例如:学号 12 个字节,姓名 8 个字节,性 别 2 个字节,年龄 2 个字节,总绩点 3 个字节,记起来一个学生的记录总共需要 27 个 字节,记录的长度就是 27 个字节 2. 根据所要保存的学生档案记录内容(学号、姓名、性别、年龄和总绩点),设计结构体 数据类型,结合结构体数组的运用实现文件记录的读写访问 3. 将以上各功能都设计成独立的函数,在 main 函数中显示一个菜单,让用户选择要执行 的功能,然后转而执行相应的函数编写程序
时间: 2024-04-07 14:30:57 浏览: 20
好的,我明白了你的问题。下面是一个简单的实现,你可以参考一下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
struct student {
char id[12];
char name[8];
char gender[2];
int age;
float score;
};
void add_student(struct student *students, int *count) {
if (*count >= MAX_STUDENTS) {
printf("Error: no more space for new students.\n");
return;
}
struct student new_student;
printf("Enter student ID: ");
scanf("%s", new_student.id);
printf("Enter student name: ");
scanf("%s", new_student.name);
printf("Enter student gender: ");
scanf("%s", new_student.gender);
printf("Enter student age: ");
scanf("%d", &new_student.age);
printf("Enter student score: ");
scanf("%f", &new_student.score);
students[*count] = new_student;
*count += 1;
printf("Student added successfully.\n");
}
void list_students(struct student *students, int count) {
if (count == 0) {
printf("No students found.\n");
return;
}
printf("ID\tName\tGender\tAge\tScore\n");
for (int i = 0; i < count; i++) {
printf("%s\t%s\t%s\t%d\t%.2f\n", students[i].id, students[i].name, students[i].gender, students[i].age, students[i].score);
}
}
void save_students(struct student *students, int count) {
FILE *file = fopen("students.dat", "wb");
if (file == NULL) {
printf("Error: could not open file.\n");
return;
}
fwrite(students, sizeof(struct student), count, file);
fclose(file);
printf("Students saved to file.\n");
}
void load_students(struct student *students, int *count) {
FILE *file = fopen("students.dat", "rb");
if (file == NULL) {
printf("Error: could not open file.\n");
return;
}
*count = 0;
while (fread(&students[*count], sizeof(struct student), 1, file) == 1) {
*count += 1;
}
fclose(file);
printf("Students loaded from file.\n");
}
int main() {
struct student students[MAX_STUDENTS];
int count = 0;
int choice = -1;
while (choice != 0) {
printf("1. Add student\n");
printf("2. List students\n");
printf("3. Save students\n");
printf("4. Load students\n");
printf("0. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student(students, &count);
break;
case 2:
list_students(students, count);
break;
case 3:
save_students(students, count);
break;
case 4:
load_students(students, &count);
break;
case 0:
printf("Exiting program.\n");
break;
default:
printf("Invalid choice.\n");
}
printf("\n");
}
return 0;
}
```
这个程序用了结构体来表示每个学生的档案记录,通过结构体数组来保存多个学生的记录。菜单提供了 4 个选项:添加学生、列出学生、保存学生到文件、从文件中加载学生数据。用户可以根据需要选择相应的功能。