某系学生成绩管理系统计算器程序论文.docx

上传人:b****5 文档编号:11895673 上传时间:2023-04-08 格式:DOCX 页数:40 大小:212.50KB
下载 相关 举报
某系学生成绩管理系统计算器程序论文.docx_第1页
第1页 / 共40页
某系学生成绩管理系统计算器程序论文.docx_第2页
第2页 / 共40页
某系学生成绩管理系统计算器程序论文.docx_第3页
第3页 / 共40页
某系学生成绩管理系统计算器程序论文.docx_第4页
第4页 / 共40页
某系学生成绩管理系统计算器程序论文.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

某系学生成绩管理系统计算器程序论文.docx

《某系学生成绩管理系统计算器程序论文.docx》由会员分享,可在线阅读,更多相关《某系学生成绩管理系统计算器程序论文.docx(40页珍藏版)》请在冰豆网上搜索。

某系学生成绩管理系统计算器程序论文.docx

某系学生成绩管理系统计算器程序论文

目录

PARTI

1需求分析1

2算法基本原理1

3类设计2

4详细设计3

4.1类的接口设计4

4.2类的实现6

4.3主函数设计11

5运行结果与分析13

5.1程序运行结果13

5.2运行结果分析15

 

PARTII

1类设计…………………………………………………………………………16

2详细设计……………………………………………………………………..23

3运行结果………………………………………………………………………31

参考文献31

 

PARTI

1需求分析

(1)实现年级管理(4个年级)、班级管理及学生信息管理,可以实现班级的查询、添加、删除、修改,学生成绩的查询、添加、删除、修改等。

程序使用类的包含方法实现。

1)一个班最多30名学生,4门课程;

2)班级信息、学生成绩存放在数据文件中;

3)内存中数据组织建议采用STL容器。

设计班级类、学生类等,建立文件、输出文件内容、计算每个学生总分并进行总分排序、查找各科最低分和最高分。

(2)设计一个Student类,包含学生的基本信息:

姓名、学号、四门课程(大外、高数、模电、C++)的分数和总分数;StuList类用于实现学生成绩的查找、添加、删除、修改;Class类包含班级带的基本信息:

年级、班级名称和所有学生;ClList类用于实现班级的查询、添加、删除、修改。

(3)用list链表容器存放多个学生的信息和多个班级的信息。

使用容器的sort()函数实现学生的总分排序。

Max()和Min()分别实现查找各科的最高分和最低分。

2算法基本原理

一个年级包含多个班级,用list链表容器存放一个年级的所有班级,

用Class类存放班级的所有学生,用ClList类的成员函数对班级进行查找、添加、删除、修改。

(2)一个班级有很多学生(不超过30个),用Student类存放学生信息,StuList类带的成员函数实现学生成绩的查找、添加、删除、修改,总分的排序,求各科的最高分和最低分。

(3)学会STL标准模板库里德容器、迭代器、和算法的使用方法。

本程序使用List链表容器存放学生信息并进行相应的操作,如用push_back()函数进行添加操作、用sort()函数进行排序,用erase()函数进行删除操作等。

(4)用文件FILE读取和输出学生信息和班级信息。

3类设计

从上面的算法分析可以看到,本设计面临的计算问题的关键是学生信息和班级信息的处理。

可以定义一个学生类Student显示学生的基本信息,然后定义一个学生链表类StuList实现学生成绩的相关操作;又定义一个班级类Class显示班级的基本信息,最后定义一个班级链表类ClList实现班级的一些相应操作等。

从问题的需要来看,需要调用STL标准模板库里德一些函数如push_back()函数进行添加操作、用sort()函数进行排序,用erase()函数进行删除操作等。

学生类和班级类还有学生链表类和班级链表类之间的相互关系如图1所示。

 

 

StuList

-listthestu

+Getthestu():

list

+Add(Studentstu):

void

+Seek(char*num):

void

+Show():

void

+SorttoFile(char*filename):

void

+Max():

void

+Min():

void

学生类和学生链表类的UML图的表示

Class

-clgrade[10]:

char

-clclass[10]:

char

-cl:

list

+Class()

+Class(char*grade,char*cclass,listl)

+*Getclclass():

char

+CPrint():

void

 

ClList

-thecl:

list

+CAdd(Classcl):

void

+CSeek(char*cclass):

void

+CModify(char*cclass,Class&cl):

void

+CDelete(char*cclass):

void

+CShow():

void

班级类和班级链表类的UML图形表示

学生链表类需要访问学生类的私有成员,但是私有成员是不允许外部函数访问的,故在学生类当中定义了返回私有成员(stunum和stuscore)的成员函数,同理在班级类中也定义了返回(clclass)的成员函数。

4详细设计

整个程序一个文档,kese1.h文件中包括学生类Student、学生链表类StuList、班级类Class、班级链表类ClList的声明,kese1.Cpp文件中包含;这四个类类的成员函数实现文件;main.cpp文件包括程序的主函数,主函数中定义了一个类StuList的对象,通过这个对象存放所有的学生并进行相关操作;比定义了ClList类的对象,通过这个对象对班级进行相关的操作。

4.1类的接口设计

//kese1.h文件,实现类的声明

#include

#include

#include

#include

#include

#include

usingnamespacestd;

//student.h学生类

classStudent;

classStuList;

ostream&operator<<(ostream&os,constStudent&stu);//输出流文件声明

classStudent

{

private:

charstuname[20];//学生姓名

charstunum[12];//学生学号

floatstuscore[4];//四门课程的成绩

floattotal;//总分数

public:

Student()//构造函数

{}

Student(char*name,char*num,floats1,floats2,floats3,floats4);//构造函数

voidprint(intn=-1);//输出函数

char*Getnum()//输出学号

{

returnstunum;

}

float*Getstuscore()//输出分数

{

returnstuscore;

}

friendostream&operator<<(ostream&os,constStudent&stu);//读出文件

booloperator<(constStudent&stu)//重载<运算符

{

returntotal>stu.total;//

}

friendclassStuList;//友元类

};

//StuList.h学生信息的相关处理

classStuList

{

private:

listthestu;//链表对象

public:

listGetthestu()//输出链表

{

returnthestu;

}

voidAdd(Studentstu);//添加学生信息

voidSeek(char*num);//查询学生信息,按学号查询,返回记录号,-1表示没有找到

voidShow();//遍历列表显示

voidSorttoFile(char*filename);//按学生总成绩从高到低排序并写到文件中

voidMax();//各科的最高分

voidMin();//各科的最低分

};

//Class.h班级类

classClass

{

private:

charclgrade[10];//一共四个年级,其中的一个年级

charclclass[10];//班级名称

listcl;//链表对象,一个班最多30个学生

public:

Class(){}//构造函数

Class(char*grade,char*cclass,listl)//构造函数

{

strncpy(clgrade,grade,10);

strncpy(clclass,cclass,10);

cl=l;

}

char*Getclclass()//输出学号

{

returnclclass;

}

voidCPrint();//输出学生信息

friendostream&operator<<(ostream&os,constClass&cl);//读出文件

};

//ClList.h班级链表类

classClList

{

private:

listthecl;

public:

voidCAdd(Classcl);//添加班级信息

voidCSeek(char*cclass);//查询班级信息,按班级名称查询

voidCModify(char*cclass,Class&cl);//修改班级信息

voidCDelete(char*cclass);//删除班级信息

voidCShow();//遍历列表显示

};

以上四个类已经能够显示学生信息,比不过可通过一些成员函数实现学生和班级的一些添加、修改、删除、查找等操作。

4.2类的实现

#include"stdafx.h"

#include

#include

#include

#include

#include

#include

#include

usingnamespacestd;

//Student.cpp

Student:

:

Student(char*name,char*num,floats1,floats2,floats3,floats4)//构造函数

{

strncpy(stuname,name,20);

strncpy(stunum,num,12);

stuscore[0]=s1;

stuscore[1]=s2;

stuscore[2]=s3;

stuscore[3]=s4;

total=stuscore[0]+stuscore[1]+stuscore[2]+stuscore[3];

}

voidStudent:

:

print(intn)//输出函数

{

staticboolstuHead=false;

if(!

stuHead)

{

if(n>0)

cout<

cout<

<

<

<

stuHead=true;

}

if(n>0)

cout<

cout<

<

<

<

}

ostream&operator<<(ostream&os,constStudent&stu)//读出文件

{

os.write(stu.stuname,20);

os.write(stu.stunum,12);

os.write((char*)stu.stuscore,sizeof(stu.stuscore));

os.write((char*)&stu.total,sizeof(float));

returnos;

}

//StuList.cpp

voidStuList:

:

Add(Studentstu)//添加学生信息的函数

{

thestu.push_back(stu);

}

voidStuList:

:

Seek(char*num)//按学号查找

{

intsign=-1,i=0;

list:

:

iteratorit=thestu.begin();//定义迭代器指针

Studentstu;

while(it!

=thestu.end())

{

stu=*it;

if(strcmp(stu.Getnum(),num)==0)

{

sign=i;

break;

}

it++;

i++;

}

if(sign>=0)

{

cout<<"找到的结果为"<

stu.print(sign+1);

}

else

cout<<"没有找到!

"<

 

}

voidStuList:

:

Show()//遍历列表显示

{

list:

:

iteratorit=thestu.begin();//定义迭代器指针

inti=0;

while(it!

=thestu.end())

{

it->print(++i);

it++;

}

}

voidStuList:

:

SorttoFile(char*filename)//按学生总成绩进行排序

{

thestu.sort();

Show();

//排序后的内容保存到文件中

ofstreamout(filename);

copy(thestu.begin(),thestu.end(),ostream_iterator(out));

}

voidStuList:

:

Max()//各科的最高分

{

floatmax[4]={0,0,0,0};

for(inti=0;i<4;i++)

{

list:

:

iteratorit=thestu.begin();//定义迭代器指针

Studentstu;

while(it!

=thestu.end())

{

stu=*it;

if(max[i]

max[i]=stu.stuscore[i];

it++;

}

}

cout<<"各科的最高分:

"<<"大外"<

}

voidStuList:

:

Min()//各科的最低分

{

floatmin[4]={100,100,100,100};

for(inti=0;i<4;i++)

{

list:

:

iteratorit=thestu.begin();//定义迭代器指针

Studentstu;

while(it!

=thestu.end())

{

stu=*it;

if(min[i]>stu.stuscore[i])

min[i]=stu.stuscore[i];

it++;

}

}

cout<<"各科的最低分:

"<<"大外"<

}

//Class.cpp

voidClass:

:

CPrint()//输出班级信息

{

cout<

cout<

cout<

cout<

<

<

<

list:

:

iteratorit=cl.begin();//定义迭代器指针

inti=0;

while(it!

=cl.end())

{

it->print(++i);

it++;

}

}

//ClList.cpp

voidClList:

:

CAdd(Classcl)//增加班级信息

{

thecl.push_back(cl);

}

voidClList:

:

CSeek(char*cclass)//查询班级信息

{

intsign=-1;

list:

:

iteratorit=thecl.begin();//定义迭代器指针

Classcl;

while(it!

=thecl.end())

{

cl=*it;

if(strcmp(cl.Getclclass(),cclass)==0)

{

sign=1;

break;

}

it++;

}

if(sign>0)

{

cout<<"查找的结果为"<

cl.CPrint();

}

else

cout<<"没有查找到!

"<

}

voidClList:

:

CModify(char*cclass,Class&cl)//修改班级信息

{

list:

:

iteratorit=thecl.begin();//定义迭代器指针

while(it!

=thecl.end())

{

if(strcmp((*it).Getclclass(),cclass)==0)

{

*it=cl;

//sign=1;

break;

}

it++;

}

cout<<"修改的结果为"<

cl.CPrint();

}

voidClList:

:

CDelete(char*cclass)//班级的删除

{

list:

:

iteratorit=thecl.begin();//定义迭代器指针

while(it!

=thecl.end())

{

if(strcmp((*it).Getclclass(),cclass)==0)

{

thecl.erase(it);

break;

}

it++;

}

cout<<"删除成功"<

}

voidClList:

:

CShow()//年级中所有班级的显示

{

list:

:

iteratorit=thecl.begin();//定义迭代器指针

Classcl;

while(it!

=thecl.end())

{

cl=*it;

cl.CPrint();

it++;

}

}

4.3主函数设计

//kese1.cpp

intmain()//主函数

{

StuListthestu;//存放所有学生

Studentstu1("ma","0803070201",88,90,69,52.6f);

Studentstu2("li","0803070202",52,96,74,56);

Studentstu3("wang","0803070101",85,25,95,79);

Studentstu4("yang","0803070102",82,78,84,95);

Studentstu5("ding","0803070301",76,85.6f,94,83);

thestu.Add(stu1);

thestu.Add(stu2);

thestu.Add(stu3);

thestu.Add(stu4);

thestu.Add(stu5);

thestu.Show();

thestu.Seek("0803070201");//查找学号为0803070201的同学

cout<<"排序的结果"<

thestu.SorttoFile("student.dat");//按总分排序

thestu.Max();

thestu.Min();

StuLists1;

StuLists2;

StuLists3;

s1.Add(stu3);

s1.Add(stu4);

s3.Add(stu5);

s2.Add(stu1);

s2.Add(stu2);

ClListthecl;

Classcl1("二年级","08030701",s1.Getthestu());

Classcl2("二年级","08030702",s2.Getthestu());

Classcl3("二年级","08030703",s3.Getthestu());

thecl.CAdd(cl1);

thecl.CAdd(cl2);

thecl.CShow();

thecl.CSeek("08030702");//查找班级为08030702的班级

thecl.CAdd(cl3);

cout<<"将08030702修改为08030703"<

thecl.CModify("08030702",cl3);//修改班级

cout<<"删除08030701班"<

thecl.CDelete("08030701");//删除08030701班

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 自我管理与提升

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1