使用C语言设计一个简单的学生成绩管理系统。设有学生成绩文件student.txt,每位学生成绩信息包含学号(num)、姓名(name)、性别(sex)、出生日期(birthday,包括年、月、日,分别表示为year,month,day)、3门功课的成绩(高数、C语言、大学物理)、总分和平均分。设计程序,要求从文件student.txt中读出学生成绩表,之后参对成绩表进行如下操作: (1)建立学生成绩信息结构数组(从student.txt读入数据) (2)显示。即输出出所有成绩。 (3)保存。退出程序前将结果保存到studeng.txt
时间: 2023-07-10 20:19:49 浏览: 119
好的,我会尽量详细地解答你的问题。下面是一个简单的学生成绩管理系统的 C 代码实现,包括从文件中读取学生成绩、显示学生成绩和保存学生成绩的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生信息结构体
struct student {
char num[10]; // 学号
char name[20]; // 姓名
char sex[5]; // 性别
int year, month, day; // 出生日期(年、月、日)
double score[3]; // 3门功课的成绩
double total_score; // 总分
double avg_score; // 平均分
};
// 函数声明
void read_file(struct student stu[], int *num);
void display(struct student stu[], int num);
void save_file(struct student stu[], int num);
int main() {
struct student stu[100]; // 最多存储 100 个学生信息
int num = 0; // 学生个数初始值为 0
read_file(stu, &num); // 从文件中读取学生成绩
display(stu, num); // 显示学生成绩
save_file(stu, num); // 保存学生成绩
return 0;
}
// 从文件中读取学生成绩
void read_file(struct student stu[], int *num) {
FILE *fp;
fp = fopen("student.txt", "r");
if (fp == NULL) {
printf("Open file failed!\n");
exit(1);
}
while (!feof(fp)) {
fscanf(fp, "%s%s%s%d%d%d%lf%lf%lf", stu[*num].num, stu[*num].name, stu[*num].sex,
&stu[*num].year, &stu[*num].month, &stu[*num].day, &stu[*num].score[0],
&stu[*num].score[1], &stu[*num].score[2]);
// 计算总分和平均分
stu[*num].total_score = stu[*num].score[0] + stu[*num].score[1] + stu[*num].score[2];
stu[*num].avg_score = stu[*num].total_score / 3.0;
(*num)++; // 学生个数加 1
}
fclose(fp);
}
// 显示学生成绩
void display(struct student stu[], int num) {
printf("num\tname\tsex\tbirthday\tmath\tC\tphysics\ttotal\taverage\n");
for (int i = 0; i < num; i++) {
printf("%s\t%s\t%s\t%d-%d-%d\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", stu[i].num,
stu[i].name, stu[i].sex, stu[i].year, stu[i].month, stu[i].day, stu[i].score[0],
stu[i].score[1], stu[i].score[2], stu[i].total_score, stu[i].avg_score);
}
}
// 保存学生成绩
void save_file(struct student stu[], int num) {
FILE *fp;
fp = fopen("student.txt", "w");
if (fp == NULL) {
printf("Open file failed!\n");
exit(1);
}
fprintf(fp, "num\tname\tsex\tbirthday\tmath\tC\tphysics\ttotal\taverage\n");
for (int i = 0; i < num; i++) {
fprintf(fp, "%s\t%s\t%s\t%d-%d-%d\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", stu[i].num,
stu[i].name, stu[i].sex, stu[i].year, stu[i].month, stu[i].day, stu[i].score[0],
stu[i].score[1], stu[i].score[2], stu[i].total_score, stu[i].avg_score);
}
fclose(fp);
}
```
以上代码实现了从 `student.txt` 文件中读取学生成绩信息,存储在 `student` 结构体数组中,并计算总分和平均分,然后将学生成绩信息显示出来,并将结果保存到 `student.txt` 文件中。你可以根据自己的需求进行修改和完善。
阅读全文
相关推荐











