版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.,1,第11章,数据库应用系统开发,.,2,主要内容,11.1 数据库应用系统开发的基本步骤 11.2 学生信息管理系统开发案例 P263,.,3,11.1 数据库应用系统开发的基本步骤,1.可行性分析(是否必要) 2.需求分析 (信息的收集、分析整理、评审) 3.概要设计(将需求分析的结果转化为数据结构和软件的系统结构) 4.详细设计(为每一个模块确定使用的算法和数据结构) 5.代码设计 6.测试维护 7.系统交付,.,4,11.2 学生信息管理系统开发案例,11.2.1 系统设计 11.2.2 设计工程框架 11.2.3 系统功能模块实现,.,5,11.2.1 系统设计,1. 系统功能分
2、析 学生信息管理系统的主要任务是实现对学校各院系和所有学生的系统管理,主要功能包括: (1)院系信息管理 (2)学生基本信息管理 (3)学生照片管理 (4)课程设置管理 (5)学生成绩管理 (6)系统用户管理,.,6,2. 功能模块划,.,7,3. 系统流程分析,.,8,4. 数据库设计,数据库的设计涉及数据表字段、字段约束关系、字段间的约束关系、表间约束关系等方面。 Student_db数据库包含4个表: 院系信息表D_Info 学生基本信息表St_Info 课程设置表C_Info 选课信息表S_C_Info。 增加一个用户密码表,.,9,11.2.2 设计工程框架,一个工程由各种类型的文件
3、组成,如vbp(工程文件)、frm(窗体文件)、bas(标准模块文件)等 窗体、模块和类模块是V B的重要资源。 窗体用来实现工程的外观显示 模块用来管理全局变量、变量和用户自定义函数等。(工程添加模块),.,10,VB的3种模块:窗体模块,标准模块,类模块,窗体模块:简单的程序只有一个模块,程序的代码都存放在这个模块中 。 标准模块:为了避免重复,可以将多个窗体都要用到的共同代码集中起来,存放在一个独立的模块中。 类模块:是面向对象编程的基础。用户可以使用类模块创建含有属性和方法的自己的对象。 一般的类模块和标准模块都没有可见的用户界面(窗体)。,.,11,标准模块与类模块的区别,模块(Mo
4、dule) 就是VB中公共函数、子程序、常数、变量、枚举和用户定义类型的集合。 模块中的程序可以被整个程序访问。通常,用到某个模块的程序时,该模块才被加载。 类模块(Class) 是VB中对象的模版,它定义了对象的方法、属性和事件。 只有用类创建对象时,类模块被加载。 只能用对象语法操作类模块中的程序,它是VB数据封装的有效手段。,.,12,模块文件的建立,模块命名为MStM,保存为MStM.bas文件到StuP目录下: Public strCNo As String 在窗体之间传递课程编号 Public vStrStID As String Public AddEdit As Boolean
5、 判断是增加记录还是修改记录,True-添加,False-修改 Const BlockSize = 2048 数据块的大小, 用于照片的读写操作 Public TempFile As String 将图像装入Image控件的临时文件名的路径变量 Public strUserName 存储当前登录系统的用户名, 用于控制各种模块是否能执行 Public Sub Main( ) TempFile = D:tmpf.dat mfrmMain.Show frmLogin.Show 1 模式的作用是先执行完frmlogin窗体才可执行其他窗体 End Sub,.,13,11.2.3 系统功能模块实现,系
6、统按功能可分为: 主界面模块 登录模块 学生基本信息管理模块 学生成绩管理模块 用户管理模块 课程信息管理模块等。,.,14,1. 主界面实现,.,15,建立MDI窗体, 将窗体命名为mfrmMain,其Caption属性设置为“学生信息管理系统” MDI窗体(多重窗体)是指一个包含多个子窗体的父窗体。 例:窗体名.Show();一个工程只能有一个MDI ,建立一个MDI后,将普通的窗体的MDIChild属性设为真,则该窗体就变成MDI的子窗体。 建立系统菜单。,.,16,2. 系统登录窗体设计,用户要使用本系统,首先必须通过系统的身份认证,这个过程叫做登录。登录过程需要完成以下任务: (1)
7、根据用户名和密码来判断是否可以进入系统; (2)根据用户类型决定用户拥有的权限。 登录窗体为frmLogin,.,17,(1)公用变量。,在frmLogin窗体的声明部分加入以下代码: Public TryTimes As Integer 变量TryTimes记录用户登录尝试次数。,.,18,(2)身份验证。272代码,当用户单击“确定”按钮时,将触发cmdOk_Click事件,进行身份验证。 身份验证时,把当前用户输入的用户名和密码(存放在txtUserName和txtPwd控件中)与数据表Users中的对应用户进行比较: 若用户名不正确,表示不存在该用户,不能登录; 若只有密码不正确,则可
8、以尝试三次,再不正确时,退出应用程序。,.,19,(3)取消操作。P273,Private Sub cmdCancel_Click() txtUserName = txtPwd = txtUserName.SetFocus End Sub (4)按回车键实现身份验证。 Private Sub txtPwd_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then 回车键的码值 cmdOk_Click End If End Sub,.,20,(5)调用登录窗体。,登录窗体的代码设计完成后,可以在Main过程中加入以下代码: Public Sub Ma
9、in() TempFile = D:tmpf.dat mfrmMain.Show frmLogin.Show 1 End Sub,.,21,(6)重新登录。,在系统运行过程中,若要更新用户,则需要重要登录。这可以通过“文件重新登录”菜单项调用frmLogin窗体,而不必退出系统,其代码如下: Private Sub mnuReLg_Click() frmLogin.Show 1 End Sub 其中mnuReLg为“重新登录”菜单项控件名称,.,22,3. 学生基本信息管理模块设计,学生基本信息管理模块实现以下功能:添加学生记录;修改学生基本信息;删除学生记录;查看学生基本信息。,.,23,F
10、orm_Load事件(P276),当frmStuM窗体载入时,需要使院系组合框cmbClg、班级列表框lstClass、学生列表框lstStName都显示一个初始值: Private Sub Form_Load() strClg = adoClg.Recordset.Fields(D_ID) adoClass.RecordSource = SELECT DISTINCT Cl_Name FROM st_info WHERE _ SUBSTRING(St_Id,1,2)= & strClg & adoClass.Refresh strClass = If Not adoClass.Records
11、et.EOF Then strClass = adoClass.Recordset.Fields(Cl_Name) End If adoName.RecordSource = SELECT * FROM St_Info WHERE Cl_Name= & strClass & adoName.Refresh End Sub,.,24,(1)选择学生记录,在frmStuM窗体中,学生的选择通过数据绑定组合框(DataCombo)控件cmbClg确定院系,数据绑定列表框(DataList)控件lstClass确定班级,控件lstStName确定学生。,.,25, 院系选择。(P276),当鼠标单击控
12、件cmbClg时,选择一个院系名称,将使整个窗体数据随之而发生改变。 Private Sub cmbClg_Change() strClg = cmbClg.BoundText adoClass.RecordSource = SELECT DISTINCT Cl_Name FROM St_Info WHERE _ SUBSTRING(St_Id,1,2)= & strClg & adoClass.Refresh lstClass_Click End Sub,.,26, 班级选择。(P277),lstClass_Click事件的代码如下: Private Sub lstClass_Click()
13、 strClass = lstClass.BoundText If strClass = And Not adoClass.Recordset.EOF Then strClass = adoClass.Recordset.Fields(Cl_Name) End If adoName.RecordSource = SELECT * FROM St_Info WHERE Cl_Name= & strClass & adoName.Refresh lstStName_Click End Sub,.,27, 学生姓名选择。(P277),lstStName_Click事件代码如下: Private Su
14、b lstStName_Click() strName = Trim(lstStName.BoundText) If strName = And Not adoName.Recordset.EOF Then strName = adoName.Recordset.Fields(st_id) End If adoStDetail.RecordSource = SELECT * FROM St_Info WHERE St_Id= & strName & adoStDetail.Refresh Call ShowImage(ImgPhoto, adoStDetail) End Sub,.,28,(2
15、)添加学生基本信息(P278),用户单击frmStuM的“添加学生”按钮时,执行cmdAdd_Click事件,其代码如下: Private Sub cmdAdd_Click() frmStAdd.Show 1 End Sub frmStAdd窗体,.,29, 窗体载入。(P279),当窗体frmStAdd载入时,应使用adoEdit控件的Recordset处于添加数据状态,其代码如下: Private Sub Form_Activate() adoEdit.Recordset.AddNew txtStID.SetFocus End Sub,.,30, 日期输入。,件txtBDate与ADO D
16、ata控件adoEdit绑定,显示St_Info表的Born_Date字段。但使用文本框输入日期,对用户来说很不方便,而且有可能输入无效日期数据,为此使用DateTimePicker控件为字段Born_Date提供格式化日期,使得日期选择操作很简单。,.,31,dtpBDate_Change事件(P279),选择的日期填充到txtBDate控件中的代码如下: Private Sub txtBDate_GotFocus() dtpBDate.Visible = True End Sub Private Sub dtpBDate_Change() txtBDate.Text = dtpBDate.
17、Value End Sub,.,32, 性别选择。,与日期型数据相似,性别的选择可以使用ComboBox控件并绑定在adoEdit控件记录集的St_Sex字段上,其List属性在设计时输入男女两个选项,运行时用户可在下拉列表中选择,即方便快捷又不容易出错。,.,33, 电话号码输入。(P280),电话号码为数字字符,在输入时应限制用户只能输入数字09,这可通过函数In_Int进行数据检查,在txtTel_KeyPress事件中实现 Private Sub txtTel_KeyPress(KeyAscii As Integer) If In_Int(KeyAscii) = False Then
18、MsgBox 电话号码应为数字, , 输入错误 KeyAscii = 0 End If End Sub Public Function In_Int(KeyAscii As Integer) As Boolean If Chr(KeyAscii) = 0 And Chr(KeyAscii) = 9 Then In_Int = True Else In_Int = False End If End Function,.,34, 数据保存。(P280),当用户在frmStAdd窗体上完成了所有数据的输入后,通过ADO Data控件的Recordset方法Update将数据保存到表St_Info中,
19、该操作由命令按钮cmdAdd_Click事件实现,其代码如下: Private Sub cmdAdd_Click() If txtStID = Or txtStName = Or txtClName = Then MsgBox 学号、姓名或班级不能为空!, , 数据输入错误 Exit Sub End If adoEdit.Recordset.Update adoEdit.Recordset.MoveLast frmStuM.adoStDetail.Refresh frmStuM.RcdUpdate (adoEdit.Recordset.Fields(St_Id ) Unload Me End
20、Sub,.,35,frmStuM窗体的RcdUpdate过程 (P280),Sub RcdUpdate(ByVal vStID As String) strClg = Left(Trim(vStID), 2) adoClass.RecordSource = SELECT DISTINCT Cl_Name FROM St_Info _ & WHERE SUBSTRING(St_Id,1,2)= & strClg & adoClass.Refresh adoName.RecordSource = SELECT * FROM St_Info WHERE Cl_Name= _ & (SELECT DI
21、STINCT Cl_Name FROM St_Info WHERE St_Id = & Trim(vStID) & ) adoName.Refresh adoStDetail.RecordSource = SELECT * FROM St_Info WHERE St_Id = & Trim(vStID) & adoStDetail.Refresh adoStDetail.Recordset.Find St_Id = & vStID & End Sub,.,36,(3)修改学生记录的功能实现(P281),当前单击frmStuM窗体的“修改信息”按钮,执行cmdEdit_Click事件,其代码如下
22、: Private Sub cmdEdit_Click() vStrStID = Trim(adoStDetail.Recordset.Fields(St_Id) frmStEdit.Show 1 End Sub,.,37,frmStEdit窗体用于显示当前选择的学生基本信息,并进行数据的修改。 (P281),Private Sub Form_Load() adoEdit.RecordSource = SELECT * FROM St_Info WHERE St_Id= & vStrStID & adoEdit.Refresh End Sub,.,38,(4)删除学生记录(P281),当用户单
23、击frmStuM窗体的“删除学生”按钮时,将触发cmdDel_Click事件: Private Sub cmdDel_Click() 检查是否选择要删除的学生记录 If lstStName.BoundText = Then MsgBox 请选择要删除的学生, , 删除学生 Exit Sub End If If MsgBox(学生姓名: + lbName + Chr(13), vbYesNo, 是否删除) = vbNo Then Exit Sub End If adoStDetail.Recordset.Delete adoStDetail.Recordset.MoveNext lstClass
24、_Click End Sub,.,39,(5)照片管理,照片管理包括照片的显示、添加、删除等功能。 显示与存储照片子过程。 设计两个过程ShowImage和SaveImage,用来管理数据库读写图像字段的操作,其代码如下:,.,40,过程ShowImage (P282),Public Sub ShowImage(Image1 As Image, Adodc1 As Adodc) Dim ByteChunk() As Byte FieldSize = Adodc1.Recordset.Fields(Photo).ActualSize If FieldSize 0 Then ReDim ByteC
25、hunk(LeftOver) As Byte ByteChunk() = Adodc1.Recordset.Fields(Photo).GetChunk(LeftOver) Put SourceFile, , ByteChunk() End If For i = 1 To NumBlocks ReDim ByteChunk(BlockSize) As Byte ByteChunk() = Adodc1.Recordset.Fields(Photo).GetChunk(BlockSize) Put SourceFile, , ByteChunk() Next i Close SourceFile
26、 Image1.Picture = LoadPicture(TempFile) Kill (TempFile) End Sub,.,41,SaveImage过程(P283),Public Sub SaveImage(ByVal ImageFile As String, Adodc1 As Adodc) If Adodc1.Recordset.BOF = True Or Adodc1.Recordset.EOF = True Then Exit Sub End If If ImageFile = Then Exit Sub End If SourceFile = FreeFile Open Im
27、ageFile For Binary Access Read As SourceFile 打开文件 FileLength = LOF(SourceFile) If FileLength = 0 Then Close SourceFile MsgBox disfile & 无内容或不存在! Else NumBlocks = FileLength BlockSize LeftOver = FileLength Mod BlockSize 得到剩余字节数 Adodc1.Recordset.Fields(photo).Value = Null ReDim ByteData(BlockSize) As
28、Byte 重新定义数据块的大小 For i = 1 To NumBlocks Get SourceFile, , ByteData() 读到内存块中 Adodc1.Recordset.Fields(photo).AppendChunk ByteData() 写入FLD Next i ReDim ByteData(LeftOver) As Byte 重新定义内存块的大小 Get SourceFile, , ByteData() 读到内存块中 Adodc1.Recordset.Fields(photo).AppendChunk ByteData() 写入FLD Close SourceFile A
29、dodc1.Recordset.Update End If End Sub,.,42, 建立照片管理快捷菜单。,在frmStuM窗体中,ImgPhoto控件用于显示学生照片,当鼠标右击ImgPhoto控件时,弹出快捷菜单,快捷菜单由窗体frmPhotoMenu构成,.,43,Label1_Click事件实现添加照片功能(P284),Private Sub Label1_Click() Dim DiskFile As String CommonDialog1.Filter = JPEG 文件(*.jpg)|*.jpg|BMP 文件(*.bmp)|*.bmp|GIF 文件(*.gif)|*.gif
30、 CommonDialog1.ShowOpen DiskFile = CommonDialog1.FileName If DiskFile = Then MsgBox 请选择照片文件, , 照片管理 Unload Me Exit Sub End If Call SaveImage(DiskFile, frmStuM.adoStDetail) Call ShowImage(frmStuM.ImgPhoto, frmStuM.adoStDetail) Unload Me End Sub,.,44,Label2_Click事件实现删除照片(P285),Private Sub Label2_Click
31、() frmStuM.adoStDetail.Recordset.Fields(photo).AppendChunk frmStuM.adoStDetail.Recordset.Update frmStuM.ImgPhoto.Picture = LoadPicture() Unload Me End Sub,.,45, 弹出快捷菜单。(P285),当鼠标右击frmStuM窗体的ImgPhoto控件时,通过ImgPhoto_ MouseDown事件过程实现快捷菜单的弹出操作 Private Sub ImgPhoto_MouseDown(Button As Integer, Shift As In
32、teger, X As Single, Y As Single) If Button = 1 Then If frmPhotoMenu.Visible = True Then Unload frmPhotoMenu End If End If If Button = 2 Then If frmStuM.adoStDetail.Recordset.EOF = True Or frmStuM.adoStDetail.Recordset.BOF = True Then Exit Sub End If frmPhotoMenu.Left = X + ImgPhoto.Left + 2000 frmPh
33、otoMenu.Top = Y + ImgPhoto.Top + 500 frmPhotoMenu.Show End If End Sub,.,46,(6)通过主界面调用学生基本信息管理窗体(P285),当设计好了学生基本信息管理窗体frmStuM后,就可以通过主界面mfrmMain窗体的“学生信息”菜单项来调用它,其代码如下: Private Sub mnuStInfo_Click() frmStuM.Show End Sub,.,47,4. 课程设置,课程设置管理模块可以实现以下功能:添加课程信息;修改课程信息;删除课程信息;查看课程信息。,.,48,在Form_Load事件(P287),
34、Private Sub Form_Load() adoCourseLst.RecordSource = SELECT * FROM C_Info ORDER BY C_Name adoCourseLst.Refresh lstCName_Click End Sub,.,49,lstCName_Click事件过程,Private Sub lstCName_Click() strCNo = Trim(lstCName.BoundText) If strCNo = Then If Not adoCourseLst.Recordset.EOF Or Not adoCourseLst.Recordset
35、.BOF Then strCNo = Trim(adoCourseLst.Recordset.Fields(C_No) End If End If adoCourse.RecordSource = SELECT * FROM C_Info WHERE C_No= _ & strCNo & ORDER BY C_Name adoCourse.Refresh End Sub,.,50,(1)添加修改课程信息,.,51, 添加与修改课程记录。,当用户单击frmCourseM窗体的“添加课程”按钮时,设置AddEdit变量值为True,调用frmCourseEdit窗体 Private Sub cmd
36、Add_Click() AddEdit = True 添加记录 frmCourseEdit.Show 1 End Sub,.,52,修改课程,当用户单击frmCourseM窗体的“修改课程”按钮时,设置AddEdit变量值为False,也调用frmCourseEdit窗体 Private Sub cmdEdit_Click() AddEdit = False strCNo = lstCName.BoundText If strCNo = Then MsgBox 请选择课程, , 信息 Exit Sub End If frmCourseEdit.Show 1 End Sub,.,53, 建立编辑
37、课程信息窗体。,frmCourseEdit窗体载入时,根据AddEdit的值确定该窗体是添加记录还是修改已有记录。 Dim mBookmark As Variant Private Sub Form_Load() If AddEdit Then adoLesson.Recordset.AddNew Else adoLesson.RecordSource = SELECT * FROM C_Info WHERE C_No= & strCNo & adoLesson.Refresh End If mBookmark = adoLesson.Recordset.Bookmark End Sub,.,
38、54, 保存编辑的课程信息。,当用户在frmCourseEdit窗体输入或修改了课程信息后,单击“确认”按钮以保存信息,cmdOk_Click事件代码如下: Private Sub cmdOk_Click() If Trim(txtCCredit.Text) = Or Trim(txtCNo.Text) = Or Trim(txtCName.Text) = Then MsgBox 数据不完整,课程编号、课程名称或学分不能为空!, , 输入错误 Exit Sub End If adoLesson.Recordset.Update adoLesson.Recordset.MoveLast frmC
39、ourseM.RcdUpdate (Trim(txtCNo.Text) Unload Me End Sub,.,55,frmCourseM.RcdUpdate过程,Public Sub RcdUpdate(ByVal vStrCNo As String) adoCourseLst.RecordSource = SELECT * FROM C_Info ORDER BY C_Name adoCourseLst.Refresh adoCourse.RecordSource = SELECT * FROM C_Info WHERE C_No= _ & vStrCNo & ORDER BY C_Nam
40、e adoCourse.Refresh adoCourseLst.Recordset.Find c_no = & vStrCNo & End Sub,.,56,(2)删除课程信息,当用户单击frmCourseM窗体的“删除课程”按钮,触发cmdDel_Click事件 Private Sub cmdDel_Click() If Trim(lstCName.BoundText) = Then MsgBox 请选择要删除的课程 Exit Sub End If If MsgBox(课程名称: + lstCName.Text + Chr(13), vbYesNo, 是否删除) = vbNo Then E
41、xit Sub End If adoCourse.Recordset.Delete adoCourseLst.RecordSource = SELECT * FROM C_Info ORDER BY C_Name adoCourseLst.Refresh adoCourse.RecordSource = SELECT * FROM C_Info WHERE C_No= _ & Trim(adoCourseLst.Recordset.Fields(c_no) & ORDER BY C_Name adoCourse.Refresh End Sub,.,57,(3)课程设置模块的调用,课程设置由mf
42、rmMain窗体的“课程信息”菜单项控件mnuCourse调用,其代码如下: Private Sub mnuCourse_Click() frmCourseM.Show End Sub,.,58,5. 成绩管理,学生成绩管理包含两个子菜单:成绩编辑与成绩查询。 成绩编辑实现添加、删除、修改学生成绩等功能, 成绩查询可以查询一个学生所有选修课程的成绩。,.,59,(1)成绩编辑,成绩编辑窗体命名为frmScoreM,.,60, 窗体载入。,Private Sub Form_Load() adoDCScore.RecordSource = SELECT DISTINCT Cl_Name FROM
43、St_Info adoDCScore.Refresh While Not adoDCScore.Recordset.EOF cmbCls.AddItem (adoDCScore.Recordset.Fields(Cl_Name) adoDCScore.Recordset.MoveNext Wend strCNo = adoCourse.Recordset.Fields(C_No) RefreshGrid End Sub,.,61, DataGrid控件刷新子过程。,RefreshGrid过程用于DataGrid控件显示数据的刷新,其代码如下: Sub RefreshGrid() adoDCSc
44、ore.RecordSource = SELECT s.St_Id as 学号, s.St_Name as 姓名, _ & sc.Score as 成绩 FROM St_Info s,S_C_Info sc _ & WHERE s.Cl_Name= + Trim(cmbCls.Text) _ & and s.St_Id=sc.St_Id and sc.C_No= _ & Trim(strCNo) & adoDCScore.Refresh grdScore.Refresh End Sub,.,62, 班级选择。,当用户单击控件cmbCls选择某一班级时,将触发cmbCls_Click事件,在gr
45、dScore中显示该所有学生的cmbCName控件所选择的课程的成绩 Private Sub cmbCls_Click() RefreshGrid If adoDCScore.Recordset.EOF And adoDCScore.Recordset.BOF Then MsgBox cmbCls.Text & 无 & cmbCName.Text & 成绩, , 成绩信息 End If End Sub,.,63, 课程选择。,当用户单击cmbCName控件,重新选择课程名称时,触发cmbCName_ Change事件,在grdScore中重置该课程、cmbCls控件所班级的所有学生的成绩 Pr
46、ivate Sub cmbCName_Change() strCNo = cmbCName.BoundText RefreshGrid End Sub,.,64, 成绩编辑。,当用户单击“添加成绩”时,将调用frmScoreEdit窗体为cmbCls所选班级的学生添加cmbCName控件所选课程的成绩 Private Sub cmdAdd_Click() If cmbCName.Text = Or cmbCls.Text = Then MsgBox 请选择课程名称与班级, , 添加成绩 Exit Sub End If AddEdit = True frmScoreEdit.Show 1 Ref
47、reshGrid End Sub,.,65,修改成绩,当用户单击“修改成绩”按钮时,将在frmScoreEdit窗体上显示在frmScoreM窗体的grdScore网格中选择的学生为成绩信息给用户修改 Private Sub cmdEdit_Click() If adoDCScore.Recordset.EOF And adoDCScore.Recordset.BOF Then MsgBox 请选择学生成绩, , 修改成绩 Exit Sub End If AddEdit = False frmScoreEdit.Show 1 RefreshGrid End Sub,.,66, 建立成绩编辑窗体
48、。,.,67,初始化窗体,Dim strCid As String Dim strCourse As String Dim strClName As String Dim strStID As String Private Sub Form_Load() strClName = Trim(frmScoreM.cmbCls.Text) strCourse = Trim(frmScoreM.cmbCName.Text) strCid = Trim(frmScoreM.cmbCName.BoundText) lbCName.Caption = strCourse lbClass.Caption =
49、strClName If AddEdit Then adoStName.RecordSource = SELECT * FROM St_Info WHERE Cl_Name= & strClName _ & AND St_Id NOT IN (SELECT St_Id FROM S_C_Info WHERE C_No= _ & strCid & ) adoStName.Refresh adoScore.RecordSource = SELECT * FROM S_C_info adoScore.Refresh txtScore = Else strStID = frmScoreM.adoDCS
50、core.Recordset.Fields(学号) adoStName.RecordSource = SELECT * FROM St_Info WHERE St_Id= & strStID & adoStName.Refresh adoScore.RecordSource = SELECT * FROM S_C_Info WHERE St_Id= & strStID _ & AND C_No= & strCid & adoScore.Refresh cmbStName.Text = adoStName.Recordset.Fields(St_Name) txtScore = adoScore
51、.Recordset.Fields(Score) End If End Sub,.,68,cmdOk_Click事件,当用户单击frmScoreEdit窗体的“确定”按钮时,触发,将保存用户添加或修改后的数据到S_C_Info表中 Private Sub cmdOk_Click() If cmbStName.Text = Or txtScore = Then MsgBox 没有选择学生 或 没有成绩, , 添加成绩 Exit Sub End If If AddEdit Then adoScore.Recordset.AddNew adoScore.Recordset.Fields(St_Id)
52、 = Trim(adoStName.Recordset.Fields(st_id) adoScore.Recordset.Fields(C_No) = Trim(strCid) adoScore.Recordset.Fields(Score) = txtScore adoScore.Recordset.Update adoStName.RecordSource = SELECT * FROM St_Info WHERE Cl_Name= & strClName _ & AND St_Id NOT IN (SELECT St_Id FROM S_C_Info WHERE C_No= _ & st
53、rCid & ) adoStName.Refresh txtScore = Else adoScore.Recordset.Fields(Score) = txtScore adoScore.Recordset.Update End If End Sub,.,69, 成绩删除。,当用户单击frmScoreM窗体“删除成绩”按钮时,触发cmdDel_Click事件 Private Sub cmdDel_Click() If adoDCScore.Recordset.BOF And adoDCScore.Recordset.EOF Then MsgBox 请选择要删除的成绩, , 删除成绩 Exi
54、t Sub End If If MsgBox(学生姓名: + adoDCScore.Recordset.Fields(姓名) + Chr(13), _ vbYesNo, 是否删除) = vbNo Then Exit Sub End If strStID = adoDCScore.Recordset.Fields(学号) strCNo = Trim(cmbCName.BoundText) adoDCScore.RecordSource = SELECT * FROM S_C_Info WHERE ST_id= & strStID _ & AND C_No= & strCNo & adoDCSco
55、re.Refresh adoDCScore.Recordset.Delete RefreshGrid End Sub,.,70,(2)成绩查询,frmScoreQ窗体,.,71,Form_Load事件,Private Sub Form_Load() adoDCScore.RecordSource = SELECT DISTINCT Cl_Name FROM St_Info adoDCScore.Refresh While Not adoDCScore.Recordset.EOF cmbCls.AddItem (adoDCScore.Recordset.Fields(Cl_Name) adoDC
56、Score.Recordset.MoveNext Wend cmbCls.ListIndex = 0 cmbCls_Click Set grdScore.DataSource = adoDCScore vStrStID = adoStName.Recordset.Fields(St_Id) RefreshGrid End Sub,.,72,班级通过cmbCls.AddItem方法添加到组合框的List中,Private Sub cmbCls_Click() adoStName.RecordSource = SELECT * FROM St_Info WHERE Cl_Name= _ & Tri
57、m(cmbCls.Text) & adoStName.Refresh adoStName.Recordset.MoveFirst cmbStName_Click 0 End Sub,.,73,使当前记录为第一条,cmbStName_Click事件 Private Sub cmbStName_Click(Area As Integer) vStrStID = cmbStName.BoundText RefreshGrid End Sub,.,74,RefreshGrid过程,cmbStName.BoundText的绑定值为显示的学生姓名的对应学号,以此通过RefreshGrid过程更新grdSc
58、ore的数据为选定班级选定学生的所修课程的成绩。 Sub RefreshGrid() adoDCScore.RecordSource = SELECT c.C_No AS 课程编号,c.C_Name AS 课程名称, _ & sc.Score AS 成绩 FROM C_Info c,S_C_Info sc _ & WHERE sc.C_No=c.C_No AND sc.St_Id= & Trim(vStrStID) & adoDCScore.Refresh grdScore.Refresh End Sub,.,75,6. 用户管理,根据用户类型的不同,用户管理模块的功能也不相同,可以包含以下情
59、形: (1)系统管理员(用户名为admin)用户可以创建普通用户,对普通用户的用户名和密码进行修改,删除普通用户; (2)admin用户也可以修改自身的密码; (3)普通用户只能修改自身的密码。,.,76,frmUserM窗体初始化,Private Sub Form_Load() If strUserName = admin Then lbUserType = 系统管理员 Else lbUserType = 普通用户 End If End Sub,.,77,(1)查看用户信息,Private Sub lstUserName_Click() 如果没有选择用户名,则返回 If Trim(lstUserName.Text) = Then Exit Sub End If 设置用户名 lbUserName = Trim(lstUserName.Boun
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年克孜勒苏职业技术学院单招综合素质考试题库附答案详解(综合卷)
- 2026年内江卫生与健康职业学院单招综合素质考试题库带答案详解(综合题)
- 2026年六盘水幼儿师范高等专科学校单招职业技能考试题库含答案详解(考试直接用)
- 2026年南京视觉艺术职业学院单招职业适应性测试题库含答案详解(精练)
- 2026年南京工业职业技术大学单招职业适应性考试题库附答案详解(精练)
- 2026年南昌交通学院单招职业适应性考试题库及答案详解(必刷)
- 2026年共青科技职业学院单招职业适应性测试题库附参考答案详解(b卷)
- 2026年北海康养职业学院单招职业技能测试题库及答案详解(基础+提升)
- 2026年兰州职业技术学院单招职业倾向性考试题库附参考答案详解(满分必刷)
- 2026年保定电力职业技术学院单招职业倾向性测试题库含答案详解(综合题)
- 2026及未来5年中国抽纱刺绣工艺品行业竞争现状及投资前景趋势报告
- 【地理】2025年1月浙江省普通高校招生选考科目考试试题(精校版)
- 2025动物防疫专员试题及答案
- 单元复习:解码中国-我国区域差异的深度整合与素养提升
- 心肺复苏术护理配合要点
- 中医特色护理在精神科的应用
- 2025年降噪同写考试题及答案
- 风力发电运输合同范本
- 重难点22 立体几何中的外接球、内切球问题(举一反三专项训练)(全国通.用)(原卷版)-2026年高考数学一轮复习举一反三系列
- 高二生物DNA的复制一节教案(2025-2026学年)
- 法律合规风险评估检查表
评论
0/150
提交评论