VB学生成绩查询统计系统实验报告

更新时间:2024-07-06 18:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学生成绩查询系统

一、实习任务……………………………………………… 2 二、系统分析……………………………………………… 3 三、系统设计……………………………………………… 4 四、调试、排错、测试、试运行过程…………………… 7 五、 源程序完整或主要代码 ……………………………10 六、 总结与体会………………………………………… 17 七、 参考文献…………………………………………… 18

一、 实习任务

1实习任务介绍:

熟悉软件工程学的基本思想进行软件开发的原则和方法;结构化分析方法和步骤;结构化编程方法;面向对象的思想和程序设计方法。按照软件开发的一般方法和步骤动手设计一个《学生成绩查询统计系统》。

2基本要求:

① 登录界面:密码最多尝试3次,连续3次均输入错误系统自动退出。 ② 具有录入成绩、添加记录、删除记录、修改记录功能。

③ 具有成绩查询功能,可以按照学号、课程号、课程名、分数段进行查询。为便于查询,所有的学号和课程号可考虑以下拉列表的形式给出。

④ 具有全部成绩浏览功能,且能与数据库表最新数据同步。

⑤ 具有统计功能,能以直方图、饼图、折线图、散点图、立体直方图直观表示各成绩段的分布情况。

⑥ 具有打印学生成绩报表的功能。 ⑦ 具有菜单和工具条的双重操作功能。

3 实习目的:

掌握常用控件的使用,学会使用通用对话框控件进行编程,掌握创建多重窗体程序的有关技术,了解鼠标和键盘事件及事件过程的编写,综合应用了所学知识,加深对VB的理解。

4 选题的背景及意义:

VB是Visual Basic的简称,是由美国微软公司于1991年开发的一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发 Windows 环境下的各类应用程序。它简单易学、效率高,且功能强大可以与 Windows 专业开发工具SDK相媲美。在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的广泛应用程序接口(API)函数,动态链接库(DLL)、对象的链接与嵌入(OLE)、开放式数据连接(ODBC)等技术,可以高效、快速地开发Windows环境下功能强大、图形界面丰富的应用软件系统。成绩管理系统是一个实用性极强的系统,加深学生对VB的理解,并且能够解决一些常见问题。

5 软件工具和需要掌握的知识:

本次实习环境:Microsoft Visual Basic 6.0 本次实习要求掌握:

① VB可视化编程基础:VB对象的概念,窗体和基本控件

② VB语言基础:数据类型,常量与变量,运算符和表达式,VB程序结构和编码规则 ③ VB控制结构:顺序结构,选择结构,循环结构 ,辅助控制语句,程序调试 ④ 数组和自定义类型:数组的基本操作,列表框和组合框,

⑤ 过程:函数过程的定义和调用,子过程的定义和调用,参数传递,过程的嵌套和递归调用,变量的作用域

⑥ 用户界面设计:各种控件的应用,以及对话框的应用,菜单设计

- - 1 - - - 1 -

⑦ 图形操作:直方图、饼图、散点图、折线图

⑧ 数据库应用基础:VB数据库的访问,记录集对象

二、系统分析

1 系统功能模块

主 界 面 增 加 查 找 删 除 统 计 图 打印报表 退 出

2 设计思路

在设计时,根据老师的提示信息,先画出主界面,再进行编码。登录界面,自己设定,输入账号密码进入主界面,主界面上设置菜单项和工具条,各功能键根据要求设定。最后要注意的是各各窗体之间的连接。

3 算法描述

登陆界面,输入密码,输入正确后进入主界面,否则重新输入,只有三次机会,超过要求次数系统自动退出。来到主界面后就能通过菜单项或者工具条的提示进行操作,另外还有绘图界面和关于界面,删除时能直接删除,也可通过查找删除,查找能够按姓名,学号,课程号,分数段来进行,绘图也可绘制直方图,饼图,散点图,折线图。修改时,可进行学号,姓名,照片,成绩,课程来修改,在确认修改完成前可进行多人修改,再添加学生信息后,在工具栏中点击查看全部能够找到该生信息。

- - 2 - - - 2 -

三、系统设计

修改和增加记录

Private Sub a1_Click() text1.Enabled = True Text2.Enabled = True Text3.Enabled = True Text4.Enabled = True Text5.Enabled = True Command1.Enabled = True Adodc1.Recordset.AddNew End Sub

删除记录:

Private Sub a2_Click() Dim i As Integer

i = MsgBox(\确实要删除吗?\删除) If i = 6 Then

Adodc1.Recordset.Delete Adodc1.Recordset.MoveNext

'If Adodc1.Recordset.EOF Then Adodc1.Recordset.MoveLast 'Else: Form2.Show End If End Sub

查询学生信息:

这个选项里含有多个选项,有按学号、按姓名、按课程名、分段查询等。 按课程名查找

Private Sub b1_Click() Dim a As String

Adodc1.CommandType = adCmdUnknown

a = InputBox(\请输入课程名\查询窗口\

Adodc1.RecordSource = \学生成绩情况 where 课程名='\\

Adodc1.Refresh

If Adodc1.Recordset.EOF Then

MsgBox \该课程名下没有学生!\提示\Adodc1.CommandType = adCmdTable

Adodc1.RecordSource = \学生成绩情况\Adodc1.Refresh End If

- - 3 - - - 3 -

End Sub

按分数段查找,优秀段学生

Private Sub b5_Click() Dim a As Integer

On Error GoTo ErrCode

Adodc1.CommandType = adCmdUnknown

Adodc1.RecordSource = \学生成绩情况 where 分数 >=90\Adodc1.Refresh

If Adodc1.Recordset.EOF Then

MsgBox \没有不及格的学生!\提示\Adodc1.CommandType = adCmdTable

Adodc1.RecordSource = \学生成绩情况\Adodc1.Refresh End If ErrCode: End Sub

统计图:坐标系函数

Dim a$(5), b%(5), max Public Sub zbx() Cls max = 0

a(1) = \a(2) = \a(3) = \a(4) = \a(5) = \

Do While Not Form2.Adodc1.Recordset.EOF

Select Case Form2.Adodc1.Recordset.Fields(\分数\Case Is < 59 b(1) = b(1) + 1 Case 60 To 69 b(2) = b(2) + 1 Case 70 To 79 b(3) = b(3) + 1 Case 80 To 89 b(4) = b(4) + 1 Case 90 To 100 b(5) = b(5) + 1 End Select

Form2.Adodc1.Recordset.MoveNext Loop

For i = 1 To 5

- - 4 - - - 4 -

If b(i) > max Then max = b(i) Next i

Scale (-0.1, max * 1.2)-(max * 1.2, -max * 0.1)

Line (0, 0)-(max * 1.2, 0): Line (0, max * 1.2)-(0, 0) CurrentX = -0.2: CurrentY = -0.1 Print \成绩分数段:\For i = 1 To 5

Print \人数:\Next i End Sub

饼图

Private Sub Command2_Click() zbx

X = Abs(Me.ScaleHeight / 2) r = max / 4 Sum = 0

For i = 1 To 5

Sum = Sum + b(i) Next i

Form4.FillStyle = 0 a1 = 0

For i = 1 To 5

a2 = a1 + 2 * 3.14159 * b(i) / Sum Randomize

FillColor = QBColor(Rnd * 15) Circle (X, X), r, , -a1, -a2

CurrentX = X + r * Cos((a2 + a1) / 3) CurrentY = X + r * Sin((a2 - a1) / 3)

Print Format(b(i) / Sum * 100, \ a1 = a2 Next i End Sub

查看全部

Private Sub search_all() Adodc1.CommandType = 2

Adodc1.RecordSource = \学生成绩情况\Adodc1.Refresh

DataGrid1.Visible = True End Sub

- - 5 - - - 5 -

四、调试、排错、测试、试运行过程

1 登录界面 只有三次机会,若输入的数据与设定的相同(密码账号均为

090556)点击登录后进入主界面。

图一

2主界面 通过菜单栏和工具条进行操作

- - 6 - - - 6 -

图二

查找 按课程名查找及查找结果。

图三

- - 7 - - - 7 -

图四

程序运行后,发现删除与查找之间存在错误,查找后得到的信息竟不能够删除,只能在主界面上直接删除,最后修改了删除代码中的if语句,运行正确。

直方图

图五

报表图

- - 8 - - - 8 -

图六

查找时输入信息有误时显示界面:

图七

点击确定后,回到主界面。

五、 源程序完整或主要代码

- - 9 - - - 9 -

登录窗体:

Dim i%

Private Sub Command1_Click() If 3 – i = 1 Then

MsgBox \系统繁忙,请稍后再试!\End End If

If text1 = \

MsgBox \密码正确,允许登录\密码正确后进入主窗体 Form1.Hide Form2.Show Else

text1 = \Text2 = \i = i + 1

MsgBox \密码错误!你还有 \次登陆机会!\text1.SetFocus End If End Sub

Private Sub Command2_Click() //结束按钮 End End Sub

Private Sub Text2_Change()

Text2.PasswordChar = \密码显示* End Sub

主界面:

Private Sub a1_Click() //增加信息库记录 Text1.Enabled = True Text2.Enabled = True Text3.Enabled = True Text4.Enabled = True Text5.Enabled = True Command1.Enabled = True Adodc1.Recordset.AddNew End Sub

Private Sub a2_Click() //删除记录 Dim i As Integer

i = MsgBox(\确实要删除吗?\删除) If i = 6 Then

Adodc1.Recordset.Delete Adodc1.Recordset.MoveNext Else: Form2.Show End If

- - 10 - - - 10 -

End Sub

Private Sub a3_Click() //修改学生信息 Text1.Enabled = True Text2.Enabled = True Text3.Enabled = True Text4.Enabled = True Text5.Enabled = True Command1.Enabled = True End Sub

Private Sub b1_Click() //按课程名查找 Dim a As String

Adodc1.CommandType = adCmdUnknown

a = InputBox(\请输入课程名\查询窗口\

Adodc1.RecordSource = \学生成绩情况 where 课程名='\Adodc1.Refresh

If Adodc1.Recordset.EOF Then

MsgBox \该课程名下没有学生!\提示\输入错误信息时显示 Adodc1.CommandType = adCmdTable

Adodc1.RecordSource = \学生成绩情况\Adodc1.Refresh End If End Sub

Private Sub b2_Click() //按姓名查找 Dim a As String

Adodc1.CommandType = adCmdUnknown

a = InputBox(\请输入姓名\查询窗口\

Adodc1.RecordSource = \学生成绩情况 where 姓名='\Adodc1.Refresh

If Adodc1.Recordset.EOF Then

MsgBox \没有此姓名的学生!\提示\Adodc1.CommandType = adCmdTable

Adodc1.RecordSource = \学生成绩情况\Adodc1.Refresh End If End Sub

Private Sub b3_Click() //按学号查找 Dim a As String

Adodc1.CommandType = adCmdUnknown

a = InputBox(\请输入学号\查询窗口\

Adodc1.RecordSource = \学生成绩情况 where 学号='\

- - 11 - - - 11 -

Adodc1.Refresh

If Adodc1.Recordset.EOF Then

MsgBox \无该学号的学生!\提示\Adodc1.CommandType = adCmdTable

Adodc1.RecordSource = \学生成绩情况\Adodc1.Refresh End If End Sub

Private Sub b5_Click() // 按分数段,优秀段 Dim a As Integer

On Error GoTo ErrCode

Adodc1.CommandType = adCmdUnknown

Adodc1.RecordSource = \学生成绩情况 where 分数 >=90\Adodc1.Refresh

If Adodc1.Recordset.EOF Then

MsgBox \没有不及格的学生!\提示\Adodc1.CommandType = adCmdTable

Adodc1.RecordSource = \学生成绩情况\Adodc1.Refresh End If ErrCode: End Sub

Private Sub b6_Click() //按分数段,不及格段 Dim a As Integer

On Error GoTo ErrCode

Adodc1.CommandType = adCmdUnknown

Adodc1.RecordSource = \学生成绩情况 where 分数 <60\Adodc1.Refresh

If Adodc1.Recordset.EOF Then

MsgBox \没有不及格的学生!\提示\Adodc1.CommandType = adCmdTable

Adodc1.RecordSource = \学生成绩情况\Adodc1.Refresh End If ErrCode: End Sub

Private Sub c_Click() //显示绘图界面 Form4.Show End Sub

Private Sub Command1_Click() //照片添加 Dim strb() As Byte

- - 12 - - - 12 -

CommonDialog1.ShowOpen

Open CommonDialog1.FileName For Binary As #1 fl = LOF(1) ReDim strb(fl) Get #1, , strb

Adodc1.Recordset.Fields(\照片\Close #1

Image1.Picture = LoadPicture(CommonDialog1.FileName) End Sub

Private Sub Command2_Click() //修改确认,增加新成员 i = MsgBox(\确实要做如此改变吗?\编辑) If i = vbYes Then

Adodc1.Recordset.Update Else

Adodc1.Recordset.CancelUpdate Form2.Show End If

Text1.Enabled = False Text2.Enabled = False Text3.Enabled = False Text4.Enabled = False Text5.Enabled = False Command1.Enabled = False

Adodc1.CommandType = adCmdUnknown

Adodc1.RecordSource = \学生成绩情况 order by 学号 asc \Adodc1.Refresh End Sub

Private Sub d_Click() //打印报表 报表图.Show End Sub

Private Sub e_Click() //显示关于界面 Form3.Show End Sub

Private Sub Form_Load() End Sub

Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) //工具栏 Select Case Button.Index Case 1: a1_Click Case 2: a2_Click Case 3: search_all

- - 13 - - - 13 -

Case 4: End End Select End Sub

Private Sub Toolbar1_ButtonMenuClick(ByVal ButtonMenu As MSComctlLib.ButtonMenu) Select Case Button.Index End Select End Sub

Private Sub search_all() //查看全部信息 Adodc1.CommandType = 2

Adodc1.RecordSource = \学生成绩情况\Adodc1.Refresh

DataGrid1.Visible = True End Sub

统计图窗体

Dim a$(5), b%(5), max //坐标系函数 Public Sub zbx() Cls max = 0

a(1) = \a(2) = \a(3) = \a(4) = \a(5) = \

Do While Not Form2.Adodc1.Recordset.EOF

Select Case Form2.Adodc1.Recordset.Fields(\分数\Case Is < 59 b(1) = b(1) + 1 Case 60 To 69 b(2) = b(2) + 1 Case 70 To 79 b(3) = b(3) + 1 Case 80 To 89 b(4) = b(4) + 1 Case 90 To 100 b(5) = b(5) + 1 End Select

Form2.Adodc1.Recordset.MoveNext Loop

For i = 1 To 5

If b(i) > max Then max = b(i) Next i

- - 14 - - - 14 -

Scale (-0.1, max * 1.2)-(max * 1.2, -max * 0.1)

Line (0, 0)-(max * 1.2, 0): Line (0, max * 1.2)-(0, 0) CurrentX = -0.2: CurrentY = -0.1 Print \成绩分数段:\For i = 1 To 5

Print \人数:\Next i End Sub

Private Sub Command1_Click() //直方图 zbx

w = max / 2 / 5 X1 = w

For i = 1 To 5 X2 = X1 + w Y2 = b(i)

Line (X1, 0)-(X2, Y2), QBColor(9), BF CurrentX = X1

CurrentY = Y2 + max * 0.1 Print a(i) X1 = X2 + w Next i End Sub

Private Sub Command2_Click() //饼图 zbx

X = Abs(Me.ScaleHeight / 2) r = max / 4 Sum = 0

For i = 1 To 5

Sum = Sum + b(i) Next i

Form4.FillStyle = 0 a1 = 0

For i = 1 To 5

a2 = a1 + 2 * 3.14159 * b(i) / Sum Randomize

FillColor = QBColor(Rnd * 15) Circle (X, X), r, , -a1, -a2

CurrentX = X + r * Cos((a2 + a1) / 3) CurrentY = X + r * Sin((a2 - a1) / 3)

Print Format(b(i) / Sum * 100, \ a1 = a2 Next i

- - 15 - - - 15 -

End Sub

Private Sub Command3_Click() //散点图 zbx

w = max / 2 / 5 X1 = 3 / 2 * w For i = 1 To 5 DrawWidth = 7

PSet (X1, b(i)), QBColor(9) X1 = X1 + 2 * w Next i End Sub

Private Sub Command4_Click() //折线图 Zbx

w = max / 2 / 5 X1 = 3 / 2 * w For i = 2 To 5

DrawWidth = 1.5 X2 = X1 + 2 * w

Line (X1, b(i - 1))-(X2, b(i)), QBColor(9) X1 = X1 + 2 * w Next i End Sub

Private Sub Command5_Click() //返回主系统 Form4.Hide Form2.Show End Sub

Private Sub Form_Load()

Form2.Adodc1.CommandType = 8

Form2.Adodc1.RecordSource = \学生成绩情况\Form2.Adodc1.Refresh End Sub

六、总结与体会

- - 16 - - - 16 -

本次实习要求是制作一个学生成绩管理系统,技术要求不太高的应用程序,但要求对课本知识的牢固掌握,并加以熟练运用。在实习过程中遇到过一些问题,像删除时直接删除操作正确,但经过查找后若查找结果对象只有一个就会被提示error,若有多个则删除至最后一个时出现error提示,后来注销了第二个if删除中的语句后能够正确操作。在绘图时,只能够显示静态的,也经过了修改,但不太稳定,只能够在查看全部学生的基础上进行查找才能够显示查找结果的处理图像。本次实习发现了大量以往所不注意的错误,经过不懈努力,解决了部分,但仍有的现在不能解决,在接下来的时间了会查找资料,争取解决这些问题。在进行编程时,严格的按照课本要求的基本步骤,编写程序代码。在编写之前,做整体规划和详细设计很重要。只有思路清晰,设计合理可行,编码才有可能有的放矢,才能更加有效的完成任务。

刚刚开始看到实习题目时,感觉做下来并不困难,这些我们在平时的实验训练中都遇到过,只不过是把这些串起来就行了,但真正做起来才发现想得过于简单了,大错小错都接踵而至,刚修改了这边,那边运行时就也出现了问题,就这样直到时间快结束才完成了本次实习的任务。本次实习最重要的是发现了课本的重要性,对以往对课本不重视感到汗颜,知道了基础的不牢固,本次实习就是对课本进行了一次回归复习,熟练VB中一些控件的一些基本属性,如:Name属性,创建对象的名称;Caption属性,控件上文本显示的内容;Hight、Width、Top、Left属性,决定控件的大小和位置;Font属性,改变文本的外观;Enable属性,决定控件的可用性;Visiable决定控件的可见性;这都是一些最常见的基本属性,应该牢固掌握,还有在实习中遇见的一些其他属性也要熟练操作,如;Picture,BackStyle等属性。,熟练掌握一些事件如GotFocus、Change、keydown、keypress、click、dblclick、load和命令如circle、line、shell、print等的用法,而且,对窗体、文本框、标签、命令按钮、图形框、图相框、工具、图像列表、通用对话框控件、daragrid、data、报表(datareport)等的熟悉程度又有了更深一步的了解。总的来说,本次实习掌握了常用控件的使用,学会了使用通用对话框控件进行编程,掌握了创建多重窗体程序的有关技术,了解鼠标和键盘事件及事件过程的编写,综合应用了所学知识,加深对VB的理解。

本次集中实习,对我来说可以算是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有一点困难。但对我来说这是一次很好的机会,同时我也很好的把握了这次机会,认真的完成了此次上机学习的任务,对自己今后在程序编写方面以及文档撰写方面相信会有很大的帮助,最后希望自己在数据结构以及计算机的其他学习方面能够得到很好的提高。巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。

根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点: 认真上好专业实验课,多在实践中锻炼自己; 写程序的过程中要考虑周到,严密;

在做设计的时候要有信心,有耐心,切勿浮躁;

认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用; 在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。

七、参考文献

- - 17 - - - 17 -

1.《Visual C++实用教程》 张荣梅、梁晓林编著 中国铁道出版社 2008年9月 2.《visual basic程序设计教程》 龚沛曾、杨志强编 高等教育出版社 2007年3月 3.《Visual Basic程序设计实用教程》王卫东 主编 中国电力出版社 2008.年1月 4.《Visual Basic程序设计教程》胡声艳 李为华编 人民邮电出版社 2009年3月

- - 18 - - - 18 -

本文来源:https://www.bwwdw.com/article/gsm.html

Top