1、学籍管理系统设计 课 程 设 计 课程名称__C++面向对象程序设计课程设计 _ 题目名称_______学籍管理系统_______ __ 学生学院_ _应用数学学院______ _ 2014 年 09 月26 摘 要 本系统主要用于对学生的成绩进行管理。通过本系统,可以将各个学生的成绩记录输入到系统中,保存到文件,便于查阅和相关管理。此外,该系统还能实现对学生成绩记录的显示,查询以及插入或删除学生的成绩记录等功能。 为实现本系统,我们通过查找资料
2、运用VC6.0进行编译,操作调试,设计实验版,经过不断地修改,并运用亿图工具画出系统流程图,最后进行调试得出最终版学籍管理系统。 关键字:VC6.0 调试 流程图 目录 摘 要 2 工作安排 3 一 系统需求分析 5 1.1系统设计的目的与意义 5 1.2系统功能需求 5 二 功能规格说明 5 2.1 系统功能分析 5 2.2功能模块 5 2.3系统功能模块图 6 三 系统分析设计说明书 6 3.1.信息类的设计 6 3.2.注册类的
3、设计 7 3.3.资料登记类 7 3.4.成绩查询类 8 3.5.资料修改类 8 3.6资料删除类 8 四 界面设计 9 4.1.主界面 9 4.2.注册界面 9 4.3.登录界面 10 4.4.资料登记界面 11 4.5.成绩查询界面 11 4.6.资料修改界面 12 4.7.资料删除界面 12 4.8.排名查询 13 五 代码实现 14 5.1infortion类主界面代码的实现 14 5.2 frmNew类资料登记界面的代码实现 17 5.3 cjcx类成绩查询界面的代码实现 20 5.4 alter类资料修改界面的代码实现 24 5.5 del类资
4、料删除界面的代码实现 26 5.6 系统代码的实现 29 六 系统的评价 34 6.1系统的优点 34 6.2系统的缺点 35 七 系统的推广 35 八 论文总结 35 九 参考文献 35 十 成绩评定 36 工作安排 李焕兴: 查找资料,学习他人的成果,训练了VC6.0的运用,进行代码的编写,函数的编译,对实验版进行调试,进行修改得出最终的学籍管理系统。 周一映: 学习论文的编写,对系统的界面进行美化,学习亿图绘图,进行论文的撰写,活跃气氛。
5、 一 系统需求分析 1.1系统设计的目的与意义 随着教育水平的提高,学生数量不断增加,而各样的考试逐渐频繁,因此需要一个学生成绩管理系统来对学生的成绩进行管理,减轻教务人员管理的工作量,提高效率与准确率。 1.2系统功能需求 本系统有六个类, information类、register类、cjcx类、del类、frmNew类、alter类,进行注册、存储学生的个人信息、考试科目及成绩信息。有学生成绩信息录入、学生成绩信息修改、学生成绩信息显示、学生成绩信息删除、学生成绩信息查询以及数据保存文件,返回等功能。 二 功能规格说明 2.1 系统功能分析
6、 系统通过调用函数来实现学生注册、学生成绩信息录入、学生成绩信息修改、学生成绩信息删除、学生成绩信息查询以及数据保存文件等功能。information()类用于进入主界面;regsiter()注册帐号密码;frmNew()学生成绩录入与登记;cjcx()类用于查询学生成绩;alter()类用来修改学生成绩及信息;del()类用于删除学生成绩及信息;主函数main()用于调用这些类。 2.2功能模块 1.进入主界面 要求:进入主界面,进行下一步选择; 2.进行注册 要求:进行账号注册,填写密码; 3.资料登记 要求:学生的信息数据要以文件的形式,能实现学生信息的输入与保存。
7、 4.成绩查询 要求:学生的信息数据要以文件的形式,能实现学生信息的按姓名查询 5.资料修改 要求:学生的信息数据要以文件的形式,能实现学生信息的按姓名修改 6.资料删除 要求:学生的信息数据要以文件的形式,能实现学生信息的按姓名删除 7.排名查询 要求:按姓名查询,对总分进行排序。 2.3系统功能模块图 图1 系统功能模块图 三 系统分析设计说明书 3.1.信息类的设计 该类定义了一个float变量用来存放分数,定义了设置按钮1至5的函数 information -info
8、rmation:float +information() +OnButton1():void +OnButton2():void +OnButton3():void +OnButton4():void +OnButton5():void 图2信息类UML图 3.2.注册类的设计 该类定义了一个float类型的变量,定义了按钮2和按钮3成员的函数 register -register:float +register() +OnButton2():void +OnButton3():void 图3信息类UML图 3.3.资料登记类
9、该类定义了一个float类型的变量,定义了按钮5和按钮4成员的函数 frmNew6 -frmNew6:float +OnButton5():void +OnButton4():void 图4frmNew6类UML图 3.4.成绩查询类 该类定义了一个float类型的变量,定义了设置按钮2和按钮1成员的函数。 cjcx -cjcx:float +cjcx() +OnButton2():void +OnButton1():void 图4 cjcx类UML图 3.5.资料修改类 该类定义了一个float类型的变量,定义了按钮2和按钮4成员的函数
10、 alter -alter:float +OnButton2():void; +OnButton4():void 图5 alter类UML图 3.6资料删除类 该该类定义了一个float类型的变量,定义了按钮2和按钮4成员的函数 alter -alter:float +OnButton2():void; +OnButton4():void 图6 del类UML图 四 界面设计 4.1.主界面 该界面有登录、注册
11、退出系统三个按钮,点击不同按钮进入不同界面,可以直接填写姓名、学号、密码进行登录,也可以进行注册,还可以直接退出。 图7学籍管理系统主界面 4.2.注册界面 在主界面点击注册后会进入注册界面,该界面有注册、返回两个按钮,输入姓名、学号、密码进行注册。 图8 注册界面 4.3.登录界面 登录后进入的界面,有资料登记、成绩查询、排名查询、资料修改、资料删除、退出系统六个按钮,点击不同按钮进入不同界面。 图9 登录后界面 4.4.资料登记界面 在登录界面点击资料登记按钮进入该界面,需填入姓名、学号、性别
12、班级、科目,并有添加、保存、返回三个按钮。 图10 资料登记界面 4.5.成绩查询界面 在登录界面点击成绩查询按钮后进入该界面,有查询、返回两个按钮。 图11 成绩查询界面 4.6.资料修改界面 在登录界面点击资料修改后进入该界面,可以对姓名、学号、班级、性别、科目成绩进行修改,并有确定、返回两个按钮。 图12 资料修改界面 4.7.资料删除界面 在登录界面点击资料删除按钮进入该按钮,有删除、返回两个按钮,可以对学生信息进行删除。 图
13、13 资料删除界面 4.8.排名查询 在登录界面点击排名查询按钮后进入该界面,通过总分大小的比较,按总分有高到低进行排名 图14排名查询界面 五 代码实现 5.1infortion类主界面代码的实现 // information.cpp : implementation file // #include "stdafx.h" #include "test2.h" #include "information.h" #include"alter.h" #include"check.h" #inc
14、lude"cjcx.h" #include"del1.h" #include"frmNew.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // information dialog information::information(CWnd* pPar
15、ent /*=NULL*/) : CDialog(information::IDD, pParent) { //{{AFX_DATA_INIT(information) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void information::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(information
16、) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(information, CDialog) //{{AFX_MSG_MAP(information) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_BN_CLICKED(IDC_
17、BUTTON4, OnButton4) ON_BN_CLICKED(IDC_BUTTON5, OnButton5) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // information message handlers void information::OnButton2() { alter obj; this->OnCancel();//关闭当前窗口 obj.DoModal(
18、); } void information::OnButton3() { frmNew obj; this->OnCancel();//关闭当前窗口 obj.DoModal(); } void information::OnButton1() { cjcx obj; this->OnCancel();//关闭当前窗口 obj.DoModal(); } void information::OnButton4() { del obj; this->OnCancel();//关闭当前窗口 obj.DoModal(); } voi
19、d information::OnButton5() { this->OnOK(); } 1. register类注册界面代码的实现 // register.cpp : implementation file // #include "stdafx.h" #include "test2.h" #include "register.h" #include"fst.h" #include"CTestDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_
20、FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // register dialog register::register(CWnd* pParent /*=NULL*/) : CDialog(register::IDD, pParent) { //{{AFX_DATA_INIT(register) m_name0 = _T(""); m_ID0 = 0.0f; m_mima0 = _T("")
21、 //}}AFX_DATA_INIT } void register::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(register) DDX_Text(pDX, IDC_EDIT1, m_name0); DDX_Text(pDX, IDC_EDIT2, m_ID0); DDX_Text(pDX, IDC_EDIT3, m_mima0); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(re
22、gister, CDialog) //{{AFX_MSG_MAP(register) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // register message handlers void register::OnButton2
23、) { struct stuInfo stu; this->UpdateData(true); strcpy(stu.name,m_name0); stu.ID=stu.ID0; strcpy(stu.mima,m_mima0); ofstream os("data.txt",ios::app); os.write((char *)&stu,sizeof(stu)); os.close(); MessageBox("注册成功!"); } void register::OnButton3() { CT
24、estDlg obj; this->OnCancel();//关闭当前窗口 obj.DoModal(); } 5.2 frmNew类资料登记界面的代码实现 // frmNew.cpp : implementation file // #include "stdafx.h" #include "test2.h" #include "frmNew.h" #include"information.h" #include"fst.h" #include"fstream.h" #ifdef _DEBUG #define new DEBUG_NEW #und
25、ef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // frmNew dialog frmNew::frmNew(CWnd* pParent /*=NULL*/) : CDialog(frmNew::IDD, pParent) { //{{AFX_DATA_INIT(frmNew) m_name = _T(""); m_sex = _T("
26、"); m_classname = _T(""); m_ID = 0.0f; m_math = 0.0f; m_English = 0.0f; m_computer = 0.0f; m_paiming = 0.0f; //}}AFX_DATA_INIT } void frmNew::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(frmNew) DDX_Control(pDX, IDC_LIST1, m_list);
27、DDX_Text(pDX, IDC_EDIT1, m_name); DDX_Text(pDX, IDC_EDIT6, m_sex); DDX_Text(pDX, IDC_EDIT7, m_classname); DDX_Text(pDX, IDC_EDIT8, m_ID); DDX_Text(pDX, IDC_EDIT2, m_math); DDX_Text(pDX, IDC_EDIT11, m_English); DDX_Text(pDX, IDC_EDIT9, m_computer); //DDX_Text(pDX, IDC_EDIT10, m_paiming)
28、 //}}AFX_DATA_MAP } BOOL frmNew::OnInitDialog() { CDialog::OnInitDialog(); CString strHeader[8]={"姓名","性别","班级","学号","数学","英语","C++","总分"}; for(int nCol=0;nCol<8;nCol++) m_list.InsertColumn(nCol,strHeader[nCol],LVCFMT_LEFT,60); return TRUE; } BEGIN_MESSAGE_MAP(frmNew, CDialog
29、) //{{AFX_MSG_MAP(frmNew) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1) ON_BN_CLICKED(IDC_BUTTON5, OnButton5) ON_BN_CLICKED(IDC_BUTTON6, OnButton6) //}}AFX_MSG_MAP END_MESSAGE_MAP() /////////////////////////////////////////////////////////////////
30、//////////// // frmNew message handlers void frmNew::OnButton1() { this->UpdateData(true); int nItem=m_list.GetItemCount(); CString str4,str5,str6,str7,str3; str4.Format("%5.0f",this->m_math); str5.Format("%5.0f",this->m_English); str6.Format("%5.0f",this->m_computer); str7.
31、Format("%5.0f",this->m_math+this->m_English+this->m_computer); //str8.Format("%5.0f",this->m_paiming); str3.Format("%5.0f",this->m_ID); m_list.InsertItem(nItem,this->m_name); m_list.SetItemText(nItem,1,this->m_sex); m_list.SetItemText(nItem,2,this->m_classname); m_list.SetIte
32、mText(nItem,3,str3); m_list.SetItemText(nItem,4,str4); m_list.SetItemText(nItem,5,str5); m_list.SetItemText(nItem,6,str6); m_list.SetItemText(nItem,7,str7); //m_list.SetItemText(nItem,8,str8); } void frmNew::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your
33、 control notification handler code here *pResult = 0; } void frmNew::OnButton5() { information obj; this->OnCancel();//关闭当前窗口 obj.DoModal(); } void frmNew::OnButton6() { int findFlag=0; struct stuInfo stu; this->UpdateData(true); strcpy(stu.name,m_name); stu.ID=m
34、ID; strcpy(stu.classname,m_classname); strcpy(stu.sex,m_sex); stu.math=m_math; stu.English=m_English; puter=m_computer; ofstream os("data.txt",ios::app); os.write((char *)&stu,sizeof(stu)); os.close(); this->MessageBox("保存成功!"); UpdateData(FALSE); }
35、 5.3 cjcx类成绩查询界面的代码实现 // check.cpp : implementation file // #include "stdafx.h" #include "test2.h" #include "check.h" #include"information.h" #include"fstream.h" #include"fst.h" #include"frmNew.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FIL
36、E__; #endif ///////////////////////////////////////////////////////////////////////////// // check dialog check::check(CWnd* pParent /*=NULL*/) : CDialog(check::IDD, pParent) { //{{AFX_DATA_INIT(check) m_name = _T(""); m_ID = 0.0f; m_classname = _T(""); m_score = 0.0f; m_sex
37、 = _T(""); //}}AFX_DATA_INIT } void check::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(check) DDX_Text(pDX, IDC_EDIT1, m_name); DDX_Text(pDX, IDC_EDIT2, m_ID); DDX_Text(pDX, IDC_EDIT3, m_classname); DDX_Text(pDX, IDC_EDIT4, m_score); DDX
38、Text(pDX, IDC_EDIT6, m_sex); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(check, CDialog) //{{AFX_MSG_MAP(check) ON_BN_CLICKED(IDC_BUTTON5, OnButton5) ON_BN_CLICKED(IDC_BUTTON4, OnButton4) ON_EN_CHANGE(IDC_EDIT3, OnChangeEdit3) ON_BN_CLICKED(IDC_BUTTON6, OnButton6) //}}AFX_MSG_MAP END_
39、MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // check message handlers void check::OnButton5() { information obj; this->OnCancel();//关闭当前窗口 obj.DoModal(); } void check::OnButton4() { int findFlag=0; struct stuInfo stu; this->U
40、pdateData(true); strcpy(stu.name,m_name); stu.ID=m_ID; strcpy(stu.classname,m_classname); strcpy(stu.sex,m_sex); //stu.score=m_score; ofstream os("data.txt",ios::app); os.write((char *)&stu,sizeof(stu)); os.close(); if (m_name=="") { findFlag=1; this-
41、> MessageBox("姓名空白!"); } if (m_ID==0) { findFlag=1; this->MessageBox("学号空白!"); } if (m_classname=="") { findFlag=1; this-> MessageBox("班级空白!"); } if (m_sex=="") { findFlag=1; this->MessageBox("性别空白!"); } if (m_score==0) {
42、 findFlag=1; this->MessageBox("成绩空白!"); } if (findFlag==0) this->MessageBox("保存成功!"); UpdateData(FALSE); } void check::OnChangeEdit3() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CDialog::
43、OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // TODO: Add your control notification handler code here } void check::OnButton6() { frmNew obj; this->OnCancel();//关闭当前窗口 obj.DoModal(); } 5.4 alter类资料修改界面的代码
44、实现 // alter.cpp : implementation file // #include "stdafx.h" #include "test2.h" #include "alter.h" #include"fstream.h" #include"information.h" #include"fst.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////
45、////////////////////////////////////////////////////// // alter dialog alter::alter(CWnd* pParent /*=NULL*/) : CDialog(alter::IDD, pParent) { //{{AFX_DATA_INIT(alter) m_name1 = _T(""); m_ID1 = 0.0f; m_sex1 = _T(""); m_classname1 = _T(""); m_math1 = 0.0f; m_English1 = 0.0f; m
46、computer1 = 0.0f; //}}AFX_DATA_INIT } void alter::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(alter) DDX_Text(pDX, IDC_EDIT1, m_name1); DDX_Text(pDX, IDC_EDIT2, m_ID1); DDX_Text(pDX, IDC_EDIT4, m_sex1); DDX_Text(pDX, IDC_EDIT5, m_classnam
47、e1); DDX_Text(pDX, IDC_EDIT3, m_math1); DDX_Text(pDX, IDC_EDIT9, m_English1); DDX_Text(pDX, IDC_EDIT10, m_computer1); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(alter, CDialog) //{{AFX_MSG_MAP(alter) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON4, OnButton4) //}}AFX_
48、MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // alter message handlers void alter::OnButton2() { unsigned long position = NULL; int findFlag=0; this->UpdateData(true); struct stuInfo stu; ifstream is("data.txt")
49、 while(is.eof()==0) { position = is.tellg(); is.read((char *)&stu,sizeof(stu)); CString sName; sName.Format("%s",stu.name); if(sName==this->m_name1) { findFlag=1; break; } } is.close(); if(findFlag==0) { this->MessageBox("此姓名数据不存在!"); return; } ofstream os("data.txt", ios::ate); os.seekp(position); strcpy(stu.name,m_name1); stu.ID=m_ID1; strcpy(stu.classname,m_classname1); strcpy(stu.sex,m_sex1); stu.math=m_math1; stu.English=m_English1; puter=m_computer1; os.write((char *)&stu,
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818