Bootstrap

C语言大作业——学生成绩管理系统(题目+完整代码)

一、题目内容

数据存储要求:

        要求至少能够存储学生的学号、姓名、班级、实验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",
;