C++课程设计学生成绩管理系统Word文档下载推荐.docx
《C++课程设计学生成绩管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++课程设计学生成绩管理系统Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
2.总体设计应画一流程图
3.程序要加必要的注释
4.要提供程序测试方案
5.程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
目录
一概述4
1.1课程设计的目的4
1.2课程设计的要求4
1.3设计说明4
二总体方案设计6
2.1需求分析6
2.2程序流程图7
2.3概要设计7
三详细设计9
3.1程序的模块设计与分析9
3.1.1学生成绩管理登录界面9
3.1.2管理员添加帐号11
3.1.3管理员增加课程12
3.1.4学生选课13
3.1.5老师评定成绩14
四程序的调试与运行结果说明18
4.1功能测试18
五课程设计总结21
参考文献22
一概述
1.1课程设计的目的
1.理解和掌握该课程中的有关基本概念,程序设计思想和方法。
2.培养综合运用所学知识独立完成课题的能力。
3.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
4.掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
1.2课程设计的要求
1.3设计说明
这次课设我做的是学生成绩管理系统,本系统依据开发要求主要针对于教育系统,完成对日常的教育工作对学生成绩档案及其他信息的数字化管理。
开发本系统可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,使各项管理更加规范化。
现在在各大中小学校,用计算机管理学校的信息已经越来越普遍了。
用计算机不但可以提高工作效率,而且还节省了许多人力物力,增强了学校资料的安全性。
提高了学校的管理能力,为此,用计算机来管理学校的信息,是非常必要的。
目前,学校工作繁杂、资料重多,目前还没有一套完整的、统一的系统。
因此,开发一套适和大众的、兼容性好的系统是很有必要的,但由于知识积累及时间关系,这次课设我所设计的系统不是很完善,有些地方没有考虑到,所以实用性大打折扣,后面有时间将会将系统设计的全面些,更具有实用性。
在这次课设的开发过程中,我注意使其符合软件工程的设计的要求,在之前准备了许多时间来设计表结构,并将各个模块的流程画出来,使系统的各个模块功能完善,并力求系统应具有实用性、可靠性和适用性方便用户的操作,尽量减少用户的操作,并且能够对查询结果进行分类汇总,该系统还有许多不尽如人意的地方,比如用户界面不够美观,对于出错处理不够等多方面问题,这些都有待进一步改善。
二总体方案设计
2.1需求分析
“学生成绩管理信息系统”包括四个模块:
用户添加、学生选课、课程添加、成绩给定。
这四个模块既相互联系又相互独立,学生选课、成绩给定模块必须以课程添加为基础。
1.用户添加:
主要功能是管理员对学生、老师、课程的添加。
具体包括对学生和老师添加相应的帐号,姓名,密码的功能等信息。
2.学生选课:
主要功能通过选择课程号,课程序号来确定该学生所选择的课程。
3.成绩给定:
主要功能教师通过选择课程号,课程序号,再选定学生学号给定该学生的成绩。
4.课程添加:
开课的功能是增加课程号,课程序号,课程名,开课教师工作证号,和该课程相应的学分等信息。
程序通过登录界面,选择是管理员,学生或者是教师登入系统中,登录系统后,进行相应给定的功能。
1.管理员:
用户添加,课程添加。
2.学生:
选课,查看自己的不及格课程。
3.教师:
选择任教课程和给学习该课程的学生打分。
2.2程序流程图
在程序流程图里是程序功能模块图,主要说明了程序的运行流程。
图2-1程序功能模块图
2.3概要设计
在概要设计里,根据系统需求设计学生流图,教师与管理员流图。
图2-2学生流图
图2-3教师与管理员流图
三详细设计
3.1程序的模块设计与分析
3.1.1学生成绩管理登录界面
图3-1学生成绩管理登录界面
voidCMyDlg:
:
OnSigninButton()
{managermng;
teachertch;
studentstu;
IntiTypeRadio=GetCheckedRadioButton(IDC_MANAGER_RADIO,IDC_TEACHER_RADIO);
charstr[10]="
"
;
UpdateData();
if(m_user==_T("
"
)||m_pass==_T("
))
{MessageBox("
用户名和密码不可以为空!
);
}
elseif(iTypeRadio==IDC_MANAGER_RADIO)
{strcpy(str,"
管理员.txt"
if(SignIn(str))
{OnClearButton();
mng.ID=id;
mng.Name=name;
mng.DoModal();
ElseInputWrong();
elseif(iTypeRadio==IDC_STUDENT_RADIO)
学生.txt"
if(SignIn(str))
stu.ID=id;
stu.Name=name;
stu.DoModal();
elseif(iTypeRadio==IDC_TEACHER_RADIO)
教师.txt"
tch.ID=id;
tch.Name=name;
tch.DoModal();
}}
inlinevoidCMyDlg:
InputWrong()//输入错误处理
{MessageBox("
输入错误,请重新输入"
OnClearButton();
m_user=_T("
m_pass=_T("
CheckRadioButton(IDC_MANAGER_RADIO,IDC_TEACHER_RADIO,IDC_MANAGER_RADIO);
UpdateData(FALSE);
BOOLCMyDlg:
SignIn(char*str)//登录
{ifstreamm_ifile(str,ios:
in);
if(!
m_ifile)
returnFALSE;
CStringusertemp,passtemp,nametemp;
floatgpatemp;
m_ifile.seekg(0);
if(strcmp(str,"
)==0)
{while(m_ifile>
>
usertemp>
nametemp>
passtemp>
gpatemp)
{if(usertemp==m_user&
&
passtemp==m_pass)
{name=nametemp;
id=usertemp;
returnTRUE;
}}}
while(m_ifile>
passtemp)
{if(usertemp==m_user&
{name=nametemp;
}}
3.1.2管理员添加帐号
图3-2管理员添加帐号
voidmanager:
OnNewButton()
{intiTypeRadio;
if(m_newpass==_T("
)||m_newuser==_T("
)||m_newname==_T("
用户名,密码和姓名都不可以为空,请重新输入!
return;
iTypeRadio=GetCheckedRadioButton(IDC_MANAGER_RADIO2,IDC_TEACHER_RADIO2);
switch(iTypeRadio)
{caseIDC_MANAGER_RADIO2:
strcpy(str,"
CreateID(str);
break;
caseIDC_STUDENT_RADIO2:
caseIDC_TEACHER_RADIO2:
strcpy(str,"
CreateID(char*str)//将用户添加到文件
{ofstreamm_ofile(str,ios:
app);
CStringspac("
),ente('
\n'
m_ofile)
错误"
OnClearButton();
Else{if(strcmp(str,"
m_ofile<
<
m_newuser<
m_newname<
m_newpass<
spac<
-1.0"
ente;
Elsem_ofile<
3.1.3管理员增加课程
图3-3管理员增加课程
voidcurriculum:
OnExitButton()
{OnCancel();
OnClearButton()
{m_credit=0;
m_currID=_T("
m_currName=_T("
m_currNum=_T("
m_currTch=_T("
UpdateData(false);
OnSignButton()//确定按钮
{ofstreamosign("
课程.txt"
ios:
osign<
m_currID<
m_currNum<
m_currName<
m_currTch<
m_credit<
'
osign.~ofstream();
3.1.4学生选课
图3-4学生选课
voidSIGNCURRI:
OnSelchangeCurridCombo()
{CStringsCurrID;
intnSel=m_currID.GetCurSel();
if(nSel==CB_ERR)return;
m_currID.GetLBText(nSel,sCurrID);
ifstreamifcourse("
ifcourse.seekg(0);
inti,n=m_currNum.GetCount();
for(i=1;
i<
=n;
i++)
{m_currNum.DeleteString(n-i);
CCurricurr;
while(ifcourse>
curr)
{if(curr.currID==sCurrID
&
m_currNum.FindStringExact(-1,curr.currNum)==CB_ERR)
{m_currNum.AddString(curr.currNum);
m_currNum.SelectString(-1,curr.currNum);
UpdateData();
ifcourse.~ifstream();
OnSelchangeCurrnumCombo();
OnSelchangeCurrnumCombo()
{UpdateData();
CStringsCurrID,sCurrNum;
intiSel=m_currID.GetCurSel();
if(iSel==CB_ERR)return;
m_currID.GetLBText(iSel,sCurrID);
intnSel=m_currNum.GetCurSel();
m_currNum.GetLBText(nSel,sCurrNum);
{if(curr.currID==sCurrID&
curr.currNum==sCurrNum)
{m_currName=curr.currName;
UpdateData(false);
break;
3.1.5老师评定成绩
图3-5老师评定成绩
BOOLteacher:
OnInitDialog()
{CDialog:
OnInitDialog();
externCStringname,id;
Name=name;
ID=id;
m_welcome="
欢迎"
+Name+"
老师!
CStringsCurrID;
{if(curr.currTch==ID&
m_currID.FindStringExact(-1,curr.currID)==CB_ERR)
{m_currID.AddString(curr.currID);
m_currID.SelectString(-1,curr.currID);
OnSelchangeCurridCombo();
OnSelchangeStuidCombo();
returnTRUE;
}
voidteacher:
{m_stuName=_T("
m_grade=0;
OnGradeButton()
{CStringstuID;
m_stuID.GetWindowText(stuID);
m_currID.GetWindowText(sCurrID);
m_currNum.GetWindowText(sCurrNum);
floatgrade=0.0,credit=0.0;
floatGPA;
fstreamfgrade("
选课.txt"
in|ios:
out);
CSignCoursesc;
fgrade)return;
streampospos;
fgrade.seekg(0);
while(fgrade>
sc.ID>
sc.currID>
sc.currNum>
sc.grade)
{if(sc.ID==stuID)
{if(sc.currID==sCurrID&
sc.currNum==sCurrNum)
{pos=fgrade.tellp();
fgrade.seekp(pos-2);
fgrade<
m_grade;
sc.grade=m_grade;
if(sc.grade>
=60)
{ifstreamifcourse("
ios:
ifcourse.seekg(0);
CCurricurr;
while(ifcourse>
if(sc.currID==curr.currID&
sc.currNum==curr.currNum)
{credit+=curr.credit;
grade+=sc.grade*curr.credit;
if(credit)GPA=grade/credit;
ifcourse.~ifstream();
charsName[15],sUser[15],sPass[15];
floatsGPA;
fgrade.~fstream();
fstreamfstu("
fstu)return;
fstu.seekg(0);
while(fstu>
sUser>
sName>
sPass>
sGPA)
{CStringsname(sName),suser(sUser),spass(sPass);
if(suser==stuID)
{pos=fstu.tellp();
fstu.seekp(pos-4);
fstu<
setprecision(3)<
GPA;
fstu.~fstream();
{OnOK();
CStringstrText;
m_currID.GetLBText(nSel,strText);
inti,n=m_currNum.GetCount();
i<
=n;
{if(curr.currTch==ID&
curr.currID==strText
{m_currNum.AddString(curr.currNum);
OnSelchangeStuidCombo(){
CStringstuID;
intnSel=m_stuID.GetCurSel();
if(nSel==CB_ERR)
{m_stuName=_T("
UpdateData(false);
return;
m_stuID.GetLBText(nSel,stuID);
ifstreamm_ifile("
m_ifile)return;
floatGPAtemp;
GPAtemp)
{if(usertemp==stuID)
{m_stuName=nametemp;
m_ifile.~ifstream();
{