C++学生管理系统Word文档下载推荐.docx
《C++学生管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++学生管理系统Word文档下载推荐.docx(50页珍藏版)》请在冰点文库上搜索。
2010年6月12日,指导教师讲课,学生根据题目准备资料;
2010年6月13日、17日、18日,设计小组进行总体方案设计和任务分工;
每人完成自己承担的程序模块并通过独立编译;
2010年6月21日~2010年6月24日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;
同时撰写报告。
2010年6月25日,验收;
提交课程设计报告。
指导教师签章:
教研室主任签章
面向对象程学设计课程设计指导教师评语与成绩
指导教师评语:
课程设计表现成绩:
课程设计验收成绩:
课程设计报告成绩:
课程设计总成绩:
指导教师签章
2010年6月28日
目录
第1章需求分析1
1.1性能需求1
1.2功能需求1
第2章概要设计2
2.1功能模块设计2
2.2类的分析与设计2
第3章详细设计3
3.1数据录入功能模块设计3
以下是数据录入模块的主要代码:
3
3.2查找功能模块设计6
第4章调试分析与测试结果9
4.1调试分析9
4.2测试结果10
第5章用户使用说明12
参考文献13
附录14
第1章需求分析
1.1性能需求
在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,怎样提高工作效率是人们首先考虑的问题。
学生成绩管理是一个非常繁琐与复杂的一项工作,一个原因就是工作量大,不好管。
对于一个学校而言,更应该运用一些本地资源,提高管理的力度,对学生负责,对国家负责。
显然,靠手工进行管理这种管理方式已不能适应时代的发展,学校的需求。
今天这种传统的管理方法必然会被计算机为基础的信息管理系统所代替。
同时这种传统的管理方式反映出很多问题:
第一,当要查询某个同学或某个班级的成绩情况极不方便;
第二,每次考试省校把成绩发到学校,老师都花大量时间才能把成绩转发到各个班级,同时在登记成绩时,考试分数登记的正确率也较难保证;
第三,一年又一年的成绩单不断累加,需要有一定的空间来存储,这样管理起来需要投入大量的人力、物力和财力;
第四,成绩的可靠性、保密性很低;
第五、现在学校虽已用计算机进行部分成绩的管理,但管理工作并不完善,未形成系统的管理,有很大的局限性。
基于以上情况,开发一个学生成绩管理系统是十分必要的。
开发一个学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高了学校的办学效益和现代化水平。
为教务处的教师在最短的时间把学生的成绩核算出来,提高教务处的工作效率,实现学生成绩信息管理工作流程的系统化、规范化和自动化。
学生成绩管理是学校管理中异常重要的一个环节,学生成绩管理的计算机化是整个学校教务管理中的重要一部分,能否实现这一步关系到学校办学整体效率的高低,鉴于它的重要性,学生成绩管理系统的开发与应用就逐渐提入议程,并占着越来越重要的份量。
运用学生成绩管理系统可以减轻学校教务管理人员的工作量,减少开支,提高工作效率与准确率,能够合理安排时间,并尽快发布学生的考试成绩。
1.2功能需求
我们设计的一个方便学校使用的学生成绩管理系统,这个系统的功能比较完善。
使用类内函数和主函数中的switch语句实现多分支选择结构,进而实现该系统的各项功能。
该系统能实现七项功能:
1.录入成绩、2.删除记录、3.修改记录、4.记录排序(1按学号排序、2按总分排序、3按平均分排序)、5.查看所有记录、6.查找信息(按学号查找、按姓名查找)、7.删除全部记录。
设计本次实验所用到的知识点有:
类和对象文件、指针、数组、友元函数,构造函数,动态内存分配,FOR循环、switch语句、if语句、dowhile()语句等。
第2章概要设计
2.1功能模块设计
学生成绩管理通过主控模块进入系统并提示相应功能供用户选择。
用户选择后进入到各个功能模块,实现成绩录入、修改、删除、查询等功能,在排序时也提供用户学号、总分、平均分等选项分别按逆序、升序排列,也可查看、删除全部数据。
基于此,提供用户以上功能。
2.2类的分析与设计
本系统中定义了一个stu类,在stu类中的构造函数是来实现当类生成对象时用于对数据的初始化,其他成员函数分别实现录入、删除、排序、查找、排序等功能。
本系统的特点在于定义了几个类的指针,实现内存的动态分配,这点非常关键,同时通过它进行动态创建列表,进一步实现排序,查询的功能。
stu类中的数学,英语,计算机成绩为类的私有成员。
程序运行时,进入《学生成绩管理系统》的选择操作界面,应先选择输入数据操作,向文件中输入学生数据和成绩,再根据提示进行其它的操作。
在输入过程中输入的数据分别为姓名,数学成绩,语文成绩和英语成绩这样有助于其它操作的进行,对于菜单大部分我选择使用swich语句来完成,还有用到一些if语句的嵌套。
当继续执行以下操作时选择任意键,否则0。
最后执行0退出界面。
第3章详细设计
3.1数据录入功能模块设计
设计思想:
我设计的数据录入模块,是根据学生类来动态创建对象,并通过键盘输入来实现对学生成绩的初始化。
在输入完一个学生的成绩信息之后,系统会提示使用者是否继续录入,以此来达到数据录入的功能。
详细功能:
数据录入模块的主要功能就是通过键盘输入学生的学号,姓名,数学,英语,计算机成绩。
数据录入模块是实现其他模块的基础,因此在这个模块里,我加入了对各种信息的判断识别,以求录入的数据合理,正确。
这个模块的功能其实非常简单,模块中要考虑到多种信息的判断,因此,设计功能上要求我要尽可能的考虑周全,另外为了系统更加容易理解,在出错之后,模块会自动返回上一层,并带有相应的文字提示,可以说,录入模块为之后各项功能的正常运行提供了可靠的保证。
voidstudent:
:
cin_app()
{
student*p=curnode;
boolb=0;
stringNumber;
stringName;
doubleComputer;
doubleENglish;
doubleMath;
while
(1)
{
cout<
<
"
学号:
;
cin>
>
Number;
curnode=head->
next;
while(curnode!
=NULL)
{
b=(Number==curnode->
number);
curnode=curnode->
}
if(!
b)
break;
else
cout<
┏━━━━━━━━━━━━━━┓"
endl;
┃出现了相同的学号,请重新输入┃"
┗━━━━━━━━━━━━━━┛"
}
curnode=p;
cout<
姓名:
cin>
Name;
计算机:
Computer;
while(cin.fail())
err_char();
cin>
if(Computer>
=0&
&
Computer<
=100)
score_err();
英语:
ENglish;
if(ENglish>
ENglish<
数学:
Math;
if(Math>
Math<
this->
app_score(Number,Name,Computer,ENglish,Math);
┏━━━━━━━━┓"
┃!
已添加一条记录!
┃"
┗━━━━━━━━┛"
"
system("
pause"
);
}
以下是数据录入模块的流程图:
开始
3.2查找功能模块设计
查找功能主要是对已经录入系统的学生信息进行查找,我设计的查找功能可以通过学生姓名和学生学号两种方式来进行查找,这样可以实现信息查找的有效性和多样性。
查找模块可以进行两种方式的搜索,别分时通过学生姓名,以及学生学号的查找。
这两种方式可以保证使用者能够查找到自己所需的信息,查找模块在搜索之后会现实相应的查找结果,在查找结束后,按任意键,系统返回主菜单。
以下是查找模块的主要代码:
lookup(intn,stringstr)
boolb;
//定义i=1,当找到数据时把i置为0.用于输出没有找到数据
inti=1;
if(!
(curnode=head->
next))
┏━━━━━━━┓"
这是一个空表!
┗━━━━━━━┛"
curnode=p;
return;
┏━━━━━┳━━━━━┳━━━┳━━━┳━━━┳━━━━┳━━━━┳━━┓"
┃学号┃姓名┃计算机┃英语┃数学┃总分┃平均分┃等级┃"
┣━━━━━╋━━━━━╋━━━╋━━━╋━━━╋━━━━╋━━━━╋━━┫"
while(curnode!
switch(n)
case1:
b=curnode->
number==str;
break;
case2:
name==str;
default:
return;
if(b)
i=0;
┃"
left<
setw(10)<
curnode->
number;
name;
setw(6)<
computer;
English;
math;
curnode->
sum_score();
setw(8)<
sum;
ave_score();
ave;
grade_score();
setw(4)<
grade<
curnode=curnode->
//当i=1是代表没有找到数据
if(i)
┣━━━━━┻━━━━━┻━━━┻━━━┻━━━┻━━━━┻━━━━┻━━┫"
┃没有匹配的数据┃"
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"
else
┗━━━━━┻━━━━━┻━━━┻━━━┻━━━┻━━━━┻━━━━┻━━┛"
以上是本次查找的结果!
以下是查找模块的流程图:
第4章调试分析与测试结果
4.1调试分析
图4.1.1——错误提示
如图4.1.1,这是我们在测试时发生了指针的一些相关错误,起初定义了一个派生类来实现计算成绩和平均值的功能,但在调用指针时,便无法访问基类对象的相关数据。
由于学生成绩是类的私有成员。
因此,我们在基类中定义了定义了类的指针,解决了这个问题。
运行测试时,头文件也曾出现问题,工程中没有包含“stdfx.h”的头文件的问题,之后我在工程中重新加入了相关头文件,程序最后运行成功。
4.2测试结果
图4.2.1——系统主菜单
如图4.2.1,这是程序运行成功之后的系统界面的主菜单。
图4.2.2——数据录入
如图4.2.2,这是数据成功录入的界面。
如图4.2.3——排序列表
如图4.2.3,这是系统自动排序生成的列表,能够一目了然的观察到排名结果。
第5章用户使用说明
此系统是学生成绩管理系统,程序运行时,进入《学生成绩管理系统》的选择操作界面,应先选择输入数据操作,向文件中输入足够的学生数据,再进行其它的操作。
首先应选1选项,是数据录入,只有先选1才能进行以下操作,之后你就可以按照后面的功能进行选择了。
每完成一项功能之后,系统便提示任意键继,您便会返回主界面进行相信的功能选择。
按0键可退出学生成绩管理系统。
使用学生成绩管理系统能够大大减少运算量,最后谢谢您的使用。
参考文献
[1]郑莉,董渊,张润丰,C++语言程序设计题解与上机指导(第二版),北京,清华大学出版社,2003年12月。
[2]中南论坛网。
附录
源程序代码:
#include<
iostream>
string>
fstream>
iomanip>
usingnamespacestd;
classstudent
private:
stringnumber;
stringname;
doublecomputer;
doubleEnglish;
doublemath;
doublesum;
doubleave;
chargrade;
student*head;
student*curnode;
student*next;
public:
student();
//不带参数的构造函数
student(string,string,double,double,double,double=0.0,double=0.0,char=NULL);
//带数据域参数的构造函数,用来动态建立节点
voidsum_score();
//总分函数
voidave_score();
//平均分函数
voidgrade_score();
//成绩等级
voidcin_app();
//修改用
voidapp_score(string,string,double,double,double);
//动态的建立节点
voiddel_score();
//删除全部节点
voiddisplist();
//输出节点中的全部数据
voidlookup(int,string);
//查找函数
voiddel_score(int,string);
//删除函数
voidcompositor(int,int);
//排序函数
voidrework(int,string);
//修改函数
};
/////////////////////////////////////////////
/////////////////////////////////////////////student类的实现
voiderr_char();
//输入错误字符检测函数
voidscore_err();
//成绩范围检测函数,当输入成绩不在0到100之间时提示重新输入
student:
student():
next(NULL)//不带参数的构造函数
head=curnode=this;
//带参数的构造函数
student(stringNumber,stringName,doubleComputer,doubleENglish,doubleMath,doubleSum,doubleAve,charGrade):
next(NULL)
number=Number;
name=Name;
computer=Computer;
English=ENglish;
math=Math;
sum=Sum;
ave=Ave;
grade=Grade;
sum_score()///////////////////////计算总成绩
{sum=computer+English+math;
ave_score()/////////////////////计算平均成绩
{ave=(computer+English+math)/3.0;
grade_score()///////////////////计算成绩等级
inti;
i=ave;
switch(i/10)
case10:
grade='
A'
break;
case9:
case8:
B'
case7:
C'
case6:
D'
default:
E'
app_score(stringNumber,stringName,doubleComputer,doubleENglish,doubleMath)//动态建立节点
curnode->
next=newstudent(Number,Name,Computer,ENglish,Math);
curnode=curnode->
del_score()//////////////////////删除表中的全部数据
student*p;
curnode=head->
p=curnode->
deletecurnode;
head->
next=NULL;
curnode=head;
┏━━━━━━━━━━━━━━━━━━━┓"
┃!
表中内容全部清空,现已是一个空表!
┃"
┗━━━━━━━━━━━━━━━━━━━┛"
displist()////////////////////////输出表中的全部数据
if(head->
next==NULL)
┏━━━━━━━━━┓"
┗━━━━━━━━━┛"
student*pw=curnode;
=NUL