使用结构体数组存放学生成绩信息,至少包含学号(整形),语文、数学、英语、物理、化学这五门课程的百分制成绩。编写程序实现: (1) 编写一个函数用来输入所有学生的信息(当输入的学号为0时,结束输入); (2)并将每个学生的全部数据保存到磁盘上的二进制文件StudentGrade.dat中。
时间: 2024-04-10 10:28:22 浏览: 44
结构体实现学生成绩管理系统(精编版).pdf
好的,下面是实现上述功能的C代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int studentID;
int chinese;
int math;
int english;
int physics;
int chemistry;
} Student;
void inputStudentInfo(Student *students, int size) {
int i;
for (i = 0; i < size; i++) {
printf("请输入第%d个学生的学号(输入0结束):", i + 1);
scanf("%d", &students[i].studentID);
if (students[i].studentID == 0) {
break;
}
printf("请输入第%d个学生的语文成绩:", i + 1);
scanf("%d", &students[i].chinese);
printf("请输入第%d个学生的数学成绩:", i + 1);
scanf("%d", &students[i].math);
printf("请输入第%d个学生的英语成绩:", i + 1);
scanf("%d", &students[i].english);
printf("请输入第%d个学生的物理成绩:", i + 1);
scanf("%d", &students[i].physics);
printf("请输入第%d个学生的化学成绩:", i + 1);
scanf("%d", &students[i].chemistry);
}
}
void saveStudentInfo(Student *students, int size) {
FILE *file = fopen("StudentGrade.dat", "wb");
if (file == NULL) {
printf("无法打开文件\n");
return;
}
fwrite(students, sizeof(Student), size, file);
fclose(file);
}
int main() {
int maxSize = 100; // 最大学生数量
Student *students = (Student *)malloc(maxSize * sizeof(Student));
inputStudentInfo(students, maxSize);
saveStudentInfo(students, maxSize);
free(students);
return 0;
}
```
这段代码定义了一个结构体 `Student`,包含学生的学号和五门成绩。`inputStudentInfo` 函数用来输入学生的信息,通过一个循环可以输入多个学生的信息,当输入的学号为0时,循环结束。`saveStudentInfo` 函数将学生信息保存到二进制文件 "StudentGrade.dat" 中。在 `main` 函数中,我们首先动态分配了一个存放学生信息的数组,然后调用 `inputStudentInfo` 和 `saveStudentInfo` 函数,最后释放了动态分配的内存。
请注意,此代码中并没有进行错误处理,例如输入非法字符或打开文件失败的情况。在实际应用中,应该根据需要进行适当的错误处理。
阅读全文