学生成绩管理系统(v1.0+版)+文件+score.txt+中存放若干同学的学号及高数、英语、c
时间: 2024-01-30 09:00:46 浏览: 183
学生成绩管理系统(v1.0 版)是一个用来管理学生学习成绩的文件操作系统。在系统中,我们使用一个名为 "score.txt" 的文件来存储学生的学号和对应的高数、英语、C的成绩。
文件 "score.txt" 是一个文本文件,其结构可以如下所示:
学号1 高数成绩1 英语成绩1 C成绩1
学号2 高数成绩2 英语成绩2 C成绩2
学号3 高数成绩3 英语成绩3 C成绩3
...
学号n 高数成绩n 英语成绩n C成绩n
其中,学号代表学生的学号,高数成绩代表学生的高数成绩,英语成绩代表学生的英语成绩,C成绩代表学生的C成绩。
在学生成绩管理系统中,我们可以通过读取 "score.txt" 文件来获取学生的学号和对应科目的成绩。然后我们可以进行各种操作来管理学生成绩,例如计算学生的平均成绩、最高成绩和最低成绩,或者对学生成绩进行排名等。
通过该系统,教师可以更方便地管理学生成绩,了解学生的学习情况,并进行相应的辅导和管理。同时,学生也可以清楚地了解自己在各个科目上的表现,从而更有针对性地进行学习和提升。
需要注意的是,该版本的学生成绩管理系统仅仅实现了基本的文件操作和成绩的存储和读取功能。在后续的版本中,我们可以进一步完善系统,添加更多的功能和操作,使其变得更加实用和高效。
相关问题
编写C语言程序,实现如下功能:文件score.txt中存放若干同学的学号及高数、英语、C语言三门课的成绩,格式如下:1001 张晓丽 90 80 70 利用结构体编写程序实现如下功能:1.从score。.xt中逐个读入每个同学的成绩,用函数实现2.计算每个同学的平均分,用函数实现3.成绩按平均分排序,用函数实现4.屏幕输出结果并写入文件score_avg.txt中,用函数实现
好的,以下是一个实现上述功能的 C 语言程序,注释中有详细的说明。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 // 最大学生数
#define MAX_NAME_LENGTH 20 // 姓名最大长度
#define FILENAME "score.txt" // 成绩文件名
#define OUT_FILENAME "score_avg.txt" // 平均分文件名
typedef struct {
int id; // 学号
char name[MAX_NAME_LENGTH + 1]; // 姓名
int scores[3]; // 三门课成绩
float avg; // 平均分
} Student;
int read_scores(Student students[], int max_num);
float calc_avg(Student *student);
int cmp_by_avg(const void *a, const void *b);
void write_avg_file(Student students[], int num);
int main() {
Student students[MAX_STUDENT_NUM]; // 学生数组
int num = read_scores(students, MAX_STUDENT_NUM); // 读入成绩,返回学生数目
// 计算每个学生的平均分
for (int i = 0; i < num; i++) {
students[i].avg = calc_avg(&students[i]);
}
// 按平均分排序
qsort(students, num, sizeof(Student), cmp_by_avg);
// 屏幕输出结果并写入文件
write_avg_file(students, num);
return 0;
}
// 从文件中读入成绩
int read_scores(Student students[], int max_num) {
FILE *fp;
int num = 0;
char line[1024];
fp = fopen(FILENAME, "r");
if (fp == NULL) {
printf("Error: cannot open file %s\n", FILENAME);
exit(1);
}
while (fgets(line, 1024, fp) != NULL) {
if (num >= max_num) {
printf("Error: too many students\n");
exit(1);
}
// 解析每行数据,读入学号、姓名、成绩
sscanf(line, "%d %s %d %d %d",
&students[num].id,
students[num].name,
&students[num].scores[0],
&students[num].scores[1],
&students[num].scores[2]);
num++;
}
fclose(fp);
return num;
}
// 计算学生的平均分
float calc_avg(Student *student) {
float sum = 0;
for (int i = 0; i < 3; i++) {
sum += student->scores[i];
}
return sum / 3;
}
// 按平均分排序的比较函数
int cmp_by_avg(const void *a, const void *b) {
Student *s1 = (Student *)a;
Student *s2 = (Student *)b;
if (s1->avg < s2->avg) return 1;
if (s1->avg > s2->avg) return -1;
return 0;
}
// 屏幕输出结果并写入文件
void write_avg_file(Student students[], int num) {
FILE *fp;
fp = fopen(OUT_FILENAME, "w");
if (fp == NULL) {
printf("Error: cannot open file %s\n", OUT_FILENAME);
exit(1);
}
printf("学号\t姓名\t高数\t英语\tC语言\t平均分\n");
fprintf(fp, "学号\t姓名\t高数\t英语\tC语言\t平均分\n");
for (int i = 0; i < num; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%.2f\n",
students[i].id,
students[i].name,
students[i].scores[0],
students[i].scores[1],
students[i].scores[2],
students[i].avg);
fprintf(fp, "%d\t%s\t%d\t%d\t%d\t%.2f\n",
students[i].id,
students[i].name,
students[i].scores[0],
students[i].scores[1],
students[i].scores[2],
students[i].avg);
}
fclose(fp);
}
```
这个程序实现了从文件中读入成绩、计算每个学生的平均分、按平均分排序、屏幕输出结果并写入文件等功能。你可以根据需要进行修改和完善。
文件 score.txt 中存放若干同学的学号及高数、英语、C 语言 3 门课的成绩,格式如下: 1001 张晓莉 90 80 70 1002 赵 龙 85 78 80 1003 李大有 60 70 76 ....... 利用结构体编写程序,实现如下功能: ① 从 score.txt 中逐个读入每个同学的成绩,用一个函数实现; ② 计算每个同学平均分,用一个函数实现; ③ 成绩按平均分排序,用一个函数实现; ④ 屏幕输出结果并写入文件 score_avg.txt 中,用一个函数实现。 文件 score_avg.txt 中的记录应该为: 学号 姓名 高数 英语 C 语言 平均分 1002 赵 龙 85 78 80 81.00 1001 张晓莉 90 80 70 80.00 1003 李大有 60 70 76 68.67 ......
我已经提供了上一题的示例代码,如果你想要实现这个功能,可以参考上一题的答案。这里再给出一遍代码以供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 50
#define MAX_NUM 100
typedef struct {
char id[MAX_LEN];
char name[MAX_LEN];
float math;
float english;
float c_language;
float average;
} Student;
int read_student_info(Student *students, char *filename);
void calculate_average(Student *students, int num);
void sort_by_average(Student *students, int num);
void output_result(Student *students, int num, char *filename);
int main() {
Student students[MAX_NUM];
char filename[] = "score.txt";
char output_file[] = "score_avg.txt";
int num = read_student_info(students, filename);
if (num == -1) {
printf("Failed to read file: %s\n", filename);
return 1;
}
calculate_average(students, num);
sort_by_average(students, num);
output_result(students, num, output_file);
return 0;
}
int read_student_info(Student *students, char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
return -1;
}
int num = 0;
while (!feof(fp) && num < MAX_NUM) {
fscanf(fp, "%s%s%f%f%f", students[num].id, students[num].name, &students[num].math, &students[num].english, &students[num].c_language);
num++;
}
fclose(fp);
return num;
}
void calculate_average(Student *students, int num) {
for (int i = 0; i < num; i++) {
students[i].average = (students[i].math + students[i].english + students[i].c_language) / 3;
}
}
void sort_by_average(Student *students, int num) {
for (int i = 0; i < num; i++) {
for (int j = i + 1; j < num; j++) {
if (students[i].average < students[j].average) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
}
void output_result(Student *students, int num, char *filename) {
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("Failed to open file: %s\n", filename);
return;
}
fprintf(fp, "学号\t姓名\t高数\t英语\tC语言\t平均分\n");
for (int i = 0; i < num; i++) {
fprintf(fp, "%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].id, students[i].name, students[i].math, students[i].english, students[i].c_language, students[i].average);
printf("%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].id, students[i].name, students[i].math, students[i].english, students[i].c_language, students[i].average);
}
fclose(fp);
}
```
这个程序实现了从文件中读取学生信息,计算平均分,按平均分排序,以及将结果输出到文件和屏幕上的功能。你可以根据自己的需求进行修改。注意,这里的文件格式是以制表符分隔的,如果你的文件格式不同,需要相应地修改代码。
阅读全文