还剩40页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
学生信息管理系统设计方法及代码
一、设计要求方法创建一个学生信息管理系统,可以完成学生基本信息及成绩的输入、修改和查询具体要求如下
(一)建立“学生信息”数据库
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用户表内容用户名密码权限Admin123456管理员User123普通
(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关键字在标准模块中声明为公用过程例如,本程序中有多个窗体需要用组合框选择班级,将填充组合框中班级列表项的程序段编制成一个公用过程,以组合框对象作为参数,即可实现代码的复用
二、程序参考代码
(一)用户登录窗体用户登录窗体frmLoginOptionExplicitDimRsAsADODB.Recordset定义记录集变量PrivateSubcmdCancel_ClickUnloadMeEndSubPrivateSubcmdOk_ClickStaticintErrAsInteger静态变量累加出错次数adoUser.Refresh刷新记录集关键语句SetRs=adoUser.Recordset设置记录集变量检查用户名利用记录集的Find方法,不区分大小写Rs.Find用户名=txtUserID.TextIfNotRs.EOFThen若用户名正确检查密码IfRs密码=txtPassword.TextThen若密码正确gstrUser=txtUserID.Text存用户名IfRs权限=管理员Then存用户权限gblnPurview=TrueElsegblnPurview=FalseEndIffrmMain.Show显示主窗体UnloadMe卸载本窗体Else若密码错误intErr=intErr+1错误数+1IfintErr=3Then若出错3次,退出系统SetRs=NothingUnloadMeElse若出错不足3次,重新输入MsgBox密码输入错误,请重新输入!vbExclamationWithtxtPassword焦点返回密码框.SelStart=
0.SelLength=Len.Text.SetFocusEndWithEndIfEndIfElse若用户名错误intErr=intErr+1错误数+1IfintErr=3Then若出错3次,退出系统SetRs=NothingUnloadMeElse若出错不足3次,重新输入MsgBox用户名输入错误,请重新输入!vbExclamationWithtxtUserID焦点返回用户框.SelStart=
0.SelLength=Len.Text.SetFocusEndWithEndIfEndIfEndSubPrivateSubForm_InitializeChDriveApp.PathChDirApp.PathEndSubPrivateSubForm_Load窗体加载cmdOk.Default=True“确定”按钮为回车键缺省按钮DimsqlAsStringsql=SELECT*FROM用户SQL语句用于创建动态记录集adoUser.RecordSource=sql设置记录源为动态记录集EndSub
(二)系统主窗体主窗体frmMainOptionExplicitPrivateSubForm_Initialize窗体初始化ChDriveApp.Path设当前路径ChDirApp.PathMe.WindowState=vbMaximizedCallMySize调整控件位置EndSubPrivateSubForm_Load根据用户权限确定是否显示用户管理各菜单项mnuAddUser.Visible=gblnPurviewmnuDelUser.Visible=gblnPurviewmnuModiPurview.Visible=gblnPurviewCallCreateConnection调用标准模块中的过程建立连接EndSubPrivateSubForm_Resize窗体改变大小IfMe.WindowState=vbMinimizedThenExitSubIfMe.Width6000ThenMe.Width=6000IfMe.Height5000ThenMe.Height=5000CallMySize调整控件位置Me.RefreshEndSubPrivateSubmnuAbout_Click关于MsgBoxSpace6学生信息管理系统Space6vbCrvbCrSpace9版本
1.0EndSubPrivateSubmnuAddCourse_Click添加课程frmAddCourse.ShowMe.HideEndSubPrivateSubmnuAddUser_Click添加用户frmUser.ShowMe.HideEndSubPrivateSubmnuDelUser_Click删除用户frmDelUser.Caption=删除用户frmDelUser.ShowMe.HideEndSubPrivateSubmnuExit_Click退出UnloadMeEndSubPrivateSubForm_UnloadCancelAsInteger主窗体卸载OnErrorGoToQuitDimiAsIntegerSetpubCnn=Nothing在窗体集合中循环并卸载每个窗体Fori=Forms.Count-1To0Step-1UnloadFormsiNextExitSubQuit:End出错时强制退出EndSubPrivateSubmnuInputGrade_Click输入成绩frmInGrade.ShowMe.HideEndSubPrivateSubmnuModiCourse_Click修改课程信息frmModiCourse.ShowMe.HideEndSubPrivateSubmnuModiEss_Click修改学籍信息frmModiEss.ShowMe.HideEndSubPrivateSubmnuModiGrade_Click修改成绩frmModiGrade.ShowMe.HideEndSubPrivateSubmnuModiPurview_ClickfrmDelUser.Caption=更改用户权限frmDelUser.ShowMe.HideEndSubPrivateSubmnuNew_Click添加学籍信息frmAddEss.ShowMe.HideEndSubPrivateSubmnuPassWord_Click修改密码frmModiPass.ShowMe.HideEndSubPrivateSubmnuQueryEss_Click查询学籍信息frmQueryEss.ShowMe.HideEndSubPrivateSubmnuQueryGrade_Click查询成绩信息frmQueryGrade.ShowMe.HideEndSubPrivateSubMySize自定义过程,窗体改变大小时调整控件位置DimFWAsLongLine
1.X1=0:Line
1.X2=Me.ScaleWidthLine
2.X1=0:Line
2.X2=Me.ScaleWidthFW=Me.ScaleWidth*
0.98Shape
1.Left=FW-Shape
1.Width\2Shape
2.Left=FW-Shape
2.Width\2+96Label
1.Left=FW-Label
1.Width\2Label
2.Left=FW-Label
2.Width\2EndSub
(三)学籍管理模块
1.添加学籍信息添加学籍信息窗体frmAddEssOptionExplicitPrivateSubcboClass_LostFocus班级组合框失去焦点时检查列表,添加新项CallNewClassItemcboClass调用标准模块中的过程EndSubPrivateSubcmdExit_Click退出UnloadMeEndSubPrivateSubcmdOk_Click确认添加各文本框若为空白,提示重新输入IfTrim$txtSID.Text=ThenMsgBox请输入学号!vbExclamationtxtSID.SetFocusExitSubEndIfIfTrim$txtName.Text=ThenMsgBox请输入姓名!vbExclamationtxtName.SetFocusExitSubEndIfIfTrim$txtBorn.Text=ThenMsgBox请输入出生日期!vbExclamationtxtBorn.SetFocusExitSubEndIfIfTrim$cboClass.Text=ThenMsgBox请选择或输入班级!vbExclamationcboClass.SetFocusExitSubEndIfadoAdd.Refresh刷新记录集关键语句检查是否有重复学号利用记录集的Find方法adoAdd.Recordset.Find学号=txtSID.TextIfNotadoAdd.Recordset.EOFThen若已有该学号MsgBox学号重复,请重新输入!vbExclamationCallFocusBacktxtSID焦点返回学号框ExitSubEndIfIfNotIsDatetxtBorn.TextThen出生日期若非日期型,重新输入MsgBox出生日期应按日期格式yyyy-mm-dd输入!vbExclamationCallFocusBacktxtBorn焦点返回出生日期框ExitSubElse若日期格式正确txtBorn.Text=FormattxtBorn.Textyyyy-mm-dd转换为4位年份WithadoAdd.Recordset.AddNew添加记录为各字段赋值.Fields0=Trim$txtSID.Text学号.Fields1=Trim$txtName.Text姓名.Fields2=Trim$cboSex.Text性别.Fields3=Trim$txtBorn.Text出生日期.Fields4=Trim$cboClass.Text班级.Update更新数据库EndWithMsgBox学籍信息已成功添加!vbInformationEndIfEndSubPrivateSubForm_Load窗体加载DimsqlAsStringsql=SELECT*FROM学籍SQL语句用于创建记录集源adoAdd.RecordSource=sql设置记录源adoAdd.RefreshCallAddClassItemcboClass调用标准模块中的过程填充班级组合框EndSubPrivateSubForm_UnloadCancelAsInteger窗体卸载frmMain.Show显示主窗体EndSubPrivateSubtxtSID_KeyPressKeyAsciiAsInteger学号文本框按键非数字或回删键,取消IfNotIsNumericChrKeyAsciiAndKeyAscii8ThenKeyAscii=0EndIfEndSub
2.修改学籍信息修改学籍信息窗体frmModiEssOptionExplicitDimsNoAsString存学号PrivateSubadoEdit_MoveCompleteByValadReasonAsADODB.EventReasonEnum_ByValpErrorAsADODB.ErroradStatusAsADODB.EventStatusEnum_ByValpRecordsetAsADODB.Recordset移动记录指针时显示当前记录位置/总记录数adoEdit.Caption=Record:_CStradoEdit.Recordset.AbsolutePosition_/adoEdit.Recordset.RecordCountEndSub若班级组合框处于允许编辑状态,失去焦点时检查列表,添加新项PrivateSubcboClass_ClickIfcboClass.Locked=TrueThenExitSubCallNewClassItemcboClassEndSubPrivateSubcboSelClass_Click单击选择班级组合框DimsqlNAsStringDimstrClassAsStringstrClass=cboSelClass.Text获取班级名称IfstrClass=全部ThenstrClass=%利用通配符%可包括全体学生sqlN=SELECT*FROM学籍WHERE班级like_strClassORDERBY学号根据所选班级重新打开记录集adoEdit.RecordSource=sqlNadoEdit.RefreshEndSubPrivateSubcmdCancel_Click取消WithadoEdit.Recordset.CancelUpdate取消更新.MoveNext.MovePreviousEndWithCallMyLockTrueEndSubPrivateSubcmdDelect_Click删除DimResponseAsIntegerResponse=MsgBox删除当前记录吗?vbQuestion+vbYesNo询问IfResponse=vbYesThenWithadoEdit.Recordset.Delete.MoveNextIf.EOFAnd.RecordCount0Then.MoveLastEndWith删除成绩表中的相应记录DimsqlGAsStringsqlG=SELECT*FROM成绩WHERE学号=Trim$txtSID.TextadoGrade.RecordSource=sqlGadoGrade.RefreshWithadoGrade.RecordsetIf.RecordCount0Then.MoveFirstDoUntil.EOF.Delete.MoveNextLoopEndIfEndWithMsgBox删除成功vbInformation提示EndIfEndSubPrivateSubcmdEdit_Click修改sNo=Trim$txtSID.TextCallMyLockFalse用于输入信息的控件解锁EndSubPrivateSubcmdExit_ClickUnloadMeEndSubPrivateSubcmdUpdate_Click更新OnErrorResumeNext各输入框若为空白,提示重新输入IfTrimtxtSID.Text=ThenMsgBox请输入学号!vbExclamationtxtSID.SetFocusExitSubEndIfIfTrimtxtName.Text=ThenMsgBox请输入姓名!vbExclamationtxtName.SetFocusExitSubEndIfIfTrimtxtBorn.Text=ThenMsgBox请输入出生日期!vbExclamationtxtBorn.SetFocusExitSubEndIfIfTrim$cboClass.Text=ThenMsgBox请选择或输入班级!vbExclamationcboClass.SetFocusExitSubEndIfIfNotIsDatetxtBorn.TextThen出生日期若非日期型,重新输入MsgBox出生日期应按日期格式yyyy-mm-dd输入!vbExclamationWithtxtBorn.SelStart=
0.SelLength=Len.Text.SetFocusEndWithElse若日期格式正确txtBorn.Text=FormattxtBorn.Textyyyy-mm-dd转换为4位年份adoEdit.Recordset.Update更新数据库IfErr=-2147467259Then该错误号为主键重复错误adoEdit.Recordset.CancelUpdateMsgBox学号重复,请重新输入!vbExclamationCallFocusBacktxtSID焦点返回学号框ExitSubEndIf若修改了学号,成绩表中需作相应修改IfTrim$txtSID.TextsNoThenDimsqlGAsStringsqlG=SELECT*FROM成绩WHERE学号=sNoadoGrade.RecordSource=sqlGadoGrade.RefreshWithadoGrade.RecordsetIf.RecordCount0Then.MoveFirstDoUntil.EOF.Fields学号=Trim$txtSID.Text.MoveNextLoopEndIfEndWithEndIfMsgBox学籍信息已成功修改!vbInformationCallMyLockTrue锁定EndIfEndSubPrivateSubForm_InitializeChDriveApp.PathChDirApp.PathEndSubPrivateSubForm_Load窗体加载CallMyLockTrue锁定相关控件CallAddClassItemcboClass填充班级组合框CallAddClassItemcboSelClass填充选择班级组合框cboSelClass.AddItem全部cboSelClass.ListIndex=cboSelClass.NewIndexEndSubPrivateSubForm_UnloadCancelAsInteger窗体卸载时frmMain.ShowEndSub自定义过程锁定/解锁用于输入的控件PrivateSubMyLockByValbLockAsBooleantxtSID.Locked=bLockTruetxtName.Locked=bLockTruetxtBorn.Locked=bLockTruecboSex.Locked=bLockTruecboClass.Locked=bLockTruecboSelClass.Locked=NotbLockFalsecmdEdit.Enabled=bLockTruecmdCancel.Enabled=NotbLockFalsecmdUpdate.Enabled=NotbLockFalsecmdDelect.Enabled=bLockTrueadoEdit.Enabled=bLockTrueEndSub
3.查询学籍信息查询学籍信息窗体frmQueryEssOptionExplicitDimsqlAsStringPrivateSubchkQuery_ClickIndexAsInteger选中复选框时,焦点移至输入控件IfchkQueryIndex.Value=vbUncheckedThenExitSubSelectCaseIndexCase0txtNo.SetFocusCase1txtName.SetFocusCase2cboSex.SetFocusCase3cboClass.SetFocusEndSelectEndSubPrivateSubcmdAll_Click全部显示SQL查询语句sql=SELECT学号姓名性别Format出生日期yyyy-m-d_As出生日期班级FROM学籍ORDERBY学号Adodc
1.RecordSource=sql生成记录集Adodc
1.Refresh刷新SetDataGrid
1.DataSource=Adodc1EndSubPrivateSubcmdExit_ClickUnloadMeEndSubPrivateSubcmdQuery_Click查询Dimsql1AsStringDimiAsIntegerDimsqlA3AsString字符串数组存放各种查询条件,下标与复选框控件数组索引对应SQL语句中使用Like运算符、%通配符可实现模糊查询sqlA0=学号Like%Trim$txtNo.Text%sqlA1=姓名Like%Trim$txtName.Text%sqlA2=性别=Trim$cboSex.TextsqlA3=班级Like%Trim$cboClass.Text%sql1=用于存放SQL语句中WHERE子句的条件循环遍历各查询条件复选框Fori=0TochkQuery.Count-1IfchkQueryi.Value=vbCheckedThen若某复选框被选中,Ifsql1=Then若只有一个复选框被选中,sql1=sqlAi利用字符串数组加入一个条件;Else若有多个复选框被选中,sql1=sql1ANDsqlAi用AND运算符加入多个条件EndIfEndIfNext退出循环后,若条件字符串为空,说明未选中任何复选框,执行“全部”按钮单击事件过程的语句,显示全部记录Ifsql1=ThenCallcmdAll_ClickExitSubEndIfSELECT语句+WHERE子句的条件字符串形成完整的SQL语句sql=SELECT学号姓名性别Format出生日期yyyy-m-d_As出生日期班级FROM学籍WHEREsql1ORDERBY学号Adodc
1.RecordSource=sql刷新Adodc1Adodc
1.RefreshIfAdodc
1.Recordset.BOFThen若记录集为空MsgBox对不起,没有您所要查找的记录vbInformationExitSubEndIfSetDataGrid
1.DataSource=Adodc1重新绑定数据网格控件EndSubPrivateSubForm_Load窗体加载后在网格控件中显示所有学生信息CallcmdAll_ClickDataGrid
1.AllowUpdate=False禁止修改网格控件的内容CallAddClassItemcboClass调用标准模块中的过程填充班级组合框EndSubPrivateSubForm_UnloadCancelAsIntegerfrmMain.ShowEndSub
(四)课程管理模块
1.添加课程添加课程窗体frmAddCourseOptionExplicitDimsqlAsStringPrivateSubcmdCancel_Click退出UnloadMeEndSubPrivateSubcmdOk_Click各文本框若为空白,提示重新输入IfTrim$txtCourseNo.Text=ThenMsgBox请输入课程编号!vbExclamationtxtCourseNo.SetFocusExitSubEndIfIfTrim$txtCourseName.Text=ThenMsgBox请输入课程名称!vbExclamationtxtCourseName.SetFocusExitSubEndIf检查是否有重复课号利用记录集的Find方法Adodc
1.RefreshAdodc
1.Recordset.Find课号=txtCourseNo.TextIfNotAdodc
1.Recordset.EOFThen若已有该课号MsgBox课程编号重复,请重新输入!vbExclamationWithtxtCourseNo焦点返回课号框.SelStart=
0.SelLength=Len.Text.SetFocusEndWithExitSubEndIfWithAdodc
1.Recordset.AddNew添加记录为各字段赋值.Fields0=Trim$txtCourseNo.Text课号.Fields1=Trim$txtCourseName.Text课名.Update更新数据库.Requery重新查询EndWithSetDataGrid
1.DataSource=Adodc1更新网格txtCourseNo.Text=txtCourseName.Text=txtCourseNo.SetFocusMsgBox课程信息已成功添加!vbInformationEndSubPrivateSubForm_Loadsql=SELECT*FROM课程信息ORDERBY课号SQL语句用于创建动态记录集Adodc
1.RecordSource=sql设置记录源为动态记录集WithDataGrid1Set.DataSource=Adodc
1.AllowUpdate=False.Columns
0.Width=1000EndWithEndSubPrivateSubForm_UnloadCancelAsIntegerfrmMain.Show显示主窗体EndSub
2.修改课程修改课程窗体frmModiCourseOptionExplicitPrivateSubadoEdit_MoveCompleteByValadReasonAsADODB.EventReasonEnum_ByValpErrorAsADODB.ErroradStatusAsADODB.EventStatusEnum_ByValpRecordsetAsADODB.Recordset显示当前记录位置/总记录数adoEdit.Caption=Record:_CStradoEdit.Recordset.AbsolutePosition_/adoEdit.Recordset.RecordCountEndSubPrivateSubcmdCancel_Click取消WithadoEdit.Recordset.CancelUpdate取消更新.MoveNext.MovePreviousEndWithCallMyLockTrueEndSubPrivateSubcmdDelect_Click删除DimResponseAsIntegerResponse=MsgBox删除当前记录吗?vbQuestion+vbYesNo询问IfResponse=vbYesThenWithadoEdit.Recordset.Delete.MoveNextIf.EOFThen.MoveLastEndWithEndIfEndSubPrivateSubcmdEdit_Click修改CallMyLockFalseEndSubPrivateSubcmdExit_ClickUnloadMeEndSubPrivateSubcmdUpdate_Click更新OnErrorResumeNext各文本框若为空白,提示重新输入IfTrim$txtCourseNo.Text=ThenMsgBox请输入课程编号!vbExclamationtxtCourseNo.SetFocusExitSubEndIfIfTrim$txtCourseName.Text=ThenMsgBox请输入课程名称!vbExclamationtxtCourseName.SetFocusExitSubEndIfadoEdit.Recordset.Update更新数据库IfErr=-2147467259Then该错误号为主键重复错误MsgBox课程编号重复,请重新输入!vbExclamationWithtxtCourseNo焦点返回课号框.SelStart=
0.SelLength=Len.Text.SetFocusEndWithExitSubEndIfMsgBox课程信息已成功修改!vbInformationCallMyLockTrue锁定EndSubPrivateSubForm_InitializeChDriveApp.PathChDirApp.PathEndSubPrivateSubForm_LoadCallMyLockTrueEndSubPrivateSubForm_UnloadCancelAsInteger窗体卸载时frmMain.ShowEndSubPrivateSubMyLockByValbLockAsBoolean自定义过程锁定/解锁用于输入的控件txtCourseNo.Locked=bLockTruetxtCourseName.Locked=bLockTruecmdEdit.Enabled=bLockTruecmdCancel.Enabled=NotbLockFalsecmdUpdate.Enabled=NotbLockFalseadoEdit.Enabled=bLockTrueEndSub
(五)成绩管理模块
1.输入成绩输入成绩窗体frmInGradeOptionExplicitPrivateSubcboClass_Click班级组合框IfTrim$cboCource.Text=ThenExitSubCallGetOldGrade获取已有成绩CallMakeTempTable生成临时表cmdOk.Enabled=TrueEndSubPrivateSubcboCource_Click课程组合框IfTrim$cboClass.Text=ThenExitSubCallGetOldGrade获取已有成绩CallMakeTempTable生成临时表cmdOk.Enabled=TrueEndSubPrivateSubcmdCancel_Click取消IfadoInGrade.RecordsetIsNothingThenExitSubadoInGrade.Recordset.CancelBatchEndSubPrivateSubcmdExit_Click退出UnloadMeEndSubPrivateSubcmdOk_Click确认输入DimRpAsIntegerRp=MsgBox“确认输入”后将无法取消,是否继续?vbQuestion+vbYesNo提示IfRp=vbNoThenExitSubcmdOk.Enabled=False将临时表中的数据追加到成绩表中WithadoInGrade.RecordsetIf.RecordCount=0ThenExitSub.MoveFirstDoUntil.EOF注意对数据库中NULL值的判断,VB表达式与SQL表达式不同IfNotIsNull.Fields分数ThenadoAdd.Recordset.AddNewadoAdd.Recordset学号=.Fields学号.ValueadoAdd.Recordset课程=cboCource.TextadoAdd.Recordset分数=.Fields分数.ValueadoAdd.Recordset.UpdateEndIf.MoveNextLoopEndWith延时,以便完成数据库后台更新DimsngWaitAsSinglesngWait=TimerDoUntilTimer-sngWait1#fraWait.Visible=TrueDoEventsLoopfraWait.Visible=FalseMsgBox添加成绩成功vbInformationCallcboCource_Click刷新控件EndSubPrivateSubForm_Load窗体加载填充课程组合框列表该记录集仅在窗体加载时使用一次,因此借用添加成绩的ADO数据控件adoAdd.RecordSource=SELECT*FROM课程信息adoAdd.RefreshWithadoAdd.RecordsetDoUntil.EOFcboCource.AddItem.Fields课程.Value.MoveNextLoopEndWithCallAddClassItemcboClass填充班级组合框cmdOk.Enabled=False打开成绩表adoAdd.RecordSource=SELECT*FROM成绩adoAdd.Refresh设输入成绩临时表记录集为批更新模式adoInGrade.LockType=adLockBatchOptimisticEndSubPrivateSubForm_UnloadCancelAsInteger窗体卸载时frmMain.ShowEndSubPrivateSubGetOldGrade自定义过程获取已有成绩并显示DimsqlAsString生成当前班级、课程已有成绩记录集sql=SELECT成绩.学号AS学号学籍.姓名分数_FROM成绩学籍WHERE成绩.学号=学籍.学号_AND成绩.课程=cboCource.Text_AND学籍.班级=cboClass.TextadoOldGrade.RecordSource=sqladoOldGrade.Refresh设置DataGrid控件WithdgdGradeSet.DataSource=adoOldGrade.Columns
0.Width=
1200.Columns
1.Width=
1200.AllowUpdate=FalseEndWithEndSubPrivateSubMakeTempTable自定义过程生成临时表并显示DimsqlAsStringadoInGrade.RecordSource=SELECT*FROM临时adoInGrade.Refresh删除临时表中的记录WithadoInGrade.Recordset用记录集的Delete方法客户端游标只能删除当前记录DoWhile.RecordCount
0.MoveFirst.DeleteLoop.UpdateBatchEndWith根据所选班级构成学号姓名记录集sql=SELECT学号姓名FROM学籍_WHERE班级=cboClass.TextadoNoName.RecordSource=sqladoNoName.Refresh将当前课程尚无成绩的学号姓名加入临时表,为输入成绩作准备WithadoNoName.RecordsetDoUntil.EOFIfadoOldGrade.Recordset.RecordCount0Then关键语句adoOldGrade.Recordset.MoveFirstEndIfadoOldGrade.Recordset.Find学号=.Fields学号.ValueIfadoOldGrade.Recordset.EOFThenadoInGrade.Recordset.AddNewadoInGrade.Recordset学号=.Fields学号.ValueadoInGrade.Recordset姓名=.Fields姓名.ValueEndIf.MoveNextLoopadoInGrade.Recordset.UpdateBatchEndWith设置DataGrid控件WithdgdInGradeSet.DataSource=adoInGrade.AllowUpdate=True.Columns
0.Locked=True锁定学号、姓名.Columns
1.Locked=True.Columns
0.Width=
1100.Columns
1.Width=1100IfadoInGrade.Recordset.RecordCount0Then.Col=
2.Row=
0.SetFocusEndIfEndWithEndSub
2.修改成绩修改成绩窗体frmModiGradeOptionExplicitDimstrGradeAsString在“选择学生”数据网格中选择学生时,显示当前记录内容PrivateSubadoNoName_MoveCompleteByValadReasonAsADODB.EventReasonEnumByValpErrorAsADODB.ErroradStatusAsADODB.EventStatusEnumByValpRecordsetAsADODB.RecordsetIfadoNoName.Recordset.BOFOradoNoName.Recordset.EOFThentxtNo.Text=txtName.Text=txtGrade.Text=ExitSubEndIf显示当前学号、姓名txtNo.Text=adoNoName.Recordset学号.ValuetxtName.Text=adoNoName.Recordset姓名.Value查询成绩表中当前学生的各科成绩DimsqlAsStringsql=SELECT*FROM成绩WHERE学号=txtNo.TextadoEdit.RecordSource=sqladoEdit.Refresh填充课程组合框cboCourse.ClearWithadoEdit.RecordsetDoUntil.EOFcboCourse.AddItem.Fields课程.Value.MoveNextLoopEndWithIfcboCourse.ListCount0ThencboCourse.ListIndex=0ElsetxtGrade.Text=EndIfEndSubPrivateSubcboClass_Click单击班级组合框DimsqlNAsStringDISTINCT关键字过滤重复记录sqlN=SELECTDISTINCT成绩.学号AS学号姓名_FROM成绩学籍_WHERE学籍.学号=成绩.学号AND班级=_cboClass.TextORDERBY成绩.学号打开记录集adoNoName.RecordSource=sqlNadoNoName.Refresh设置数据网格控件WithdgdNoNameSet.DataSource=adoNoName.Columns
0.Width=
1100.Columns
1.Width=1100EndWithEndSubPrivateSubcboCourse_Click单击课程组合框IfTrim$txtNo.Text=OrTrim$cboCourse.Text=ThentxtGrade.Text=ExitSubElseWithadoEdit.Recordset显示分数If.RecordCount0Then.MoveFirst.Find课程=cboCourse.TextIf.EOFThenExitSubtxtGrade.Text=.Fields分数.ValueEndWithEndIfEndSubPrivateSubcmdCancel_Click取消txtGrade.Text=strGradeCallMyLockTrueEndSubPrivateSubcmdDelete_Click删除IfTrim$txtNo.Text=OrTrim$cboCourse.Text=ThenExitSubDimResponseAsIntegerResponse=MsgBox删除当前记录吗?vbQuestion+vbYesNo询问IfResponse=vbYesThenWithadoEdit.Recordset.Delete.Update延时,以便完成数据库后台更新DimsngWaitAsSinglesngWait=TimerDoUntilTimer-sngWait1#fraWait.Visible=TrueDoEventsLoopfraWait.Visible=FalseIf.RecordCount=0ThenMsgBox成绩表中已无该学生的成绩vbInformation提示ElseMsgBox成绩删除成功vbInformation提示EndIfadoNoName.RefreshdgdNoName.Columns
0.Width=1100dgdNoName.Columns
1.Width=1100EndWithEndIfCallMyLockTrueEndSubPrivateSubcmdEdit_Click修改IfTrim$txtNo.Text=OrTrim$cboCourse.Text=ThenExitSubstrGrade=txtGrade.Text暂存当前成绩CallMyLockFalse成绩框解锁CallFocusBacktxtGrade焦点返回EndSubPrivateSubcmdExit_Click退出UnloadMeEndSubPrivateSubcmdUpdate_Click更新成绩框若为空白,提示重新输入IfTrim$txtGrade.Text=ThenMsgBox请输入成绩!若无成绩,请将该记录删除vbExclamation提示CallcmdCancel_ClicktxtGrade.SetFocusExitSubEndIf更新WithadoEdit.Recordset.Fields分数.Value=ValtxtGrade.Text.UpdateEndWithMsgBox成绩修改成功vbInformationCallMyLockTrue锁定EndSubPrivateSubForm_Load窗体加载CallMyLockTrue锁定相关控件CallAddClassItemcboClass填充班级组合框fraWait.Top=1200fraWait.Left=1600dgdNoName.AllowUpdate=FalseEndSubPrivateSubForm_UnloadCancelAsInteger窗体卸载时frmMain.ShowEndSub自定义过程锁定/解锁相关控件PrivateSubMyLockByValbLockAsBooleantxtGrade.Locked=bLockTrue=分数锁定cboClass.Locked=NotbLockFalse=班级解锁cboCourse.Locked=NotbLockFalse=课程解锁cmdEdit.Enabled=bLockTrue=修改按钮有效cmdCancel.Enabled=NotbLockFalse=取消按钮无效cmdUpdate.Enabled=NotbLockFalse=更新按钮无效dgdNoName.Enabled=bLockTrueEndSubPrivateSubtxtGrade_KeyPressKeyAsciiAsInteger成绩框按键按键非数字或回删键,取消IfNotIsNumericChrKeyAsciiAndKeyAscii8ThenKeyAscii=0EndIfEndSub
3.查询成绩查询成绩窗体frmQueryGradeOptionExplicitDimsqlAsString存SQL语句PrivateSubchkQuery_ClickIndexAsInteger选中复选框时,焦点移至输入控件IfchkQueryIndex.Value=vbUncheckedThenExitSubSelectCaseIndexCase0txtNo.SetFocusCase1txtName.SetFocusCase2cboCourse.SetFocusCase3cboClass.SetFocusEndSelectEndSubPrivateSubcmdAll_ClickSQL查询语句sql=SELECT成绩.学号AS学号姓名课程分数班级_FROM成绩学籍WHERE成绩.学号=学籍.学号ORDERBY成绩.学号Adodc
1.RecordSource=sql生成记录集刷新Adodc
1.RefreshSetDataGrid
1.DataSource=Adodc1EndSubPrivateSubcmdExit_Click退出UnloadMeEndSubPrivateSubcmdQuery_Click查询Dimsql1AsStringDimiAsIntegerDimsqlA3AsString字符串数组存放各种查询条件,下标与复选框控件数组索引对应SQL语句中使用Like运算符、%通配符可实现模糊查询sqlA0=成绩.学号Like%Trim$txtNo.Text%sqlA1=姓名Like%Trim$txtName.Text%sqlA2=课程=Trim$cboCourse.TextsqlA3=班级Like%Trim$cboClass.Text%sql1=用于存放SQL语句中WHERE子句的条件循环遍历各查询条件复选框Fori=0TochkQuery.Count-1IfchkQueryi.Value=vbCheckedThen若某复选框被选中,Ifsql1=Then若只有一个复选框被选中,sql1=sqlAi利用字符串数组加入一个条件;Else若有多个复选框被选中,sql1=sql1ANDsqlAi用AND运算符加入多个条件EndIfEndIfNext退出循环后,若条件字符串为空,说明未选中任何复选框,执行“全部”按钮单击事件过程的语句,显示全部记录Ifsql1=ThenCallcmdAll_ClickExitSubEndIfSELECT语句+WHERE子句的条件字符串形成完整的SQL语句sql=SELECT成绩.学号AS学号姓名课程分数班级_FROM成绩学籍WHERE成绩.学号=学籍.学号AND_sql1ORDERBY成绩.学号Adodc
1.RecordSource=sql刷新Adodc1Adodc
1.RefreshIfAdodc
1.Recordset.BOFThen若记录集为空MsgBox对不起,没有您所要查找的记录vbInformationExitSubEndIfSetDataGrid
1.DataSource=Adodc1重新绑定数据网格控件EndSubPrivateSubForm_Load窗体加载填充课程组合框,分组子句GROUPBY筛选重复课程sql=SELECT课程FROM成绩GROUPBY课程_HAVING课程NULLAND课程Adodc
1.RecordSource=sqlAdodc
1.RefreshWithAdodc
1.RecordsetDoUntil.EOFcboCourse.AddItem.Fields课程.Value.MoveNextLoopEndWith填充班级组合框CallAddClassItemcboClass调用标准模块公有过程DataGrid
1.AllowUpdate=False禁止修改网格控件的内容EndSubPrivateSubForm_UnloadCancelAsIntegerfrmMain.ShowEndSub
(六)系统模块
1.添加用户添加用户窗体frmUserOptionExplicitPrivateSubcmdExit_ClickUnloadMeEndSubPrivateSubcmdOk_Click确认检查各文本框是否为空IfTrim$txtUserName.Text=ThenMsgBox请输入用户名!vbExclamationtxtUserName.SetFocusExitSubEndIfIfTrim$txtPassword
1.Text=ThenMsgBox请输入密码!vbExclamationtxtPassword
1.SetFocusExitSubEndIfIfTrim$txtPassword
2.Text=ThenMsgBox请确认密码!vbExclamationtxtPassword
2.SetFocusExitSubEndIf检查两次输入密码是否一致IfTrim$txtPassword
1.TextTrim$txtPassword
2.TextThenMsgBox确认密码错误,请重新输入!vbExclamationWithtxtPassword
2.SetFocus.SelStart=
0.SelLength=Len.TextEndWithExitSubEndIfSQL语句作为ADO控件的记录源Adodc
1.RecordSource=SELECT*FROM用户WHERE用户名=txtUserName.TextAdodc
1.RefreshWithAdodc
1.RecordsetIf.BOFThen检查是否有同名用户,若无,添加,若有,重新输入.AddNew.Fields0=Trim$txtUserName.Text.Fields1=Trim$txtPassword
1.Text.Fields2=普通默认权限为普通用户.UpdateMsgBox添加用户成功!vbInformationElseMsgBox此用户已存在!vbExclamationWithtxtUserName焦点返回用户框.SetFocus.SelStart=
0.SelLength=Len.TextEndWithExitSubEndIfEndWithEndSubPrivateSubForm_UnloadCancelAsInteger窗体卸载时frmMain.ShowEndSub
2.删除用户及更改权限删除用户、更改权限共用窗体frmDelUserOptionExplicitPrivateSubcmdCancel_Click取消删除adoUser.Recordset.CancelBatchadoUser.RefreshEndSubPrivateSubcmdDelete_Click删除按钮IfUCase$adoUser.Recordset用户名=ADMINThenMsgBox不能删除“Admin”用户vbExclamation提示ExitSubEndIfDimintRspAsIntegerDimstrQstAsStringstrQst=删除用户“adoUser.Recordset用户名”吗?intRsp=MsgBoxstrQstvbQuestion+vbYesNo询问IfintRsp=vbYesThenadoUser.Recordset.Delete不执行更新操作,可以取消删除EndIfEndSubPrivateSubcmdExit_ClickIndexAsIntegerUnloadMeEndSubPrivateSubcmdValidate_Click确认对权限的修改adoUser.Recordset权限=cboPurview.TextEndSubPrivateSubForm_Activate窗体激活时IfMe.Caption=删除用户ThenfraDel.Visible=TruefraModi.Visible=FalseElsefraDel.Visible=FalsefraModi.Visible=TrueEndIfEndSubPrivateSubForm_Load窗体加载fraModi.Left=fraDel.Left设置框架位置fraModi.Top=fraDel.TopWithadoUser.LockType=adLockBatchOptimistic批更新模式,以备用户取消删除.RecordSource=SELECT*FROM用户.RefreshEndWithdgdUser.AllowUpdate=False不允许修改DataGrid控件中显示的记录SetdgdUser.DataSource=adoUserEndSubPrivateSubForm_UnloadCancelAsIntegeradoUser.Recordset.UpdateBatch窗体卸载时对删除或更改权限操作进行更新frmMain.ShowEndSub
3.修改密码修改密码窗体frmModiPassOptionExplicitPrivateSubcmdExit_ClickUnloadMeEndSubPrivateSubcmdOk_Click确认检查各文本框是否为空IfTrim$txtPassword
1.Text=ThenMsgBox请输入新密码!vbExclamationtxtPassword
1.SetFocusExitSubEndIfIfTrim$txtPassword
2.Text=ThenMsgBox请确认新密码!vbExclamationtxtPassword
2.SetFocusExitSubEndIf检查两次输入密码是否相同IfTrim$txtPassword
1.TextTrim$txtPassword
2.TextThenMsgBox确认密码错误,请重新输入!vbExclamationWithtxtPassword
2.SetFocus.SelStart=
0.SelLength=Len.TextEndWithExitSubEndIfWithAdodc1修改密码.RecordSource=SELECT*FROM用户WHERE用户名=gstrUser.Refresh.Recordset密码=txtPassword
1.Text.Recordset.UpdateEndWithMsgBox密码修改成功!vbInformationEndSubPrivateSubForm_UnloadCancelAsInteger窗体卸载时frmMain.ShowEndSub
(七)标准模块标准模块Module1Stud
1.basOptionExplicitPublicgstrUserAsString全局变量存用户名PublicgblnPurviewAsBoolean全局变量存用户权限PublicpubCnnAsNewADODB.Connection全局连接对象供各模块使用建立连接PublicSubCreateConnectionpubCnn.CursorLocation=adUseClientpubCnn.OpenProvider=Microsoft.Jet.OLEDB.
4.0;DataSource=Stud
97.mdbEndSub填充班级组合框参数为组合框对象变量PublicSubAddClassItemcboXAsComboBoxDimrsTmpAsNewADODB.Recordset临时记录集过滤重复记录和空字段方法1利用GROUPBY子句rsTmp.OpenSELECT班级FROM学籍GROUPBY班级_HAVING班级NULLAND班级_pubCnnadOpenStaticadLockOptimistic方法2利用DISTINCT关键字rsTmp.OpenSELECTDISTINCT班级FROM学籍_WHERE班级NULLAND班级_pubCnnadOpenStaticadLockOptimistic在组合框中添加班级cboX.ClearDoUntilrsTmp.EOFcboX.AddItemrsTmp班级rsTmp.MoveNextLoopSetrsTmp=NothingEndSub焦点返回文本框并反显内容参数为文本框对象变量PublicSubFocusBacktxtXAsTextBoxWithtxtX.SelStart=
0.SelLength=Len.Text.SetFocusEndWithEndSub班级组合框失去焦点时检查列表,若用户输入了新班级,添加新项PublicSubNewClassItemcboXAsComboBox参数为组合框对象变量DimiAsIntegerDimblnOldAsBoolean班级名称存在标志DimsNewAsStringblnOld=FalsesNew=Trim$cboX.Text取用户在组合框输入的班级名称Fori=0TocboX.ListCount-1若列表中已有该班级,设置标志,退出循环IfcboX.Listi=sNewOrsNew=ThenblnOld=TrueExitForEndIfNextIfblnOld=FalseThen若列表中无该班级名称,添加cboX.AddItemsNewEndIfEndSub。