C++语言 学生成绩管理系统Word文件下载.docx
- 文档编号:5266527
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:55
- 大小:483.95KB
C++语言 学生成绩管理系统Word文件下载.docx
《C++语言 学生成绩管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++语言 学生成绩管理系统Word文件下载.docx(55页珍藏版)》请在冰点文库上搜索。
浮点型;
成员函数(公有):
无参构造函数,将学分和成绩初始化为0;
voidsetInfo(char*sname,intcre,floats);
//给各数据成员赋值
voidprint();
//输出课程成绩信息
为了方便学生类Student访问该类的成员,将学生类Student声明为课程成绩类Score的友类。
2、定义Person类
数据成员(保护):
姓名name:
长度为20的字符数组;
年龄age:
性别sex:
字符型;
voidsetInfo(char*pName,intpAge,charpSex);
//输出信息
3、定义学生类型Student
学生类继承Person类;
数据成员(私有):
学号stuId:
长度为10的字符数组;
班级名className:
课程成绩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);
//添加课程成绩信息
//输出学生信息
voidprintLess60();
//输出60分以下的课程
char*getStuID();
//获取各数据成员的get方法
char*getStuName();
char*getClassName();
floatgetTotal();
intgetAllCredit();
intgetCourseNum();
floatgetAve();
boolgetIsLess60();
voidwriteStudentToFile(char*fileName);
//将学生信息写入文件
4、定义班级类Class
班级人数num:
学生stu;
向量或数组,存储该班级的所有学生,vector<
Student>
stu;
构造函数;
voidaddStu(Student&
//向学生向量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、定义全局变量
vector<
Class>
allClass;
//班级向量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、学生信息修改功能
boolreviseStu(char*id);
修改本班级中指定学号的学生信息,修改成功返回true,学生不存在返回false。
voidreviseStudent();
从键盘录入学生学号,遍历在全局向量allClass,修改指定学号的学生信息。
2.2.3学生成绩管理模块设计
该模块设计并实现学生成绩管理模块的功能。
查询60分以下学生的信息,查询平均分80分以上的学生信息。
1、按学号从小到大排序
voidsprintStudentByID();
对本班级学生信息,按学号从小到大排序。
voidsortById();
遍历在全局向量allClass,对所有班级的学生信息按学号从小到大排序。
2、按总成绩从高到低排序
voidprintStudentByTotalScore();
对本班级学生信息,按总分从高到低排序。
voidprintStudentByTotalScore()
遍历在全局向量allClass,对所有班级的学生信息按总分从高到低排序。
3、输出所有60分以下学生信息
(1)给学生类添加方法:
printStudentIsLess60();
如果学生有60分以下的课程,输出该学生基本信息及60分以下的课程信息。
intLess60();
获得一个班级内60分以下课程的学生人数。
(3)调用班级类方法:
printStudent();
输出该班级中所有具有60分以下课程的学生信息。
其中还包含着printScore()方法,输出学生的成绩
4、输出平均分在80分以上的学生信息
voidprintStudentAveOver80();
输出该班级中所有平均分在80分以上的学生信息。
voidprintStudentAveOver80();
遍历在全局向量allClass,调用每个班级对象的printMore80()方法,将所有具有80分以上课程的学生信息输出。
5、查询指定学号的学生信息
boolClass:
:
searchStuByID(char*TstuID);
在本班级中查找指定学号的学生信息,如果找到输出该学生的信息,并返回真,如果找不到返回假。
voidsearchStudentByID();
遍历在全局向量allClass,在所有班级中查找指定学号的学生信息。
6、查询指定姓名的学生信息
searchStuByName(char*stuName);
在本班级中查找指定姓名的学生信息,如果找到输出该学生的信息,并返回真,如果找不到返回假。
voidsearchStudentByName();
遍历在全局向量allClass,在所有班级中查找指定姓名的学生信息。
7、查询指定班级的学生信息
定义函数:
voidsearchStudentByClass();
遍历在全局向量allClass,查询给定班级名的学生信息,如果找到输出该班级的学生信息,如果找不到输出提示信息。
3、系统实现
主菜单的实现:
//主菜单
voidmenu()
{
intselect;
do
{
system("
cls"
);
cout<
<
endl;
"
****学生成绩管理系统[当前学生人数:
stuNum<
]**********"
1.学生记录录入功能"
2.学生信息管理功能"
3.学生成绩管理功能"
4.保存"
0.退出"
*********************************************"
endl<
请输入要选的命令(0-4):
;
fflush(stdin);
//清除缓存
cin.clear();
cin>
>
select;
if(select>
=0&
&
select<
=4)
break;
}while(true);
switch(select)
case1:
menu1();
break;
case2:
menu2();
case3:
menu3();
case4:
menu4();
case0:
exit();
}
}
如图所示:
3.1学生记录录入模块的实现
该模块的菜单实现为:
voidmenu1()
intselect;
system("
cout<
]*************"
1.从键盘输入学生记录"
2.从文件导入学生记录"
0.返回上级目录"
**********************************************************"
请给出你的选择<
0-2>
fflush(stdin);
cin.clear();
cin>
if(select>
=2)
break;
addStudentFromKeyboard();
menu1();
readFromFile();
break;
menu();
学生记录录入分两种录入方式:
1从键盘输入信息
2从文件导入信息
①从键盘输入信息的实现函数为:
voidaddStudentFromKeyboard()
intn;
你需要输入的人数是:
n;
Studentstu1;
charstuId[10];
charclassName[10];
charstuName[20];
charsex;
intage;
//基本属性定义
for(inti=1;
i<
=n;
i++)
{
请输入第["
]个学生信息"
输入学号【长度不超过10】:
//提示信息
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>
else
//如果学号是合法的就跳出循环
}
姓名:
stuName;
年龄:
age;
性别【男:
m或者M女:
f或者F】"
sex;
班级:
className;
stu1.setInfo(stuId,stuName,age,sex,className);
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++;
}
输入完成"
pause"
//系统暂停
②从文件导入信息的实现函数为
voidreadFromFile()
charstuId[10],className[10],stuName[20],sex;
intage;
charcourseName[40];
intcredit;
floatscore;
intnum;
//文件中学生记录个数
intcourseNum;
//课程数
charfileName[40];
//文件名
stringstr;
//字符串
请输入文件名:
fileName;
str=fileName;
fstreamfin;
fin.open(fileName,ios:
in);
if(!
fin)
文件不能打开!
else
getline(fin,str);
//读第一行,放在str中
istringstreamsin(str);
//定义字符串流对象sin
if(sin>
num)stuNum+=num;
//从字符串str中读入一个整数放在变量num中,读入成功,全局变量stuNum加上num。
for(inti=0;
num;
getline(fin,str);
//读入第一行
istringstreamsin1(str);
//定义字符串流对象sin1
sin1>
//在读取文件的时候判断是否有学号错误的
while(ip!
IDhefa(stuId)==true)
if(isFind==true)
【对不起,"
stuId<
学号已经是存在的】请进行修改."
stuName>
age>
sex>
Studentstu1;
//创建学生对象
stu1.setInfo(stuId,stuName,age,sex,className);
//读入下一行,即读入课程数courseNum;
istringstreamsin2(str);
sin2>
courseNum;
for(intj=0;
(j<
courseNum)&
(getline(fin,str));
j++)
{//循环读入courceNum门课程信息
istringstreamsin2(str);
//定义字符串流对象;
//依次读入课程名,学分,成绩
Scores;
s.setInfo(courseName,credit,score);
stu1.addScore(s);
//第一个学生信息读入完成,下面需要将该学生放入全局变量allClass中。
if(NULL==getClass(className))
Classc1;
c1.s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+语言 学生成绩管理系统 C+ 语言 学生 成绩管理系统