资源描述
学籍管理系统设计
课 程 设 计
课程名称__C++面向对象程序设计课程设计 _
题目名称_______学籍管理系统_______ __
学生学院_ _应用数学学院______ _
2014 年 09 月26
摘 要
本系统主要用于对学生的成绩进行管理。通过本系统,可以将各个学生的成绩记录输入到系统中,保存到文件,便于查阅和相关管理。此外,该系统还能实现对学生成绩记录的显示,查询以及插入或删除学生的成绩记录等功能。
为实现本系统,我们通过查找资料,运用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.注册类的设计 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类资料删除界面的代码实现 26
5.6 系统代码的实现 29
六 系统的评价 34
6.1系统的优点 34
6.2系统的缺点 35
七 系统的推广 35
八 论文总结 35
九 参考文献 35
十 成绩评定 36
工作安排
李焕兴:
查找资料,学习他人的成果,训练了VC6.0的运用,进行代码的编写,函数的编译,对实验版进行调试,进行修改得出最终的学籍管理系统。
周一映:
学习论文的编写,对系统的界面进行美化,学习亿图绘图,进行论文的撰写,活跃气氛。
一 系统需求分析
1.1系统设计的目的与意义
随着教育水平的提高,学生数量不断增加,而各样的考试逐渐频繁,因此需要一个学生成绩管理系统来对学生的成绩进行管理,减轻教务人员管理的工作量,提高效率与准确率。
1.2系统功能需求
本系统有六个类, information类、register类、cjcx类、del类、frmNew类、alter类,进行注册、存储学生的个人信息、考试科目及成绩信息。有学生成绩信息录入、学生成绩信息修改、学生成绩信息显示、学生成绩信息删除、学生成绩信息查询以及数据保存文件,返回等功能。
二 功能规格说明
2.1 系统功能分析
系统通过调用函数来实现学生注册、学生成绩信息录入、学生成绩信息修改、学生成绩信息删除、学生成绩信息查询以及数据保存文件等功能。information()类用于进入主界面;regsiter()注册帐号密码;frmNew()学生成绩录入与登记;cjcx()类用于查询学生成绩;alter()类用来修改学生成绩及信息;del()类用于删除学生成绩及信息;主函数main()用于调用这些类。
2.2功能模块
1.进入主界面
要求:进入主界面,进行下一步选择;
2.进行注册
要求:进行账号注册,填写密码;
3.资料登记
要求:学生的信息数据要以文件的形式,能实现学生信息的输入与保存。
4.成绩查询
要求:学生的信息数据要以文件的形式,能实现学生信息的按姓名查询
5.资料修改
要求:学生的信息数据要以文件的形式,能实现学生信息的按姓名修改
6.资料删除
要求:学生的信息数据要以文件的形式,能实现学生信息的按姓名删除
7.排名查询
要求:按姓名查询,对总分进行排序。
2.3系统功能模块图
图1 系统功能模块图
三 系统分析设计说明书
3.1.信息类的设计
该类定义了一个float变量用来存放分数,定义了设置按钮1至5的函数
information
-information: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.资料登记类
该类定义了一个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成员的函数
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.主界面
该界面有登录、注册、退出系统三个按钮,点击不同按钮进入不同界面,可以直接填写姓名、学号、密码进行登录,也可以进行注册,还可以直接退出。
图7学籍管理系统主界面
4.2.注册界面
在主界面点击注册后会进入注册界面,该界面有注册、返回两个按钮,输入姓名、学号、密码进行注册。
图8 注册界面
4.3.登录界面
登录后进入的界面,有资料登记、成绩查询、排名查询、资料修改、资料删除、退出系统六个按钮,点击不同按钮进入不同界面。
图9 登录后界面
4.4.资料登记界面
在登录界面点击资料登记按钮进入该界面,需填入姓名、学号、性别、班级、科目,并有添加、保存、返回三个按钮。
图10 资料登记界面
4.5.成绩查询界面
在登录界面点击成绩查询按钮后进入该界面,有查询、返回两个按钮。
图11 成绩查询界面
4.6.资料修改界面
在登录界面点击资料修改后进入该界面,可以对姓名、学号、班级、性别、科目成绩进行修改,并有确定、返回两个按钮。
图12 资料修改界面
4.7.资料删除界面
在登录界面点击资料删除按钮进入该按钮,有删除、返回两个按钮,可以对学生信息进行删除。
图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"
#include"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* pParent /*=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)
// 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_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();
}
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();
}
void 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_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("");
//}}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(register, 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()
{
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()
{
CTestDlg 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
#undef 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("");
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);
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);
//}}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)
//{{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()
/////////////////////////////////////////////////////////////////////////////
// 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.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.SetItemText(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 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_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);
}
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[] = __FILE__;
#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 = _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_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_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// check message handlers
void check::OnButton5()
{
information obj;
this->OnCancel();//关闭当前窗口
obj.DoModal();
}
void check::OnButton4()
{
int findFlag=0;
struct stuInfo stu;
this->UpdateData(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-> 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)
{
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::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类资料修改界面的代码实现
// 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
/////////////////////////////////////////////////////////////////////////////
// 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_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_classname1);
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_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");
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,
展开阅读全文