学籍管理系统.docx
《学籍管理系统.docx》由会员分享,可在线阅读,更多相关《学籍管理系统.docx(27页珍藏版)》请在冰豆网上搜索。
学籍管理系统
成绩
评阅人
评阅日期
计算机科学与技术系
数据库课程设计
设计题目:
学生学籍管理系统
班级:
学号:
姓名:
指导老师:
2006年12月25日
目录
1.学生学籍管理系统简介3
2.数据库需求分析3
3.系统总体设计3
3.1系统物理结构设计3
3.2系统体系结构设计3
3.2.1基本信息管理功能集合4
3.2.2考核管理功能集合4
3.2.3用户管理及权限控制功能集合5
3.2.4系统流程分析5
4.数据库设计6
4.1数据库概念结构设计6
4.2数据库逻辑结构设计8
4.3数据库物理设计9
4.3.1关系数据库的存取方法9
4.3.2数据库的存储结构9
4.3.3评价物理结构10
5.程序模块设计10
5.1登陆窗体和系统主界面设计10
5.1.1设计登陆窗体10
5.1.2设计主界面11
5.2学生基本信息管理模块设计12
5.2.1功能需求12
5.2.2界面设计13
5.2.3程序代码设计与分析14
5.2.4运行结果19
6.参考文献19
一、学生学籍管理系统简介:
学籍管理是高等院校学生管理事务中的一项重要工作,在管理过程中涉及大量的数据处理,它的内容对于学校的决策者和管理者来说都至关重要,所以学生学籍管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:
效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对学生学籍信息进行管理,具有着手工管理所无法比拟的优点.例如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高学生学籍管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
因此,开发这样一套管理软件成为很有必要的事情。
二、数据库需求分析:
高等院校学籍管理涉及院系信息、班级信息、任课教师信息、学生信息、学籍变更信息、学生奖惩信息、课程信息以及选课信息和成绩等多种数据信息。
学籍管理用户包括系统管理员、教师和学生。
系统管理员负责日常的学籍管理工作,如各种基本信息的录入、修改、删除等操作。
教师使用该系统可完成教学班信息查询和成绩管理。
学生使用该系统主要完成选课和成绩查询等操作。
经过调研与分析,高等院校学籍管理系统主要应具有以下功能。
(1)院系信息管理。
院系信息管理包括院系信息数据的录入、修改与删除等功能。
(2)学生信息管理。
学生信息管理包括学生信息的录入、修改与删除等功能。
(3)学生教育经历信息管理。
学生教育经历信息管理包括录入、修改与删除等功能。
(4)学生奖惩信息管理。
学生奖惩信息管理包括学生奖惩信息的录入、修改与删除等功能。
(5)学籍变更信息管理。
学籍变更信息管理包括学籍变更信息的录入、修改与删除等功能。
三、系统总体设计:
1、系统物理结构设计
本系统采用C/S体系结构,Client(客户端)负责提供表达逻辑、显示用户界面信息、访问数据库服务器;Server(服务器)端用于提供数据服务。
开发数据库管理信息系统需要选择两种工具,即前台开发语言和后台数据库。
开发C/S(客户/服务器)结构的应用程序时,前台开发语言通常选择BASIC、VISUALC++、DELPHI和POWERBUILDER等;如果开发网络应用程序,则需要选择网络数据库系统,例如SQLSERVER、ORACLE等;如果开发单机应用程序,则选择一个小型数据库系统就可以了,比如ACCESS。
鉴于对VISUALC++熟悉,功能强大、面向对象等特点,所以本系统采用VISUALC++作为开发工具,SQLSERVER作为后台数据库,以提供一个高性能的管理信息系统解决方案。
2、系统体系结构设计
根据功能分析总结系统的体系结构。
系统的功能模块如图所示:
在本系统中,可以把功能模块分为以下3个功能集合来描述:
(1)基本信息管理功能集合
包括院系信息管理和学生信息管理等功能模块。
此集合中功能模块的关系如图:
学生基本信息管理模块是整个系统的核心。
除了院系管理模块外,其他各个模块都针对每个学生的一个方面进行管理,都需要提供学生编号等基本信息作为索引。
(2)考核管理功能集合
包括考勤管理和考评管理模块。
此集合中功能模块的关系如图所示:
(3)用户管理及权限控制功能集合
包括用户信息管理、权限控制等模块。
权限控制虽然不是一个独立存在的模块,但是它却贯穿整个系统的运行过程当中。
在本系统中,用户管理模块的功能比较简单。
在系统初始化时,有两个默认的用户。
系统管理员用户为paradise,普通用户为user,手动添加到数据库中。
他们的默认密码为123。
paradise用户可以创建用户、修改用户信息和删除用户;普通用户只能修改自己的密码和查询信息。
用户管理功能模块的关系如图所示:
(4)系统流程分析
在本系统中,应该首先增加院系信息,再增加学生信息。
院系信息管理模块可以添加、修改、删除和查看院系等操作,院系信息包括院系名称和上级机构等。
添加院系信息后,就可以添加学生信息了。
在学生信息管理模块中可以对学生信息进行添加、修改、删除和查看操作。
学生基本信息包括姓名、性别、民族、籍贯、成绩、身份证号等信息。
学生信息是系统的核心数据,它为学生个人简历模块、学生奖励和处罚模块和学籍管理模块提供学生数据。
在学籍变动管理模块中,可以对学籍变动信息进行添加、修改、删除和查询操作。
学籍变动包括学生、变动类型、转入学校、转入院系、学籍变动原因和备注等信息。
在添加学籍变动信息需要选择学生和院系信息。
在学生奖惩管理模块中,可以对学生的奖励和处罚信息进行添加、修改、删除和查询等操作。
奖惩信息包括学生、奖惩类型和具体署名等信息。
在添加奖惩信息时需要选择学生信息。
本系统的流程分析如图所示:
四、数据库设计
数据库结构设计的好坏将直接对应用系统的效率以及与实现的效果产生影响,好的数据库结构设计会减少数据库的存储量,数据的完整性和一致性比较高,系统具有较快的响应速度等等。
1、数据库概念结构设计
(1)学生实体E-R图
(2)学生转出实体E-R图
(3)学生休学E-R图
(4)学生退学实体E-R图
(5)学生考评实体E-R图
(6)学生调班实体E-R图
(7)学生留级(跳级)实体E-R图
(8)各实体之间的E-R图
2数据库逻辑设计
(1)Department表(院系信息表)如表所示。
字段名称
类型
宽度
允许空值
主键
说明
Dep_id
char
6
NOTNULL
是
院系编号
Dep_name
char
20
NOTNULL
院系名称
Describe
char
8
NULL
院系描述
UpperId
int
2
NULL
上级院系编号
(2)Student表(学生信息表)如下表所示。
字段名称
类型
宽度
允许空值
主键
说明
sno
char
8
NOTNULL
是
学生学号
sname
char
8
NOTNULL
学生姓名
sex
char
2
NULL
学生性别
native
char
20
NULL
籍贯
birthday
smalldate
4
NULL
学生出生日期
cno
char
6
NULL
学生所在院系编号(外键)
spno
char
8
NULL
专业代码(外键)
classno
char
4
NULL
班级号
entime
smalldate
4
NULL
学生入校时间
home
varchar
40
NULL
学生家庭住址
tel
varchar
40
NULL
学生联系电话
(3)Experience表(学生教育经历信息表)如下表所示。
字段名称
类型
宽度
允许空值
主键
说明
Exp_id
smallint
2
NOTNULL
是
记录号
sno
char
8
NOTNULL
学生学号(外键)
StartDate
datetime
10
NOTNULL
开始日期
EndDate
datetime
10
NOTNULL
终止日期
School
Varchar
50
NOTNULL
学校名称
Title
varchar
20
NULL
职务
(4)Evaluation表(奖励和处罚信息表)如下表所示。
字段名称
类型
宽度
允许空值
主键
说明
Eva_id
smallint
2
NOTNULL
是
记录号
sno
char
8
NOTNULL
学生学号(外键)
EvaType
char
1
NOTNULL
奖罚类型
EvaDate
datetime
8
NOTNULL
记录时间
Description
varchar
100
NULL
描述
(5)Change表(学籍变更信息表)如下表所示。
字段名称
类型
宽度
允许空值
主键
说明
Changeid
smallint
2
NOTNULL
是
记录号
sno
char
8
NOTNULL
学生学号(外键)
ChangeType
char
1
NOTNULL
变更类型
OldClass
varchar
50
NOTNULL
原班级名称
Newschool
varchar
50
NULL
新学校名称
ChangeDate
datetime
8
NOTNULL
变动日期
Reason
varchar
200
NOTNULL
变动原因
Description
varchar
200
NULL
描述
(6)Users表(用户信息表)如下表所示。
字段名称
类型
宽度
允许空值
主键
说明
UserName
char
8
NOTNULL
是
用户名
Pwd
char
8
NULL
密码
User_type
int
4
NOTNULL
操作权限
(7)外键定义表如下表所示。
关系名
主键表
主键字段
外键表
外键字段
FK_Students_Department
classes
cno
student
cno
FK_Experience_Student
student
Sno
Experience
sno
FK_Change_Student
student
sno
change
sno
FK_Evaluation_Student
student
sno
evaluation
sno
3、数据库物理设计
(1)关系数据库的存取方法:
采用索引方法,主要是B+树索引方法。
(2)数据库的存储结构:
录入数据采用表格方式,限制录入数据类型及取值范围以保证数据的完整性及准确。
由于条件不允许,本系统没有将表和索引放在不同的磁盘,没有能够实现磁盘驱动器并行工作,降低了物理I/O读写的效率。
为了改进系统的性能,我选择把比较大的表分放在两个磁盘上,以加快存取速度。
(3)评价物理结构:
数据完成的时间性:
如成绩的录入,仅当师资科录入教学进程,教务科分发教师教学任务安排之后,各系方可录入成绩。
数据安全性:
本系统采用二级安全保障:
第一级:
依赖于网络本身对用户使用权限的规定。
第二级:
在程序模块中通过使用密码控制功能对用户使用权限加以限制。
五、程序模块设计
1、登陆窗体和系统主界面设计
(1)设计登陆窗体:
登陆窗体的名称为“登陆对话框”,界面布局如图所示:
输入用户名的编辑框为IDC_USERNAME_EDIT,输入密码的编辑框为IDC_PWD_EDIT,在属性窗口中,选中编辑框IDC_PWD_EDIT的Password属性。
当用户单击“确定”按钮时,将发送BN_CLICKED消息,在ClassWizard窗口中为其添加CLoginDlg:
:
OnOK(),代码如下:
voidCLoginDlg:
:
OnOK()
{
//将对话框中编辑框的数据读取到成员变量中
UpdateData(TRUE);
//检查数据有效性
if(m_UserName=="")
{
MessageBox("请输入用户名");
return;
}
if(m_Pwd=="")
{
MessageBox("请输入密码");
return;
}
//定义CUsers对象,用于从表Users中读取数据
CUsersuser;
user.GetData(m_UserName);
//如果读取的数据与用户输入数据不同,则返回
if(user.GetPwd()!
=m_Pwd)
{
MessageBox("用户信息不正确,无法登录!
你这丫是不是把密码忘记了?
");
return;
}
//关闭对话框
CDialog:
:
OnOK();
}
(2)设计主界面:
主界面的名称为“学生学籍管理”,加入菜单项,主界面如下图所示:
打开ClassWizard窗口,为菜单项IDR_EXIT添加代码,对应的函数为CHrSysDlg:
:
OnExit(),代码如下:
voidCHrSysDlg:
:
OnExit()
{
//TODO:
Addyourcommandhandlercodehere
OnOK();
}
2、学生基本信息管理模块设计
(1)学生基本信息管理模块可以实现以下功能:
创建学生记录、修改学生基本信息、删除学生记录、查看学生基本信息。
(2)界面设计
①设计学生基本信息编辑窗体
②设计学生信息管理窗体
③设计选择学生信息窗体
(3)程序代码设计与分析
①Refresh_Data()函数功能是根据用户选择的院系和学生状态信息设置select语句而刷新DataGrud表格中的数据,代码:
voidCEmpManDlg:
:
Refresh_Data()
{
UpdateData(TRUE);
intiDepId;
HTREEITEMnode;
node=m_tree.GetSelectedItem();
iDepId=m_tree.GetItemData(node);
CStringcDepId;
cDepId.Format("%d",iDepId);
CStringcSource="SELECTEmp_Id,Emp_NameAS姓名,SexAS性别,";
cSource+="NationalityAS民族,BadgeID学生证,PositionAS专业,";
cSource+="Family_PlaceAS籍贯FROMEmployeesWHEREDep_Id="+cDepId;
intiType=m_combo.GetCurSel();
CStringcType;
cType.Format("%d",iType);
if(iType>0)
cSource+="ANDState="+cType;
//刷新ADOData控件的记录源
m_Adodc.SetRecordSource(cSource);
m_Adodc.Refresh();
//设置列宽度
_variant_tvIndex;
vIndex=long(0);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(0);
vIndex=long
(1);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(50);
vIndex=long
(2);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(30);
vIndex=long(3);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(57);
vIndex=long(4);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(60);
vIndex=long(5);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(60);
vIndex=long(6);
m_datagrid.GetColumns().GetItem(vIndex).SetWidth(60);
}
②当学生基本信息编辑窗体启动时,将执行OnInitDialog()函数,代码:
BOOLCEmpEditDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//TODO:
Addextrainitializationhere
//设置性别
if(cSex=="男")
m_Sex.SetCurSel(0);
else
m_Sex.SetCurSel
(1);
//设置状态
m_State.SetCurSel(iState-1);
if(EmpId==0)
GetDlgItem(IDC_SETPHOTO_BUTTON)->EnableWindow(FALSE);
else//读取照片图像信息
{
//清除原图像数据
if(m_hBitmap)
{
DeleteObject(m_hBitmap);
m_hBitmap=NULL;
}
//将当前学生记录读取到m_pRs对象中
CStringcEmpId;
cEmpId.Format("%d",EmpId);
//连接数据库
ADOConnm_AdoConn;
m_AdoConn.OnInitADOConn();
//设置SELECT语句
_bstr_tvSQL;
vSQL="SELECT*FROMEmployeesWHEREEmp_id="+cEmpId;
//执行SELETE语句
_RecordsetPtrm_pRs;
m_pRs=m_AdoConn.GetRecordSet(vSQL);
//如果不存在此记录,则将设置按钮置灰并返回
if(m_pRs->adoEOF||m_pRs->adoBOF)
{
GetDlgItem(IDC_SETPHOTO_BUTTON)->EnableWindow(FALSE);
returnFALSE;
}
//读取图像字段的实际大小
longlDataSize=m_pRs->GetFields()->GetItem("Photo")->ActualSize;
char*m_pBuffer;//定义缓冲变量
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
//EXCEPTION:
OCXPropertyPagesshouldreturnFALSE
}
③当用户单击学生信息管理窗体“添加”按钮时将执行OnAddButton()函数,代码:
voidCEmpManDlg:
:
OnAddButton()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
HTREEITEMnode;//用于保存当前节点
node=m_tree.GetSelectedItem();//取得当前节点值
intiDepId;
iDepId=m_tree.GetItemData(node);
if(iDepId==0)//不能在根节点添加学生
{
MessageBox("请选择院系");
return;
}
CEmpEditDlgdlg;
//初始化变量
dlg.EmpId=0;//编号为0,表示添加
dlg.DepId=iDepId;//
dlg.cSex="男";//性别初始化为男
intiState;
iState=m_combo.GetCurSel();
if(iState==0)
dlg.iState=1;
else
dlg.iState=iState;
CTimet=CTime:
:
GetCurrentTime();
dlg.m_Birth=t;
dlg.m_HireDate=t;
if(dlg.DoModal()==IDOK)
Refresh_Data();
}
当用户单击学生信息管理窗体“修改”按钮时将执行OnModiButton()函数,代码:
voidCEmpManDlg:
:
OnModiButton()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE);
if(m_Adodc.GetRecordset().GetEof())
{
MessageBox("请选择要修改的记录!
");
return;
}
CEmployeesemp;
emp.GetData(m_datagrid.GetItem(0));
CEmpEditDlgdlg;
dlg.EmpId=emp.GetEmp_Id();
dlg.EmpName=emp.GetEmp_Name();
dlg.DepId=emp.GetDep_Id();
dlg.UpperId=emp.GetUpperId();
dlg.m