基于c++面向对象的学生成绩管理系统

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

学生成绩管理系统,每个学生是一个记录,包括学号,姓名,性别,3 门课程成 绩。系统要求实现以下功能:
1、信息录入:录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等);
2、信息查询:输入学号,查询学生各门课程的成绩,并显示。
3、排序:排序:按各门课程的成绩平均分进行排序,并显示。
4、信息删除与修改——输入学号,删除该学生的成绩信息

一、系统需求分析

本系统是针对高校学生的课程成绩而设计,通过本系统高校教师可以很方便地进行成绩管理。主要的问题描述是(功能要求):录入和删除学生成绩信息,输入学号,查询学生各门课程的成绩并按各门课程的成绩平均分进行排序

1)系统主要功能

① 成绩信息录入功能:能根据提示将学生成绩的相关信息进行输入并保存;
② 成绩信息浏览功能:能将已经录入并保存的各科成绩进行浏览;
③ 查询功能:可根据学生学号查询;

2)系统流程图

在这里插入图片描述

3)输入输出要求

系统以菜单方式工作。用户根据每一个功能模块输入相应内容,然后进行相应的操作。如需进行其他操作,可返回主菜单。输出的内容要有一个良好的界面,使用户看清楚明白。

二、总体设计

1.系统功能分析

本系统主要由一个Student类及其10个成员函数组成。课题所要求的功能由各个函数分别得以实现。首先,在Student类内定义了一些public成员变量:用来保存学号,姓名,科目成绩,总分,平均分,名次等信息,如图所示:
在这里插入图片描述
然后定义成员函数如下:

input(Student *head);      //输入学生的信息 
output(Student *head);    //输出学生的信息 
del(Student *head);   //删除学生的信息
add(Student *head);     //添加学生的信息
change(Student *head); //修改学生的信息 
find(Student *head);  //查找学生的信息 
rank(Student *head);//学生成绩排序 
save(Student *head); //保存学生的信息
load(Student *head);//加载学生的信息

然后,在类外,通过作用域运算符将类内声明的成员函数定义,以及进行相应的操作,以实现相应的功能。主要功能包括学生信息输入和输出,添加学生成绩信息,按学号查询成绩、对学生成绩排序等。
最后,在主函数中设置目录显示。用switch瓜分不同的功能选项。系统根据用户输入的符号,调用相应的成员函数,完成功能的实现。

2.模块关系图

在这里插入图片描述

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


三、详细设计

1. 数据库需求分析

该程序主要包含一个Student类和一个main函数。其中Student类有Input(),OutPut(),Del(),Add (),change (),Find(),Rank()等函数来实现各功能。另外有一个保存学生信息的成员函数save,需要将学生的成绩信息保存在文本文件中,save函数使用了c++面向对象设计中的文件的输入和输出等方面的知识,ofstream file;file.open (“example.bin”, ios::out | ios::app | ios::binary);ofstream类是系统提供给用户处理输入和输出的文件流的ofstream类从ostream类公有派生产生。
系统的数据可保存到文件中,亦可以从文件中进行数据的读入操作,其中都使用了c++中的文件和流相关知识。

2. 类层次图

在这里插入图片描述

3. 功能模块的实现

(1)学生成绩信息输入输出与保存的实现

在Student()类中定义input(Student *head)与output(Student *head)函数,分别用于学生成绩信息的输入和显示输出;
在类外进行input(Student *head)和output(Student *head)的具体实现算法:

1)input(Student *head):

在该函数中,首先定义一个N用来表示要写入的学生数目,然后通过for循环进行学生信息的录入,先定义一个student类指针p1并指向头结点,通过for循环根据提示分别输入p1->num,p1->name ,p1->sex,p1->Java,p1->data,p1->Cpp,分别表示学号,姓名,性别,java基础成绩,数据结构成绩,面向对象成绩。对于总分和平均分,通过p1->sum=p1->Java+p1->data+p1->Cpp求得总分,通过p1->average=(p1->sum)/3求得平均分
在这里插入图片描述
输入界面如下图:
(输入“1”,根据提示输入学生信息:)

在这里插入图片描述

2)output(Student *head):

首先,创建一个头指针p1,判断p1是否为空,若非空,则输出p1->num,p1->name ,p1->sex,p1->Java,p1->data,p1->Cpp,p1指向下一个结点:p1=p1->next进行while循环。
在这里插入图片描述
在这里插入图片描述

(2)学生成绩信息的添加和删除

在Student()类中定义del(Student *head);和add(Student *head)函数,分别用于学生成绩信息的添加和删除;

1)del(Student *head):

该函数首先创建了用户需输入的学号stunum,通过指针p1和p2来进行循环检索用户输入的学号和系统保存的信息中是否相等,如果p1->num和用户输入的stunum相等,那么删除p1结点,删除成功后,系统提示删除成功。操作界面图如下:
在这里插入图片描述

2)add(Student *head):

此功能和input功能类似界面设计操作图如下
在这里插入图片描述

下面的就不再赘述

void Student::find(Student *head)//查找学生的信息 
  {
       system("cls");
       Student *p1;
       int i=0;
       int stunum;
       p1=head->next;
	   int r=1;
       cout<<"请输入要查找的学号 "<<endl;
       cin>>stunum;
       while(p1!=NULL)
       {
           if(stunum==p1->num)
           {
               cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"性别"<<"\t"<<"Java基础"
    <<"\t"<<"数据结构"<<"\t"<<"面向对象"<<"\t"<<"平均分"<<"\t"<<"总分"
    <<endl; 
               cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->sex<<"\t"<<p1->Java<<"\t\t"
				   <<p1->data<<"\t\t"<<p1->Cpp<<"\t\t"<<p1->average<<"\t"<<p1->sum<<endl;
			 
               
           }
		   else
		   {
			   r++;
			   	   }
           p1=p1->next;
          }
       
        
   } 
void Student::rank(Student *head)//排序
 {
     Student *p1;
     Student *p2;
     p1=head;
     int n=0;
     int a=0;
     char b[20];
     int i,j;
     while(p1->next)
     {
         p1=p1->next ;
         n++;
     }
     for(i=0;i<n-1;i++)
     {
         p2=head->next;
         p1=p2->next;
         for(j=0;j<n-i-1;j++)
         {
            if(p1->average >p2->average )
             {
                 strcpy(b,p2->name);
                 strcpy(p2->name ,p1->name );
                 strcpy(p1->name,b);
                 
                 strcpy(b,p2->sex);
                 strcpy(p2->sex ,p1->sex);
                 strcpy(p1->sex,b);
         
                 a=p2->num ;
                 p2->num =p1->num ;
                 p1->num =a;
                 
                 a=p2->Java;
                 p2->Java=p1->Java;
                 p1->Java=a;
                 
                 a=p2->data ;
                 p2->data =p1->data ;
                 p1->data =a;
                 
                 a=p2->Cpp ;
                 p2->Cpp =p1->Cpp ;
                 p1->Cpp =a;
                 
                 a=p2->average;    
                 p2->average =p1->average ;
                 p1->average =a;
                 
                 a=p2->sum ;
                 p2->sum =p1->sum ;
                 p1->sum =a;
             }
             p1=p1->next;
             p2=p2->next;
         }
     }
     cout<<"YES!排序成功 "<<endl;
 }
 void Student::save(Student *head) //保存学生的信息 
 {
     Student *p;
     ofstream os;
     os.open("sco.txt");
 os<<"学号"<<"\t"<<"姓名"<<"\t"<<"性别"<<"\t"<<"Java基础"
    <<"\t"<<"数据结构"<<"\t"<<"面向对象"<<"\t"<<"平均分"<<"\t"<<"总分"
    <<endl;
     p=head->next ;
     while(p)
     {
        os<<p->num<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->Java<<"\t"<<p->data
			<<"\t"<<p->Cpp<<"\t"<<p->average<<"\t"<<p->sum<<endl;
         
         p=p->next;
         os<<endl;
     }
     cout<<"YES!保存成功 "<<endl; 
     os.close();
 }

总结

获取整体代码请留言

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
该系统用于管理某高校的本科生、研究生2类人员信息: 本科生信息:学号、姓名、性别、专业、年级、班级、高数成绩、英语成绩、C语言、总成绩、班级排名、年级排名 研究生信息:学号、姓名、性别、专业、年级、班级、课程综合成绩、论文成绩、总成绩、班级排名、年级排名。 1. 专业管理:包括专业基本信息的添加、修改、删除、查询功能。学生必须归属于某个专业。 2. 班级管理:包括班级基本信息的添加、修改、删除、查询功能。学生必须归属于某个班级。 3. 添加功能:分本科生和研究生两类人员,实现下列添加功能。 A.本科生:根据学号来修改任意学生的除学号外的信息。如果高数成绩、英语成绩、c语言成绩都存在,则系统自动计算总成绩。 B.研究生:根据学号来修改任意学生的除学号外的信息。如果课程综合成绩、论文成绩都存在,则系统自动计算总成绩 5. 删除功能:分本科生和研究生两类人员,能够根据学号删除一个学生。 6. 排名功能:分本科生和研究生两类人员,实现下列排名功能。 说明:排名包括班级排名和年级排名,排名规则按体育竞赛规则处理,若出现两个并列第1名,下个名次为第3名,依此类推。 A:班级排名:分本科生和研究生两类学生,计算每个学生总成绩在班级中的名次。 B:年级排名:分本科生和研究生两类学生,计算每个学生总成绩在本专业、本年级中的名次。 7. 查询功能:分本科生和研究生两类人员,实现下列查询功能。 1) 能够按班级显示本班全部学生信息。 2) 能够根据学号或者姓名查询学生信息。 3) 能够在某个班级中查询某门课成绩不及格学生信息。 8. 排序功能:分本科生和研究生两类人员,实现下列排序功能。 1) 所有学生信息按学号从低到高排序并显示。 2) 某个班学生信息按总成绩从高到低排序并显示。 9. 统计功能:分本科生和研究生两类人员,实现下列统计与显示功能。 1) 统计某班级某课程的平均成绩、最高成绩、最低成绩。如果学生该门课没有成绩,统计平均成绩时忽略该生。 2) 统计某班级某课程超过课程平均成绩的学生名单及人数。 3) 统计某班级某课程不及格学生名单及人数。 4) 统计某班级某课程不同等级的学生人数。 有需求分析,系统设计、编码、运行结果等
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值