(一)逻辑篇
一、系统设计
二、数据库设计
1.数据库需求分析:无非是增删改查四大块:添加信息、删除信息、修改信息、查找信息。
2.数据库概念结构设计:四大实体:学生、班级、课程、年级。
3.数据库逻辑结构设计:数据库中表以及各个表之间的关系。
三、数据库结构的实现
1.创建数据库
四、学生管理系统主窗体
1.创建主窗体菜单——frmMain
2.创建公用模块——Module
五、系统用户管理模块
1.用户登录
①若用户连续输入密码不正确超过三次,则自动退出系统。
If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then
OK = True
mrc.Close
Me.Hide
FrmMain.Show
username = Trim(txtUserName.Text)
Else
miCount = miCount + 1
If miCount = 1 Then
MsgBox "用户名或密码错误!您还有两次机会!", 48, "警告"
Exit Sub
End If
If miCount = 2 Then
MsgBox "用户名或密码错误!您还有一次机会!", 48, "警告"
Exit Sub
End If
If miCount = 3 Then
MsgBox "用户名或密码错误!即将关闭程序!", 48, "警告"
Me.Hide
Exit Sub
End If
②为了使用户登录更加人性化,添加了注册账号和找回密码服务,点击后会自动跳转到相应的窗体。
此功能直接添加标签并编写它的Click事件即可。
③注意用户名和密码的字符限制:用户名只能输入汉字或字母,密码只能输入数字、字母和某些符号。
此功能用到Ascii码表,需要注意不同的数值对应着不同的意义。
'密码输入框中只能输入数字和字母或特殊字符
Private Sub txtpassword_KeyPress(KeyAscii As Integer)
If KeyAscii >= 33 And KeyAscii <= 126 Then
Else
MsgBox "密码格式不正确,请输入字母和数字或个别特殊字符!", vbOKOnly + vbExclamation, "提示"
KeyAscii = 0
txtPassword.Text = ""
txtPassword.SetFocus
End If
End Sub
'用户名输入框中只能输入汉字和字母
Private Sub txtUserName_KeyPress(KeyAscii As Integer)
If KeyAscii >= -20319 And KeyAscii <= -3652 Or KeyAscii >= 65 And KeyAscii <= 90 Or KeyAscii >= 97 And KeyAscii <= 122 Then
Else
MsgBox "用户名格式不正确,请输入汉字和字母!", vbOKOnly + vbInformation, "提示"
KeyAscii = 0
txtUserName.Text = ""
txtUserName.SetFocus
End If
End Sub
2.添加用户
①不可添加重复用户名
txtSQL = "select * from user_Info"
Set mrc = ExecuteSQL(txtSQL, MsgText) '执行查询语句
While (mrc.EOF = False) '判断数据集是否为空
If Trim(mrc.Fields(0)) = Trim(txtUserName.Text) Then '判断是否有重复记录
MsgBox "用户已经存在,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
txtUserName.SetFocus
txtUserName.Text = "" '清空文本框
txtPassword1.Text = ""
txtPassword2.Text = ""
Exit Sub
Else
mrc.MoveNext '移动到下一条记录
End If
Wend
②在添加成功后也需要清空文本框,方便用户操作。
六、学籍管理模块
1.添加学籍
①班号:查找数据库中class表中读取班号字段的数据
txtSQL = "select * from class_Info"
Set mrc = ExecuteSQL(txtSQL, MsgText)
For i = 1 To mrc.RecordCount '添加内容到列表框中
ComboClassNo.AddItem mrc.Fields(0)
mrc.MoveNext
Next i
mrc.Close '关闭数据集对象
②日期:入校日期不能在出生日期之前且两个日期均不能超过当前日期
'使用DateTimePicker控件的closeup事件判断时间范围是否符合
Private Sub DTPBorndate_CloseUp()
'判断选择的日期是否大于系统日期
If DTPBorndate.Value > Date Then
MsgBox "选择的日期不能在当前日期之后!", vbOKOnly + vbInformation, "提示"
'若大于当前日期的话则选中当前日期
DTPBorndate.Value = Date
Exit Sub
End If
End Sub
Private Sub DTPRudate_CloseUp()
'判断选择的日期是否大于系统日期
If DTPRudate.Value > Date Then
MsgBox "选择的日期不能在当前日期之后!", vbOKOnly + vbInformation, "提示"
'若大于当前日期的话则选中当前日期
DTPRudate.Value = Date
Exit Sub
End If
End Sub
Private Sub DTPRudate_change()
If DTPRudate.Value <= DTPBorndate.Value Then
MsgBox "入校日期不能在出生日期之前!", vbOKOnly + vbInformation, "提示"
Else
'格式化日期
DTPBorndate = Format(DTPBorndate, "yyyy-mm-dd")
DTPRudate = Format(DTPRudate, "yyyy-mm-dd")
End If
End Sub
2.修改学籍
①逻辑图:
② '避免没记录时报错"3021"
If mrc.BOF = True Or mrc.EOF = True Then
MsgBox "没有记录!", 48, "提示"
Exit Sub
End If
3.查询学籍
设置查询方式——点击查询——按条件搜索数据库中student表的数据——显示在Flexgrid控件中
七、班级管理模块
1.添加班级
2.修改班级
八、课程设置模块
1.添加课程
2.修改课程
3.设置年级课程
①逻辑图:
②点击 → 按钮,将左边控件数据添加到右边控件
Private Sub cmdAdd_Click()
Dim i As Integer
'将左边控件数据添加到右边控件
If ListAllCourse.ListIndex > -1 Then
If ListSelectCourse.ListCount > 0 Then
For i = 0 To ListSelectCourse.ListCount - 1
If (Trim(ListSelectCourse.List(i)) = ListAllCourse.List(ListAllCourse.ListIndex)) Then
MsgBox "课程已添加!", vbOKOnly + vbExclamation, "警告"
Exit Sub
End If
Next i
End If
ListSelectCourse.AddItem ListAllCourse.List(ListAllCourse.ListIndex)
Else
MsgBox "请先选中一门课程!", vbOKOnly + vbExclamation, "警告"
End If
End Sub
九、成绩管理模块
1.添加成绩
①逻辑图
②选择班号后的Click事件:
Private Sub ComboClassNo_Click()
Dim mrc As ADODB.Recordset
Dim txtSQL As String
Dim MsgText As String
ComboSID.Clear
ComboCourse.Clear
'添加学号
txtSQL = "select * from student_Info where class_No='" & Trim(ComboClassNo.Text) & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
While (mrc.EOF = False)
ComboSID.AddItem mrc!student_ID
mrc.MoveNext
Wend
mrc.Close
'获得年级信息
txtSQL = "select * from class_Info where class_No='" & Trim(ComboClassNo.Text) & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
Grade = mrc!Grade
mrc.Close
'添加相关课程
txtSQL = "select * from course_Info"
Set mrc = ExecuteSQL(txtSQL, MsgText)
While (mrc.EOF = False)
ComboCourse.AddItem mrc!course_Name
mrc.MoveNext
Wend
mrc.Close
Flagselect = True
End Sub
③加载学号对应的姓名:
Private Sub ComboSID_Click()
Dim mrc As ADODB.Recordset
Dim txtSQL As String
Dim MsgText As String
txtSQL = "select * from student_Info where student_ID='" & ComboSID.Text & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
txtName.Text = mrc!student_Name
mrc.Close
End Sub
2.修改成绩
①全部记录删除后设置窗体隐藏或关闭,可以用计时器Timer:
Private Sub Timer1_Timer()
Dim txtSQL As String
Dim MsgText As String
txtSQL = "select * from result_Info "
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF = False Then
mrc.MoveFirst
Call viewData
myBookmark = mrc.Bookmark
ComboExamtype.ListIndex = 0
ComboClassNo.ListIndex = 0
Else
MsgBox "没有记录!", vbOKOnly + vbExclamation, "警告"
Me.Hide
Description.Show
mcclean = True '给标志赋初值
End If
Timer1.Enabled = False
End Sub
3.查询成绩
十、帮助和使用说明
(二)错误篇