1、 课程设计说明书 本科毕业设计 ( 题 目: 学生成绩管理系统(老师端) 学生姓名: 陈 学 院:工学院 专 业:数字媒体技术 班 级:级 指导老师: 二〇一四 年 十 一月 目录 一、设计题目(问题)描述和要求 - 1 - 二、系统分析和模块设计 - 1 - 三、系统设计 - 1 - 1. 系统总体框架 - 1 - 2. 系统关键算法步骤图 - 1 - 四、运行结果 - 5 - 五、小结 - 5 - 六、参考资料 - 6 -
2、 一、设计题目(问题)描述和要求 设计目标: 为方便对学生成绩进行高效管理,编写该程序以提升学生成绩管理效率。使用该程序以后,学校管理者能够查询某位学生、某个科目标成绩情况,还能够对学生成绩进行排名,对学生数据进行修改和删除,其中排名以按总分排名,而且还提供了多个浏览方法,查询结果包含各个科目标分数、总分。经过本系统能够很好掌握学生成绩分布,减轻管理人员负担,也使学生成绩和信息长时期保留。 问题描述: 编写一个简单学生成绩管理系统。学生成绩管理系统有若干学生成绩统计组成,每个统计由学号、姓名、性别、年级、班级、三个科目成绩、总分、总排名、各科目排名多个部分组成,学号不超出
3、5个字符,姓名不超出3个字符,成绩为int型数据。该系统含有以下功效: 程序开始实施时显示以下版权信息和主菜单: *******学生成绩管理系统************* 学生信息 l *1.登记 l *2.编辑 l *3.次序 l 4.删除 浏览 l * 5全部 l *6个人 l *7考试 l * 8专业 l *9指定 系统设置 10默认 0.退出 ************************************ 请输入(0~8): 经过键盘输入数字0~10后,程序能够实施对应功效,实
4、施完后回到上述主菜单继续等候用户输入,输入数字0后退出程序。 (1)选择“登记”后,输入学生个数。按程序提醒输入学号、姓名、性别、年级、班级、三个科目成绩、总分、总排名、各科目排名。 (2)选择“编辑”,按提醒输入要删除学生学号,输入学号,若改学号存在,则编辑对应学生统计,假如该学号不存在,返回主菜单 (3)选择“次序”后,会显示从成绩高到低还是相反。该操作会改变程序中链表连接次序,所以浏览时候显示也是次序改变后链表次序输出。 (4) (5)选择“全部”,系统会根据年级显示全部学生其成绩。 (6)选择“个人”,系统会提醒输入学生姓名或学号进行寻求并显示。 (7) 选择“考试”,
5、会根据每十二个月级每一次考试显示成绩。 (8) 选择“专业”,会根据专业进行成绩输出。 (9) 选择“指定”,里面还有八种显示方法:分数段、排名、学期、班级、大一至大四,能够根据其进行浏览。 (10) 进行系统相关设置,如是否显示欢迎窗口,是否自动读取信息或是手动、是否浏览显示全部等 (0)退出操作。 二、系统分析和模块设计 《学生成绩管理系统》结构图 学生信息 学生成绩管理系主程序统 创建链表 1.登记学生信息 0.退出程序 6.排序学生成绩 5.浏览全部信
6、息 4.修改学生信息 3.删除学生信息 2.搜索学生信息 7其它多个浏览方法 8.默认设置 三、系统设计 1. 系统总体框架 《学生成绩管理系统》步骤图 学生成绩管理系统 创建链表 打开student.txt、set.txt文件 创建学生对象 主菜单 1.登记 退出系统 2.编辑 3.次序 保留为文件 4.删除 5.全部 6.个人 9.指定 8.专业
7、 7.考试
10.默认设置
2. 系统关键算法步骤图
(1).系统包含类库
#include
8、class student/*定义学生成绩类*/ { private: Score *sco; string name; string pro; //专业 int clas; int grade; string num; char sex; Student* next; }; 表1 student类说明表 名称 属性 说明 sco 数据组员 成绩类开头 name 数据组员 说明学生姓名 pro 数据组员 说明学生专业 clas 数据组员 说明学生班级 grade 数据组员 说明学生年级 nu
9、m 数据组员 说明学生学号 sex 数据组员 说明学生性别 next 数据组员 说明指向下一个节点指针 (4) .Manage类设计和分析 class List{ int set[SET]; Student* stu; public: //添加 void Add(); //添加学生 void AddScore(Student *istudent); //添加成绩 //浏览 int isEmpty(); int infoPass(string inum,str
10、ing iname,char isex,int igrade,int iclas); void SkimAll(); void SkimClas(); void SkimPro(); void SpecSkim(); //指定其它浏览方法 void SkimByScore(); void SkimByTerms(); void SkimByPlace(); void SkimByTest(); void SkimByGrade(int igrade); void Find(string T); //查找 void P
11、rintAllScore(Score *q);//打印成绩,本程序用来打印第二次开始考试成绩 void InitScore(); //未给出成绩学生进行 0 赋值 void Delete(); //删除 void Edit(string Y); //编辑 void EditScore(Student *istu); void OrderConscore(); //按总成绩排序 void OrderObject(); //排名次 void Compare(); //比较 void Save(); //
12、保留 int Read(); //读取 string OfProfe(); //选择学院专业 int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow); //显示欢迎对话框 int countSpecStudent(int igrade); //返回指定年级学生数 int countConStudent(); //返回总学生数 //默认设置 void DefaultSetting(
13、);//进行默认设置 void ReadSet(); //读取默认设置 void SaveSet(); //保留默认设置 int* ReturnSet(); char ReturnjudgeOfadd(); void JudgeOfSave(); //判定是否保留已修改信息 void Start(); //类内部开始运行操作 void Interface(); //用户使用界面 }; 名称 属性 说明 Add() 组员函数 添加学生 AddScore() 组员函数 添加成绩 is
14、Empty() 组员函数 判定是否有学生 infoPass() 组员函数 判定输入信息正当性 SkimAll() 组员函数 全部浏览 SkimClas 组员函数 按班级浏览 SkimPro() 组员函数 按专业浏览 SpecSkim() 组员函数 其它浏览方法 Find(string T) 组员函数 按学号寻求 PrintAllScore(Score *q) 组员函数 输出全部学生数量 InitScore() 组员函数 初始化成绩未满学生成绩 Delete() 组员函数 删除学生 Edit(string Y) 组员函数 编辑学生信
15、息 EditScore(Student *istu) 组员函数 编辑学生成绩 OrderConscore() 组员函数 将链表改变连接次序进而改变输出次序 OrderObject() 组员函数 给每个学生每次考试排名次 Save() 组员函数 保留学生信息 Read() 组员函数 读取学生信息 OfProfe() 组员函数 选择学生专业 countSpecStudent(int igrade) 组员函数 返回对应年级学生数量 countConStudent() 组员函数 返回总学生数 DefaultSetting() 组员函数 默认设置
16、ReadSet() 组员函数 读取设置 SaveSet() 组员函数 保留设置 ReturnSet() 组员函数 返回设置 (5).Score类 名称 属性 说明 Score() 结构函数 无参结构函数 Score(int *sc) 结构函数 只含成绩结构函数 Score(int *sc,int*or,int Con) 结构函数 含全部信息结构函数 ReturnConScore() 组员函数 返回总分数 (6). 输入学生资料模块: 关键功效用来对学生成绩进行搜集和输入。在学生信息保留在系统中前提下,输入要输入人数,成绩录入需
17、要输入学生资料,比如学号,姓名。在正确输入学生资料后,就能够对该学生各科成绩进行录入。该学生各科成绩输入成功后,输入下一个学生资料时会先判定是否学号是否和之前学生相同,假如相同,则显示提醒信息,不一样则继续输入 (6) 输出学生资料模块: 关键功效用来对学生成绩进行输出。在系统已经录入了学生资料成绩前提下,使用该功效能够显示全部学生信息,资料等等。具体包含学生学号,姓名和各科成绩。在查看学生资料,成绩各方面信息后,按任意键就能够返回到主菜单 (5)查找并显示学生资料模块 关键功效是用来查找学生资料。在系统保留了某学生资料前提下,想要查找该学生资料,能够输入该学生姓名
18、这么系统就会显示该学生资料和各科成绩等信息 (6)按学号查找,修改学生资料模块 关键功效是用来修改学生资料。在系统保留了某学生资料前提下,想要查找该学生资料,能够输入该学生学号,系统就会显示该学生资料和各科成绩等信息,这么就能够修改该学生资料,成绩等信息。 (7)按学号查找,删除该学生资料模块 关键功效是用来删除学生资料。在系统保留学生资料前提下,想删除某学生资料,能够输入学生学号,系统查找该学生资料后,就能够删除了。因为学生辍学,毕业等原因,立即对系统进行更新,删除部分没用信息,能够使系统愈加优化 (8)按学生成绩总分进行排列模块 关键功效是用来对学生资料按总分进
19、行排序。在系统保留学生资料,成绩前提下,使用此功效能够对学生资料按总分进行排序,这么就方便查找成绩相同或是相近同学资料。 (9)储存学生资料并退出系统模块 关键功效是用来储存学生资料。在对系统进行一系列操作,比如添加、删除、修改学生资料后,对系统最新操作进行保留,立即更新系统,方便下一次操作。 四、运行结果 1.开始界面 2.输入数据 3. 搜索数据 4. 删除 5. 修改数据 7. 显示数据 8.系统设置 五、小结 这个程序经过了暑假开始到十月份修改编辑,要感谢老师及同学指导,另外程序本身更适合学生
20、数量不是尤其多情况下,加入学生有上千上万个,那么应该在添加多个类,在学生类之上类,这么才能够大大方便了多种操作和浏览等。 六、参考资料 《C++程序设计教程》 CSDN程序员小区 代码: /* *学生成绩管理系统 *类:Student Score Manage *可保留学科:语文 数学 英语 *时间段:大一至大四 *说明:该程序针对学生数较少情况,假如面对上千上万学生数,应该再将其中存放结构进行改变, * 分别分层次存放,比如大一至大四四个链表表头,在每一个链表中又依据不一样分类依据细分, * 比如依据学院、专业等,这么
21、改变将大大有利于程序进行寻求、输出、排序等包含链表操作,
* 当然对应代码也要稍作改变
*/
#include
22、 //4个设置要求
class Score{
public:
int score[CONOBJ]; //chinese,math,english三科目分别对应order[0]、order[1]、order[2],每个学期两次考试,分为期中和期末考试
int order[CONOBJ]; //MAX科学科排名
int ConOrder; //总排名
Score *next; //定义在学生类当中
Score(){
next=NULL;
int i;
for(i=0;i 23、]=0;
order[i]=0;
}
ConOrder=0;
};//无参结构函数
Score(int *sc){
next=NULL;
int i;
for(i=0;i 24、sc;
order[j]=*or;
sc++;
or++;
}
ConOrder=Con;
}//含全部参数结构函数
int ReturnConScore(){ //返回总分数
return score[0]+score[1]+score[2];
}
};
//===========================================================
class Student{
/*Student类中包含Score类
*用来存放众多成绩,每个学期两次成绩,
每年两个学期*/
25、 Score *sco;
string name;
string pro; //专业
int clas;
int grade;
string num;
char sex;
Student* next;
public:
/*
*多个不一样参数Student结构函数重载,
*分别对应不一样形式结构方法
*/
Student(string iname):name(iname),next(NULL){
sco=NULL;
cout<<"\t\t\t\t★成功添加学生"< 26、时结构函数
Student(string iname="No name",string ipro="none",int iclass=0,int igrade=0,string inum="0",char isex='n')
:name(iname),num(inum),sex(isex),next(NULL),pro(ipro),clas(iclass),grade(igrade){
sco=NULL;
cout<<"\t\t\t\t★成功添加学生"< 27、nt(string iname,string ipro,int iclas,int igrade,string inum,char isex,int *score)
:name(iname),pro(ipro),clas(iclas),grade(igrade),num(inum),sex(isex),next(NULL){
sco=new Score(score);
cout<<"\t\t\t\t★成功添加学生"< 28、s,int igrade,string inum,char isex,int *score,int conor,int *order)
:name(iname),pro(ipro),clas(iclas),grade(igrade),num(inum),sex(isex),next(NULL){
sco=new Score(score,order,conor);
}//4.用于从文件读入时候结构函数
int CountOfScore(); //统计已经存放成绩数量,每个学期两次考试,每次考试算作一次成绩录入 成绩录入总计〈= 4*igrade
friend 29、class Manage;
};
//============================================
class Manage{
int set[SET];
Student* stu;
/*统计是否实施了修改学生信息操作,等于'n'表示未修改信息或修改完了但已经保留,
等于'y'表示已经修改而且还未保留*/
char judgeOfAdd;
public:
Manage(){
stu=NULL;
/*for(int i=0;i 30、fAdd='n';
Start();
}
~Manage(){ //删除全部统计,释放空间
Student* p=stu;
while(p){
p=p->next;
delete p;
}
stu=NULL;
}
Student* ReturnStu(){
return stu;
}
//添加
void Add(); //添加学生
void AddScore(Student *istudent); //添加成绩
//浏览
int isEmpty( 31、);
int infoPass(string inum,string iname,char isex,int igrade,int iclas);
void SkimAll();
void SkimClas();
void SkimPro();
void SpecSkim(); //指定其它浏览方法
void SkimByScore();
void SkimByTerms();
void SkimByPlace();
void SkimByTest();
void SkimByGrade(int igrade);
32、
void Find(string T); //查找
void PrintAllScore(Score *q);//打印成绩,本程序用来打印第二次开始考试成绩
void InitScore(); //未给出成绩学生进行 0 赋值
void Delete(); //删除
void Edit(string Y); //编辑
void EditScore(Student *istu);
void OrderConscore(); //按总成绩排序
void OrderObject(); //排名次
void Compare(); 33、 //比较
void Save(); //保留
int Read(); //读取
string OfProfe(); //选择学院专业
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow); //显示欢迎对话框
int countSpecStudent(int igrade); //返回指定年级学生数
int countConStudent(); //返 34、回总学生数
//默认设置
void DefaultSetting();//进行默认设置
void ReadSet(); //读取默认设置
void SaveSet(); //保留默认设置
int* ReturnSet();
char ReturnjudgeOfadd();
void JudgeOfSave(); //判定是否保留已修改信息
void Start(); //类内部开始运行操作
void Interface(); //用户使用界面
};//================== 35、
//Student名空间中组员函数函数定义
int Student::CountOfScore(){
Score *p=sco;
int i;
for(i=0;p;p=p->next,i++);
return i;
}
//=====================================
//=====================================
//Manage名空间中组员函数函数定义
int* Manage::Ret 36、urnSet(){
return set;
}//------------------------------------
char Manage::ReturnjudgeOfadd(){
return judgeOfAdd;
}//------------------------------------
int Manage::countSpecStudent(int igrade){ //返回指定年级学生数
Student *p=stu;
int count=0;
for(;p!=NULL;p=p->next)
if(p- 37、>grade==igrade)
count++;
return count;
}//-------------------------------
int Manage::countConStudent(){ //返回总学生数
int count=0;
for(int i=0;i 38、udent->CountOfScore() 39、>grade;judge_grade++)
{
for(judge_term=1;judge_term<=4;judge_term++)
{
//由用户选择是否继续输入
printf("\n******是否输入大%d第%d次考试成绩[是(y)/否(n)/返回(r)]:",judge_grade,judge_term);
cin>>judge_input;
if(judge_input=='y'||judge_input=='Y'){
printf("\n请输入大%d第%d次考试成绩:\n",judge_grade,judge_term 40、); //abs(istudent->CountOfScore()-(istudent->grade-1)*4+1)
//输入成绩
int score[CONOBJ];
for(i=0;i 41、ore(score);
}
else if(judge_input=='n'||judge_input=='N'){
temp=new Score(); //不输入成绩学生会自动赋分数为0
}
else
return ;//返回
//做连接操作
if(istudent->sco==NULL)
istudent->sco=temp;
else
{
Score *p=istudent->sco;
while(p->next!=NULL)
p=p->next;
42、 p->next=temp;
}
temp->next=NULL;
}
}
}//----------------------------------------------------------
void Manage::Compare(){ //比较
}
//------------------------------------------------------
void Manage::OrderObject(){ //各科目成绩排名次,赋值给score类中order[]
if(!isEmpty())
43、
return ;
Student *p,*pp;
Score *qp,*qpp;
int score,ch,ma,eng,igrade=1,times,count=0,c1=0,c2=0,c3=0;
while(igrade<=YEARS){
if(countSpecStudent(igrade)==0){
igrade++;
continue;
}
p=stu;
times=1;
while(times <= igrade*4){
p=stu;
c1++;
//-------关键部分--- 44、//
while(p!=NULL) //p循环是确保每个学生全部进行成绩排序
{
count++;
if(p->grade==igrade)
{
qp=p->sco; //qp指向该次所要排成绩学生成绩开头处
for(int j=0;j 45、 //不一样年级学生数
for(int i=0;i 46、grade && pp->num!=p->num)
{
qpp=pp->sco;
for(int j=0;j 47、rder[1]--;
if(qpp->score[2] <= eng)
qp->order[2]--;
}
pp=pp->next;
}
}
//cout< 48、Inst,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow){
MessageBox(
NULL,
//count,
"您好,欢迎使用!",
"学生成绩管理系统",
MB_OK | MB_ICONINFORMATION
);
return 0;
}
//--------------------------------------------------------------------------
string Manage::OfProfe(){ / 49、/选择学院专业
int kh;
string i;
cout<<"\n\t\t▕▔▔▔▔▔▔▔▔▔▔▔▏\n";
cout<<"\t\t▕ 1.工学院 ▏\n";
cout<<"\t\t▕▔▔▔▔▔▔▔▔▔▔▔▏\n";
cout<<"\t\t▕ 2.理学院 ▏\n";
cout<<"\t\t▕▔▔▔▔▔▔▔▔▔▔▔▏\n";
cout<<"\t\t▕ 3.医学院 ▏\n";
cout<<"\t\t▕▔▔▔▔▔▔▔▔▔▔▔▏\n";
cout<<"\t\t▕ 4.农学院 50、 ▏\n";
cout<<"\t\t▕▔▔▔▔▔▔▔▔▔▔▔▏\n";
cout<<"\t\t▕ 5.经管学院 ▏\n";
cout<<"\t\t▕▔▔▔▔▔▔▔▔▔▔▔▏\n";
cout<<"\t\t▕ 0.退出选择 ▏\n";
cout<<"\t\t ▔▔▔▔▔▔▔▔▔▔▔ \n";
do{
cout<<" \t\t请输入对应学院代号:";
cin>>kh;
}while(!(kh>=0&&kh<6));
cout<<"\t*********************\n";
swit






