C++学生成绩管理系统完整说课讲解Word文档下载推荐.docx
《C++学生成绩管理系统完整说课讲解Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++学生成绩管理系统完整说课讲解Word文档下载推荐.docx(75页珍藏版)》请在冰豆网上搜索。
编写一个简单的学生成绩管理系统。
学生成绩管理系统有若干学生成绩记录组成,每个记录由学号、姓名、性别、年级、班级、三个科目成绩、总分、总排名、各科目排名几个部分组成,学号不超过5个字符,姓名不超过3个字符,成绩为int型数据。
该系统具有以下功能:
程序开始执行时显示如下版权信息和主菜单:
*******学生成绩管理系统*************
学生信息
●*1.登记
●*2.编辑
●*3.顺序
●4.删除
浏览
●*5全部
●*6个人
●*7考试
●*8专业
●*9指定
系统设置
10默认
0.退出
************************************
请输入(0~8):
通过键盘输入数字0~10后,程序能够执行相应的功能,执行完后回到上述主菜单继续等待用户输入,输入数字0后退出程序。
(1)选择“登记”后,输入学生个数。
按程序提示输入学号、姓名、性别、年级、班级、三个科目成绩、总分、总排名、各科目排名。
(2)选择“编辑”,按提示输入要删除的学生的学号,输入学号,若改学号存在,则编辑相应的学生记录,如果该学号不存在,返回主菜单
(3)选择“顺序”后,会显示从成绩高到低还是相反。
该操作会改变程序中链表的连接顺序,因此浏览时候显示也是顺序改变后的链表顺序输出。
(4)
(5)选择“全部”,系统会按照年级显示全部学生其成绩。
(6)选择“个人”,系统会提示输入学生姓名或者学号进行寻找并显示。
(7)选择“考试”,会按照每一年级的每一次考试显示成绩。
(8)选择“专业”,会按照专业进行成绩输出。
(9)选择“指定”,里面还有八种显示方式:
分数段、排名、学期、班级、大一至大四,可以按照其进行浏览。
(10)进行系统相关的设置,如是否显示欢迎窗口,是否自动读取信息或是手动、是否浏览显示全部等
(0)退出操作。
二、系统分析与模块设计
《学生成绩管理系统》结构图
三、系统设计
1.系统总体框架
《学生成绩管理系统》流程图
2.系统关键算法流程图
(1).系统包含的类库
#include<
iostream>
string>
fstream>
iomanip>
conio.h>
windows.h>
(2).主函数
(3)student类的设计与分析
classstudent/*定义学生成绩类*/
{
private:
Score*sco;
stringname;
stringpro;
//专业
intclas;
intgrade;
stringnum;
charsex;
Student*next;
};
表1student类说明表
名称
属性
说明
sco
数据成员
成绩类开头
name
说明学生姓名
pro
说明学生专业
clas
说明学生班级
grade
说明学生年级
num
说明学生学号
sex
说明学生性别
next
说明指向下一个节点的指针
(4).Manage类的设计与分析
classList{
intset[SET];
Student*stu;
public:
//添加
voidAdd();
//添加学生
voidAddScore(Student*istudent);
//添加成绩
//浏览
intisEmpty();
intinfoPass(stringinum,stringiname,charisex,intigrade,inticlas);
voidSkimAll();
voidSkimClas();
voidSkimPro();
voidSpecSkim();
//指定的其他浏览方式
voidSkimByScore();
voidSkimByTerms();
voidSkimByPlace();
voidSkimByTest();
voidSkimByGrade(intigrade);
voidFind(stringT);
//查找
voidPrintAllScore(Score*q);
//打印成绩,本程序用来打印第二次开始的考试成绩
voidInitScore();
//未给出成绩的学生进行0赋值
voidDelete();
//删除
voidEdit(stringY);
//编辑
voidEditScore(Student*istu);
voidOrderConscore();
//按总成绩排序
voidOrderObject();
//排名次
voidCompare();
//比较
voidSave();
//保存
intRead();
//读取
stringOfProfe();
//选择学院专业
intWINAPIWinMain(HINSTANCEhInst,HINSTANCEhPrevInstance,LPSTRlpszCmdParam,intnCmdShow);
//显示欢迎对话框
intcountSpecStudent(intigrade);
//返回指定年级的学生数
intcountConStudent();
//返回总学生数
//默认设置
voidDefaultSetting();
//进行默认设置
voidReadSet();
//读取默认设置
voidSaveSet();
//保存默认设置
int*ReturnSet();
charReturnjudgeOfadd();
voidJudgeOfSave();
//判断是否保存已修改的信息
voidStart();
//类内部开始运行的操作
voidInterface();
//用户使用界面
Add()
成员函数
添加学生
AddScore()
添加成绩
isEmpty()
判断是否有学生
infoPass()
判断输入信息合法性
SkimAll()
全部浏览
SkimClas
按班级浏览
SkimPro()
按专业浏览
SpecSkim()
其他浏览方式
Find(stringT)
按学号寻找
PrintAllScore(Score*q)
输出所有学生数量
InitScore()
初始化成绩未满的学生的成绩
Delete()
删除学生
Edit(stringY)
编辑学生信息
EditScore(Student*istu)
编辑学生成绩
OrderConscore()
将链表改变连接顺序进而改变输出顺序
OrderObject()
给每个学生每次考试排名次
Save()
保存学生信息
Read()
读取学生信息
OfProfe()
选择学生专业
countSpecStudent(intigrade)
返回相应年级学生数量
countConStudent()
返回总学生数
DefaultSetting()
默认设置
ReadSet()
读取设置
SaveSet()
保存设置
ReturnSet()
返回设置
(5).Score类
Score()
构造函数
无参构造函数
Score(int*sc)
只含成绩构造函数
Score(int*sc,int*or,intCon)
含全部信息构造函数
ReturnConScore()
返回总分数
(6).输入学生资料模块:
主要功能用来对学生的成绩进行收集和输入。
在学生信息保存在系统中的前提下,输入要输入的人数,成绩录入需要输入学生资料,比如学号,姓名。
在准确输入学生资料后,就可以对该学生的各科成绩进行录入。
该学生各科成绩输入成功后,输入下一个学生资料时会先判断是否学号是否与之前的学生相同,如果相同,则显示提示信息,不同则继续输入
(6)输出学生资料模块:
主要功能用来对学生的成绩进行输出。
在系统已经录入了学生资料成绩的前提下,使用该功能可以显示所有学生的信息,资料等等。
具体包括学生的学号,姓名和各科成绩。
在查看学生的资料,成绩各方面的信息后,按任意键就可以返回到主菜单
(5)查找并显示学生资料模块
主要功能是用来查找学生资料。
在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,这样系统就会显示该学生资料和各科成绩等信息
(6)按学号查找,修改学生资料模块
主要功能是用来修改学生资料。
在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生学号,系统就会显示该学生资料和各科成绩等信息,这样就可以修改该学生的资料,成绩等信息。
(7)按学号查找,删除该学生资料模块
主要功能是用来删除学生资料。
在系统保存学生资料的前提下,想删除某学生的资料,可以输入学生学号,系统查找该学生资料后,就可以删除了。
由于学生辍学,毕业等原因,及时对系统进行更新,删除一些没用的信息,可以使系统更加优化
(8)按学生成绩总分进行排列模块
主要功能是用来对学生的资料按总分进行排序。
在系统保存学生资料,成绩的前提下,使用此功能可以对学生的资料按总分进行排序,这样就方便查找成绩相同或是相近的同学的资料。
(9)储存学生资料并退出系统模块
主要功能是用来储存学生资料。
在对系统进行一系列操作,比如添加、删除、修改学生资料后,对系统的最新操作进行保存,及时更新系统,方便下一次的操作。
四、运行结果
1.开始界面
2.输入数据
3.搜索数据
4.删除
5.修改数据
7.显示数据
8.系统设置
五、小结
这个程序经过了暑假开始到十月份的修改编辑,要感谢老师及同学的指导,另外程序本身更适合学生数量不是特别多的情况下,加入学生有上千上万个,那么应该在添加几个类,在学生类之上的类,这样才可以大大方便了各种操作以及浏览等。
六、参考资料
《C++程序设计教程》
CSDN程序员社区
代码:
/*
*学生成绩管理系统
*类:
StudentScoreManage
*可保存学科:
语文数学英语
*时间段:
大一至大四
*说明:
该程序针对学生数较少的情况,假如面对上千上万的学生数,应该再将其中的存储结构进行改变,
*分别分层次存储,例如大一至大四四个链表表头,在每一个链表中又根据不同分类依据细分,
*例如根据学院、专业等,这样的改变将大大有利于程序进行的寻找、输出、排序等涉及链表的操作,
*当然相应代码也要稍作改变
*/
sstream>
vector>
usingnamespacestd;
#defineCONOBJ3//3科科目
#defineYEARS4//4个学年
#defineSET4//4个设置要求
classScore{
intscore[CONOBJ];
//chinese,math,english三科目分别对应order[0]、order[1]、order[2],每个学期两次考试,分为期中和期末考试
intorder[CONOBJ];
//MAX科学科排名
intConOrder;
//总排名
Score*next;
//定义在学生类当中
Score(){
next=NULL;
inti;
for(i=0;
i<
CONOBJ;
i++){
score[i]=0;
order[i]=0;
}
ConOrder=0;
};
//无参构造函数
Score(int*sc){
score[i]=*sc;
sc++;
}//只有成绩的构造函数
Score(int*sc,int*or,intCon){
intj;
for(j=0;
j<
j++){
score[j]=*sc;
order[j]=*or;
sc++;
or++;
ConOrder=Con;
}//含全部参数的构造函数
intReturnConScore(){//返回总分数
returnscore[0]+score[1]+score[2];
}
//===========================================================
classStudent{
/*Student类中包含Score类
*用来存储众多的成绩,每个学期两次成绩,
每学年两个学期*/
/*
*几个不同参数的Student构造函数的重载,
*分别对应不同形式的构造方式
*/
Student(stringiname):
name(iname),next(NULL){
sco=NULL;
cout<
<
"
\t\t\t\t★成功添加学生"
name<
★\n"
;
}//1.单参数时的构造函数
Student(stringiname="
Noname"
stringipro="
none"
inticlass=0,intigrade=0,stringinum="
0"
charisex='
n'
)
:
name(iname),num(inum),sex(isex),next(NULL),pro(ipro),clas(iclass),grade(igrade){
return;
}//2.用于添加无输入成绩的构造函数
Student(stringiname,stringipro,inticlas,intigrade,stringinum,charisex,int*score)
name(iname),pro(ipro),clas(iclas),grade(igrade),num(inum),sex(isex),next(NULL){
sco=newScore(score);
cout<
}//3.用于添加有成绩的构造函数
Student(stringiname,stringipro,inticlas,intigrade,stringinum,charisex,int*score,intconor,int*order)
sco=newScore(score,order,conor);
}//4.用于从文件读入时候的构造函数
intCountOfScore();
//统计已经存储的成绩数量,每个学期两次考试,每次考试算作一次成绩录入成绩录入总计〈=4*igrade
friendclassManage;
//============================================
classManage{
/*记录是否执行了修改学生信息操作,等于'
表示未修改信息或者修改完了但已经保存,
等于'
y'
表示已经修改并且还未保存*/
charjudgeOfAdd;
Manage(){
stu=NULL;
/*for(inti=0;
SET;
i++)
set[i]=1;
*/
judgeOfAdd='
Start();
~Manage(){//删除所有记录,释放空间
Student*p=stu;
while(p){
p=p->
next;
deletep;
Student*ReturnStu(){
returnstu;
//=====================================================================
//Student名空间中的成员函数的函数定义
intStudent:
:
CountOfScore(){
Score*p=sco;
p;
p=p->
next,i++);
returni;
}
//=====================================
//Manage名空间中