




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学生信息管理系统摘要:本文就如何使用VB开发学生生信息管理系统这样一个数据库应用程序作了详细的叙述,从系统的设计、数据库的设计、系统各模块的制作等各方面较为具体的作了说明。关键字:VB 学生信息管理 数据库随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长。面对庞大的信息量,就需要有学生信息管理系统来提高学生管理工作的效率。通过这样的系统,可以做到信息的规范管理、科学统计和快速的查询,从面减少管理方面的工作量。为此,本人决定制作一个学生信息管理系统,具体过程如下:一 系统设计1. 系统功能分析系统开发的总体任务是实现学生信息关系的系统化、规范化、自动化。学生信息管理系统需要完成的功能主要有:l 有关学生信息的输入,l 学生信息的查询l 学生信息的修改l 班级信息的录入l 班级信息的修改2. 系统功能模块设计系统功能模块按以上分析如下图所示:学生信息管理系统班级信息管理学生信息管理班级信息输入班级信息修改学生信息输入学生信息修改学生信息查询系统功能模块图二 数据库设计1. 数据库需求分析在仔细分析调查有关学生信息需要的基础上,针对一般学生信息管理系统的需求,通过对学生学习过程的内容和数据流程分析,设计如下面所示的数据项和数据结构:学生基本信息:包括数据项有:学号、姓名、班级、出生日期、性别、家庭地址、联系电话、照片、简历等。班级信息:包括的数据项有:班号、班级名称、所在系等信息用户信息:包括用户名、密码等2. 数据库结构设计学生基本信息表结构如下:班级基本信息表结构如下:用户信息表结构如下:三 系统设计工具本系统使用VB制作系统的主体,使用Access作为后台数据库。四 系统主要制作过程1. 系统主窗体的创建首先创建一个工程,工程模板为Standard EXE,工程命名为prjStudent,接着单击工具栏中的“ADD MDI Form”按钮创建一个多文档的窗体,如图所示,属性设置见表1图1 系统主窗体控件属性属性取值MDIMain(form)NameMDIMainCaption学生信息管理系统WindowStateMaximized表1 系统主窗体属性窗体的主菜单如下图所示图2 系统主菜单结构主窗体的各相关程序如下所示:Option Explicit表示当前的用户类型0-管理员类型的用户; 1-学生类型的用户Public mnUserType As Integer表示当前登录的用户名Public msUserName As StringPrivate Sub MDIForm_Activate()根据不同的用户类型,使相应的菜单项可见 Select Case mnUserType Case 0: 以管理员身份登录 mnuFind.Visible = True Case 1: 以学生身份登录, 只能查询自己的信息 mnuFind.Visible = False End SelectEnd SubPrivate Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer) If MsgBox(真的要对出本系统吗?, vbQuestion + vbYesNo + vbDefaultButton2, 退出) = vbNo Then Cancel = 1 End IfEnd SubPrivate Sub mnuAbout_Click() 显示“关于.”窗口 Load frmSplash frmSplash.mbAbout = True frmSplash.Show vbModalEnd SubPrivate Sub mnuExit_Click() Unload MeEnd SubPrivate Sub mnuFind_Click() frmStudent.Show frmStudent.cmdSeek.Value = TrueEnd SubPrivate Sub mnuLogin_Click() If MsgBox(若重新登录,所有窗体都将关闭!是否重新登录?, _ vbQuestion + vbYesNo + vbDefaultButton2, 重新登录) = vbYes Then Unload MDIMain frmLogin.Show End IfEnd SubPrivate Sub mnuStudent_Click() If mnUserType = 0 Then 若为管理员用户 frmStudent.Show Else 若为学生类用户 frmView.Show End IfEnd Sub2. 用户登录模块的创建用户登录模块是在系统运行时被首先运行的模块,它主要完成用户身份的验证工作,如果用户身份合法,则进入系统,否则退出。用户登录窗体设计如下:图3 系统用户登录窗体登录窗体中的各控件的属性设置如下表所示控件属性属性取值frmLogin(form)NamefrmLoginCaption请登录WindowStateNormalfraUser(frame)NamefraUserCaption选择身份optUserType(0)(Option)NameoptUserTypeCaption教务管理人员optUserType(1)(Option)NameoptUserTypeCaption学生frmLogin(frame)NamefrmLoginCaption登录txtUserNametxtUsertxtPwdNametxtPwdPasswordchar*lblLabels(0)Caption用户名lblLabels(1)Caption口令cmdOKNamecmdOKCaption确定cmdCancelNamecmdCancelCaption取消表2 系统用户登录窗口的控件属性实现用户登录的程序如下:Option Explicit表示当前用户登录所选择的身份,即用户类型, 0-表示教务管理人员;1-表示学生Dim mnUserType As IntegerPrivate Sub cmdCancel_Click() Unload MeEnd SubPrivate Sub cmdOK_Click() 取得用户输入的用户名和密码 Dim user As String, pwd As String user = txtUser pwd = txtPwd 根据不同的身份,选择不同的表用以查询 Dim r As New ADODB.Recordset Set r = DataEnv.rssqlSeek Dim strSQL As String Select Case mnUserType Case 0: 若身份为管理员 strSQL = select * from admin where name= & user & and pwd= & pwd & Case 1: 若身份为学生 strSQL = select * from student where name= & user & and serial= & pwd & End Select On Error Resume Next 查询DataEnv.rssqlSeek的状态,如果已经打开,则先关闭 If r.State = adStateOpen Then r.Close r.Open strSQL 根据strSQL的内容刷新DataEnv.rssqlSeek 用户密码错误的次数,如果错误次数超过3次,则退出系统 Static nTryCount As Integer If r.EOF Then 登录失败 MsgBox 对不起,无此用户或者密码不正确!请重新输入!, vbCritical, 错误 txtUser.SetFocus txtUser.SelStart = 0 txtUser.SelLength = Len(txtUser) nTryCount = nTryCount + 1 If nTryCount = 3 Then MsgBox 您无权操作本系统!再见!, vbCritical, 无权限 Unload Me End If Else 登陆成功 显示MDI窗体, 并将用户类型和用户名传到MDI窗体中的mnUserType, msUserName中 Load MDIMain With MDIMain .mnUserType = mnUserType .msUserName = pwd .Show End With Unload Me End IfEnd SubPrivate Sub Form_Load() optUserType(0).Value = TrueEnd SubPrivate Sub optUserType_Click(Index As Integer) mnUserType = IndexEnd Sub3. 学生信息管理模块的创建学生信息管理模块主要完成学生信息的浏览、修改、删除等操作,其设计完成后的窗体如下图所示图4 学生信息管理窗体的运行效果图在这个窗体中包含有以下几个特殊控件如下表所示:控件属性属性取值frmStudent(form)NamefrmStudentCaption学生信息管理系统WindowStateNormalcboDepNamecboDepcboClassNamecboClassgrdScan(datagrid)NamegrdScanimgPhoto(image)NameimgPhoto学生信息管理窗体的程序实现如下:Option Explicit标识是否能关闭Dim mbClose As Boolean标识当前要显示的照片的文件Dim mstrFileName As String当DataEnv.rsStudent的当前记录发生变化时,刷新所绑定的控件(用户改变了当前记录)Sub RefreshBinding() On Error Resume Next With DataEnv.rsStudent If DataEnv.rssqlSeek.BOF And DataEnv.rssqlSeek.EOF Then 如果不存在任何记录,则清空所有的绑定的内容 txtSerial = txtName = txtBirthday = txtTelephone = txtAddress = txtResume = imgPhoto.Picture = LoadPicture(Null) Else 否则和相应的字段进行绑定 txtSerial = .Fields(serial) txtName = .Fields(name) txtBirthday = .Fields(birthday) txtTelephone = .Fields(tel) txtAddress = .Fields(address) txtResume = .Fields(resume) cboSex.Text = .Fields(sex) dcbClass.Text = .Fields(class) imgPhoto.Picture = LoadPicture(ReadImage(.Fields(photo) End If End WithEnd Sub在DataEnv.rsStudent中查询serial为sSerial的学籍信息Sub SeekStudent(sSerial As String) If Not (DataEnv.rsStudent.EOF And DataEnv.rsStudent.BOF) Then Dim Temp As String Temp = serial = & & sSerial & DataEnv.rsStudent.MoveFirst DataEnv.rsStudent.Find Temp 刷新所绑定的控件 Call RefreshBinding End IfEnd Sub当改变记录集时,需要刷新用户导航的网格控件Sub RefreshGrid() grdScan.DataMember = grdScan.Refresh DataEnv.rssqlSeek.Requery grdScan.DataMember = sqlSeek grdScan.Refresh 刷新各个绑定控件 Call grdScan_ChangeEnd Sub用以在浏览时,根据当前记录所出的位置不同,来改变个浏览按钮的状态Sub ChangeBrowseState() With DataEnv.rssqlSeek If .State = adStateClosed Then .Open 如果没有任何记录,使某些按钮无效;否则则使这些按钮有效 If .BOF And .EOF Then cmdAdd.Enabled = True cmdEdit.Enabled = False cmdDelete.Enabled = False cmdUpdate.Enabled = False cmdReport.Enabled = False fraBrowse.Enabled = False Else cmdAdd.Enabled = True cmdEdit.Enabled = True cmdDelete.Enabled = True cmdUpdate.Enabled = False cmdReport.Enabled = True fraBrowse.Enabled = True End If 假如处于记录的头部 If .BOF Then If Not .EOF Then DataEnv.rsStudent.MoveFirst cmdPrevious.Enabled = False cmdFirst.Enabled = False Else cmdPrevious.Enabled = True cmdFirst.Enabled = True End If 假如处于记录的尾部 If .EOF Then If Not .BOF Then DataEnv.rsStudent.MoveLast cmdNext.Enabled = False cmdLast.Enabled = False Else cmdNext.Enabled = True cmdLast.Enabled = True End If End With mstrFileName = End SubPrivate Sub cboDep_Click() Dim rsClass As New ADODB.Recordset Dim strSQL 根据所选的系的不同,采用不同的SQL语句 If cboDep.ItemData(cboDep.ListIndex) = 0 Then strSQL = select * from class Else strSQL = select * from class where dept_id= & cboDep.ItemData(cboDep.ListIndex) End If rsClass.Open strSQL, DataEnv.Con 将所查到的rsClass中的内容来填充cboClass cboClass.Clear cboClass.AddItem 全部 While Not rsClass.EOF cboClass.AddItem rsClass(Name) rsClass.MoveNext Wend cboClass.ListIndex = 0 rsClass.Close Set rsClass = NothingEnd SubPrivate Sub cmdAdd_Click() 添加记录 fraSeek.Enabled = False fraBrowse.Enabled = False grdScan.Enabled = False DataEnv.rsStudent.AddNew txtBirthday.Text = 1980-01-01 fraInfo.Enabled = True fraBrowse.Enabled = False cmdAdd.Enabled = False cmdEdit.Enabled = False cmdDelete.Enabled = False cmdUpdate.Enabled = True cmdReport.Caption = 取消 cmdReport.Enabled = True mbClose = False 不能关闭窗口End SubPrivate Sub cmdDelete_Click() 如果出错,则显示错误代码 On Error GoTo errHandler If MsgBox(要删除记录?, vbYesNo + vbQuestion + vbDefaultButton2, 确认) = vbYes Then 通过在DataEnv.Con中执行SQL命令,来删除记录 DataEnv.Con.Execute delete from student where serial = & txtSerial & DataEnv.rsStudent.MoveNext If DataEnv.rsStudent.EOF Then DataEnv.rsStudent.MoveLast 刷新用户导航的网格控件 Call RefreshGrid End If Exit Sub errHandler: MsgBox Err.Description, vbCritical, 错误End SubPrivate Sub cmdEdit_Click() 编辑记录之前,需要设置其他控件的Enabled属性 fraSeek.Enabled = False fraBrowse.Enabled = False grdScan.Enabled = False fraInfo.Enabled = True cmdAdd.Enabled = False cmdEdit.Enabled = False cmdDelete.Enabled = False cmdUpdate.Enabled = True cmdReport.Caption = 取消 更改cmdReport标题 cmdReport.Enabled = True mbClose = False 出于编辑状态,则用户不能关闭窗口End SubPrivate Sub cmdFirst_Click() 移动到记录的头部,并改变各个浏览按钮的状态 DataEnv.rssqlSeek.MoveFirst DataEnv.rssqlSeek.MovePrevious Call ChangeBrowseStateEnd SubPrivate Sub cmdLast_Click() 移动到记录的尾部,并改变各个浏览按钮的状态 DataEnv.rssqlSeek.MoveLast DataEnv.rssqlSeek.MoveNext Call ChangeBrowseStateEnd SubPrivate Sub cmdList_Click() 针对所选的班级,列出班级中所有的学籍信息 Dim strSQL If cboClass.Text = 全部 Then strSQL = from student order by serial Else strSQL = from student where class= & cboClass & order by serial End If DataEnv.rsStudent.Close DataEnv.rsStudent.Open select * & strSQL DataEnv.rssqlSeek.Close DataEnv.rssqlSeek.Open select serial, name & strSQL 刷新用户导航的网格控件,并且根据记录集中记录的数目,来改变各个浏览按钮的状态。 Call RefreshGrid Call ChangeBrowseState Call grdScan_ChangeEnd SubPrivate Sub cmdNext_Click() 移动到记录的下一条 DataEnv.rssqlSeek.MoveNext Call ChangeBrowseStateEnd SubPrivate Sub cmdPrevious_Click() 移动到记录的上一条 DataEnv.rssqlSeek.MovePrevious Call ChangeBrowseStateEnd SubPrivate Sub cmdReport_Click() On Error Resume Next If cmdReport.Caption = 取消 Then 取消所使用的更新更新 DataEnv.rsStudent.CancelUpdate 重新显示原来数据集中的内容 If DataEnv.rsStudent.BOF Then DataEnv.rsStudent.MoveFirst Else DataEnv.rsStudent.MovePrevious DataEnv.rsStudent.MoveNext End If Call RefreshBinding Call ChangeBrowseState fraSeek.Enabled = True fraBrowse.Enabled = True fraInfo.Enabled = False grdScan.Enabled = True cmdReport.Caption = 报表(R) mbClose = True Else 生成报表 Dim strSQL As String DataEnv.rsrptStudent.Close strSQL = select * from student where serial = & txtSerial.Text & DataEnv.rsrptStudent.Open strSQL rptStudent.Show End IfEnd SubPrivate Sub cmdSeek_Click() With frmFind Dim i As Integer 显示查找窗口 Load frmFind 填充查找窗体的字段列表框 .lstFields.Clear For i = 0 To DataEnv.rsStudent.Fields.Count - 1 .lstFields.AddItem (DataEnv.rsStudent(i).Name) Next i .lstFields.ListIndex = 0 .Show 1 If .mbFindFailed Then Exit Sub Dim sTemp As String If LCase(.msFindOp) = like Then sTemp = .msFindField & & .msFindOp & % & .msFindExpr & % Else sTemp = .msFindField & & .msFindOp & & .msFindExpr & End If sTemp = select * from student where & sTemp & order by serial Unload frmFind End With 查找数据,并刷新用以导航的网格控件 DataEnv.rssqlSeek.Close DataEnv.rssqlSeek.Open sTemp Call RefreshGrid Exit Sub errHandler: MsgBox 没有符合条件的纪录!, vbExclamation, 确认End SubPrivate Sub cmdSelectPhoto_Click() On Error GoTo errHandler: dlgSelect.DialogTitle = 选择该学生的照片 dlgSelect.Filter = 所有图形文件|*.bmp;*.dib;*.gif;*.jpg;*.ico|位图文件(*.bmp;*.dib)|*.bmp;*.dib|GIF文件(*.gif)|*.gif|JPEG文件(*.jpg)|*.jpg|图标文件(*.ico)|*.ico dlgSelect.ShowOpen If dlgSelect.FileName = Then Exit Sub imgPhoto.Picture = LoadPicture(dlgSelect.FileName) mstrFileName = dlgSelect.FileName Exit Sub errHandler: MsgBox Err.Description, vbCritical, 错误End SubPrivate Sub cmdUpdate_Click() 更新所添加或者修改的记录 On Error GoTo errHandler: Dim str As String str = txtSerial.Text With DataEnv.rsStudent .Fields(Serial) = txtSerial.Text .Fields(name) = txtName.Text .Fields(sex) = cboSex.Text .Fields(class) = dcbClass.Text .Fields(birthday) = txtBirthday.Text .Fields(tel) = txtTelephone.Text .Fields(address) = txtAddress.Text .Fields(resume) = txtResume.Text Call WriteImage(.Fields(photo), mstrFileName) .Update End With cmdReport.Caption = 报表(&R) cmdUpdate.Enabled = False fraInfo.Enabled = False mbClose = True If DataEnv.rssqlSeek.State = adStateClosed Then DataEnv.rssqlSeek.Open 刷新右端用以导航的网格控件 Call RefreshGrid 根据记录集中记录的个数,改变各个按钮的状态 Call ChangeBrowseState 定位到刚刚添加或者修改过的记录 DataEnv.rssqlSeek.MoveFirst DataEnv.rssqlSeek.Find serial= & str & fraSeek.Enabled = True fraBrowse.Enabled = True grdScan.Enabled = True Exit Sub errHandler: MsgBox Err.Description, vbCritical, 错误End SubPrivate Sub dcbClass_Click(Area As Integer) If txtSerial = Then txtSerial = dcbClass.Text End IfEnd SubPrivate Sub Form_Load() On Error Resume Next Dim rsDep As New ADODB.Recordset, rsClass As New ADODB.Recordset Set rsDep = DataEnv.rsDepartment Set rsClass = DataEnv.rsClass 从Department表中读取数据,填充cboDep复合框到中 rsDep.Open cboDep.Clear cboDep.AddItem 全部 将各个系的id号作为ItemData附加到复合框中 cboDep.ItemData(0) = 0 While Not rsDep.EOF cboDep.AddItem rsDep(Name) cboDep.ItemData(cboDep.ListCount - 1) = rsDep(id) rsDep.MoveNext Wend cboDep.ListIndex = 0 从class表中读取数据,填充到cboClass复合框中 cboClass.Clear cboClass.AddItem 全部 While Not rsClass.EOF cboClass.AddItem rsClass(Name) rsClass.MoveNext Wend cboClass.ListIndex = 0 cmdList.Value = True fraManage.Enabled = True fraBrowse.Enabled = True fraSeek.Enabled = True grdScan.Enabled = True mbClose = True Call grdScan_ChangeEnd SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If Not mbClose Then MsgBox 数据正被修改,窗口不能关闭, vbCritical, 错误 Cancel = True End IfEnd SubPrivate Sub grdScan_Change() If grdScan.ApproxCount 0 Then Call SeekStudent(grdScan.Columns(0).CellText(grdScan.Bookmark) End IfEnd SubPrivate Sub grdScan_RowColChange(LastRow As Variant, ByVal LastCol As Integer) 当前行改变,则动态改变所要显示的记录 If LastRow grdScan.Bookmark Then If grdScan.ApproxCount 0 Then Call SeekStudent(grdScan.Columns(0).CellText(grdScan.Bookmark) End If End IfEnd SubPrivate Sub WriteImage(ByRef Fld As ADODB.Field, DiskFile As String) Dim byteData() As Byte 定义数据块数组 Dim NumBlocks As Long 定义数据块个数 Dim FileLength As Long 标识文件长度 Dim LeftOver As Long 定义剩余字节长度 Dim SourceFile As Long 定义自由文件号 Dim i As Long 定义循环变量 Const BLOCKSIZE = 4096 每次读写块的大小 SourceFile = FreeFile 提供一个尚未使用的文件号 Open DiskFile For Binary Access Read As SourceFile 打开文件 FileLength = LOF(SourceFile) 得到文件长度 If FileLength = 0 Then 判断文件是否存在 Close SourceFile MsgBox DiskFile & 无 内 容 或 不 存 在 ! Else NumBlocks = FileLength BLOCKSIZE 得到数据块的个数 LeftOver = FileLength Mod BLOCKSIZE 得到剩余字节数 Fld.Value = Null ReDim byteData(BLOCKSIZE) 重新定义数据块的大小 For i = 1 To NumBlocks Get SourceFile, , byteData() 读到内存块中 Fld.AppendC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玉米原材料采购合同范本
- 村委建设补偿协议书范本
- 禁止学生喝酒安全协议书
- 浦东同城厂房出租协议书
- 材料商玻璃采购合同范本
- 自建房套间出售合同范本
- 防晒服定制采购合同范本
- 注册人员聘用协议书范本
- 空压机节能方案合同范本
- 股东协议书与代持协议书
- 盾构施工安全培训教育全面版
- 流动餐车走街串巷的美食之旅
- 2024年辽阳职业技术学院单招职业倾向性测试题库附答案
- 配电网建设知识培训课件
- 护理实习生安全教育
- 医德医风警示教育
- 工程项目施工质量突发事件应急措施范例
- 2025年社区流管面试试题及答案
- 学生德育特色准军事化军训服装采购 投标方案(技术方案)
- 高中家长会:高二下学期期末家长会课件
- 社交媒体在职场人际关系构建中的作用与应用研究
评论
0/150
提交评论