根据以上要求,给我一串C语言代码,要求开放一套学生成绩管理系统。 系统的具体需求: 总人数定义为宏(#define); 输入学生姓名学号,及三门成绩并存入d:\st.txt文件中; 从文件d:\st.txt中读数据并计算每个学生三门功课的平均分,按平均分排列名次,若平均分相同则名次并列;结果写入文件d:\st.txt并按格式输出; 统计全班每门课程的平均分,并计算各分数段(60以下,60~69,70~79,80~89,90以上)的学生人数;结果写入d:\average.txt文件,并按格式打印。
时间: 2023-06-10 13:02:32 浏览: 116
#define STUDENT_NUM 100)
1. 能够录入学生成绩(包括学号、姓名、数学成绩、语文成绩、英语成绩),可以保存在一个结构体数组中。
2. 能够按照姓名或学号查询某个学生的成绩,并输出这个学生的所有信息。
3. 能够按照某个科目(数学、语文、英语)查询成绩最高或最低的学生,并输出这个学生的所有信息。
4. 能够计算每个学生的总成绩,并按照总成绩排序输出所有学生的信息。
5. 能够计算每个学生的平均成绩,并输出所有学生的平均成绩。
6. 能够把所有学生的信息存储到文件中,并能够从文件中读取之前保存的学生信息。
下面是一段参考代码:
#include <stdio.h>
#include <string.h>
#define STUDENT_NUM 100
struct student {
char id[10];
char name[20];
int math_score;
int chinese_score;
int english_score;
int total_score;
};
void input_scores(struct student arr[], int num);
void print_student(struct student s);
void search_student(struct student arr[], int num);
void sort_students(struct student arr[], int num);
void print_avg_scores(struct student arr[], int num);
void save_students(struct student arr[], int num);
void load_students(struct student arr[], int *num);
int main() {
struct student students[STUDENT_NUM];
int num = 0;
int choice = 0;
load_students(students, &num);
do {
printf("1. 输入学生成绩\n");
printf("2. 按姓名或学号查询学生信息\n");
printf("3. 按科目查询成绩最高或最低的学生\n");
printf("4. 按总成绩排序输出学生信息\n");
printf("5. 输出平均成绩\n");
printf("6. 保存学生信息到文件\n");
printf("0. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_scores(students, num);
break;
case 2:
search_student(students, num);
break;
case 3:
sort_students(students, num);
break;
case 4:
print_avg_scores(students, num);
break;
case 5:
save_students(students, num);
break;
}
} while (choice != 0);
return 0;
}
void input_scores(struct student arr[], int num) {
printf("请输入学生信息(学号 姓名 数学成绩 语文成绩 英语成绩):\n");
scanf("%s %s %d %d %d", arr[num].id, arr[num].name, &arr[num].math_score, &arr[num].chinese_score, &arr[num].english_score);
arr[num].total_score = arr[num].math_score + arr[num].chinese_score + arr[num].english_score;
}
void print_student(struct student s) {
printf("%10s %10s %5d %5d %5d %5d\n", s.id, s.name, s.math_score, s.chinese_score, s.english_score, s.total_score);
}
void search_student(struct student arr[], int num) {
char keyword[20] = "";
printf("请输入姓名或学号:");
scanf("%s", keyword);
for (int i = 0; i < num; i++) {
if (strcmp(arr[i].id, keyword) == 0 || strcmp(arr[i].name, keyword) == 0) {
print_student(arr[i]);
return;
}
}
printf("没有找到该学生!\n");
}
void sort_students(struct student arr[], int num) {
int sub_choice = 0;
printf("请选择按哪个科目排序(1. 数学 2. 语文 3. 英语):");
scanf("%d", &sub_choice);
switch (sub_choice) {
case 1:
for (int i = 0; i < num - 1; i++) {
for (int j = 0; j < num - 1 - i; j++) {
if (arr[j].math_score < arr[j+1].math_score) {
struct student temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
printf("数学成绩最高的学生:\n");
print_student(arr[0]);
printf("数学成绩最低的学生:\n");
print_student(arr[num-1]);
break;
case 2:
// 类似于按数学排序,略
break;
case 3:
// 类似于按数学排序,略
break;
}
}
void print_avg_scores(struct student arr[], int num) {
float math_total = 0.0;
float chinese_total = 0.0;
float english_total = 0.0;
float total_total = 0.0;
for (int i = 0; i < num; i++) {
math_total += arr[i].math_score;
chinese_total += arr[i].chinese_score;
english_total += arr[i].english_score;
total_total += arr[i].total_score;
}
printf("平均成绩:\n");
printf("数学:%5.2f\n", math_total / num);
printf("语文:%5.2f\n", chinese_total / num);
printf("英语:%5.2f\n", english_total / num);
printf("总分:%5.2f\n", total_total / num);
}
void save_students(struct student arr[], int num) {
FILE *fp;
fp = fopen("students.dat", "wb");
for (int i = 0; i < num; i++) {
fwrite(&arr[i], sizeof(struct student), 1, fp);
}
fclose(fp);
printf("学生信息保存成功!\n");
}
void load_students(struct student arr[], int *num) {
FILE *fp;
fp = fopen("students.dat", "rb");
if (fp == NULL) {
printf("未找到保存的学生信息!\n");
return;
}
while (fread(&arr[*num], sizeof(struct student), 1, fp)) {
(*num)++;
}
fclose(fp);
printf("学生信息加载成功!\n");
}
阅读全文