制作学生管理系统的代码以及注释

制作学生管理系统,能实现信息录入、删除学生休息、修改信息、查询信息、排序;信息包括:学号、姓名、性别、班级、本学期三门以上学科成绩、平均成绩、总成绩、最高成绩、最低成绩;排序能够按照学号,姓名,或各科成绩进行排序,等级分组;显示所有记录;文件系统读写。并在代码后面注释

写不完的学生管理系统。你是否有翻阅csdn论坛呢,这里各种语言的都有现成的

学生管理系统真多

解决了没

纯手写代码,有帮助望采纳

img

#include<stdio.h>
#include<windows.h>
#define Max_stu_num 25
#define obj_num 4

char File_Path[]="score_data.txt";

typedef struct
{
    char Name[25];         //姓名
    int Number;            //学号
    int score[obj_num];            //计算机成绩//数学成绩//C语言成绩//英语成绩//
    int Sum_score;     //总成绩
} Stu;

char obj_name[obj_num][25]= {"计算机","数学","C语言","英语"};
double ave[obj_num];

double stu_avescore[Max_stu_num];    //平均成绩

Stu stu[Max_stu_num];
int count_stu=0;

void cal_sum_score(int index)
{
    stu[index].Sum_score=0;
    for(int j=0; j<obj_num; j++)
    {
        stu[index].Sum_score+=stu[index].score[j];
    }
}
void input()
{
    printf("输入姓名:\n");
    fflush(stdin);
    scanf("%s",stu[count_stu].Name);
    printf("输入学号:\n");
    fflush(stdin);
    scanf("%d",&stu[count_stu].Number);
    for(int i=0; i<obj_num; i++)
    {
        printf("输入%s成绩:\n",obj_name[i]);
        fflush(stdin);
        scanf("%d",&stu[count_stu].score[i]);
    }
    cal_sum_score(count_stu);
    count_stu++;
}

void output_head()
{
    printf("姓名\t学号\t");
    for(int i=0; i<obj_num; i++)
    {
        printf("%s\t",obj_name[i]);
    }
    printf("总分\n");
}

void outputOne(int index)
{
    printf("%s\t",stu[index].Name);
    printf("%d\t",stu[index].Number);
    for(int i=0; i<obj_num; i++)
    {
        printf("%d\t",stu[index].score[i]);
    }
    printf("%d\t",stu[index].Sum_score);
    printf("\n");
}

void output(int n)
{
    output_head();
    int j;
    for(j=0; j<n; j++)
    {
        outputOne(j);
    }
    printf("---------------------------------------------\n");
}

int search(int number)
{
    int i,p=-1;
    for(i=0; i<count_stu; i++)
    {
        if(stu[i].Number==number)
        {
            p=i;
            return p;
        }
    }
    return -1;
}

void modify(int number)
{
    int index=search(number);
    if(index==-1)
    {
        printf("找不到该学号\n");
    }
    else
    {
        printf("学号%d的学生是第%d位\n",number,index+1);
        output_head();
        outputOne(index);
        puts("修改信息");
        printf("输入姓名:\n");
        fflush(stdin);
        scanf("%s",stu[index].Name);
        printf("输入学号:\n");
        fflush(stdin);
        scanf("%d",&stu[index].Number);
        stu[index].Sum_score=0;
        for(int i=0; i<obj_num; i++)
        {
            printf("输入%s成绩:\n",obj_name[i]);
            fflush(stdin);
            scanf("%d",&stu[index].score[i]);
            stu[index].Sum_score+=stu[index].score[i];
        }
        cal_sum_score(index);
        printf("修改成功\n");
    }
}

void del(int number)
{
    int index=search(number);
    if(index==-1)
    {
        printf("找不到该学号\n");
    }
    else
    {
        printf("学号%d的学生是第%d位\n",number,index+1);
        output_head();
        outputOne(index);
        int i;
        for(i=index; i<count_stu-1; i++)
        {
            stu[i]= stu[i+1];
        }
        printf("删除成功\n");
        count_stu--;
    }
}

double calave()
{
    int score_sum[obj_num]= {0};
    for(int i=0; i<count_stu; i++)
    {
        for(int j=0; j<obj_num; j++)
        {
            score_sum[j]+=stu[i].score[j];
        }
    }
    for(int j=0; j<obj_num; j++)
    {
        ave[j]=(double)score_sum[j]/count_stu;
    }
}

void save()
{
    FILE *fp;
    fp = fopen(File_Path,"w");
    if(fp == NULL)
    {
        printf("error!");
    }
    else
    {
        for(int j=0; j<count_stu; j++)
        {
            fprintf(fp,"%s %d ",stu[j].Name,stu[j].Number);
            for(int i=0; i<obj_num; i++)
            {
                fprintf(fp,"%d ",stu[j].score[i]);
            }
            fprintf(fp,"%d\n",stu[j].Sum_score);
        }
        printf("文件写入成功\n");
    }
    fclose(fp);
}

void read()
{
    FILE *fp;
    fp = fopen(File_Path,"r");
    int count=0;
    if(fp == NULL)
    {
        printf("error!");
    }
    else
    {
        int flag=2;
        int j=count_stu;
        do
        {
            flag=fscanf(fp,"%s %d ",stu[j].Name,&stu[j].Number);
            for(int i=0; i<obj_num; i++)
            {
                fscanf(fp,"%d ",&stu[j].score[i]);
            }
            fscanf(fp,"%d\n",&stu[j].Sum_score);
            if(flag!=-1)
            {
                cal_sum_score(count);
                count++;
            }
            j++;
        }
        while(flag>0);
        printf("文件读取成功\n");
        count_stu+=count;
    }
    fclose(fp);
}

void swap_stu_inf(Stu stu[],int a,int b)
{
    Stu tem=stu[a];
    stu[a]=stu[b];
    stu[b]=tem;
}

void BubbleSort_Sum_number(Stu stu[],int n)
{
    int j,k;
    Stu t;
    for(j=0; j<n-1; j++)
    {
        for(k=0; k<n-j-1; k++)
        {
            if(stu[k].Number>stu[k+1].Number)
            {
                t=stu[k];
                stu[k]=stu[k+1];
                stu[k+1]=t;
            }
        }
    }
}

void BubbleSort_Sum_score(Stu stu[],int n)
{
    int j,k;
    Stu t;
    for(j=0; j<n-1; j++)
    {
        for(k=0; k<n-j-1; k++)
        {
            if(stu[k].Sum_score<stu[k+1].Sum_score)
            {
                t=stu[k];
                stu[k]=stu[k+1];
                stu[k+1]=t;
            }
        }
    }
}

void out_aveScore()
{
    printf("平均分\t\t");
    for(int i=0; i<obj_num; i++)
    {
        printf("%.2lf\t",ave[i]);
    }
    printf("\n");
}

void cal_stu_avescore()
{
    for(int i=0; i<count_stu; i++)
    {
        stu_avescore[i]=(double)stu[i].Sum_score/obj_num;
    }
}

void color(short x)    //自定义函根据参数改变颜色
{
    if(x>=0 && x<=15)//参数在0-15的范围颜色
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);    //只有一个参数,改变字体颜色
    else//默认的颜色白色
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}

void put_stu_ave_score()
{
    cal_stu_avescore();
    printf("姓名\t学号\t平均分\n");
    for(int i=0; i<count_stu; i++)
    {
        if(stu_avescore[i]<60)
        {
            color(6);
        }
        printf("%s\t%d\t%.2f\n",stu[i].Name,stu[i].Number,stu_avescore[i]);
        color(7);
    }
    //color(7);
}
void sort_menu()
{
    puts("--------1.按学号排序------------------------------");
    puts("--------2.按总分排序------------------------------");
    puts("--------3.返回主菜单------------------------------");
    int option=0;
    fflush(stdin);
    scanf("%d",&option);
    if(option==2)
    {
        system("cls");
        puts("按总分排序");
        BubbleSort_Sum_score(stu,count_stu);
        output(count_stu);
    }
    else if(option==1)
    {
        system("cls");
        puts("按学号排序");
        BubbleSort_Sum_number(stu,count_stu);
        output(count_stu);
    }
    else if(option==3)
    {
        return;
    }
}
void insert()
{
    puts("在已按学号有序的提下,将学生插入到合适的位置");
    puts("输入学号:");
    Stu tem;
    scanf("%d",&tem.Number);
    int index=count_stu;
    BubbleSort_Sum_number(stu,count_stu);
    for(int i=0; i<count_stu; i++)
    {
        if(stu[i].Number>=tem.Number)
        {
            index=i;
            break;
        }
    }
    printf("学号:%d 在第 %d 位\n",tem.Number,index+1);
    printf("输入姓名:\n");
    fflush(stdin);
    scanf("%s",tem.Name);
    for(int i=0; i<obj_num; i++)
    {
        printf("输入%s成绩:\n",obj_name[i]);
        fflush(stdin);
        scanf("%d",&tem.score[i]);
    }
    for(int i=count_stu+1; i>index; i--)
    {
        stu[i]=stu[i-1];
    }
    stu[index]=tem;
    cal_sum_score(index);
    count_stu++;
}
void menu()
{
    int option=0;
    while(option!=-1)
    {
        system("cls");
        printf("--------------------------------------------------------------------------------\n");
        printf("------学生成绩管理--------------------------------------------------------------\n");
        printf("------1.输入成绩  --------------------------------------------------------------\n");
        printf("------2.输出成绩  --------------------------------------------------------------\n");
        printf("------3.排序--------------------------------------------------------------------\n");
        printf("------4.按学号查找--------------------------------------------------------------\n");
        printf("------5.修改学生信息  ----------------------------------------------------------\n");
        printf("------6.删除学生信息------------------------------------------------------------\n");
        printf("------7.计算各科平均分----------------------------------------------------------\n");
        printf("------8.插入学生----------------------------------------------------------------\n");
        printf("------9.文件读入  --------------------------------------------------------------\n");
        printf("------10.保存至文件--------------------------------------------------------------\n");
        printf("------11.退出  -----------------------------------------------------------------\n");
        printf("--------------------------------------------------------------------------------\n");
        printf("输入选项:\n");
        fflush(stdin);
        scanf("%d",&option);
        if(option==1)
        {
            system("cls");
            input();
            system("pause");
        }
        else if(option==2)
        {
            system("cls");
            output(count_stu);
            system("pause");
        }
        else if(option==3)
        {
            system("cls");
            sort_menu();
            system("pause");
        }
        else if(option==4)
        {
            system("cls");
            int number;
            printf("输入要查找的学号:");
            fflush(stdin);
            scanf("%d",&number);
            int index=search(number);
            if(index==-1)
            {
                printf("查找失败\n");
            }
            else
            {
                printf("查找成功\n");
                output_head();
                outputOne(index);
            }
            system("pause");
        }
        else if(option==5)
        {
            system("cls");
            output(count_stu);
            int number;
            printf("输入要修改成绩的学生对应的学号:");
            scanf("%d",&number);
            modify(number);
            system("pause");
        }
        else if(option==6)
        {
            system("cls");
            int number;
            printf("输入要删除的学号:");
            scanf("%d",&number);
            del(number);
            puts("完成");
            system("pause");
        }
        else if(option==7)
        {
            system("cls");
            output(count_stu);
            calave();
            out_aveScore();
            system("pause");
        }
        else if(option==8)
        {
            system("cls");
            insert();
            system("pause");
        }
        else if(option==9)
        {
            system("cls");
            read();
            system("pause");
        }
        else if(option==10)
        {
            system("cls");
            save();
            system("pause");
        }
    }
}

int main()
{
    menu();
    return 0;
}


有现成的

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/1069093
  • 这篇博客你也可以参考下:输入学生成绩、名字和学号,实现按学生成绩总分排序的同时交换学号、成绩、姓名
  • 除此之外, 这篇博客: 【文本文件与二进制文件的区别;文件打开与关闭的方法、不同读写方式】(学习笔记19--文件上)中的 文件的关闭 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 可以使用fclose函数来关闭一个文件,该函数原型为

    int fclose(FILE *stream);
    

    fclose函数只有一个参数stream,是FILE结构体类型的指针,表示一个文件流。fclose函数的功能就是将该函数所指定的文件流关闭。函数的返回值为int类型,当函数执行成功,返回整型值0,当函数执行失败,返回一个EOF。EOF是一个宏的名字,是End of file(文件终点)的首字母缩写,它表示一个非零值,通常被定义为-1

    我们可以将fopen函数所返回的文件流作为实参,调用fclose函数,以关闭与该文件流相关联的文件

    FILE *pfile = fopen("D:\\test.txt","r");
    if(pfile)
    {
    	printf("File opened successfully.\n");
    	if(!fclose(pfile))
    		printf("File closed successfully.\n");
    	else
    		printf("File closure failed successfully.\n");
    }
    else
    	printf("Failed to open file.\n");
    

    代码中,首先通过fopen函数打开D盘的test.txt文件,并返回与该文件相关联的输入流,然后通过if语句对文件流pfile进行检查,若文件流pfile是正常的、可用的,则执行大括号中的语句;若文件流是不可用的,则执行else部分,打印输出文件打开失败的信息

    在大括号中,首先通过printf函数打印文件打开成功的信息,然后再次使用if…else语句。在小括号内的条件表达式中,将文件流pfile作为实参调用fclose函数,这会将与文件流pfile相关联的文件test.txt关闭。如果关闭成功,则fclose函数的返回值为0,由于前面使用了逻辑非运算符,因此,小括号内的表达式的值为真,这会通过printf函数在控制台窗口打印文件关闭成功的信息;若文件关闭失败,fclose函数的返回值为EOF,通过逻辑非运算符转换,小括号内表达式的结果为假,就会执行else部分,打印文件关闭失败的信息

    由于之前已经在D盘上创建了test.txt文件,结果为

    File opened successfully.
    File closed successfully.
    

    将D盘上的test.txt文件删除,并重新运行该程序

    Failed to open file.
    
  • 您还可以看一下 CSDN讲师老师的基于机器学习的阿里智能助理在电商领域的架构构建与实践课程中的 基于机器学习的阿里智能助理在电商领域的架构构建与实践(上)小节, 巩固相关知识点
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 学生结构体
typedef struct student {
    char id[20];  // 学号
    char name[20];  // 姓名
    char sex[10];   // 性别
    char cla[20];   // 班级
    int score[10];  // 成绩
    int total_score;  // 总成绩
    float average_score;  // 平均成绩
    int max_score;  // 最高成绩
    int min_score;  // 最低成绩
    struct student *next;  // 指向下一个节点的指针
} Student;

// 全局变量
Student *head = NULL;  // 学生信息链表头

// 函数声明
void input_student();  // 录入学生信息
void delete_student();  // 删除学生信息
void modify_student();  // 修改学生信息
void query_student();  // 查询学生信息
void sort_student();  // 排序学生信息
void group_student();  // 按照等级分组学生信息
void display_all();  // 显示所有记录
void save_data();  // 保存数据到文件
void read_data();  // 从文件中读取数据
void free_data();  // 释放动态分配的内存

int main() {
    int choice;
    read_data();  // 从文件中读取数据

    while (1) {
        printf("请输入您的操作:\n");
        printf("1. 录入学生信息\n");
        printf("2. 删除学生信息\n");
        printf("3. 修改学生信息\n");
        printf("4. 查询学生信息\n");
        printf("5. 排序学生信息\n");
        printf("6. 按照等级分组学生信息\n");
        printf("7. 显示所有记录\n");
        printf("8. 保存数据到文件\n");
        printf("9. 退出程序\n");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                input_student();
                break;
            case 2:
                delete_student();
                break;
            case 3:
                modify_student();
                break;
            case 4:
                query_student();
                break;
            case 5:
                sort_student();
                break;
            case 6:
                group_student();
                break;
            case 7:
                display_all();
                break;
            case 8:
                save_data();
                break;
            case 9:
                free_data();
                exit(0);
                break;
            default:
                printf("无效的输入,请重新输入!\n");
                break;
        }
    }

    return 0;
}

// 录入学生信息
void input_student() {
    Student *p, *q;
    p = (Student *) malloc(sizeof(Student));
    printf("请输入学生学号:");
    scanf("%s", p->id);
    printf("请输入学生姓名:");
    scanf("%s", p->name);
    printf("请输入学生性别:");
    scanf("%s", p->sex);
    printf("请输入学生班级:");
    scanf("%s", p->cla);
    printf("请输入本学期三门以上学科成绩(用逗号分隔):");
    for (int i = 0; i < 3; i++) {
        scanf("%d", &(p->score[i]));
    }
    p->total_score = p->score[0] + p->score[1] + p->score[2];
    p->average_score = p->total_score / 3.0;
    p->max_score = p->score[0];
    p->min_score = p->score[0];
    for (int i = 1; i < 3; i++) {
        if (p->score[i] > p->max_score) {
            p->max_score = p->score[i];
        }
        if (p->score[i] < p->min_score) {
            p->min_score = p->score[i];
        }
    }
    p->next = NULL;

    // 将学生信息插入到链表中
    if (head == NULL) {
        head = p;
    } else {
        q = head;
        while (q->next != NULL) {
            q = q->next;
        }
        q->next = p;
    }

    printf("录入成功!\n");
}

// 删除学生信息
void delete_student() {
    Student *p, *q;
    char id[20];

    if (head == NULL) {
        printf("学生信息为空!\n");
        return;
    }

    printf("请输入要删除的学生学号:");
    scanf("%s", id);

    p = head;
    while (p != NULL) {
        if (strcmp(p->id, id) == 0) {
            if (p == head) {
                head = head->next;
            } else {
                q->next = p->next;
            }
            free(p);
            printf("删除成功!\n");
            return;
        }
        q = p;
        p = p->next;
    }

    printf("学生信息不存在!\n");
}

// 修改学生信息
void modify_student() {
    Student *p;
    char id[20];
    int choice;

    if (head == NULL) {
        printf("学生信息为空!\n");
        return;
    }

    printf("请输入要修改的学生学号:");
    scanf("%s", id);

    p = head;
    while (p != NULL) {
        if (strcmp(p->id, id) == 0) {
            printf("请选择要修改的选项:\n");
            printf("1. 学号\n");
            printf("2. 姓名\n");
            printf("3. 性别\n");
            printf("4. 班级\n");
            printf("5. 成绩\n");
            scanf("%d", &choice);

            switch (choice) {
                case 1:
                    printf("请输入新的学号:");
                    scanf("%s", p->id);
                    break;
                case 2:
                    printf("请输入新的姓名:");
                    scanf("%s", p->name);
                    break;
                case 3:
                    printf("请输入新的性别:");
                    scanf("%s", p->sex);
                    break;
                case 4:
                    printf("请输入新的班级:");
                    scanf("%s", p->cla);
                    break;
                case 5:
                    printf("请输入新的成绩(用逗号分隔):");
                    for (int i = 0; i < 3; i++) {
                        scanf("%d", &(p->score[i]));
                    }
                    p->total_score = p->score[0] + p->score[1] + p->score[2];
                    p->average_score = p->total_score / 3.0;
                    p->max_score = p->score[0];
                    p->min_score = p->score[0];
                    for (int i = 1; i < 3; i++) {
                        if (p->score[i] > p->max_score) {
                            p->max_score = p->score[i];
                        }
                        if (p->score[i] < p->min_score) {
                            p->min_score = p->score[i];
                        }
                    }
                    break;
                default:
                    printf("无效的输入!\n");
                    break;
            }

            printf("修改成功!\n");
            return;
        }
        p = p->next;
    }

    printf("学生信息不存在!\n");
}

// 查询学生信息
void query_student() {
    Student *p;
    char id[20];

    if (head == NULL) {
        printf("学生信息为空!\n");
        return;
    }

    printf("请输入要查询的学生学号:");
    scanf("%s", id);

    p = head;
    while (p != NULL) {
        if (strcmp(p->id, id) == 0) {
            printf("学号:%s\n", p->id);
            printf("姓名:%s\n", p->name);
            printf("性别:%s\n", p->sex);
            printf("班级:%s\n", p->cla);
            printf("各科成绩:%d, %d, %d\n", p->score[0], p->score[1], p->score[2]);
            printf("平均成绩:%.1f\n", p->average_score);
            printf("总成绩:%d\n", p->total_score);
            printf("最高成绩:%d\n", p->max_score);
            printf("最低成绩:%d\n", p->min_score);
            return;
        }
        p = p->next;
    }

    printf("学生信息不存在!\n");
}

// 排序学生信息
void sort_student() {

你与其来提问等gpt回答,还不如去百度。这个XX管理系统都烂大街了,一搜一大堆,修改修改就符合你作业要求了

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

以下是一个简单的学生管理系统的代码示例,实现了信息录入、删除学生信息、修改信息、查询信息、排序等功能,同时包括了学号、姓名、性别、班级、本学期三门以上学科成绩、平均成绩、总成绩、最高成绩、最低成绩等信息的记录和排序功能,并支持文件系统读写。

class Student:
    def __init__(self, student_id, name, gender, class_name, scores):
        self.student_id = student_id
        self.name = name
        self.gender = gender
        self.class_name = class_name
        self.scores = scores

    def calculate_average_score(self):
        return sum(self.scores) / len(self.scores)

    def calculate_total_score(self):
        return sum(self.scores)

    def get_highest_score(self):
        return max(self.scores)

    def get_lowest_score(self):
        return min(self.scores)


class StudentManagementSystem:
    def __init__(self):
        self.students = []

    def add_student(self, student):
        self.students.append(student)

    def delete_student(self, student_id):
        for student in self.students:
            if student.student_id == student_id:
                self.students.remove(student)
                break

    def update_student(self, student_id, new_name, new_gender, new_class_name, new_scores):
        for student in self.students:
            if student.student_id == student_id:
                student.name = new_name
                student.gender = new_gender
                student.class_name = new_class_name
                student.scores = new_scores
                break

    def search_student(self, student_id):
        for student in self.students:
            if student.student_id == student_id:
                return student
        return None

    def sort_students_by_id(self):
        self.students.sort(key=lambda student: student.student_id)

    def sort_students_by_name(self):
        self.students.sort(key=lambda student: student.name)

    def sort_students_by_score(self):
        self.students.sort(key=lambda student: student.calculate_total_score())

    def display_all_students(self):
        for student in self.students:
            print(f"学号: {student.student_id}, 姓名: {student.name}, 性别: {student.gender}, 班级: {student.class_name}, "
                  f"本学期三门以上学科成绩: {student.scores}, 平均成绩: {student.calculate_average_score()}, "
                  f"总成绩: {student.calculate_total_score()}, 最高成绩: {student.get_highest_score()}, "
                  f"最低成绩: {student.get_lowest_score()}")

    def save_to_file(self, file_name):
        with open(file_name, "w") as file:
            for student in self.students:
                file.write(f"{student.student_id},{student.name},{student.gender},{student.class_name},"
                           f"{','.join(str(score) for score in student.scores)}\n")

    def load_from_file(self, file_name):
        self.students = []
        with open(file_name, "r") as file:
            lines = file.readlines()
            for line in lines:
                data = line.strip().split(",")
                student_id = data[0]
                name = data[1]
                gender = data[2]
                class_name = data[3]
                scores = [int(score) for score in data[4:]]
                student = Student(student_id, name, gender, class_name, scores)
                self.students.append(student)


# 使用示例
# 创建学生管理系统对象
sms = StudentManagementSystem()

# 添加学生
student1 = Student("001", "张三", "男", "Class A", [80, 85, 90])
student2 = Student("002", "李四", "女", "Class B", [75, 88, 92])
sms.add_student(student1)
sms.add_student(student2)

# 修改学生信息
sms.update_student("001", "张三", "男", "Class C", [85, 90, 95])

# 删除学生
sms.delete_student("002")

# 查询学生信息
student = sms.search_student("001")
if student:
    print(f"学号为001的学生信息:姓名: {student.name}, 性别: {student.gender}, 班级: {student.class_name}")

# 排序学生信息
sms.sort_students_by_id()
sms.sort_students_by_name()
sms.sort_students_by_score()

# 显示所有学生信息
sms.display_all_students()

# 将学生信息保存到文件
sms.save_to_file("students.txt")

# 从文件加载学生信息
sms.load_from_file("students.txt")


请注意,以上代码仅提供了一个简单的学生管理系统的实现示例,并未包含完整的错误处理、用户交互等功能。在实际应用中,可以根据需求进行适当的扩展和修改。