一、题目内容
数据存储要求:
要求至少能够存储学生的学号、姓名、班级、实验1成绩、实验2成绩、实验3成绩,总分;也可以根据个人理解增加其他需要存储的信息。
基本功能:
1、学生名单管理:
①添加学生信息:录入学生的学号、姓名和班级;录入前先检测学生学号,如果学号已存在则提示学生已存在,输入新的学生信息。
②删除学生信息:先按照学生学号进行查找,找到,则删除学生信息(如果学生已有实验成绩,则实验成绩和总分也删除);找不到,给出提示信息。
③修改学生信息,先按照学生学号进行查找,找到对应的学生,先显示学生所有信息再选择修改姓名或者班级;找不到,给出提示信息。
④根据学号或姓名查询学生的信息,要求输出学号、姓名、班级。
⑤显示所有学生信息。
2、实验成绩管理:
①录入实验成绩,先输入要录入的学生学号,再选择录入实验1、实验2或者实验3成绩;如果学生学号不存在,则提示不存在。
②删除实验成绩,删除某个学生某一次实验的成绩。
③修改修改成绩,修改某个学生某一次实验的成绩。
④查找某个学生的成绩,根据学号进行查找,找到,则显示该生的姓名、学号、班级、实验1成绩、实验2成绩和实验3成绩;找不到,则给出提示信息。
⑤输出每个实验排名前三的学生学号和姓名;
⑥输出每个班级每次实验的平均分,输入如下信息:班级、实验1平均分、实验2平均分、实验3平均分。
⑦按照总分对于学生成绩进行降序排列,并输出学生成绩表,成绩表包含学号、姓名、班级和总分。
3、扩展功能:
①输出有一次实验不及格的学生信息;2次实验不及格的学生。
②可以用文件获取数据,每次程序运行开始时,把文件中存储的学生信息读入内存;程序退出时,先把内存中存储的学生信息保存在文件中,然后再结束程序。
③可自己定义其他功能需求,使系统功能更加完善。
二、程序代码
#define _CRT_SECURE_NO_WARNINGS
#define MAX_STUDENTS 100
#define MAX_NAME_LENGTH 50
#define MAX_CLASS_LENGTH 20
#define MAX_EXPERIMENTS 3
#define PASSING_SCORE 60
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
struct student
{
int student_id;
char student_name[MAX_NAME_LENGTH];
char student_class[MAX_CLASS_LENGTH];
double experiment_scores[3];
double total_score;
};
struct student students[MAX_STUDENTS];
int num_students = 0;
//声明函数,以便于函数的调用
void read_student_data();
void add_student();
void delete_student();
void modify_student();
void search_student();
void display_all_students();
void enter_student_scores();
void delete_student_score();
void modify_student_score();
void find_student_by_id();
void display_top_three(int experiment_index);
void calculate_class_average();
void display_student_scores();
void display_failed_students(int num_failures);
int main()
{
read_student_data();
int choice;
do {
printf("\n======= 实验成绩统计系统 =======\n");
printf("1. 学生名单管理\n");
printf("2. 实验成绩管理\n");
printf("3. 扩展功能\n");
printf("0. 退出\n");
printf("请选择功能:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("\n======= 学生名单管理 =======\n");
printf("1. 添加学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 修改学生信息\n");
printf("4. 根据学号或姓名查询学生信息\n");
printf("5. 显示所有学生信息\n");
printf("请选择功能:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
delete_student();
break;
case 3:
modify_student();
break;
case 4:
printf("请输入要查询的学生姓名或学号:");
char keyword[50];
scanf("%s", keyword);
search_student(keyword);
break;
case 5:
display_all_students();
break;
default:
printf("无效的选项,请重新选择。\n");
}
break;
case 2:
printf("\n======= 实验成绩管理 =======\n");
printf("1. 录入实验成绩\n");
printf("2. 删除实验成绩\n");
printf("3. 修改实验成绩\n");
printf("4. 根据学号查询实验成绩\n");
printf("5. 输出每个实验排名前三的学生\n");
printf("6. 输出每个班级每次实验的平均分\n");
printf("7. 按照总分降序排列学生成绩制表\n");
printf("请选择功能:");
scanf("%d",