使用c语言,用到typedef,设计一个简单的学生成绩管理系统。设有学生成绩文件student.txt,每位学生成绩信息包含学号(num)、姓名(name)、性别(sex)、出生日期(birthday,包括年、月、日,分别表示为year,month,day)、3门功课的成绩(高数、C语言、大学物理)、总分和平均分。设计程序,要求从文件student.txt中读出学生成绩表,之后参对成绩表进行如下操作 (9)显示。即输出出所有成绩。
时间: 2023-07-10 07:22:04 浏览: 64
好的,我来帮您解答这道题目。
首先,我们需要定义一个结构体来存储每位学生的成绩信息,包括学号、姓名、性别、出生日期、3门功课成绩、总分和平均分。这里使用 typedef 来为结构体取一个别名,方便后续操作。
代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct student {
char num[20]; // 学号
char name[20]; // 姓名
char sex[10]; // 性别
int year, month, day; // 出生日期
float math, c_lang, physics; // 3门功课成绩
float total_score; // 总分
float ave_score; // 平均分
} Student;
```
接着,我们需要从文件 student.txt 中读出学生成绩表,并将每位学生的成绩信息存储到一个结构体数组中。这里我们使用 fopen() 函数打开文件,然后使用 fscanf() 函数逐行读取文件中的学生信息,存储到结构体数组中。
代码如下:
```c
int main() {
char file_name[] = "student.txt";
FILE *fp;
Student students[100]; // 最多存储100个学生的成绩
int i = 0;
if ((fp = fopen(file_name, "r")) == NULL) {
printf("Cannot open file %s!\n", file_name);
exit(1);
}
while (fscanf(fp, "%s%s%s%d-%d-%d%f%f%f%f%f",
students[i].num,
students[i].name,
students[i].sex,
&students[i].year,
&students[i].month,
&students[i].day,
&students[i].math,
&students[i].c_lang,
&students[i].physics) != EOF) {
// 计算总分和平均分
students[i].total_score = students[i].math + students[i].c_lang + students[i].physics;
students[i].ave_score = students[i].total_score / 3;
i++;
}
fclose(fp);
// 显示学生成绩信息
printf("学号\t姓名\t性别\t出生日期\t高数\tC语言\t大学物理\t总分\t平均分\n");
for (int j = 0; j < i; j++) {
printf("%s\t%s\t%s\t%d-%d-%d\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f\n",
students[j].num,
students[j].name,
students[j].sex,
students[j].year,
students[j].month,
students[j].day,
students[j].math,
students[j].c_lang,
students[j].physics,
students[j].total_score,
students[j].ave_score);
}
return 0;
}
```
最后,我们使用 printf() 函数将每位学生的成绩信息输出到控制台上。需要注意的是,这里使用了一个 for 循环来遍历结构体数组,输出每位学生的成绩信息。
完整的代码如下:
阅读全文