资源描述
VB程序设计
模拟成绩管理系统
学院:汽车学院
专业:(交通运输)汽车利用工程
班级:
姓名
学号:
《VB程序设计》作业要求
1. 做一个成绩管理系统。
2. 系统中包含部分学生个人信息,如学号,姓名,性别,出生年月日,班级,籍贯,家庭住址,家庭电话,备注等,及若干(不少于8门)课程成绩和课程学分;输入不少于10条统计;
3. 需计算总评成绩(即学分加权平均成绩),并计算排名,且反应在字段中;
4. 程序需含有功效:统计浏览,添加,修改,删除,查询(按姓名或学号查询)
5. 提议不要用ADO控件
6. 作业提交:
(1) 电子版。
a. 该版本应该是在你或老师电脑上全部能运行,和数据库路径无关,提交以前请在其它同学电脑上运行一下,确保程序运行和电脑无关;
b. 把全部文件放在同一个文件夹中,压缩文件名:VB-班级-学号-姓名,如:VB-汽运1班-xxxxxxxx-张三.zip;
c. 提交邮箱随即公布;
(2) 纸质版。纸质版应包含:
a. 封面,作业要求;
b. 关键界面;
c. 关键代码,附程序功效注释及关键语句注释。
d. 附必需说明。
系统运行界面
查询功效
检索框内输入学号或姓名,点击查询,即可在右方显示基础信息,并显示总评成绩。点击清空按钮后,可继续输入。
比如:输入学号“09”后,显示界面以下图
假如没有找到纪录,则发出警告,以下图
将统计指针指向第一个纪录
未找到匹配纪录,则显示提醒
查找
显示
输入学号时
使加权成绩小数点后最多显示两位
关键代码:
查询按钮: Private Sub Command1_Click()
Me.Data1.Recordset.Movefirst
If Me.Combo1.Text <> "" Then
Me.Data1.Recordset.FindFirst "name='" & Combo1.Text & "'"
If Me.Data1.Recordset.NoMatch Then
MsgBox "请重新输入!", 48, "注意"
Combo1.Clear
Combo2.Clear
Else
Me.Data1.Recordset.FindFirst "name='" & Combo1.Text & "'"
Combo2.Text = Data1.Recordset("number")
End If
End If
If Me.Combo2.Text <> "" Then
Me.Data1.Recordset.FindFirst "number='" & Combo2.Text & "'"
If Me.Data1.Recordset.NoMatch Then
MsgBox "请重新输入!", 48, "注意"
Combo1.Clear
Combo2.Clear
Else
Me.Data1.Recordset.FindFirst "number='" & Combo2.Text & "'"
Combo1.Text = Data1.Recordset("name")
End If
End If
Private grade As String * 5
grade = (Val(Text8.Text) * Val(Me.Text17.Text) + Val(Text9.Text) *
计算加权成绩
显示窗口二
4
Val(Me.Text18.Text) + Val(Text10.Text) * Val(Me.Text20.Text) + Val(Text11.Text) * Val(Me.Text21.Text) + Val(Text12.Text) * Val(Me.Text22.Text) + Val(Text13.Text) * Val(Me.Text23.Text) + Val(Text14.Text) * Val(Me.Text24.Text) + Val(Text15.Text) * Val(Me.Text25.Text) + Val(Text16.Text) * Val(Me.Text26.Text)) / (Val(Me.Text17.Text) + Val(Me.Text18.Text) + Val(Me.Text20.Text) + Val(Me.Text21.Text) + Val(Me.Text22.Text) + Val(Me.Text23.Text) + Val(Me.Text24.Text) + Val(Me.Text25.Text) + Val(Me.Text26.Text))
Me.Text19.Text = grade
End Sub
添加功效
点击“添加”按钮后,弹出新窗口,输入完整信息后,点击更新,假如信息不完整,系统会提醒“请输入完整数据!”。输入完成后,点击更新,数据便录入数据表中,并返回初始界面,可继续输入。点击“取消”按钮后,退出窗口2,返回窗口一,继续进行其它操作。
关键代码:
添加按钮
Private Sub Command3_Click()
inNum = 1
Form2.Show 1
End Sub
窗口二代码
Private Sub Command1_Click()
If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" Or Text5.Text = "" Or Text6.Text = "" Or Text7.Text = "" Or Text8.Text = "" Or Text9.Text = ""
提醒输入完整数据
将数据写入data1
Or Text10.Text = "" Or Text11.Text = "" Or Text12.Text = "" Or Text13.Text = "" Or Text14.Text = "" Or Text15.Text = "" Or Text16.Text = "" Or Text17.Text = "" Or Text18.Text = "" Or Text20.Text = "" Or Text21.Text = "" Or Text22.Text = "" Or Text23.Text = "" Or Text24.Text = "" Or Text25.Text = "" Or Text26.Text = "" Then
b = MsgBox("请输入完整数据!", 4 + 48, "注意")
Text1.SetFocus
Exit Sub
End If
With Data1
.Recordset.AddNew
.Recordset("number") = Text1.Text
.Recordset("name") = Text2.Text
.Recordset("sex") = Text3.Text
.Recordset("birthday(year)") = Text4.Text
……
.Recordset.Update
End With
Text1.Text = "": Text2.Text = "": Text3.Text = "": Text4.Text = "": Text5.Text = "": Text6.Text = "": Text7.Text = "": Text8.Text = "": Text9.Text = "": Text10.Text = "": Text11.Text = "": Text12.Text = "": Text13.Text = "": Text14.Text = "": Text15.Text = "": Text16.Text = "": Text17.Text = "": Text18.Text = "": Text20.Text = "": Text21.Text = "": Text22.Text = "": Text23.Text = "": Text24.Text = "": Text25.Text = "": Text26.Text = "": Text1.SetFocus
点击取消按钮时
窗口二和data1数据表连接
End Sub
Private Sub Command2_Click()
Unload Me
Form1.Show
End Sub
Private Sub Form_Load()
Me.Data1.DatabaseName = App.Path + "\2301-吕天翔.mdb"
Me.Data1.RecordSource = "grade management"
End Sub
修改功效
点击“修改”按钮后,按钮消失,‘保留’按钮出现,同时课程学分部分显现,可一并修改,修改完成后,点击保留,显示警告“目前统计将被修改,确定修改?”
点击确定,完成修改,并回到初始界面。
调整 课程学分部分 可见性
调整按钮可见性
6
关键代码:
点击修改按钮
Private Sub Command4_Click()
Me.Text17.Visible = True
Me.Text18.Visible = True
Me.Text20.Visible = True
Me.Text21.Visible = True
Me.Text22.Visible = True
Me.Text23.Visible = True
Me.Text24.Visible = True
Me.Text25.Visible = True
Me.Text26.Visible = True
Label8(2).Visible = True
Me.Command3.Visible = False
Me.Command4.Visible = False
Me.Command5.Visible = False
显示提醒
选择“否”时选择退出
不然进入 写入 状态
依次写入
Me.Command6.Visible = False
Me.Command10.Visible = True
End Sub
点击保留按钮
Private Sub Command10_Click()
a = MsgBox("目前统计将被修改,确定修改?", 4 + 48, " 警告 ")
If a = vbNo Then Exit Sub
Me.Data1.Recordset.Edit
With Data1
.Recordset("number") = Text1
.Recordset("name") = Text2
.Recordset("sex") = Text3
… …
.Recordset("transportation-xuefen") = Me.Text24
.Recordset("automobile-xuefen") = Me.Text25
.Recordset("engine-xuefen") = Me.Text26
End With
Data1.Refresh
Combo1.Clear
Combo2.Clear
End Sub
删除功效
点击“删除”按钮后将弹出“目前统计将被删除,确定删除?”对话框,点击“是”按钮后,将目前统计从data1中删除,并更新data1;若点击“否”,则退出,返回初始界面。
显示提醒
进行删除操作
更新data1
关键代码:
Private Sub Command5_Click()
a = MsgBox("目前统计将被删除,确定删除?", 4 + 48, " 警告 ")
If a = vbNo Then Exit Sub
Me.Data1.Recordset.Delete
Me.Data1.Refresh
Combo1.Clear
Combo2.Clear
End Sub
总评成绩计算
算法介绍
用课程学分部分数据和考试成绩计算总评成绩,课程学分部分通常隐藏在窗体中。
情况一 浏览时即显示总评成绩
点击data控件按钮浏览数据同时,该数据总评成绩也同时显示。
关键代码:
Private Sub Data1_Validate(Action As Integer, Save As Integer)
假如目前界面没有显示数据
为预防浏览时犯错
总评成绩计算
8
If Me.Data1.Recordset.EOF = True Then
Me.Data1.Recordset.Movefirst
Else
grade = (Val(Text8.Text) * Val(Me.Text17.Text) + Val(Text9.Text) * Val(Me.Text18.Text) + Val(Text10.Text) * Val(Me.Text20.Text) + Val(Text11.Text) * Val(Me.Text21.Text) + Val(Text12.Text) * Val(Me.Text22.Text) + Val(Text13.Text) * Val(Me.Text23.Text) + Val(Text14.Text) * Val(Me.Text24.Text) + Val(Text15.Text) * Val(Me.Text25.Text) + Val(Text16.Text) * Val(Me.Text26.Text)) / (Val(Me.Text17.Text) + Val(Me.Text18.Text) + Val(Me.Text20.Text) + Val(Me.Text21.Text) + Val(Me.Text22.Text) + Val(Me.Text23.Text) + Val(Me.Text24.Text) + Val(Me.Text25.Text) + Val(Me.Text26.Text))
Me.Text19.Text = grade
End If
End Sub
情况二:查询时即显示其总评成绩
计算方法相同,此处不再赘述。
排名功效
点击“排名”按钮后,依据总评成绩大小,在list控件中显示目前数据排名情况,能够同时显示“名次”“姓名”“总评成绩”;同时在删除或添加部分数据后,能重新计算排名,此处经过动态数组实现显示个数随数据个数同时改变。
算法介绍:
添加一个text控件,用来存放目前窗口总评成绩。使用data1控件movefirst,movenext,eof 等属性完成数据库“数据个数计算”“全部数据姓名和成绩提取和匹配”,使用动态数组完成数据存放;利用循环完成赋值及大小比较,最终经过list显示出来。
用h存放数据库数据个数
关键代码:
Private Sub Command8_Click()
Do Until Me.Data1.Recordset.EOF = True
Me.Data1.Recordset.Movenext
h = h + 1
Loop
Me.Data1.Recordset.Movefirst
定义和数据个数相同行数二位动态数组
Text27中存放目前数据成绩
把姓名和成绩赋值给数组
对数组中成绩进行比较并重新排序
输出排序
10
Dim t As String
Dim w As String
ReDim a(h, 2) As String * 5
Do Until Me.Data1.Recordset.EOF = True
Me.Text27.Text = (Val(Text8.Text) * Val(Me.Text17.Text) + Val(Text9.Text) * Val(Me.Text18.Text) + Val(Text10.Text) * Val(Me.Text20.Text) + Val(Text11.Text) * Val(Me.Text21.Text) + Val(Text12.Text) * Val(Me.Text22.Text) + Val(Text13.Text) * Val(Me.Text23.Text) + Val(Text14.Text) * Val(Me.Text24.Text) + Val(Text15.Text) * Val(Me.Text25.Text) + Val(Text16.Text) * Val(Me.Text26.Text)) / (Val(Me.Text17.Text) + Val(Me.Text18.Text) + Val(Me.Text20.Text) + Val(Me.Text21.Text) + Val(Me.Text22.Text) + Val(Me.Text23.Text) + Val(Me.Text24.Text) + Val(Me.Text25.Text) + Val(Me.Text26.Text))
a(i, 1) = Text2.Text
a(i, 2) = Text27.Text
i = i + 1
Me.Data1.Recordset.Movenext
Loop
For i = 1 To h
For j = i + 1 To h
If a(i, 2) < a(j, 2) Then
t = a(i, 1)
w = a(i, 2)
a(i, 1) = a(j, 1)
a(i, 2) = a(j, 2)
a(j, 1) = t
a(j, 2) = w
End If
Next
Next
p = " 第 " & k & " 名 " & a(1, 1) & a(1, 2)
List1.AddItem p
List1.AddItem ""
For i = 2 To h
k = k + 1
p = " 第 " & k & " 名 " & a(i, 1) & a(i, 2)
List1.AddItem p
List1.AddItem ""
Next
Text19.Text = ""
End Sub
课程学分显示及修改功效
经过点击 课程学分显示 按钮,课程学分部分变为可见,并可经过点击修改按钮进行修改,点击 返回 按钮后,该部分继续隐藏。
浏览功效
经过点击data1控件按钮进行浏览。
展开阅读全文