2019年高考一轮复习信息技术浙江专用 第九单元第6节 V B访问 Access数据库课件(16张幻灯片)+练习

文档属性

名称 2019年高考一轮复习信息技术浙江专用 第九单元第6节 V B访问 Access数据库课件(16张幻灯片)+练习
格式 zip
文件大小 1.6MB
资源类型 教案
版本资源 通用版
科目 信息技术(信息科技)
更新时间 2019-05-22 11:46:56

文档简介

教师备用题库
编写一个成绩查找程序,只要输入成绩,即可输出其排名、同分数的人数以及比此分高的人数。具体算法思路如下:
(1)预处理。用数组a存放不同的分值,数组b存放相同分数的人数,数组s存放高于此分数的人数,数组下标表示名次。依次从数据库读取每个学生的成绩(数据库中每个学生的成绩已降序存储,即从高到低排列),当读入数与前一个数相同时,该名次的人数加1,当读入数与前一个数不同时,名次加1,即数组下标加1,存储当前分数,求高于本分数的人数并存储。
举例:如果数据库中有一组成绩(降序):95,95,93,93,92,91,90,按上述算法处理,三个数组的最终结果如图所示。
数组/下标
1
2
3
4
5
a
95
93
92
91
90
b
2
2
1
1
1
s
0
2
4
5
6
(2)对需要查找的成绩二分查找。读入需要查找的成绩x,在数组a中二分查找成绩,若找到,输出名次、相同分数的人数和高于本分数的人数;若找不到,输出“查无此分”。
/
程序代码如下,在横线处填入合适的代码。
Dim rank As Integer
Dim a(1 to 1000) As Integer ’存放不同的分数值
Dim b(1 to 1000) As Integer ’存放相同分数的人数
Dim s(1 to 1000) As Integer ’存放高于此分数的人数
rank=0
Private Sub Form_Load()
 Dim conn As New ADODB.Connection
 Dim rs As New ADODB.Recordset
 Dim tmp As Integer, n As Integer
 tmp=-1: n=0
 conn.ConnectionString=“provider=Microsoft.ACE.OLEDB.12.0;data source=“App.Path+”Score.accdb”
 conn.open
 Set rs.ActiveConnection=conn
 rs.open “Select * from score”
 n=0
 Do While Not rs.EOF
   n=n+1
   mark=rs.fields(“成绩”)
   If mark=tmp Then   ’当前读入分数与上一个分数相同,则对应名次的人数增加1
  b(rank)=b(rank)+1
   Else ’当前读入分数与上一个分数不同时
    rank=  ①  ’名次增加1?
    a(rank)=  ②   ’存储当前分数到数组a中?
    s(rank)=  ③  ’求高于本分数的人数并存储至数组s?
    b(rank)=1     ’将自身统计入同分人数
   End If
    ④ ? ’更新上一个分数?
  rs.Movenext
 Loop
End Sub
Private Sub Command1_Click()
  Dim x As Integer,low As Integer,high As Integer,mid As Integer
  x=Val(Text1.Text)
  low=1: high=rank
  mid=(low+high) 2
  Do While low <=high and  ⑤  ?
    mid=(low+high) 2
    If a(mid) < x Then
      high=mid-1
    Else
      low=mid+1
    End If
  Loop
  If a(mid)=x Then
    Label1.Caption=“名次:“+mid+”同分人数:“+b(mid)+”高于此分人数:”+s(mid)
  Else
    Label1.Caption=“查无此分”
  End If
End Sub
答案 ①rank+1 ②mark ③n-1 或b(rank-1)+s(rank-1) ④tmp=mark ⑤a(mid)<>x
解析 ①rank变量存储当前的名次信息,当前读入的分数和上一次分数不同,故名次需增加1,所以rank=rank+1。②分数信息在mark变量中,此处要求将分数存入a(rank)中,故填mark。③根据旁边注释“求高于本分数的人数”,我们可以断定当前分数与上一个分数一定不同时,执行此语句,又因为当前正在处理第n个人成绩,故可以断定比第n个人(即当前处理的这个人)分数高的人一共有n-1个,故填n-1。前一名次的人数为b(rank-1),分数高于前一名次的人数为s(rank-1),故此处代码也可以是“b(rank-1)+s(rank-1)”。④把当前分数迭代到tmp中,以便在读取下一个分数时,可以和当前分数(在下一轮就变成“上一个分数”)进行比较。⑤二分查找的循环条件是“查找区间中所有元素且未找到查找键”,即:low<=high and a(mid)<>x。分析程序:若最终找不到查找键,循环得以结束的条件必然是low<=high不再成立,若能找到查找键,则循环结束的条件必然是 a(mid)<>x 不再成立。
第6节 VB访问Access数据库
模拟演练
1.最新国际体操竞赛的评分规则简单描述如下:
①两位D组裁判分别打“难度分”,取平均值作为该参赛选手的最终难度分。
②五位E组裁判分别打“完成分”,在5个E组打分结果中,去掉一个最高分和一个最低分,然后取平均值作为该参赛选手的最终完成分。
③难度分和完成分之和,即该参赛选手的最终得分。
例如:某参赛选手打分如下:
D组裁判打分
E组裁判打分
6.5
6.9
9.5
9.0
8.3
8.8
7.6
该选手“难度分”为(6.5+6.9)/2=6.7。E组裁判打分去掉一个最高分和一个最低分之后,计算“完成分”为(9.0+8.3+8.8)/3=8.7。所以该选手最终得分为6.7+8.7=15.4分。
小杜编写一个VB程序:程序运行时从数据库读取参赛选手人数和参赛选手的打分数据,依次存储在数组a中;单击“统计”按钮,依据数组a中的相关数据统计各选手的“难度分”“完成分”和“最终得分”,并在列表框List1中输出。数组a各元素的含义如下,程序运行界面如图所示。
/
数组元素
数组元素的含义
a(0)
存储参赛人数n
a(1)
a(1)和a(2)为第1位选手的D组两位裁判的打分。
a(3)、a(4)、…、a(7)为第1位选手的E组五位裁判的打分

a(7)
a(8)
a(8)和 a(9)为第2位选手的D组两位裁判的打分。
a(10)、a(11)、…、a(14)为第2位选手的E组五位裁判的打分

a(14)


实现上述功能的VB程序如下,请回答下列问题:
(1)根据程序运行界面中的数据及数组a各元素的含义,数组元素a(8)和a(9)的值为    (填序号:A.6.2和5.6/B.5.8和6.2/C.6.1和5.5)。?
(2)分析程序,可知数据库的文件名为    。?
(3)请在划线处填入合适的代码。
Dim a(0 To 210) As Single ’数组大小满足处理要求
Dim d(1 To 30) As Single ’依次各选手的难度分
Dim e(1 To 30) As Single ’依次各选手的完成分
Dim f(1 To 30) As Single ’依次各选手的最终得分
Private Sub Command1_Click()
’本过程从数据库读取相关数据,存储在数组a中
Dim conn As New ADODB.Connection
 Dim rs As New ADODB.Recordset
 conn ConnectionString=“provider=Microsoft.ACE.OLEDB.12.0; data source=”+“成绩.accdb”
 conn.Open
 Set rs.ActiveConnection=conn
 ’本过程的其他语句略
End Sub
Private Sub Command2_Click()
’依据数组a中的相关数据统计各班级平均分
Dim i As Integer, j As Integer, n As Integer, p As Integer
Dim max As Single, min As Single, sum Single
  ①  ?
For i=1 To n
  p=(i-1)*7+1
  d(i)=(a(p)+a(p+1))/2
  sum=0
  max=a(p+2) : min=a(p+2)
  For j=p+2 To p+6
   sum=sum+a(j)
   If a(j) > max Then max=a(j)
     ②  min=a(j)?
  Next j
  e(i)=(sum-max-min)/3
  f(i)=d(i)+e(i)
List1.AddItem Str(i)+“ ”+Str(d(i))+“ ”+Str(e(i))+“ ”+Str(f(i))
 Next i
End Sub
答案 (1)C
(2)成绩.accdb
(3)①n=a(0) ②If a(j)解析 本题综合考查算法的程序实现和VB访问数据库。(1)根据程序运行界面中的数据及数组a各元素的含义,知数组元素a(8)和a(9)的平均值为5.8分,也就是第二位选手的难度分为5.8分,只有C选项的平均分为5.8分。(2)数据库的文件名的扩展名格式为“accdb”,通过分析数据库连接部分代码,容易找出数据库的文件名为“成绩.accdb”。(3)①变量n代表参赛选手的人数,根据题意,数组元素a(0)为参赛选手人数,所以需要将数组元素a(0)的值赋给变量n,即n=a(0);②通过分析得知变量min代表五位E组裁判打“完成分”的最低分。通过连续求数组中最值的算法得出②处答案为If a(j)2.某单位招考公务员,2010年和2011年分别有4 020名和2 000名考生报名,下列VB程序用于统计两次考试都参加的考生信息。程序界面设计如图所示,2010年和2011年的考生信息分别显示在List1和List2中,点击“统计”按钮,在List3中显示两次考试都参加的考生信息和总人数。
/
(1)实现上述功能的 VB 程序如下, 请在横线处填入合适代码。
Dim a (1 To 4020 ) As String
Dim b (1 To 2000 ) As String
Private Sub Form_Load( )
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim constr As string
constr=“Provider=Microsoft.ace.OLEDB.12.0;”
constr=constr &“Data Source=” & App.Path+“dataKaoSheng.accdb”
conn.ConnectionString=constr
conn.open()
Dim sql As String
’将参加2010年下半年考试的考生的身份证号码按升序存放在a数组中
sql=“select * from kaoshengInfo where year=‘2010’order by sfzh asc”
rs.Open sql,conn
i=0
Do While Not rs.EOF
 i=i+1
 a(i)=rs(“sfzh”)
 List1.additem(a(i))
 rs.MoveNext
Loop
’将参加2011年下半年考试的考生的身份证号码按升序存放在b数组中
sql=“select * from kaoshengInfo where year=‘2011’order by sfzh asc”
rs.Open sql,conn
i=0
Do While Not rs.EOF
 i=i+1
 b(i)=rs(“sfzh”)
 List2.additem(b(i))
 rs.MoveNext
Loop
rs.Close
End Sub
Private Sub Command1_Click ()
Dim bot As Integer , top As Integer , m As Integer
Dim i As Integer ,ans As Integer
ans=0
 For i=1 To 2000
   bot=1
    ①  ?
   Do While  bot <=top
     m=Fix ( ( bot+top ) / 2 )
     If a ( m )=b ( i ) Then
      List3.AddItem  a ( m )
        ②  ?
      Exit Do
     ElseIf   ③   Then?
      top=m-1
     Else
      bot=m+1
     End If
   Loop
 Next i
 List3.AddItem“总计”+str(ans)+“人次”
End Sub
(2)分析上述代码,在数据库中用于存放考试信息的数据表名称是       。?
答案 (1)①top=4000 ②ans=ans+1 ③a(m)>b(i) (2) kaoshengInfo
解析 本题考查数据库的使用和对分查找。
(1)题目中需要找出两年都参加的人数,采取的做法是枚举考生较少的一年的人,也就是b数组,同时利用对分法去验证枚举到的人在另一年(a数组中)是否存在。对分的上界为bot,下界为top,分别为1和4 000,若查找到则输出并将ans加1,否则当查找值b(i)小于中间值a(m)时,改变下界,是一个标准的对分查找程序。
(2)注意到程序中的“select * from kaoshengInfo where year=‘2011’order by sfzh asc”。这是数据库查询语句,表示从kaoshengInfo这张数据表中查询,where year=‘2011’表示查询所有2011年的记录。
3.小王为学校教务处编写了一个排考场座位的VB程序。考场采用“6排5列”共30人的模式。程序执行后,考生的考号与姓名显示在列表框List1中,单击“考场座位”按钮Command1,考场号与座位显示在Text1中,程序运行界面如图a所示,考生数据存放在数据库文件“kaochang.accdb”中,数据表如图b所示。
/
实现上述功能的VB程序如下,请回答下列问题:
(1)当“Form_Load()”事件处理过程运行结束时,变量x的值为     。?
(2)请在横线处填入合适的代码。
Private Sub Command1_Click()
Dim y As Integer
Dim start As Integer   ’考场第1位数据元素的下标
Dim pa As Integer ’数据库导入VB时学生数据下标
Dim pb As Integer ’考场座位数据下标
Dim i As Integer,j As Integer,k As Integer,m As Integer
start=1
pa=start
recCount=x-1
If recCount Mod 30 <> 0 Then
     ①   ?
  For i=1 To y  ’将当前考生人数添加到30的整数倍
    recCount=recCount+1
    sName(recCount)=“”
  Next i
End If
For j=1 To recCount / 30
  pa=start
  pb=start
  For i=1 To 30
    kcsName(pb)=sName(pa)
    pb=pb+1
    If i Mod 5=0 Then
      pa=start+i 5
    Else
         ②   ?
    End If
  Next i
  start=start+30
Next j
Text1.Text=""
start=1
For k=1 To recCount / 30
  m=start
  Text1.Text=Text1.Text+“第”+Str(k)+“考场”+vbCrLf
  ’vbCrLf为换行标志符,实现Text1中内容换行显示
  For i=1 To 6
    For j=1 To 5
      Text1.Text=Text1.Text+“”+kcsName(m)
      m=m+1
    Next j
    Text1.Text=Text1.Text+vbCrLf
  Next i
  Text1.Text=Text1.Text+vbCrLf+vbCrLf
     ③   ?
Next k
End Sub
Private Sub form_load()
Dim myconn As New ADODB.Connection
Dim myrecord As New ADODB.Recordset
myconn.ConnectionString=“provider=microsoft.ace.oledb.12.0;data source=e:kaochang.accdb”
myconn.Open
strsql="select*from三中 "
myrecord.Open strsql,myconn
  x=1
  List1.AddItem“考号  姓名”
  List1.AddItem“--------------”
Do While Not myrecord.EOF
 ’读取数据库数据,存入数组kh(x)、sName(x)中,代码略
  List1.AddItem kh(x)+“ ”+sName(x)
  x=x+1
  myrecord.MoveNext
Loop
myrecord.Close
End Sub
答案 (1)43
(2)①y=30-recCount Mod 30
②pa=pa+6
③start=start+30
解析 (1)数据库名称是kaochang.accdb,数据表名称是“三中”,注意数据表是没有扩展名的。变量x记录读取到的学生数据的数组下标,当x=42时,Do While Not myrecord.EOF是指到数据表的最后一条记录后退出循环,当前条件成立,还在数据表内,所以继续执行,x=x+1,x为43,跳出循环。
(2)①If recCount Mod 30 <> 0 Then
     y=30-recCount Mod 30
     For i=1 To y
      recCount=recCount+1
      sName(recCount)=" "
    Next i
    End If
选择嵌套循环结构的作用:首先判断学生人数是不是30的倍数,若不是,求出相差人数,通过循环结构将加入的数组元素赋值为空字符串。
②If i Mod 5=0 Then
   pa=start+i 5
 Else
  pa=pa+6
 End If
本段选择结构的作用:当i不是5的倍数时,是考场中的一行,根据题图示意,应该下标加6。
③For k=1 To recCount / 30
   m=start
   Text1.Text=Text1.Text+“第”+Str(k)+“考场”+vbCrLf
  ’vbCrLf为换行标志符,实现Text1中内容换行显示
  For i=1 To 6
  ’此处略
  Next i
  Text1.Text=Text1.Text+vbCrLf+vbCrLf
  start=start+30
 Next k
此处程序段的作用:分考场显示学生姓名,For k=1 To recCount / 30表示根据考场个数确定循环次数。第2考场时,开始的kcsName数组下标加30。
第6节 VB访问Access数据库
真题再现
选考题组
 (2016浙江10月学考+选考,17,6分)小王与小李合作编写一个成绩统计的VB程序:小王编写一个过程,该过程从数据库读取某一指定科目的相关数据,存储在数组a中;小李编写一个过程,该过程依据数组a中的相关数据统计各班级平均分,小王与小李约定的数组a各元素含义如表所示。
数组元素
数组元素的含义
a(1)
存储班级数n
a(2)
从a(2)到a(n+1)依次存储第1、第2、…、第n个班级的人数

a(n+1)
a(n+2)
从a(n+2)开始依次存储第1班每个学生的单科成绩,第2班每个学生的单科成绩、…、第n班每个学生的单科成绩


程序功能如下:在文本框Text1中输入科目名称,单击“读数据库”按钮Command1.程序从数据库读取数据;单击“开始统计”按钮Command2.程序进行统计处理,结果输出在列表框List1中。程序运行界面如图所示。
/
实现上述功能的VB程序如下,请回答下列问题:
(1)根据程序运行界面中的数据及数组a各元素的含义进行分析,数组元素a(5)的值为    (填写数值)。?
(2)分析程序,可知数据库的文件名为    。?
(3)请在划线处填入合适的代码。
Dim a(1 To 600)As Integer  ’数组大小满足处理要求
Private Sub Command1_Click()
 ’本过程由小王完成,从数据库读取指定科目的各相关数据,存储在数组a中
 Dim conn As New ADODB.Connection
 Dim rs As New ADODB.Recordset
 conn.ConnectionString=“ provider=Microsoft.ACE.OLEDB.12.0;data source=”+“Score.accdb”
 conn.Open
 Set rs.ActiveConnection=conn
 ’本过程的其他语句略
End Sub
Private Sub Command2_Click()
 ’本过程由小李完成,依据数组a中的相关数据统计各班级平均分
 Dim i As Integer,j As Integer,n As Integer
 Dim p As Integer,sum As Integer,aver As Single
  ① ?
 p=n+2
 For i=1 To n
  sum=0
  For j=1 To a(i+1)
    ② ?
   p=p+1
  Next j
  aver=sum/a(i+1)
  List1.AddItem Str(i)+“ ”+Str(a(i+1))+“ ”+Str(aver)
 Next i
End Sub
答案 (1)33
(2)Score.accdb
(3)①n=a(1) ②sum=sum+a(p)或其他等价代码
解析 本题属于难题,要求学生有较好的分析问题和处理问题的能力。主要考查利用VB对数组库中数据进行简单的统计。
(1)本小题考查数组元素和数组下标的认识。数组元素a(n+1)存储的是第n个班级的人数。a(5)存储的是第4个班级的人数,其值为33。
(2)本小题考查通过ADO对象中的Conn对象连接数据库。根据ConnectionString连接字符串,可知连接的数据库文件是Score.accdb。
(3)本小题考查对数组中的数据进行统计的能力。①确定需要统计的班级数,n的值从a(1)中读入,即n=a(1)。②统计出每一个班级全体同学指定科目的成绩总分sum。这里是一个累加运算。当前数组下标的位置是p,a(p)是指当前位置读入的成绩,因此累加运算为sum=sum+a(p)。
课件16张PPT。
第6节 VB访问Access数据库一 通过ADO对象连接数据库二 通过Recordset对象获取数据表中的数据四 数据库访问的标准代码如下:教材研读三 算法在数据管理中的综合应用一、通过ADO对象连接数据库
ADO 是微软公司提供的一种应用程序访问数据库的编程接口。该
接口包含了多个对象,其中Connection (连接)对象用于与数据库建立连接, 在建立连接后,可以通过Recordset (记录集)对象获取数据表中的数据。
通过ADO 对象中的Connection 对象连接数据库,步骤如下(右边是对应的代码):教材研读说明:①conn 是定义的Connection 对象的名字。
②ConnectionString 是连接字符串,它主要有两个属性:provider 是数据库引擎的名称;data source 是指定连接的数据库文件,该处“App.Path” 表示程序文件所在的路径,“mydb.accdb”是数据库文件名。此处也可 以用绝对路径,比如c:mydb.accdb。二、通过Recordset对象获取数据表中的数据
通过ADO 对象中的Recordset 对象读取数据库表中记录,步骤如下(右边是对应的代码): 说明:①rs 是定义的 Recordset 对象的名字。
②select 语句是结构化查询语言 SQL 中常见的语句,主要用于从数据表 中查询数据。“select*from info”表示从“info”这张表中读取所有的 记录(通配符“*”表示所有,即All)。
③“info”是表名。
④打开 Recordset 时,若 Recordset 非空,则默认指向第一条记录。
⑤EOF 属性:若当前记录的位置在最后的记录之后,则返回true,否则返 回 false。EOF 相当于读取记录的结束标志。 ⑥rs.Fields(“zd”)返回当前记录中“zd”字段的值。rs.Fields(0)返回 当前记录中第一个字段的值,如果第一个字段名为“zd”,则 rs.Fields(0) 与rs.Fields(“zd”) 返回值相同。依次类推,rs.Fields(1)表示返回第2个 字段的值。
⑦MoveNext 方法:指针移到下一条记录。
⑧这段代码应该在连接数据库后,关闭数据库前。三、算法在数据管理中的综合应用
VB 程序获取到的 Access 数据库表中的数据,可采用数组等方式进行存储,并可以通过编程对这些数据进行各种加工处理,如统计、分析、
查找、排序等。四、数据库访问的标准代码如下:
?
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString=“provider=Microsoft.ACE.OLEDB.12.0;data source=“& App.Path &”computer.accdb”  ??????数据库文件名为: computer.accdbconn.Open
set rs.ActiveConnection=conn
rs.Open “SELECT * FROM info”??????数据表名为:info
n=0
Do While Not rs.EOF
  n=n+1  a(n)=rs.Fields(“xh”)??????Fields(“xh”)表示读取“xh”字段的值, 此处等同于Fields(0)  b(n)=rs.Fields(“jg”)  ??Fields(“jg”)表示读取“jg”字段的值, 此处等同于Fields(2)
  rs.MoveNext
Loop
rs.Close
conn.closeset rs=nothing
set conn=nothing 有一Access数据库“school.accdb”存放在f:2015mtvb文件夹中,其 中的“student”数据表用来存储学生的基本情况信息,包括学号 (num)、姓名(name)、性别(sex)、分数(score),括号内的为对应字段名。 下列VB程序用来实现根据学号查询并显示学生信息,运行界面如下图 所示。在文本框Text1中输入学生的学号,单击“查询”,在文本框Text2、
Text3、Text4中分别显示学生姓名、性别、分数。Private Sub Command1_Click()
Dim adocn As New adodb.ConnectionDim adors As New adodb.Recordset
Dim str2 As String,str1 As Stringstr1=“Provider=Microsoft.ACE.OLEDB.12.0;data source=f:2015mtvb (1)  school.accdb    ”
adocn.Open str1
str2=“select * from students where num=”+Text1.Text
adors.Open str2,adocn,adOpenDynamic,adLockOptimistic
If adors.EOF=True Then MsgBox “你输入的学号不存在”
Else
 Text2.Text=adors.Fields(“name”).Value Text3.Text=adors.Fields(“sex”).Value
(2)  Text4.Text=adors.Fields(“score ”).Value        ?
End If
 adors.Close
 adocn.CloseEnd Sub
为了实现上述目标,在划线处填入合适的语句或表达式:
(1)   ????。
(2)       ????。解析 本题主要考查数据库的访问方法。
(1)划线(1)处代码设置连接数据库的字符串,“data source”是指被连接 的数据库文件。
(2)划线(2)处代码是在文本框Text4中输出分数。
同课章节目录