C++学生成绩管理系统完整.docx
- 文档编号:5063196
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:75
- 大小:924.68KB
C++学生成绩管理系统完整.docx
《C++学生成绩管理系统完整.docx》由会员分享,可在线阅读,更多相关《C++学生成绩管理系统完整.docx(75页珍藏版)》请在冰豆网上搜索。
C++学生成绩管理系统完整
C++学生成绩管理系统(完整)
课程设计说明书
本科毕业设计
(
题目:
学生成绩管理系统(教师端)
学生姓名:
陈
学院:
工学院
专业:
数字媒体技术
班级:
2013级
指导教师:
二〇一四年十一月
一、设计题目(问题)描述和要求
设计目的:
为方便对学生成绩进行高效的管理,编写该程序以提高学生成绩管理效率。
使用该程序之后,学校管理者可以查询某位学生、某个科目的成绩情况,还可以对学生成绩进行排名,对学生的数据进行修改和删除,其中排名以按总分排名,并且还提供了多种浏览方式,查询结果包括各个科目的分数、总分。
通过本系统可以很好的掌握学生成绩的分布,减轻管理人员的负担,也使学生的成绩和信息长时期的保留。
问题描述:
编写一个简单的学生成绩管理系统。
学生成绩管理系统有若干学生成绩记录组成,每个记录由学号、姓名、性别、年级、班级、三个科目成绩、总分、总排名、各科目排名几个部分组成,学号不超过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
#include
#include
#include
#include
#include
(2).主函数
创建Manage对象象象
进入start并进行信息读取等前提操作,然后进入用户界面开始有用户选择操作
(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
*可保存学科:
语文数学英语
*时间段:
大一至大四
*说明:
该程序针对学生数较少的情况,假如面对上千上万的学生数,应该再将其中的存储结构进行改变,
*分别分层次存储,例如大一至大四四个链表表头,在每一个链表中又根据不同分类依据细分,
*例如根据学院、专业等,这样的改变将大大有利于程序进行的寻找、输出、排序等涉及链表的操作,
*当然相应代码也要稍作改变
*/
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
#defineCONOBJ3//3科科目
#defineYEARS4//4个学年
#defineSET4//4个设置要求
classScore{
public:
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 score[i]=0; order[i]=0; } ConOrder=0; };//无参构造函数 Score(int*sc){ next=NULL; inti; for(i=0;i score[i]=*sc; order[i]=0; sc++; } ConOrder=0; }//只有成绩的构造函数 Score(int*sc,int*or,intCon){ next=NULL; intj; for(j=0;j score[j]=*sc; order[j]=*or; sc++; or++; } ConOrder=Con; }//含全部参数的构造函数 intReturnConScore(){//返回总分数 returnscore[0]+score[1]+score[2]; } }; //=========================================================== classStudent{ /*Student类中包含Score类 *用来存储众多的成绩,每个学期两次成绩, 每学年两个学期*/ Score*sco; stringname; stringpro;//专业 intclas; intgrade; stringnum; charsex; Student*next; public: /* *几个不同参数的Student构造函数的重载, *分别对应不同形式的构造方式 */ Student(stringiname): name(iname),next(NULL){ sco=NULL; cout<<"\t\t\t\t★成功添加学生"< }//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){ sco=NULL; cout<<"\t\t\t\t★成功添加学生"< 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<<"\t\t\t\t★成功添加学生"< }//3.用于添加有成绩的构造函数 Student(stringiname,stringipro,inticlas,intigrade,stringinum,charisex,int*score,intconor,int*order) : name(iname),pro(ipro),clas(iclas),grade(igrade),num(inum),sex(isex),next(NULL){ sco=newScore(score,order,conor); }//4.用于从文件读入时候的构造函数 intCountOfScore();//统计已经存储的成绩数量,每个学期两次考试,每次考试算作一次成绩录入成绩录入总计〈=4*igrade friendclassManage; }; //============================================ classManage{ intset[SET]; Student*stu; /*记录是否执行了修改学生信息操作,等于'n'表示未修改信息或者修改完了但已经保存, 等于'y'表示已经修改并且还未保存*/ charjudgeOfAdd; public: Manage(){ stu=NULL; /*for(inti=0;i set[i]=1;*/ judgeOfAdd='n'; Start(); } ~Manage(){//删除所有记录,释放空间 Student*p=stu; while(p){ p=p->next; deletep; } stu=NULL; } Student*ReturnStu(){ returnstu; } //添加 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();//用户使用界面 };//===================================================================== //Student名空间中的成员函数的函数定义 intStudent: : CountOfScore(){ Score*p=sco; inti; for(i=0;p;p=p->next,i++); returni; } //===================================== //===================================== //Manage名空间中的成员函数的函数定义 int*Manage: : ReturnSet(){ returnset; }//------------------------------------ charManage: : ReturnjudgeOfadd(){ returnjudgeOfAdd; }//------------------------------------ intManage: : countSpecStudent(intigrade){//返回指定年级的学生数 Student*p=stu; intcount=0; for(;p! =NULL;p=p->next) if(p->grade==igrade) count++; returncount; }//------------------------------- intMan
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 学生 成绩管理系统 完整