《学生信息管理系统设计》方法及代码.docx
- 文档编号:23797347
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:67
- 大小:177.37KB
《学生信息管理系统设计》方法及代码.docx
《《学生信息管理系统设计》方法及代码.docx》由会员分享,可在线阅读,更多相关《《学生信息管理系统设计》方法及代码.docx(67页珍藏版)》请在冰豆网上搜索。
《学生信息管理系统设计》方法及代码
学生信息管理系统
设计方法及代码
一、设计要求方法
创建一个学生信息管理系统,可以完成学生基本信息及成绩的输入、修改和查询。
具体要求如下:
(一)建立“学生信息”数据库
1.建立数据库
利用MicrosoftAccess或VB中的“可视化数据管理器”建立数据库,名称为“Student.mdb”。
2.建立数据表
在Student.mdb数据库中建立5个表:
(1)学籍表
该表存放学生的基本信息,名称为“学籍”,结构如表3-1所示。
表3-1学籍表结构
字段名
类型
大小
说明
字段名
类型
大小
说明
学号
文本(Text)
20
主索引
出生日期
日期(Date)
姓名
文本(Text)
10
班级
文本(Text)
20
性别
文本(Text)
2
表中暂时存放一条记录,各字段均不应为空。
(2)成绩表
该表存放学生成绩,名称为“成绩”,结构如表3-2所示。
表3-2成绩表结构
字段名
类型
大小
学号
文本(Text)
20
课程
文本(Text)
20
分数
整型(Integer)
说明:
为减少数据冗余,成绩表中仅存储学号,不存储学生姓名,需要时根据学号从学籍表中获取姓名。
按照数据库设计规范,对“课程”亦应作类似处理。
经过处理后,程序代码的编写量和难度均会明显增加。
为了减轻初学者的编程负担,在成绩表中未对课程作规范化处理,而是直接存储课程名称。
(3)课程信息表
该表存放课程信息,名称为“课程信息”,结构如表3-3所示。
表3-3课程信息表结构
字段名
类型
大小
说明
课号
文本(Text)
10
主索引
课程
文本(Text)
20
说明:
基于前面所述的原因,在程序中没有将“课号”作为检索字段。
(4)用户表
该表存放用户登录信息,名称为“用户”,结构如表x-4所示。
表3-4用户表结构
字段名
类型
大小
说明
用户名
文本(Text)
16
主索引
密码
文本(Text)
16
权限
文本(Text)
10
表中暂时存放两条记录,内容如表3-5所示。
表3-5用户表内容
用户名
密码
权限
Admin
123456
管理员
User
123
普通
(5)临时表
该表作为临时工作表,名称为“临时”,用于输入成绩,结构如表3-6所示。
表3-6临时表结构
字段名
类型
大小
学号
文本(Text)
20
姓名
文本(Text)
10
分数
整型(Integer)
方法:
在数据库中设计“临时”表的目的是兼顾DataGrid控件的使用和减少数据冗余。
为了减少数据冗余,在“成绩”表中未包含学生姓名,而以“学号”与“学籍”表相关联。
尽管这样做符合数据库设计规范,但是某些数据绑定控件的使用却因此而受到限制。
例如,DataGrid控件以表格形式显示数据,具有较强的数据显示和编辑功能,可以进行成批数据的连续录入。
令人遗憾的是,与DataGrid控件绑定的记录集必须使用客户端游标(CursorLocation=adUseClient),若记录集采用服务器端游标(adUseServer),该控件将无法显示数据。
使用客户端游标的记录集在功能上有很多限制,对于多表查询来说,若所生成的记录集的输出字段来自两个或更多表,则不能进行更新操作;若查询虽然涉及多表,但输出字段仅来自其中一个表,修改更新操作不受影响。
以下面的两条SQL语句为例:
①SELECT成绩.学号,学籍.姓名,成绩.课程,成绩.分数FROM成绩,学籍WHERE成绩.学号=学籍.学号
②SELECT成绩.学号,成绩.课程,成绩.分数FROM成绩,学籍WHERE成绩.学号=学籍.学号
语句①所选择的查询输出字段(SELECT语句)来自两个表,采用客户端游标生成记录集后可以在各种数据绑定控件中正常显示,但不能修改、更新数据。
若在程序中执行更新操作,将出现如图3-2所示的错误提示。
图3-2错误信息
语句②的查询输出字段仅来自“成绩”表,尽管在查询条件(WHERE子句)中涉及两个表,但不影响更新操作。
为了充分发挥DataGrid控件的数据编辑功能,同时兼顾数据库设计规范,可以用一个临时工作表存放多表查询的结果,将多表操作转换为单表操作。
数据流程如下:
多表查询→记录集→临时表→录入、修改→存入基本表。
(二)用户登录窗体
本窗体(frmLogin)作为系统的启动窗体,用于验证用户是否合法,运行时界面如图3-3所示。
图3-3用户登录
方法:
∙窗体上两个文本框分别用于输入用户名和密码,其中密码文本框的内容用“*”显示。
∙在窗体上添加一个ADO数据控件,设Visible=False,将其与数据库连接,用SQL语句将记录源与数据库中的“用户”表绑定。
∙单击“确定”按钮后,查询“用户”表中是否有相符的用户名和密码,若不符,提示重新输入,焦点返回文本框。
如果3次输入错误,退出系统。
若输入正确,将用户名和用户权限保存在全局变量中,显示系统主窗体,卸载本窗体。
∙单击“取消”按钮,退出系统。
注意:
保存用户名和用户权限需要建立一个标准模块(Module1),用Public关键字声明两个全局变量,将“用户登录”窗体运行时输入的用户名和用户权限存入全局变量中,以供其他模块调用。
(三)设计系统主窗体
系统主窗体(frmMain)作为学生信息管理系统的主界面,如图3-4所示。
图3-4主窗体
窗体中菜单结构如表3-7。
表3-7菜单结构
主菜单
系统
学籍管理
课程管理
成绩管理
帮助
菜单项
添加用户
删除用户
更改权限
修改密码
退出系统
添加学籍信息
修改学籍信息
查询学籍信息
添加课程
修改课程
输入成绩
修改成绩
查询成绩
关于
方法:
∙单击某一菜单项时,显示对应窗体。
∙只有用户权限为“管理员”的用户才有权使用“系统”菜单中的“添加用户”、“删除用户”和“更改权限”三个菜单项的功能。
因此,应在窗体加载时根据保存在全局变量中的用户权限确定是否显示这三个菜单项。
(四)学籍管理模块
“学籍管理”菜单下有三个菜单项:
添加学籍信息、修改学籍信息和查询学籍信息。
1.添加学籍信息
单击“添加学籍信息”菜单项后显示“添加学籍信息”窗体(frmAddEss),运行时界面如图3-5所示。
图3-5添加学籍信息
方法:
∙窗体上的文本框分别用于输入学号、姓名和出生日期,组合框用于选择性别。
∙在窗体上添加一个ADO数据控件,设Visible=False,将其与数据库连接,用SQL语句将记录源与数据库中的“学籍”表绑定。
∙单击“确认添加”按钮后,查询数据库“学籍”表中是否有相同的学号,若有,提示该学号已存在,重新输入,焦点返回学号文本框。
如果无相同学号,将学号、姓名、性别和出生日期添加到数据库“学籍”表中,卸载本窗体。
注意:
在向数据库添加记录前,应判断数据是否合法,如:
学号应为数字(可用IsNumeric函数判断),出生日期应为日期型数据(可用IsDate函数判断),各文本框均不应空白。
∙单击“退出”按钮,卸载本窗体。
2.修改学籍信息
单击“修改学籍信息”菜单项后显示“修改学籍信息”窗体(frmModiEss),运行时界面如图3-6所示。
(a)浏览状态(b)修改状态
图3-6修改学籍信息
方法:
∙在窗体上添加两个ADO数据控件,分别命名为adoEdit和adoGrade,将其与数据库连接,用SQL语句将adoEdit的记录源与数据库中的“学籍”表绑定,设Align=2。
设adoGrade的Visible=False,其记录源采用动态绑定方式,通过查询语句生成临时记录集,与学籍表同步更新。
∙“修改记录”框架的文本框分别用于显示和修改学号、姓名及出生日期,将它们的DataSource均设为ADO数据控件,DataField分别与学号、姓名及出生日期字段绑定。
组合框分别用于选择性别和班级,与ADO数据控件及对应字段绑定。
∙“选择班级”框架中的简单组合框(Style=1)用于选择班级,筛选拟修改记录的范围。
∙在窗体加载时,应将“修改记录”框架中各文本框和组合框锁定为只读(Locked=True),并将“更新数据”和“取消修改”按钮设置为无效,其他按钮有效。
∙在“修改记录”按钮的单击事件中,解除对各文本框和组合框的锁定以便允许修改,并将“修改记录”按钮设为无效,其他按钮有效。
∙单击“更新数据”按钮,执行记录集的Update方法确认修改(应注意检查数据的合法性),并重新将各文本框和组合框锁定为只读,各按钮恢复为在窗体加载时状态。
若修改了学号,成绩表中需作相应修改。
∙单击“取消修改”按钮,执行记录集的CancelUpdate方法取消修改,并重新将各文本框和组合框锁定为只读,各按钮恢复为在窗体加载时状态。
∙单击“删除记录”按钮,执行Delete方法删除记录,同时删除成绩表中的相应记录。
∙单击“退出”按钮,卸载本窗体。
3.查询学籍信息
单击“查询学籍信息”菜单项后显示“查询学籍信息”窗体(frmQueryEss),界面如图3-7所示。
(a)全部显示(b)多条件复合查询
图3-7查询学籍信息
方法:
∙在窗体上添加一个ADO数据控件,设Visible=False,将其与数据库连接,用SQL语句将记录源与数据库中的“学籍”表绑定。
∙在窗体上添加一个DataGrid控件,设AllowUpdate=False。
∙框架中的两个文本框分别用于输入学号和姓名。
∙框架中的两个组合框分别用于选择或输入性别和班级。
∙在“查询”按钮的单击事件中,根据复选框的选中状态判断查询条件,是单一查询还是复合查询,然后根据文本框和组合框中的内容,用SQL语句的模糊查询、多条件复合查询功能生成记录集,为ADO数据控件的RecordSource属性赋值,并且将DataGrid控件与ADO数据控件绑定。
∙在“全部”按钮的单击事件中,用SQL语句将学籍表中的全部记录构成记录集,为ADO数据控件的RecordSource属性赋值,并且将DataGrid控件与ADO数据控件绑定。
∙单击“退出”按钮,卸载本窗体。
(五)课程管理模块
“课程管理”菜单下有两个菜单项:
添加课程和修改课程。
1.添加课程
单击“添加课程”菜单项后显示“添加课程”窗体(frmAddCourse),运行时界面如图3-8所示。
图3-8添加课程
方法:
∙窗体上的文本框分别用于输入课程编号和课程名称。
∙在窗体上添加一个ADO数据控件,设Visible=False,将其与数据库连接,用SQL语句将记录源与数据库中的“课程信息”表绑定。
添加一个DataGrid控件,与ADO数据控件绑定,用于显示现有课程,设AllowUpdate=False。
∙单击“确认添加”按钮后,查询数据库“课程信息”表中是否有相同的课程编号,若有,提示该课程编号已存在,重新输入,焦点返回课程编号文本框。
如果无相同的课程编号,将课程编号和课程名称添加到数据库“课程信息”表中,卸载本窗体。
注意:
在向数据库添加记录前,应判断数据是否合法:
课程编号应为数字(可用IsNumeric函数判断),各文本框均不应空白。
∙单击“退出”按钮,卸载本窗体。
2.修改课程
单击“修改课程”菜单项后显示“修改课程”窗体(frmModiCourse),运行时界面如图3-9所示。
图3-9修改课程
方法:
∙在窗体上添加一个ADO数据控件,将其与数据库连接,用SQL语句将记录源与数据库中的“课程信息”表绑定。
设Align=2。
∙窗体上的文本框分别用于显示和修改课程编号和课程名称,将它们的DataSource均设为ADO数据控件,DataField分别与课程编号及课程名称字段绑定。
∙对文本框的锁定处理和各按钮的处理与“修改学籍信息”相似。
(六)成绩管理模块
“成绩管理”菜单下有3个菜单项:
输入成绩、修改成绩和查询成绩。
1.输入成绩
单击“输入成绩”菜单项后显示“输入成绩”窗体(frmInGrade),运时界面如图3-10所示。
图3-10输入成绩
方法:
∙在窗体上添加四个ADO数据控件,均设Visible=False,名称分别为adoNoName、adoInGrade、adoAdd和adoOldGrade,将其与数据库连接。
设adoInGrade的LockType属性为4(批更新模式)。
用SQL语句将adoAdd的记录源与数据库中的“成绩”表绑定。
∙框架中的组合框用于选择班级和课程,Style属性均为2(下拉式列表框)。
窗体加载时查询学籍表中的班级和课程信息表中的课程填充组合框的列表项。
∙添加两个DataGrid控件,名称分别为dgdGrade和dgdInGrade。
程序运行时分别动态地与adoOldGrade和adoInGrade绑定,用于显示现有成绩和输入成绩。
∙当用户选择了班级和课程后,用SQL语句生成当前班级、课程已有成绩记录集,为ADO数据控件adoOldGrade的RecordSource属性赋值,并将DataGrid控件dgdGrade与ADO数据控件adoOldGrade绑定。
根据用户所选班级构成学号姓名记录集,为ADO数据控件adoNoName的RecordSource属性赋值,同时将ADO数据控件adoInGrade与临时表绑定,并将临时表清空。
查询已有成绩记录集和学号姓名记录集,将当前课程尚无成绩的学号姓名加入临时表,将DataGrid控件dgdInGrade与ADO数据控件adoInGrade绑定,为输入成绩作准备。
此时用户可以在DataGrid控件中连续输入多人的成绩。
∙单击“确认输入”按钮后,将临时表中的学号、分数以及课程组合框中的课程名称追加到与ADO数据控件adoAdd绑定的成绩表中。
∙单击“取消”按钮,调用adoInGrade记录集的CancelBatch方法取消更新。
∙单击“退出”按钮,卸载本窗体。
2.修改成绩
单击“修改成绩”菜单项后显示“修改成绩”窗体(frmModiGrade),运行时界面如图3-11所示。
图3-11修改成绩
方法:
∙在窗体上添加两个ADO数据控件,分别命名为adoEdit和adoNoName,将其与数据库连接,设Visible=False,其记录源均采用动态绑定方式,通过查询语句生成临时记录集。
∙“选择班级”框架中的组合框用于选择班级。
“选择学生”框架中的DataGrid控件dgdNoName用于显示当前班级学生在成绩表中已有成绩的学生学号和姓名。
“当前记录”框架中的两个文本框用作提示。
“修改成绩”框架中的组合框用于选择课程,文本框用于显示和修改分数。
∙当用户在班级组合框选择班级后,用SQL语句从学籍表和成绩表中筛选出当前班级学生在成绩表中已有成绩的学生学号和姓名,显示在DataGrid控件dgdNoName中。
∙当用户在DataGrid控件dgdNoName中选择学生后,将其学号和姓名显示在“当前记录”框架中的文本框中,同时查询成绩表中当前学生已有成绩的课程名称,填充到课程组合框中。
∙当用户在课程组合框中选择课程时,将该课程的分数显示在成绩文本框中。
∙对各控件的锁定处理与“修改学籍信息”相似。
3.查询成绩
界面设计与“查询学籍信息”相似,如图3-12所示。
图3-12查询成绩
“查询”和“全部”按钮的单击事件的处理与“查询学籍信息”相似,注意查询结果来自“学籍”和“成绩”两个表。
(七)系统模块
“系统”菜单下有5个菜单项:
添加用户、删除用户、更改权限、修改密码和退出。
1.添加用户
单击“添加用户”菜单项后显示“添加用户”窗体(frmUser),运行时界面如图3-13所示。
图3-13添加用户
方法:
∙窗体上的文本框分别用于输入用户名和密码,其中输入和确认密码的文本框的内容用“*”显示。
∙在窗体上添加一个ADO数据控件,设Visible=False,将其与数据库连接,用SQL语句将记录源与数据库中的“用户”表绑定。
∙单击“确认”按钮后,查询数据库“用户”表中是否有相同的用户名和密码,若有,提示该用户已存在,重新输入,焦点返回用户名文本框。
如果无同名用户,将用户名和密码添加到数据库“用户”表中,并设默认权限为“普通”,用MsgBox语句提示添加用户成功。
∙单击“退出”按钮,卸载本窗体。
2.删除用户
单击“删除用户”菜单项后显示“删除用户”窗体(frmDelUser),运行时界面如图3-14所示。
图3-14删除用户
方法:
∙在窗体上添加一个ADO数据控件,设Visible=False。
将其与数据库连接,用SQL语句将记录源与数据库中的“用户”表绑定。
设LockType=adLockBatchOptimistic(批更新模式,以备用户取消删除)。
∙在窗体上添加一个DataGrid控件,用于显示和选择用户表中的记录,设AllowUpdate=False(不允许用户直接修改控件中的内容),将该控件与ADO数据控件绑定。
∙在窗体上添加一个框架,名称为fraDel,内含三个命令按钮。
∙单击“删除用户”按钮后,判断被选中的用户名,若为“Admin”,提示不允许删除该用户。
若选中了其他用户,询问是否删除,如果回答“是”,用记录集的Delete方法删除该记录。
∙单击“取消删除”按钮后,用记录集的CancelBatch方法取消删除操作。
∙单击“退出”按钮,卸载本窗体。
3.更改权限
“更改权限”与“删除用户”的窗体界面相似,为了减少程序中的窗体数目,复用代码,将两项功能设计为共用一个窗体(frmDelUser)。
设计时和运行时界面如图3-15所示。
(a)设计时界面(b)运行时界面
图3-15更改权限
方法:
∙在“删除用户”窗体上添加一个框架,名称为fraModi,设置其宽度和高度与框架fraDel相同。
在框架中添加一个用于选择权限的组合框(含有“普通”和“管理员”两个列表项)和两个命令按钮。
窗体加载时使两个框架的位置重合。
∙在主窗体单击“删除用户”或“更改权限”菜单项时,根据被选中的菜单项修改frmDelUser窗体的标题。
在frmDelUser窗体的激活事件(Activate)中,根据窗体标题,显示对应的框架,隐藏另一个框架。
∙单击“确认修改”按钮后,将选择权限组合框中被选中的权限赋予用户表中当前记录的“权限”字段。
∙将两个框架中的“退出”按钮设为控件数组,共用一个单击事件。
4.修改密码
单击“修改密码”菜单项后显示“修改密码”窗体(frmModiPass),运行时界面如图3-16所示。
图3-16修改密码
单击“确认”按钮后,根据保存在全局变量中的用户名查询用户表,将当前用户的新密码存入“用户”数据库。
(八)帮助模块
在“关于”菜单项的单击事件中用MsgBox语句显示本程序的版本号和版权信息,如图3-17所示。
图3-17版本信息
(九)关于标准模块
在标准模块中主要是声明一些供本模块和其他模块使用的全局变量(如用于保存用户名和用户权限的变量)。
对于各模块经常用到的一些程序段,亦可将其编制成子过程或函数,用Public关键字在标准模块中声明为公用过程。
例如,本程序中有多个窗体需要用组合框选择班级,将填充组合框中班级列表项的程序段编制成一个公用过程,以组合框对象作为参数,即可实现代码的复用。
二、程序参考代码
(一)用户登录窗体
'用户登录窗体frmLogin
OptionExplicit
DimRsAsADODB.Recordset'定义记录集变量
PrivateSubcmdCancel_Click()
UnloadMe
EndSub
PrivateSubcmdOk_Click()
StaticintErrAsInteger'静态变量累加出错次数
adoUser.Refresh'刷新记录集(关键语句)
SetRs=adoUser.Recordset'设置记录集变量
'检查用户名(利用记录集的Find方法,不区分大小写)
Rs.Find"用户名='"&txtUserID.Text&"'"
IfNotRs.EOFThen'若用户名正确
'检查密码
IfRs("密码")=txtPassword.TextThen'若密码正确
gstrUser=txtUserID.Text'存用户名
IfRs("权限")="管理员"Then'存用户权限
gblnPurview=True
Else
gblnPurview=False
EndIf
frmMain.Show'显示主窗体
UnloadMe'卸载本窗体
Else'若密码错误
intErr=intErr+1'错误数+1
IfintErr=3Then'若出错3次,退出系统
SetRs=Nothing
UnloadMe
Else'若出错不足3次,重新输入
MsgBox"密码输入错误,请重新输入!
",vbExclamation
WithtxtPassword'焦点返回密码框
.SelStart=0
.SelLength=Len(.Text)
.SetFocus
EndWith
EndIf
EndIf
Else'若用户名错误
intErr=intErr+1'错误数+1
IfintErr=3Then'若出错3次,退出系统
SetRs=Nothing
UnloadMe
Else'若出错不足3次,重新输入
MsgBox"用户名输入错误,请重新输入!
",vbExclamation
WithtxtUserID'焦点返回用户框
.SelStart=0
.SelLength=Len(.Text)
.SetFocus
EndWith
EndIf
EndIf
EndSub
PrivateSubForm_Initialize()
ChDriveApp.Path
ChDirApp.Path
EndSub
PrivateSubForm_Load()'窗体加载
cmdOk.Default=True'“确定”按钮为回车键缺省按钮
DimsqlAsString
sql="SELECT*FROM用户"'SQL语句用于创建动态记录集
adoUser.RecordSource=sql'设置记录源为动态记录集
EndSub
(二)系统主窗体
'主窗体frmMain
OptionExplicit
PrivateSubForm_Initialize()'窗体初始化
ChDriveAp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生信息管理系统设计 学生 信息管理 系统 设计 方法 代码