C++语言 学生成绩管理系统.docx

上传人:b****1 文档编号:2866466 上传时间:2023-05-04 格式:DOCX 页数:55 大小:483.95KB
下载 相关 举报
C++语言 学生成绩管理系统.docx_第1页
第1页 / 共55页
C++语言 学生成绩管理系统.docx_第2页
第2页 / 共55页
C++语言 学生成绩管理系统.docx_第3页
第3页 / 共55页
C++语言 学生成绩管理系统.docx_第4页
第4页 / 共55页
C++语言 学生成绩管理系统.docx_第5页
第5页 / 共55页
C++语言 学生成绩管理系统.docx_第6页
第6页 / 共55页
C++语言 学生成绩管理系统.docx_第7页
第7页 / 共55页
C++语言 学生成绩管理系统.docx_第8页
第8页 / 共55页
C++语言 学生成绩管理系统.docx_第9页
第9页 / 共55页
C++语言 学生成绩管理系统.docx_第10页
第10页 / 共55页
C++语言 学生成绩管理系统.docx_第11页
第11页 / 共55页
C++语言 学生成绩管理系统.docx_第12页
第12页 / 共55页
C++语言 学生成绩管理系统.docx_第13页
第13页 / 共55页
C++语言 学生成绩管理系统.docx_第14页
第14页 / 共55页
C++语言 学生成绩管理系统.docx_第15页
第15页 / 共55页
C++语言 学生成绩管理系统.docx_第16页
第16页 / 共55页
C++语言 学生成绩管理系统.docx_第17页
第17页 / 共55页
C++语言 学生成绩管理系统.docx_第18页
第18页 / 共55页
C++语言 学生成绩管理系统.docx_第19页
第19页 / 共55页
C++语言 学生成绩管理系统.docx_第20页
第20页 / 共55页
亲,该文档总共55页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C++语言 学生成绩管理系统.docx

《C++语言 学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C++语言 学生成绩管理系统.docx(55页珍藏版)》请在冰点文库上搜索。

C++语言 学生成绩管理系统.docx

C++语言学生成绩管理系统

 

《高级语言课程设计》

实验项目:

学生成绩管理系统

学号:

姓名:

专业:

班级:

指导教师:

成绩:

 

年月日

3.1记录录入模块的实现……………………………………………………...........11

3.2信息管理模块的实现…………………………………………………………...16

3.3成绩管理模块的实现…………………………………………………………...23

3.4保存退出模块的实现…………………………………………………………...33

1、系统分析

本程要求学生完成学生成绩管理系统的设计和实现,该系统包括学生记录录入、学生信息管理和学生成绩管理三大功能模块。

学生记录录入功能包括从键盘录入,和从文件录入两种方式。

学生信息管理功能分为学生信息显示、学生信息添加(依然可以有两种录入方式)、学生信息删除、学生信息修改四个子模块。

学生信息显示模块显示所有学生信息;学生信息添加模块向学生文件中添加学生信息;学生信息删除模块从文件中删除指定学号的学生信息;学生信息修改模块修改指定学号的学生信息。

学生成绩管理模块分为学生成绩排序和学生成绩查询两个子模块。

学生成绩排序模块需要分别实现:

按学号从小到大排序;按总成绩从大到小排序两种不同的排序方式。

学生成绩查询模块需要分别实现:

查询给定学号的学生信息;查询给定姓名的学生信息;查询给定班级的学生信息;查询60分以下学生的信息;查询平均分80分以上的学生信息等不同的查询方式。

系统功能模块图如下所示。

2、系统设计

2.1数据结构设计

学生成绩管理系统中需要处理的数据对象有,学生、班级、课程等。

要求设计并实现学生类Student、Person类、课程成绩类Score、班级类Class。

将类定义放在头文件中,将类中成员函数的定义放在源文件中。

1、定义课程成绩类Score

数据成员(私有)

课程名name:

长度为40的字符数组;

学分credit:

整型;

成绩score:

浮点型;

成员函数(公有):

无参构造函数,将学分和成绩初始化为0;

voidsetInfo(char*sname,intcre,floats);//给各数据成员赋值

voidprint();//输出课程成绩信息

为了方便学生类Student访问该类的成员,将学生类Student声明为课程成绩类Score的友类。

2、定义Person类

数据成员(保护):

姓名name:

长度为20的字符数组;

年龄age:

整型;

性别sex:

字符型;

成员函数(公有):

voidsetInfo(char*pName,intpAge,charpSex);//给各数据成员赋值

voidprint();//输出信息

3、定义学生类型Student

学生类继承Person类;

数据成员(私有):

学号stuId:

长度为10的字符数组;

班级名className:

长度为10的字符数组;

课程成绩score:

向量或者数组(一个学生有多个课程成绩

总成绩total:

浮点型;

平均成绩ave:

浮点型;

总学分allCredi:

整型;

课程数courseNum:

整型;

标志标量isLess60:

布尔类型,标志是否有60分以下课程

成员函数(公有):

无参构造函数:

将数据置为0

voidsetInfo(char*sID,char*sName,intage,charsex,char*clas);

voidsetInfo(char*sID,char*sName,intage,charsex);//设置信息

voidaddScore(Score&one);//添加课程成绩信息

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

voidprintLess60();//输出60分以下的课程

char*getStuID();//获取各数据成员的get方法

char*getStuName();

char*getClassName();

floatgetTotal();

intgetAllCredit();

intgetCourseNum();

floatgetAve();

boolgetIsLess60();

voidwriteStudentToFile(char*fileName);//将学生信息写入文件

4、定义班级类Class

数据成员(私有):

班级名className:

长度为10的字符数组;

班级人数num:

整型;

学生stu;向量或数组,存储该班级的所有学生,vectorstu;

成员函数(公有):

构造函数;

voidaddStu(Student&one);//向学生向量stu中添加学生

voidprintAll();//输出该班级的所有学生信息

voidsetClassName(char*clasname);设置班级名

获取各数据成员的get方法。

intgetClassNum();

char*getClassName();

voidprintStudents();//输出一个班的学生

booldelStu(char*id);

boolreviseStu(char*id);

boolsearchStuByID(char*TstuID);

boolIDhefa(char*TstuID);//判断所输入的学号是否合法

boolsearchStuByName(char*TstuName);

intAveOver80();

intless60();

voidlistTotalScore();

voidlistStuID();

voidwriteClassToFile(char*fileName);

2.2各功能模块设计

2.2.1学生记录录入模块设计

1、定义全局变量

vectorallClass;//班级向量allClass,保存所有的班级信息,系统中可以有多个班级。

intstuNum;//stuNum表示系统中当前学生人数

注:

全局变量在一个源文件中定义,在其它源文件中使用时通过extern进行声明;不要重复定义全局变量。

2、定义函数Class*getClass(char*name);

参数:

班级名

返回:

指向班级的指针

功能:

在全局变量allClass中查找指定班级名的班级,如果找到返回该班级的地址,如果找不到返回NULL。

3、定义函数voidaddStudentFormKeyboard();

功能:

从键盘录入学生信息,并将信息保存在全局变量allClass中。

4、定义函数voidreadFromFile();

功能:

从文件录入学生信息,并将信息保存在全局变量allClass中。

文件中学生记录存放特点:

第一行是一个整数n,表示该文件中学生记录总数为n;

接下来是n个学生记录;

每个学生记录的第一行依次存放学号、姓名、年龄、性别、班级

每个学生记录的第二行存放该学生的课程总数m;

接下来分m行存放,每行存放一门课程,依次为课程名、学分、成绩。

例如,下图文件中信息含义如下:

第一行2,表示共有2个学生;

第二行,表示第一个学生的学号、姓名、年龄、性别、班级;

第三行2,表示第一个学生有2门课;

第四行,表示第一个学生的第一门课;

第五行,表示第一个学生的第二门课;

2.2.2学生信息管理模块设计

该模块设计并实现学生信息管理模块的功能,学生信息管理功能分为学生信息显示、学生信息添加、学生信息删除、学生信息修改四个子模块。

实验内容:

1、学生信息显示功能

voidprintAll();//将所有学生信息显示到屏幕

功能:

遍历在全局向量allClass,调用每个班级对象的printAll()方法,将所有学生信息显示到屏幕。

2、学生信息添加功能

前面已经定义了从键盘录入学生记录的方法voidaddStudentFormKeyboard();

实现该功能时直接调用此方法即可addStudentFormKeyboard();

3、学生信息删除功能

(1)给班级类添加方法:

booldelSut(char*id);

功能:

从本班级中删除指定学号的学生信息,删除成功返回true,学生不存在返回false。

(2)定义函数:

voiddelStudent()();

功能:

从键盘录入学生学号,遍历在全局向量allClass,删除指定学号的学生信息。

在菜单程序中调用此函数即可。

4、学生信息修改功能

(1)给班级类添加方法:

boolreviseStu(char*id);

功能:

修改本班级中指定学号的学生信息,修改成功返回true,学生不存在返回false。

(2)定义函数:

voidreviseStudent();

功能:

从键盘录入学生学号,遍历在全局向量allClass,修改指定学号的学生信息。

在菜单程序中调用此函数即可。

2.2.3学生成绩管理模块设计

该模块设计并实现学生成绩管理模块的功能。

学生成绩管理模块分为学生成绩排序和学生成绩查询两个子模块。

学生成绩排序模块需要分别实现:

按学号从小到大排序;按总成绩从大到小排序两种不同的排序方式。

学生成绩查询模块需要分别实现:

查询给定学号的学生信息;查询给定姓名的学生信息;查询给定班级的学生信息;查询60分以下学生的信息,查询平均分80分以上的学生信息。

实验内容:

1、按学号从小到大排序

(1)给班级类添加方法:

voidsprintStudentByID();

功能:

对本班级学生信息,按学号从小到大排序。

(2)定义函数:

voidsortById();

功能:

遍历在全局向量allClass,对所有班级的学生信息按学号从小到大排序。

在菜单程序中调用此函数即可。

2、按总成绩从高到低排序

(1)给班级类添加方法:

voidprintStudentByTotalScore();

功能:

对本班级学生信息,按总分从高到低排序。

(2)定义函数:

voidprintStudentByTotalScore()

功能:

遍历在全局向量allClass,对所有班级的学生信息按总分从高到低排序。

在菜单程序中调用此函数即可。

3、输出所有60分以下学生信息

(1)给学生类添加方法:

printStudentIsLess60();

功能:

如果学生有60分以下的课程,输出该学生基本信息及60分以下的课程信息。

(2)定义函数:

intLess60();

功能:

获得一个班级内60分以下课程的学生人数。

(3)调用班级类方法:

printStudent();

功能:

输出该班级中所有具有60分以下课程的学生信息。

其中还包含着printScore()方法,输出学生的成绩

4、输出平均分在80分以上的学生信息

(1)给班级类添加方法:

voidprintStudentAveOver80();

功能:

输出该班级中所有平均分在80分以上的学生信息。

(2)定义函数:

voidprintStudentAveOver80();

功能:

遍历在全局向量allClass,调用每个班级对象的printMore80()方法,将所有具有80分以上课程的学生信息输出。

在菜单程序中调用此函数即可。

5、查询指定学号的学生信息

(1)给班级类添加方法:

boolClass:

:

searchStuByID(char*TstuID);

功能:

在本班级中查找指定学号的学生信息,如果找到输出该学生的信息,并返回真,如果找不到返回假。

(2)定义函数:

voidsearchStudentByID();

功能:

遍历在全局向量allClass,在所有班级中查找指定学号的学生信息。

在菜单程序中调用此函数即可。

6、查询指定姓名的学生信息

(1)给班级类添加方法:

boolClass:

:

searchStuByName(char*stuName);

功能:

在本班级中查找指定姓名的学生信息,如果找到输出该学生的信息,并返回真,如果找不到返回假。

(2)定义函数:

voidsearchStudentByName();

功能:

遍历在全局向量allClass,在所有班级中查找指定姓名的学生信息。

在菜单程序中调用此函数即可。

7、查询指定班级的学生信息

定义函数:

voidsearchStudentByClass();

功能:

遍历在全局向量allClass,查询给定班级名的学生信息,如果找到输出该班级的学生信息,如果找不到输出提示信息。

3、系统实现

主菜单的实现:

//主菜单

voidmenu()

{

intselect;

do

{

system("cls");

cout<

cout<<"****学生成绩管理系统[当前学生人数:

"<

cout<<"1.学生记录录入功能"<

cout<<"2.学生信息管理功能"<

cout<<"3.学生成绩管理功能"<

cout<<"4.保存"<

cout<<"0.退出"<

cout<<"*********************************************"<

cout<

";

fflush(stdin);//清除缓存

cin.clear();

cin>>select;

if(select>=0&&select<=4)

break;

}while(true);

switch(select)

{

case1:

menu1();break;

case2:

menu2();break;

case3:

menu3();break;

case4:

menu4();break;

case0:

exit();break;

}

}

如图所示:

3.1学生记录录入模块的实现

该模块的菜单实现为:

voidmenu1()

{

intselect;

do

{

system("cls");

cout<<"****学生成绩管理系统[当前学生人数:

"<

cout<<"1.从键盘输入学生记录"<

cout<<"2.从文件导入学生记录"<

cout<<"0.返回上级目录"<

cout<<"**********************************************************"<

cout<<"请给出你的选择<0-2>:

"<

fflush(stdin);//清除缓存

cin.clear();

cin>>select;

if(select>=0&&select<=2)

break;

}while(true);

switch(select)

{

case1:

addStudentFromKeyboard();

menu1();break;

case2:

readFromFile();

menu1();break;

case0:

menu();break;

}

}

如图所示:

学生记录录入分两种录入方式:

1从键盘输入信息

2从文件导入信息

①从键盘输入信息的实现函数为:

voidaddStudentFromKeyboard()

{

intn;

cout<<"你需要输入的人数是:

";

cin>>n;

Studentstu1;

charstuId[10];charclassName[10];charstuName[20];charsex;intage;//基本属性定义

for(inti=1;i<=n;i++)

{

cout<<"请输入第["<

cout<<"输入学号【长度不超过10】:

";//提示信息

cin>>stuId;

while(true)//判断学号是否非法

{

boolisFind=false;

vector:

:

iteratorip=allClass.begin();

while(ip!

=allClass.end())

{

if(ip->IDhefa(stuId)==true)//调用函数

{

isFind=true;

break;

}

ip++;

}

if(isFind==true)

{

cout<<"【对不起,该学号已经是存在的】请重新输入:

";

cin>>stuId;

}

else

break;//如果学号是合法的就跳出循环

}

cout<<"姓名:

";

cin>>stuName;

cout<<"年龄:

";

cin>>age;

cout<<"性别【男:

m或者M女:

f或者F】";

cin>>sex;

cout<<"班级:

";

cin>>className;

stu1.setInfo(stuId,stuName,age,sex,className);

cout<<"请依次输入该学生选修的课程信息:

【课程名,学分,分数】"<

cout<<"【温馨提示:

】需要终止时在行末尾加#符号"<

charc;//c为输入结束判断

charcourseName[40];intcredit;floatscore;

for(intj=0;;j++)

{

cout<<"输入第["<<(j+1)<<"]门课:

";

cin>>courseName>>credit>>score;

Scorescore1;

score1.setInfo(courseName,credit,score);

stu1.addScore(score1);

c=getchar();

if(c=='#')break;

}

if(NULL==getClass(className))

{

Classc1;

c1.addStu(stu1);

c1.setClassName(className);

allClass.push_back(c1);

}

else//该学生所在班级在classes中已存在

{

getClass(className)->addStu(stu1);

}

stuNum++;

}

cout<<"输入完成"<

system("pause");//系统暂停

fflush(stdin);

cin.clear();

}

如图所示:

②从文件导入信息的实现函数为

voidreadFromFile()

{

charstuId[10],className[10],stuName[20],sex;

intage;

charcourseName[40];

intcredit;

floatscore;

intnum;//文件中学生记录个数

intcourseNum;//课程数

charfileName[40];//文件名

stringstr;//字符串

cout<<"请输入文件名:

";

cin>>fileName;

str=fileName;

fstreamfin;

fin.open(fileName,ios:

:

in);

if(!

fin)

{

cout<<"文件不能打开!

"<

}

else

{

getline(fin,str);//读第一行,放在str中

istringstreamsin(str);//定义字符串流对象sin

if(sin>>num)stuNum+=num;//从字符串str中读入一个整数放在变量num中,读入成功,全局变量stuNum加上num。

for(inti=0;i

{

getline(fin,str);//读入第一行

istringstreamsin1(str);//定义字符串流对象sin1

sin1>>stuId;

//在读取文件的时候判断是否有学号错误的

boolisFind=false;

vector:

:

iteratorip=allClass.begin();

while(ip!

=allClass.end())

{

if(ip->IDhefa(stuId)==true)

{

isFind=true;

break;

}

ip++;

}

if(isFind==true)

{

cout<<"【对不起,"<

}

sin1>>stuName>>age>>sex>>className;

Studentstu1;//创建学生对象

stu1.setInfo(stuId,stuName,age,sex,className);

getline(fin,str);//读入下一行,即读入课程数courseNum;

istringstreamsin2(str);

sin2>>courseNum;

for(intj=0;(j

{//循环读入courceNum门课程信息

istringstreamsin2(str);//定义字符串流对象;

sin2>>courseName>>credit>>score;//依次读入课程名,学分,成绩

Scores;

s.setInfo(courseName,credit,score);

stu1.addScore(s);

}

//第一个学生信息读入完成,下面需要将该学生放入全局变量allClass中。

if(NULL==getClass(className))

{

Classc1;

c1.s

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2