学生成绩管理系统-合肥工业大学

时间:2024.3.31

“数据结构与算法”

课程设计报告

(一) 需求和规格说明

主要功能是对批量学生的各门成绩进行录入、修改、查询、统计等,要求方便快速。记录学生的学号、姓名、班级、性别、联系电话以及课程和成绩;可以对学生的成绩按学号和姓名进行查寻;输出显示学生成绩;并实现排序、统计及格率和优秀率功能。

编程任务:

(1)界面基本要求:

****************************

学生成绩管理系统

****************************

************************************

**    F1 --帮助                   **

**    F2 --输入数据并存入文件     **

**    F3 --根据学号查询成绩       **

**    F4 --根据姓名查询成绩       **

**    F5 --输出文件内容           **

**    F6 –成绩排序               **

**    F7 --统计及格和优秀人数     **

**    ESC--退出系统              **

************************************

另:提倡用MFC的对话框做简单的输入输出交互界面。

(2)功能要求:

1)帮助:系统使用方法的相关信息。

2)输入数据并存入文件:输入相关信息,并实现文件流的读写操作。

3)根据学号查询成绩:输入学号,查询学生的各门成绩

4)根据姓名查询成绩:输入姓名,查询学生的各门成绩

5)输出文件内容:屏幕输出显示所有学生的成绩

6) 成绩排序:对某门成绩或总分进行快速排序,显示、保存

7)统计及格和优秀人数:统计及格和优秀率。

8)退出

(二) 设计

主要内容如下:

1.  关键类的设计,继承层次关系,代码:(编译器 C-Free 5.0)

首先,创建了一个student类.在student类的共有部分声明程序所需函数;然后就是student类的函数实现部分,其中定义student类的带参数及不带参数构造函数;再是常用函数的调用,并定义系统菜单函数及其界面;最后就是主函数文件。

属性和方法定义

(三) 用户手册

程序运行时,进入主界面

选择”0”,读取帮助信息

                               帮助信息                                   

系统有对学生的学号、姓名、班级、性别、联系电话以及计算机、数学的成绩录入等功能

可以对学生的成绩按学号和姓名进行查寻,并且能对学生成绩实现排序功能。

按照界面说明进行程序的各个子程序调用,最终完成工作后便可退出。

           @2014 Anpengfei. All rights reserved.

(四) 调试及测试

在调试过程中也出现了多处错误,逐一修改,坦然漏洞还是有的。

由于系统每增加一个学生信息,无论他(她)是的情况如何,其学号和其他信息都是自定义的,但是当出现相同学号时,系统能返回上级菜单,让用户重新输入。

对于班级、性别、电话号码都是后输入系统的,没有进行限制,此系统只有保存和调用数据的功能,并不能对数据进行判断,查验是否为合法班级。合法电话号码等等。

但是编程过程中对数学和微机的成绩输入是有限制的,输入数据必须满足0<=输入值<=100,否则将返回上级菜单重新输入。

(五) 运行实例:

以两组数据为例:

学号   姓名  班级  性别    电话  数学成绩   微机成绩  

01     qq     01    b    666666   88          59       

02     ww     02   g    888888   79          80

运行各功能函数 如图所示:

(六)进一步改进

(1)、并未实现文件流的读取,目前程序只能逐条进行输入,不能实现批量读入,以后会做改进。

(2)、没有实现结果的输出保存功能,信息只能在系统中调用,当系统关闭后没有保存想要的数值等功能,以后要加强。

(3)、没有进行MFC的优化设计,程序只是单纯的存在编译器当中,不过利用C-Free 5.0 倒是能生成”函数.exe”文件,能单独拿出来在windows 操作系统下使用。

(4)、对于信息的修改,用删除重新输入的方式来完成,并未构建直接修改函数。

(七)心得体会

由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。在用的时候难免出现这样那样的错误。如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。解决的这个问题的办法是调整。一个系统的菜单和提示信息非常重要。如果没有这些用户根本不知道怎么用这个成绩管理系统。在设计的调试过程中也无法顺利的完成调试工作。有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。

回顾此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识熟悉了,本次课程设计结束了,我们通过这次实践学到了许多知识。学到了设计一个简单的系统。要注意哪些方面。也使我知道自己哪些方面做得还不够。这不仅是程序设计,更是锻炼处理问题的能力,同时编写程序是件细心活,稍不留神就会出错,这就必须要求我对待事情要认真!在编写程序的过程中,错误不断出现,不同的类型(如少写了一个符号,写错了字母,用错了函数等等)层出不穷,这考验我们待事细心,耐心,能不能坚持到底,不能半途而废。

但我总结出了一点点的经验如下:

1、要对系统的功能和要求做出详细的分析,并合理分解任务。

2、把分解出来的子任务,做给一个相对独立的模块。

3、在设计一个模块之前,要简单构想一下总界面的显视情况。

4、针对构想出来的界面进行程序的编写。

(八)对课程设计的建议

1、可以多做一些技术上的指导,多讲讲算法。针对每个人的题目,有一些建设性的指导,比如我的题目中要求MFC设计,可以简单得培训一下,或许效果会更好。

2、课程设计,每个人的题目都不一样,相互之间交流还是很少的,我建议今后可以出一些相对难一点儿题目,分组进行设计,这样在过程中每个人都能得到锻炼,还能培养合作意识和团队精神,这对即将成为程序员的我们是很重要的。

(九)附录¾¾源程序

#include<iostream>

#include<string>

#include<stdio.h>

#include<fstream>

#include<iomanip>

using namespace std;

class student

{

private:

       string number;

       string name;

       string clas;

       char  gender;

       string phone;

       double computer;

       double math;

       double sum;

       student *head;

       student *curnode;

       student *next;

       float jige_num;

       float youshen_num;

       float jige;

       float youxiu;

       float jigelv;

       float youshenglv;

       float jigel;

       float youxiul;

       int count;

public:

       student();//不带参数的构造函数

       //带数据域参数的构造函数,用来动态建立节点---------------------------------

       student(string ,string ,string ,char ,string ,double ,double ,double=0.0);    

       void help();//用于描述帮助信息

       void sum_score();//总分函数

       void cin_app();//用于输入

       void app_score(string,string,string,char,string,double,double);    //动态的建立节点

       void del_score();    //删除全部节点

       void displist(); //输出节点中的全部数据

       void lookup(int ,string );       //查找函数

       void del_score(int ,string );   //删除函数 

       void compositor(int);     //排序函数

    void tongji();//统计及格率和优秀率

};

/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////student类的实现

void err_char();//输入错误字符检测函数

void score_err();//成绩范围检测函数,当输入成绩不在0到100之间时提示重新输入

student::student():next(NULL)//不带参数的构造函数

{

       head=curnode=this;

}

//带参数的构造函数

student::student(string Number,string Name,string Clas,char Gender,string Phone,double Computer,double Math,double Sum):next(NULL)

{

       number=Number;

       name=Name;

       clas=Clas;

       gender=Gender;

       phone=Phone;

       computer=Computer;

       math=Math;

       sum=Sum;

      

}

//////////////////////////////////统计及格率和优秀率 ??????????????????????????

void student::tongji(){

int count;

 int jige_num=0,youshen_num=0,jige=0,youxiu=0;//分别算计算机和数学成绩的率人数和率

 float jigelv,youshenlv,jigel,youxiul;//jigelv stand for computer;jigel stand for math

 int m=count;

  for(int i=0;i<=m;i++)

 {

   if(computer>=60){jige_num=jige_num+1;}

   if(computer>=85){youshen_num=youshen_num+1;}

   if(math>=60){jige=jige+1;}

   if(math>=85){youxiu=youxiu+1;}

  }

  jigelv=jige_num/m;

  youshenlv=youshen_num/m;

  jigel=jige/m;

  youxiul=youxiu/m;

   cout<<"计算机及格率:  "<<jigelv*100.0<<"%    计算机优秀率:  "<<youshenlv*100.0<<"%"<<endl;

   cout<<"数学及格率:  "<<jigel*100.0<<"%    数学优胜率:  "<<youxiu*100.0<<"%"<<endl;

  jige_num=0;

  youshen_num=0;

  jigelv=0;

  youshenlv=0;

 }

////////////////////////////////帮助信息//////////////////////////

void student::help(){

       cout<<"                                  帮助信息                                    "<<endl;

       cout<<"系统有对学生的学号、姓名、班级、性别、联系电话以及计算机、数学的成绩录入等功能"<<endl;

       cout<<"可以对学生的成绩按学号和姓名进行查寻,并且能对学生成绩实现排序功能。"<<endl;

       cout<<"                     @2014 Anpengfei. All rights reserved."<<endl;

       cout<<" ";system("pause");

}

///////////////////////////////////////////////////////计算总成绩

void student::sum_score()

{sum=computer+math;}

void student::app_score(string Number,string Name,string Clas,char Gender,string Phone,double Computer,double Math)//动态建立节点

{

       curnode->next=new student(Number,Name,Clas,Gender,Phone,Computer,Math);

       curnode=curnode->next;

}

/////////////////////////////////////////////////////删除表中的全部数据

void student::del_score()

{

       student *p;

       curnode=head->next;

       while(curnode!=NULL)

       {

              p=curnode->next;

              delete curnode;

              curnode=p;

       }

       head->next=NULL;

       curnode=head;

cout<<"现已是一个空表 "<<endl;

       cout<<" ";system("pause");

}

///////////////////////////////////////////////////输出表中的全部数据

void student::displist()

{

       if(head->next==NULL)

       {

              cout<<"!这是一个空表!"<<endl;

              cout<<" ";system("pause");

              return;

       }

else{

       student *pw=curnode;

       curnode=head->next;    

       cout<<"学号     姓名      班级    性别      电话               计算机   数学   总分 "<<endl;

       while(curnode!=NULL)

       {

              cout<<curnode->number;

              cout<<setw(12)<<curnode->name;

              cout<<setw(8)<<curnode->clas;

              cout<<setw(8)<<curnode->gender;

              cout<<setw(14)<<curnode->phone;

              cout<<setw(15)<<curnode->computer;

              cout<<setw(8)<<curnode->math;

              curnode->sum_score();

              cout<<setw(8)<<curnode->sum;

              if(curnode->next!=NULL)

                     cout<<endl;

              else

                     cout<<endl;

              curnode=curnode->next;

       }

       curnode=pw;

       cout<<"!表中内容输出完毕!"<<endl;

       cout<<endl;

       cout<<" ";system("pause");

}

}

//////////////////////////////////////////////////////////////输入数据

void student::cin_app()

{

       student *p=curnode;

       bool b=0;

       string Number;

       string Name;

       string Clas;

    char  Gender;

       string Phone;

       double Computer;

       double Math;

       int count=0;   

       while(1)

       {

              cout<<" 学  号:";

              cin>>Number;

              curnode=head->next;

              while(curnode!=NULL)

              {

                     b=(Number==curnode->number);

                     curnode=curnode->next;

              }

              if(!b)

                     break;

              else

              {

                     cout<<"出现了相同的学号,请重新输入"<<endl;

              }

       }

       curnode=p;

       cout<<" 姓  名:";

       cin>>Name;

              count++;

        curnode=p;

              cout<<"班级(数字):";

              cin>>Clas;

             

        curnode=p;    

              cout<<"性别(b for boy,g for girl):";

              cin>>Gender;

             

        curnode=p;

              cout<<"电话:";

              cin>>Phone;

       while(1)

       {

              cout<<" 计算机:";

              cin>>Computer;

              while(cin.fail())

              {

                     err_char();

                     cout<<" 计算机:";

                     cin>>Computer;

              }

              if(Computer>=0&&Computer<=100)

                     break;

              else

                     score_err();

       }

       while(1)

       {

              cout<<" 数  学:";

              cin>>Math;

              while(cin.fail())

              {

                     err_char();

                     cout<<" 数  学:";

                     cin>>Math;

              }

              if(Math>=0&&Math<=100)

                     break;

              else

                     score_err();}

      

       this->app_score(Number,Name,Clas,Gender,Phone,Computer,Math);

       cout<<"记录已添加!"<<endl;

       cout<<" ";system("pause");

}

/////////////////////////////////////////////////////////查找函数的实现

void student::lookup(int n,string str)

{

       student *p=curnode;

       bool b;

       //定义i=1,当找到数据时把i置为0.用于输出没有找到数据

       int i=1;

       if(!(curnode=head->next))

       {

              cout<<"!这是一个空表!"<<endl;

              curnode=p;

              cout<<" ";system("pause");

              return;

       }

       cout<<"  学号   姓名   班级   性别    电话    计算机     数学   总分  "<<endl;

       while(curnode!=NULL)

       {

       switch(n)

              {

                     case 1: b=curnode->number==str;break;

                     case 2: b=curnode->name==str;break;

                     default: return;

              }

              if(b)

       {

              i=0;

              cout<<curnode->number;

              cout<<setw(8)<<curnode->name;

              cout<<setw(8)<<curnode->clas;

              cout<<setw(8)<<curnode->gender;

              cout<<setw(14)<<curnode->phone;

              cout<<setw(15)<<curnode->computer;

              cout<<setw(8)<<curnode->math;

              curnode->sum_score();

              cout<<setw(8)<<curnode->sum;

              cout<<endl;

}         curnode=curnode->next;

       }

       //当i=1是代表没有找到数据

       if(i)

       {

              cout<<endl;

       cout<<"没有匹配的数据   "<<endl;

       }

       curnode=p;

       cout<<" 以上是本次查找的结果!"<<endl;

       cout<<" ";system("pause");

}

/////////////////////////////////////////////////////////删除函数的实现

void student::del_score(int n,string str)

{

       student *p=curnode,*pw=head;

       bool b;

       //定义i=1,当找到数据时把i置为0.用于输出没有找到数据

       int i=1;

       if(!(curnode=head->next))

       {

              cout<<"!这是一个空表!"<<endl;

              curnode=p;

              cout<<" ";system("pause");

              return;

       }

       while(curnode!=NULL)

       {

              switch(n)

              {

                     case 1: b=curnode->number==str;break;

                     case 2: b=curnode->name==str;break;

                     default: return;

              }

              if(b)

              {

                     i=0;

                     pw->next=curnode->next;

                     delete curnode;

                     curnode=pw->next;

              }

              else

              {

              pw=curnode;

              curnode=curnode->next;

              }

       }

       //当i=1是代表没有找到数据

       if(i)

       {

              cout<<"没有匹配的数据"<<endl;

       }

       else

       {

              cout<<" 数据删除成功 "<<endl;

       }

       curnode=head;

       while(curnode->next)

       {

              curnode=curnode->next;

       }

       cout<<" ";system("pause");

}

/////////////////////////////////////////////////////////////排序函数的实现

void student::compositor(int n)

{

       if(head->next==NULL)

       {

             

              cout<<"这是一个空表不能排序!"<<endl;

              cout<<" ";system("pause");

              return;

       }

       if(head->next->next==NULL)

       {    

              cout<<"只有一条记录不用排序!"<<endl;

              cout<<" ";system("pause");

              return;

       }

       student *s,*p,*q,*r;

    r=head;

    s=head->next;

    q=s;

    p=q->next;

    while(s!=NULL)

    {

              while(p!=NULL)

        {

                     switch(n)

                     {

                            case 1:

                                   {

                                  

                                  

                                                 while(s->computer<p->computer)

                                                 {

                                                        q->next=p->next;

                                                        r->next=p;

                                                        p->next=s;

                                                        s=p;

                                                        p=q->next;

                                                        if(p==NULL)

                                                               break;

                                                 }

                                         

                                          break;

                                   }

                            case 2:

                                   {

                                         

                                                 while(s->sum<p->sum)

                                                 {

                                                        q->next=p->next;

                                                        r->next=p;

                                                        p->next=s;

                                                        s=p;

                                                        p=q->next;

                                                        if(p==NULL)

                                                               break;

                                                 }

                                         

                                          break;

                                   }

                            case 3:

                                   {

                                                 while(s->math<p->math)

                                                 {

                                                        q->next=p->next;

                                                        r->next=p;

                                                        p->next=s;

                                                        s=p;

                                                        p=q->next;

                                                        if(p==NULL)

                                                               break;

                                                 }

                                         

                                         

                                          break;

                                   }

                            default: return;

                     } 

            if(p==NULL)

            {

                            break;

            }

            q=p;

            p=p->next;

        }

        r=s;

        s=s->next;

        q=s;

        p=q->next;

        if(p==NULL)

        {

        break;

        }

    }

       cout<<"成功完成排序操作,即将输出排序结果!"<<endl;

       cout<<" ";system("pause");

       displist();

}

   

/////////////////////////////////////////////////////////////////////////////////////////  

void menu()//系统菜单函数的定义             

{ cout<<"**********************************************************"<<endl;

  cout<<"*************  合  肥   工   业   大   学 ****************"<<endl;

  cout<<"*************   学 生 成 绩 管 理 系  统 *****************"<<endl;

  cout<<"**********************************************************"<<endl;

  cout<<"************    0 --帮助                    **************"<<endl;

  cout<<"************    1 --输入数据并存入文件      **************"<<endl;

  cout<<"************    2 --根据名字或学号查询成绩  **************"<<endl;

  cout<<"************    3 --删除信息                **************"<<endl;

  cout<<"************    4 --显示文件内容            **************"<<endl;

  cout<<"************    5 –成绩排序(降序)          **************"<<endl;

  cout<<"************    6 --统计及格和优秀人数      **************"<<endl;

  cout<<"************    其他任意键 --退出系统       **************"<<endl;

  cout<<"**********************************************************"<<endl;

 cout<<"请选择:";

}

//查找函数的调用

void fun_lookup(student &a)

{

       int n;

       string str;

       cout<<"1、按学号 2、按姓名"<<endl;

       cout<<" 你的选择是:";

       cin>>n;

       while(cin.fail())

       {

              err_char();

              cout<<" 你的选择是:";

              cin>>n;

       }

       if(n!=1&&n!=2)

              n=1;

       cout<<" 请输入查找关键字:";

       cin>>str;

       a.lookup(n,str);

}

//删除函数的调用

void fun_del(student &a)

{

       int n;

       string str;

     cout<<"1、按学号 2、按姓名"<<endl;

       cout<<" 你的选择是:";

       cin>>n;

       while(cin.fail())

       {

              err_char();

              cout<<" 你的选择是:";

              cin>>n;

       }

       if(n!=1&&n!=2)

              n=1;

       cout<<" 请输入删除关键字:";

       cin>>str;

       a.del_score(n,str);

}

//排序函数的调用

void fun_compositor(student &a)

{

       int n,m;

       cout<<"  1 按计算机分数排序   2 按总分排序  "<<endl;

       cout<<"  3 按数学分数  排序                 "<<endl;

       cout<<" 你的选择是:";

       cin>>n;

       while(cin.fail())

       {

              err_char();

              cout<<" 你的选择是:";

              cin>>n;

       }

       cout<<endl;

       //输出排序后的结果

       a.compositor(n);

}

//成绩范围检测函数

void score_err()

{

       cout<<"---- 输入的成绩应该在0--100之间----"<<endl;

       cout<<"       -----请返回重新输入----"<<endl;

}

//退出程序函数

void fun_exit()

{

       cout<<"---------程序即将退出----------"<<endl;

       cout<<" ";system("pause");

       exit(1);

}

//输入错误字符检测函数

void err_char()

{

       cout<<"---输入了非法字符,请重新输入---"<<endl;

       cin.clear ();

       cin.sync ();

}

//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////主函数文件

void fun_lookup(student &a);//查找函数的调用定义

void fun_del(student &a);//删除函数的调用定义

void fun_compositor(student &a);//排序函数的调用定义

void fun_exit();//退出程序函数的定义

int main()

{

       student a;

       while(1)

       {

              int i;

              menu();

              cin>>i;

              if(cin.fail())           //输入非法字符时退出

                     fun_exit();

       switch (i)

              {

                     case 0: a.help() ;break;                 //帮助

                     case 1: a.cin_app();break;                 //增加记录

                     case 2: fun_lookup(a);break;        //查找记录

                     case 3: fun_del(a);break;                  //删除记录

                     case 4: a.displist();break;                     //查看记录

                     case 5: fun_compositor(a);break;   //排序           

                     case 6: a.tongji();break;         //?? 统计及格和优秀人率

                     default: fun_exit();

                     return 0;}

              }

}

                    

更多相关推荐:
学生成绩管理系统测试总结报告

软件测试课程设计报告题目学生成绩管理系统院系软件学院专业Java程序设计班级软件一班项目组长朱佳培项目成员朱佳培崔耸李婷婷宋依静李鹏鹤提交日期20xx年6月9日星期四1学生成绩管理系统测试报告正文2学生成绩管理...

学生成绩管理系统测试总结报告

软件测试课程设计报告题目学生成绩管理系统院系计算机科学学院班级软件一班成员田欣1学生成绩管理系统测试报告正文1测试概述11测试目的对学生成绩管理系统项目中所有的软件测试活动中包括测试进度资源问题风险以及测试组和...

1 学生成绩管理系统概述

管理信息系统课程设计报告实践题目学生成绩管理系统专业班级090501名字学号指导教师成绩学生成绩管理系统一学生成绩管理系统概述学生成绩管理系统是整个学校工作系统的重要组成部分其内容对于学校管理者和学生至关重要所...

学生信息管理系统总结

个人总结--------学生信息管理系统小结经过大家的努力,学生管理系统终于做完了,经过这次实习系统设计,自己总结了这个学生信息管理系统的一些问题,不过收获还是颇为丰富的,再有理论知识上结合实践,使我学到了更多…

学生成绩管理系统实训报告

《软件工程》实训报告专业:软件技术班级:软件081姓名:**学号:***指导老师:**实训时间:20XX-20XX年第二学期第20周实训地点:学院信息中心目录一、引言1二、项目可行性分析2⑴引言⑵可行性研究的前…

C语言课程设计学生成绩管理系统个人总结

C语言课程设计——学生成绩管理系统个人心得体会(徐州工程学院14计嵌1班07组张凯)这一周以来的课程设计,不仅让我明白了C语言的确是一门很有用的,但是又是不容易的一门课程。起初刚开始做课程设计时,以为这个课程设…

学生信息管理系统项目开发总结报告

项目开发总结报告1引言11编写目的为了总结报告在工作过程中产生的问题获得的经验并且总结报告设计和制作者过程中的逻辑和想法以便在以后的生产和学习过程中得到进一步提高12背景说明a本项目名称学生信息管理系统b此软件...

学生成绩管理系统

目录第一章系统简介211内容介绍2第二章数据库设计221数据表说明2第三章系统功能设计331模块流程图5第四章核心代码541登录模块代码742主界面模块代码743成绩查询模块代码944成绩录入代码1245成绩修...

学生成绩管理系统实验报告

嘉应学院计算机学院课程名称开课学期班级指导老师项目题目学生姓名学号提交时间实验报告C程序设计课程设计冯斯苑一实验目的1进一步巩固所学程序设计语言主要是CC的基本概念和理论2熟练掌握结构化程序设计和面向对象程序设...

学生成绩管理系统

课程设计报告课程设计名称综合程序课程设计课程设计题目学生成绩管理系统学院名称信息工程学院专业电子信息工程班级学号姓名评分教师2014年3月21日1目录课程设计任务书3摘要4第一章课程设计的需求分析5一实验目的及...

学生成绩管理系统出现问题

出现的错误总结1在选择登陆的时候出现权限失效解决办法在Action中加上学生登录publicStringsdengListlistthisgetIdengServicesdengxuehaopassMapses...

学生成绩管理系统

学生成绩管理系统(学生成绩管理系统说明书)摘要成绩管理是一个教育单位不可缺少的重要组成部分,它的内容对于学校的教务管理人员来说至关重要,随着计算机技术的飞速发展,利用计算机实现管理势在必行。本论文介绍了学生成绩…

学生成绩管理系统总结(31篇)