学生信息管理系统设计方法和代码_第1页
学生信息管理系统设计方法和代码_第2页
学生信息管理系统设计方法和代码_第3页
学生信息管理系统设计方法和代码_第4页
学生信息管理系统设计方法和代码_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学生信息管理系统设计方法及代码一、设计要求方法创建一个学生信息管理系统,可以完成学生基本信息及成绩的输入、修改和查询。具体要求如下:(一)建立“学生信息”数据库1. 建立数据库利用Microsoft Access或VB中的“可视化数据管理器”建立数据库,名称为“Student.mdb”。2. 建立数据表在Student.mdb数据库中建立5个表:(1)学籍表该表存放学生的基本信息,名称为“学籍”,结构如表3-1所示。表3-1 学籍表结构字段名类型大小说明字段名类型大小说明学号文本(Text)20主索引出生日期日期(Date)姓名文本(Text)10班级文本(Text)20性别文本(Text)2

2、表中暂时存放一条记录,各字段均不应为空。(2)成绩表该表存放学生成绩,名称为“成绩”,结构如表3-2所示。表3-2 成绩表结构字段名类型大小学号文本(Text)20课程文本(Text)20分数整型(Integer)说明:为减少数据冗余,成绩表中仅存储学号,不存储学生姓名,需要时根据学号从学籍表中获取姓名。按照数据库设计规范,对“课程”亦应作类似处理。经过处理后,程序代码的编写量和难度均会明显增加。为了减轻初学者的编程负担,在成绩表中未对课程作规范化处理,而是直接存储课程名称。(3)课程信息表该表存放课程信息,名称为“课程信息”,结构如表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分数整型(In

4、teger)方法:在数据库中设计“临时”表的目的是兼顾DataGrid控件的使用和减少数据冗余。为了减少数据冗余,在“成绩”表中未包含学生姓名,而以“学号”与“学籍”表相关联。尽管这样做符合数据库设计规范,但是某些数据绑定控件的使用却因此而受到限制。例如,DataGrid控件以表格形式显示数据,具有较强的数据显示和编辑功能,可以进行成批数据的连续录入。令人遗憾的是,与DataGrid控件绑定的记录集必须使用客户端游标(CursorLocation=adUseClient),若记录集采用服务器端游标(adUseServer),该控件将无法显示数据。使用客户端游标的记录集在功能上有很多限制,对于多

5、表查询来说,若所生成的记录集的输出字段来自两个或更多表,则不能进行更新操作;若查询虽然涉及多表,但输出字段仅来自其中一个表,修改更新操作不受影响。以下面的两条SQL语句为例: SELECT 成绩.学号,学籍.姓名,成绩.课程,成绩.分数 FROM 成绩,学籍 WHERE 成绩.学号=学籍.学号 SELECT 成绩.学号,成绩.课程,成绩.分数 FROM 成绩,学籍 WHERE 成绩.学号=学籍.学号语句所选择的查询输出字段(SELECT语句)来自两个表,采用客户端游标生成记录集后可以在各种数据绑定控件中正常显示,但不能修改、更新数据。若在程序中执行更新操作,将出现如图3-2所示的错误提示。图3

6、-2 错误信息语句的查询输出字段仅来自“成绩”表,尽管在查询条件(WHERE子句)中涉及两个表,但不影响更新操作。为了充分发挥DataGrid控件的数据编辑功能,同时兼顾数据库设计规范,可以用一个临时工作表存放多表查询的结果,将多表操作转换为单表操作。数据流程如下:多表查询记录集临时表录入、修改存入基本表。(二)用户登录窗体本窗体(frmLogin)作为系统的启动窗体,用于验证用户是否合法,运行时界面如图3-3所示。图3-3 用户登录方法: 窗体上两个文本框分别用于输入用户名和密码,其中密码文本框的内容用“*”显示。 在窗体上添加一个ADO数据控件,设Visible=False,将其与数据库连

7、接,用SQL语句将记录源与数据库中的“用户”表绑定。 单击“确定”按钮后,查询“用户”表中是否有相符的用户名和密码,若不符,提示重新输入,焦点返回文本框。如果3次输入错误,退出系统。若输入正确,将用户名和用户权限保存在全局变量中,显示系统主窗体,卸载本窗体。 单击“取消”按钮,退出系统。注意:保存用户名和用户权限需要建立一个标准模块(Module1),用Public关键字声明两个全局变量,将“用户登录”窗体运行时输入的用户名和用户权限存入全局变量中,以供其他模块调用。(三)设计系统主窗体系统主窗体(frmMain)作为学生信息管理系统的主界面,如图3-4所示。图3-4 主窗体窗体中菜单结构如表

8、3-7。表3-7 菜单结构主菜单系统学籍管理课程管理成绩管理帮助菜单项添加用户删除用户更改权限修改密码退出系统添加学籍信息修改学籍信息查询学籍信息添加课程修改课程输入成绩修改成绩查询成绩关于方法: 单击某一菜单项时,显示对应窗体。 只有用户权限为“管理员”的用户才有权使用“系统”菜单中的“添加用户”、“删除用户”和“更改权限”三个菜单项的功能。因此,应在窗体加载时根据保存在全局变量中的用户权限确定是否显示这三个菜单项。(四)学籍管理模块“学籍管理”菜单下有三个菜单项:添加学籍信息、修改学籍信息和查询学籍信息。1. 添加学籍信息单击“添加学籍信息”菜单项后显示“添加学籍信息”窗体(frmAddE

9、ss),运行时界面如图3-5所示。图3-5 添加学籍信息方法: 窗体上的文本框分别用于输入学号、姓名和出生日期,组合框用于选择性别。 在窗体上添加一个ADO数据控件,设Visible=False,将其与数据库连接,用SQL语句将记录源与数据库中的“学籍”表绑定。 单击“确认添加”按钮后,查询数据库“学籍”表中是否有相同的学号,若有,提示该学号已存在,重新输入,焦点返回学号文本框。如果无相同学号,将学号、姓名、性别和出生日期添加到数据库“学籍”表中,卸载本窗体。注意:在向数据库添加记录前,应判断数据是否合法,如:学号应为数字(可用IsNumeric函数判断),出生日期应为日期型数据(可用IsDa

10、te函数判断),各文本框均不应空白。 单击“退出”按钮,卸载本窗体。2. 修改学籍信息单击“修改学籍信息”菜单项后显示“修改学籍信息”窗体(frmModiEss),运行时界面如图3-6所示。 (a) 浏览状态 (b) 修改状态图3-6 修改学籍信息方法: 在窗体上添加两个ADO数据控件,分别命名为adoEdit和adoGrade,将其与数据库连接,用SQL语句将adoEdit的记录源与数据库中的“学籍”表绑定,设Align=2。设adoGrade的Visible=False,其记录源采用动态绑定方式,通过查询语句生成临时记录集,与学籍表同步更新。 “修改记录”框架的文本框分别用于显示和修改学号

11、、姓名及出生日期,将它们的DataSource均设为ADO数据控件,DataField分别与学号、姓名及出生日期字段绑定。组合框分别用于选择性别和班级,与ADO数据控件及对应字段绑定。 “选择班级”框架中的简单组合框(Style = 1)用于选择班级,筛选拟修改记录的范围。 在窗体加载时,应将“修改记录”框架中各文本框和组合框锁定为只读(Locked=True),并将“更新数据”和“取消修改”按钮设置为无效,其他按钮有效。 在“修改记录”按钮的单击事件中,解除对各文本框和组合框的锁定以便允许修改,并将“修改记录”按钮设为无效,其他按钮有效。 单击“更新数据”按钮,执行记录集的Update方法确

12、认修改(应注意检查数据的合法性),并重新将各文本框和组合框锁定为只读,各按钮恢复为在窗体加载时状态。若修改了学号,成绩表中需作相应修改。 单击“取消修改”按钮,执行记录集的CancelUpdate方法取消修改,并重新将各文本框和组合框锁定为只读,各按钮恢复为在窗体加载时状态。 单击“删除记录”按钮,执行Delete方法删除记录,同时删除成绩表中的相应记录。 单击“退出”按钮,卸载本窗体。3. 查询学籍信息单击“查询学籍信息”菜单项后显示“查询学籍信息”窗体(frmQueryEss),界面如图3-7所示。 (a) 全部显示 (b) 多条件复合查询图3-7 查询学籍信息方法: 在窗体上添加一个AD

13、O数据控件,设Visible=False,将其与数据库连接,用SQL语句将记录源与数据库中的“学籍”表绑定。 在窗体上添加一个DataGrid控件,设AllowUpdate=False。 框架中的两个文本框分别用于输入学号和姓名。 框架中的两个组合框分别用于选择或输入性别和班级。 在“查询”按钮的单击事件中,根据复选框的选中状态判断查询条件,是单一查询还是复合查询,然后根据文本框和组合框中的内容,用SQL语句的模糊查询、多条件复合查询功能生成记录集,为ADO数据控件的RecordSource属性赋值,并且将DataGrid控件与ADO数据控件绑定。 在“全部”按钮的单击事件中,用SQL语句将学

14、籍表中的全部记录构成记录集,为ADO数据控件的RecordSource属性赋值,并且将DataGrid控件与ADO数据控件绑定。 单击“退出”按钮,卸载本窗体。(五)课程管理模块“课程管理”菜单下有两个菜单项:添加课程和修改课程。1. 添加课程单击“添加课程”菜单项后显示“添加课程”窗体(frmAddCourse),运行时界面如图3-8所示。图3-8 添加课程方法: 窗体上的文本框分别用于输入课程编号和课程名称。 在窗体上添加一个ADO数据控件,设Visible=False,将其与数据库连接,用SQL语句将记录源与数据库中的“课程信息”表绑定。添加一个DataGrid控件,与ADO数据控件绑定

15、,用于显示现有课程,设AllowUpdate=False。 单击“确认添加”按钮后,查询数据库“课程信息”表中是否有相同的课程编号,若有,提示该课程编号已存在,重新输入,焦点返回课程编号文本框。如果无相同的课程编号,将课程编号和课程名称添加到数据库“课程信息”表中,卸载本窗体。注意:在向数据库添加记录前,应判断数据是否合法:课程编号应为数字(可用IsNumeric函数判断),各文本框均不应空白。 单击“退出”按钮,卸载本窗体。2. 修改课程单击“修改课程”菜单项后显示“修改课程”窗体(frmModiCourse),运行时界面如图3-9所示。图3-9 修改课程方法: 在窗体上添加一个ADO数据控

16、件,将其与数据库连接,用SQL语句将记录源与数据库中的“课程信息”表绑定。设Align=2。 窗体上的文本框分别用于显示和修改课程编号和课程名称,将它们的DataSource均设为ADO数据控件,DataField分别与课程编号及课程名称字段绑定。 对文本框的锁定处理和各按钮的处理与“修改学籍信息”相似。(六)成绩管理模块“成绩管理”菜单下有3个菜单项:输入成绩、修改成绩和查询成绩。1. 输入成绩单击“输入成绩”菜单项后显示“输入成绩”窗体(frmInGrade),运时界面如图3-10所示。图3-10 输入成绩方法: 在窗体上添加四个ADO数据控件,均设Visible=False,名称分别为a

17、doNoName、adoInGrade、adoAdd和adoOldGrade,将其与数据库连接。设adoInGrade的LockType属性为4(批更新模式)。用SQL语句将adoAdd的记录源与数据库中的“成绩”表绑定。 框架中的组合框用于选择班级和课程,Style属性均为2(下拉式列表框)。窗体加载时查询学籍表中的班级和课程信息表中的课程填充组合框的列表项。 添加两个DataGrid控件,名称分别为dgdGrade和dgdInGrade。程序运行时分别动态地与adoOldGrade和adoInGrade绑定,用于显示现有成绩和输入成绩。 当用户选择了班级和课程后,用SQL语句生成当前班级、

18、课程已有成绩记录集,为ADO数据控件adoOldGrade的RecordSource属性赋值,并将DataGrid控件dgdGrade与ADO数据控件adoOldGrade绑定。根据用户所选班级构成学号姓名记录集,为ADO数据控件adoNoName的RecordSource属性赋值,同时将ADO数据控件adoInGrade与临时表绑定,并将临时表清空。查询已有成绩记录集和学号姓名记录集,将当前课程尚无成绩的学号姓名加入临时表,将DataGrid控件dgdInGrade与ADO数据控件adoInGrade绑定,为输入成绩作准备。此时用户可以在DataGrid控件中连续输入多人的成绩。 单击“确认

19、输入”按钮后,将临时表中的学号、分数以及课程组合框中的课程名称追加到与ADO数据控件adoAdd绑定的成绩表中。 单击“取消”按钮,调用adoInGrade记录集的CancelBatch方法取消更新。 单击“退出”按钮,卸载本窗体。2. 修改成绩单击“修改成绩”菜单项后显示“修改成绩”窗体(frmModiGrade),运行时界面如图3-11所示。图3-11 修改成绩方法: 在窗体上添加两个ADO数据控件,分别命名为adoEdit和adoNoName,将其与数据库连接,设Visible=False,其记录源均采用动态绑定方式,通过查询语句生成临时记录集。 “选择班级”框架中的组合框用于选择班级。

20、“选择学生”框架中的DataGrid控件dgdNoName用于显示当前班级学生在成绩表中已有成绩的学生学号和姓名。“当前记录”框架中的两个文本框用作提示。“修改成绩”框架中的组合框用于选择课程,文本框用于显示和修改分数。 当用户在班级组合框选择班级后,用SQL语句从学籍表和成绩表中筛选出当前班级学生在成绩表中已有成绩的学生学号和姓名,显示在DataGrid控件dgdNoName中。 当用户在DataGrid控件dgdNoName中选择学生后,将其学号和姓名显示在“当前记录”框架中的文本框中,同时查询成绩表中当前学生已有成绩的课程名称,填充到课程组合框中。 当用户在课程组合框中选择课程时,将该课

21、程的分数显示在成绩文本框中。 对各控件的锁定处理与“修改学籍信息”相似。3. 查询成绩界面设计与“查询学籍信息”相似,如图3-12所示。 图3-12 查询成绩“查询”和“全部”按钮的单击事件的处理与“查询学籍信息”相似,注意查询结果来自“学籍”和“成绩”两个表。(七)系统模块“系统”菜单下有5个菜单项:添加用户、删除用户、更改权限、修改密码和退出。1. 添加用户单击“添加用户”菜单项后显示“添加用户”窗体(frmUser),运行时界面如图3-13所示。图3-13 添加用户方法: 窗体上的文本框分别用于输入用户名和密码,其中输入和确认密码的文本框的内容用“*”显示。 在窗体上添加一个ADO数据控

22、件,设Visible=False,将其与数据库连接,用SQL语句将记录源与数据库中的“用户”表绑定。 单击“确认”按钮后,查询数据库“用户”表中是否有相同的用户名和密码,若有,提示该用户已存在,重新输入,焦点返回用户名文本框。如果无同名用户,将用户名和密码添加到数据库“用户”表中,并设默认权限为“普通”,用MsgBox语句提示添加用户成功。 单击“退出”按钮,卸载本窗体。2. 删除用户单击“删除用户”菜单项后显示“删除用户”窗体(frmDelUser),运行时界面如图3-14所示。图3-14 删除用户方法: 在窗体上添加一个ADO数据控件,设Visible=False。将其与数据库连接,用SQ

23、L语句将记录源与数据库中的“用户”表绑定。设LockType = adLockBatchOptimistic(批更新模式,以备用户取消删除)。 在窗体上添加一个DataGrid控件,用于显示和选择用户表中的记录,设AllowUpdate = False(不允许用户直接修改控件中的内容),将该控件与ADO数据控件绑定。 在窗体上添加一个框架,名称为fraDel,内含三个命令按钮。 单击“删除用户”按钮后,判断被选中的用户名,若为“Admin”,提示不允许删除该用户。若选中了其他用户,询问是否删除,如果回答“是”,用记录集的Delete方法删除该记录。 单击“取消删除”按钮后,用记录集的Cance

24、lBatch方法取消删除操作。 单击“退出”按钮,卸载本窗体。3. 更改权限“更改权限”与“删除用户”的窗体界面相似,为了减少程序中的窗体数目,复用代码,将两项功能设计为共用一个窗体(frmDelUser)。设计时和运行时界面如图3-15所示。 (a) 设计时界面 (b) 运行时界面图3-15 更改权限方法: 在“删除用户”窗体上添加一个框架,名称为fraModi,设置其宽度和高度与框架fraDel相同。在框架中添加一个用于选择权限的组合框(含有“普通”和“管理员”两个列表项)和两个命令按钮。窗体加载时使两个框架的位置重合。 在主窗体单击“删除用户”或“更改权限”菜单项时,根据被选中的菜单项修

25、改frmDelUser窗体的标题。在frmDelUser窗体的激活事件(Activate)中,根据窗体标题,显示对应的框架,隐藏另一个框架。 单击“确认修改”按钮后,将选择权限组合框中被选中的权限赋予用户表中当前记录的“权限”字段。 将两个框架中的“退出”按钮设为控件数组,共用一个单击事件。4. 修改密码单击“修改密码”菜单项后显示“修改密码”窗体(frmModiPass),运行时界面如图3-16所示。图3-16 修改密码单击“确认”按钮后,根据保存在全局变量中的用户名查询用户表,将当前用户的新密码存入“用户”数据库。(八)帮助模块在“关于”菜单项的单击事件中用MsgBox语句显示本程序的版本

26、号和版权信息,如图3-17所示。图3-17 版本信息(九)关于标准模块在标准模块中主要是声明一些供本模块和其他模块使用的全局变量(如用于保存用户名和用户权限的变量)。对于各模块经常用到的一些程序段,亦可将其编制成子过程或函数,用Public关键字在标准模块中声明为公用过程。例如,本程序中有多个窗体需要用组合框选择班级,将填充组合框中班级列表项的程序段编制成一个公用过程,以组合框对象作为参数,即可实现代码的复用。二、程序参考代码(一)用户登录窗体用户登录窗体frmLoginOption ExplicitDim Rs As ADODB.Recordset 定义记录集变量Private Sub cm

27、dCancel_Click() Unload MeEnd SubPrivate Sub cmdOk_Click() Static intErr As Integer 静态变量累加出错次数 adoUser.Refresh 刷新记录集(关键语句) Set Rs = adoUser.Recordset 设置记录集变量 检查用户名(利用记录集的Find方法,不区分大小写) Rs.Find 用户名= & txtUserID.Text & If Not Rs.EOF Then 若用户名正确 检查密码 If Rs(密码) = txtPassword.Text Then 若密码正确 gstrUser = tx

28、tUserID.Text 存用户名 If Rs(权限) = 管理员 Then 存用户权限 gblnPurview = True Else gblnPurview = False End If frmMain.Show 显示主窗体 Unload Me 卸载本窗体 Else 若密码错误 intErr = intErr + 1 错误数+1 If intErr = 3 Then 若出错3次,退出系统 Set Rs = Nothing Unload Me Else 若出错不足3次,重新输入 MsgBox 密码输入错误,请重新输入!, vbExclamation With txtPassword 焦点返回

29、密码框 .SelStart = 0 .SelLength = Len(.Text) .SetFocus End With End If End If Else 若用户名错误 intErr = intErr + 1 错误数+1 If intErr = 3 Then 若出错3次,退出系统 Set Rs = Nothing Unload Me Else 若出错不足3次,重新输入 MsgBox 用户名输入错误,请重新输入!, vbExclamation With txtUserID 焦点返回用户框 .SelStart = 0 .SelLength = Len(.Text) .SetFocus End

30、With End If End IfEnd SubPrivate Sub Form_Initialize() ChDrive App.Path ChDir App.PathEnd SubPrivate Sub Form_Load() 窗体加载 cmdOk.Default = True “确定”按钮为回车键缺省按钮 Dim sql As String sql = SELECT * FROM 用户 SQL语句用于创建动态记录集 adoUser.RecordSource = sql 设置记录源为动态记录集End Sub(二)系统主窗体主窗体frmMainOption ExplicitPrivate

31、Sub Form_Initialize() 窗体初始化 ChDrive App.Path 设当前路径 ChDir App.Path Me.WindowState = vbMaximized Call MySize 调整控件位置End SubPrivate Sub Form_Load() 根据用户权限确定是否显示用户管理各菜单项 mnuAddUser.Visible = gblnPurview mnuDelUser.Visible = gblnPurview mnuModiPurview.Visible = gblnPurview Call CreateConnection 调用标准模块中的过程

32、建立连接End SubPrivate Sub Form_Resize() 窗体改变大小 If Me.WindowState = vbMinimized Then Exit Sub If Me.Width 6000 Then Me.Width = 6000 If Me.Height 5000 Then Me.Height = 5000 Call MySize 调整控件位置 Me.RefreshEnd SubPrivate Sub mnuAbout_Click() 关于 MsgBox Space(6) & 学生信息管理系统 & Space(6) & vbCr & vbCr & Space(9) &

33、 版本: 1.0End SubPrivate Sub mnuAddCourse_Click() 添加课程 frmAddCourse.Show Me.HideEnd SubPrivate Sub mnuAddUser_Click() 添加用户 frmUser.Show Me.HideEnd SubPrivate Sub mnuDelUser_Click() 删除用户 frmDelUser.Caption = 删除用户 frmDelUser.Show Me.HideEnd SubPrivate Sub mnuExit_Click() 退出 Unload MeEnd SubPrivate Sub F

34、orm_Unload(Cancel As Integer) 主窗体卸载 On Error GoTo Quit Dim i As Integer Set pubCnn = Nothing 在窗体集合中循环并卸载每个窗体。 For i = Forms.Count - 1 To 0 Step -1 Unload Forms(i) Next Exit SubQuit: End 出错时强制退出End SubPrivate Sub mnuInputGrade_Click() 输入成绩 frmInGrade.Show Me.HideEnd SubPrivate Sub mnuModiCourse_Click

35、() 修改课程信息 frmModiCourse.Show Me.HideEnd SubPrivate Sub mnuModiEss_Click() 修改学籍信息 frmModiEss.Show Me.HideEnd SubPrivate Sub mnuModiGrade_Click() 修改成绩 frmModiGrade.Show Me.HideEnd SubPrivate Sub mnuModiPurview_Click() frmDelUser.Caption = 更改用户权限 frmDelUser.Show Me.HideEnd SubPrivate Sub mnuNew_Click()

36、 添加学籍信息 frmAddEss.Show Me.HideEnd SubPrivate Sub mnuPassWord_Click() 修改密码 frmModiPass.Show Me.HideEnd SubPrivate Sub mnuQueryEss_Click() 查询学籍信息 frmQueryEss.Show Me.HideEnd SubPrivate Sub mnuQueryGrade_Click() 查询成绩信息 frmQueryGrade.Show Me.HideEnd SubPrivate Sub MySize() 自定义过程,窗体改变大小时调整控件位置 Dim FW As

37、Long Line1.X1 = 0: Line1.X2 = Me.ScaleWidth Line2.X1 = 0: Line2.X2 = Me.ScaleWidth FW = Me.ScaleWidth * 0.98 Shape1.Left = (FW - Shape1.Width) 2 Shape2.Left = (FW - Shape2.Width) 2 + 96 Label1.Left = (FW - Label1.Width) 2 Label2.Left = (FW - Label2.Width) 2End Sub(三)学籍管理模块1. 添加学籍信息添加学籍信息窗体frmAddEssO

38、ption ExplicitPrivate Sub cboClass_LostFocus() 班级组合框失去焦点时检查列表,添加新项 Call NewClassItem(cboClass) 调用标准模块中的过程End SubPrivate Sub cmdExit_Click() 退出 Unload MeEnd SubPrivate Sub cmdOk_Click() 确认添加 各文本框若为空白,提示重新输入 If Trim$(txtSID.Text) = Then MsgBox 请输入学号!, vbExclamation txtSID.SetFocus Exit Sub End If If T

39、rim$(txtName.Text) = Then MsgBox 请输入姓名!, vbExclamation txtName.SetFocus Exit Sub End If If Trim$(txtBorn.Text) = Then MsgBox 请输入出生日期!, vbExclamation txtBorn.SetFocus Exit Sub End If If Trim$(cboClass.Text) = Then MsgBox 请选择或输入班级!, vbExclamation cboClass.SetFocus Exit Sub End If adoAdd.Refresh 刷新记录集(

40、关键语句) 检查是否有重复学号(利用记录集的Find方法) adoAdd.Recordset.Find (学号= & txtSID.Text & ) If Not adoAdd.Recordset.EOF Then 若已有该学号 MsgBox 学号重复,请重新输入!, vbExclamation Call FocusBack(txtSID) 焦点返回学号框 Exit Sub End If If Not IsDate(txtBorn.Text) Then 出生日期若非日期型,重新输入 MsgBox 出生日期应按日期格式(yyyy-mm-dd)输入!, vbExclamation Call Foc

41、usBack(txtBorn) 焦点返回出生日期框 Exit Sub Else 若日期格式正确 txtBorn.Text = Format(txtBorn.Text, yyyy-mm-dd) 转换为4位年份 With adoAdd.Recordset .AddNew 添加记录 为各字段赋值 .Fields(0) = Trim$(txtSID.Text) 学号 .Fields(1) = Trim$(txtName.Text) 姓名 .Fields(2) = Trim$(cboSex.Text) 性别 .Fields(3) = Trim$(txtBorn.Text) 出生日期 .Fields(4)

42、 = Trim$(cboClass.Text) 班级 .Update 更新数据库 End With MsgBox 学籍信息已成功添加!, vbInformation End IfEnd SubPrivate Sub Form_Load() 窗体加载 Dim sql As String sql = SELECT * FROM 学籍 SQL语句用于创建记录集(源) adoAdd.RecordSource = sql 设置记录源 adoAdd.Refresh Call AddClassItem(cboClass) 调用标准模块中的过程填充班级组合框End SubPrivate Sub Form_Un

43、load(Cancel As Integer) 窗体卸载 frmMain.Show 显示主窗体End SubPrivate Sub txtSID_KeyPress(KeyAscii As Integer) 学号文本框 按键非数字或回删键,取消 If Not IsNumeric(Chr(KeyAscii) And KeyAscii 8 Then KeyAscii = 0 End IfEnd Sub2. 修改学籍信息修改学籍信息窗体frmModiEssOption ExplicitDim sNo As String 存学号Private Sub adoEdit_MoveComplete(ByVal

44、 adReason As ADODB.EventReasonEnum, _ ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _ ByVal pRecordset As ADODB.Recordset) 移动记录指针时显示当前记录位置/总记录数 adoEdit.Caption = Record: & _ CStr(adoEdit.Recordset.AbsolutePosition) & _ / & adoEdit.Recordset.RecordCountEnd Sub若班级组合框处于允许编辑状态,失去焦点时检查列

45、表,添加新项Private Sub cboClass_Click() If cboClass.Locked = True Then Exit Sub Call NewClassItem(cboClass)End SubPrivate Sub cboSelClass_Click() 单击选择班级组合框 Dim sqlN As String Dim strClass As String strClass = cboSelClass.Text 获取班级名称 If strClass = 全部 Then strClass = % 利用通配符%可包括全体学生 sqlN = SELECT * FROM 学籍

46、 WHERE 班级 like _ & strClass & ORDER BY 学号 根据所选班级重新打开记录集 adoEdit.RecordSource = sqlN adoEdit.RefreshEnd SubPrivate Sub cmdCancel_Click() 取消 With adoEdit.Recordset .CancelUpdate 取消更新 .MoveNext .MovePrevious End With Call MyLock(True)End SubPrivate Sub cmdDelect_Click() 删除 Dim Response As Integer Respo

47、nse = MsgBox(删除当前记录吗?, vbQuestion + vbYesNo, 询问) If Response = vbYes Then With adoEdit.Recordset .Delete .MoveNext If .EOF And .RecordCount 0 Then .MoveLast End With 删除成绩表中的相应记录 Dim sqlG As String sqlG = SELECT * FROM 成绩 WHERE 学号= & Trim$(txtSID.Text) & adoGrade.RecordSource = sqlG adoGrade.Refresh With adoGrade.Recordset If .Re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论