程序访问数据库 知识点题库

某超市举行VIP客户积分换购活动,VIP客户根据卡内积分多少可换取不同额度的代金券。假设VIP客户共有n名,VIP卡内积分存放在数据库“customer.accdb”的Integral表中,换购活动的VB程序代码如下,程序运行时界面如图所示。工作人员在文本框Text1中输入VIP卡号后,单击“换购”按钮Command1,在文本框Text2中输出VIP客户的积分数,在标签Label3中显示可以换购的代金券额度,积分清零。按此要求编写程序如下, 但加框处代码有错,请改正。

Dim ID( ) As String    '用于存放客户卡号

Dim total( ) As Long      '用于存放积分数

Dim sc As Long                  'VIP客户人数

Dim jf As Long                  '积分数


Private Sub Command1Click( )

  Dim k As String                '客户卡号

  Dim q As Long               '代金券额度

  Dim i As Long

  k = Text1.Text

  For i = 1 To sc     ’顺序查找

      If ID(i) = k Then

          jf = total(i)     

          cash(jf) = q               ’ ①

          Exit For

      End If

                                     ’ ②

      Label3.Caption = “您可换购的代金券总额为:”+ Str(q) + “元”

    Next i

  End If

End Sub


' cash函数用于计算VIP客户可换购的代金券额度

Function cash(jf As Long) As Long

  If jf >= 2000 And jf <= 20000 Then

       Cash = jf\2000*10

ElseIf jf > 20000 And jf <= 50000 Then

       Cash = jf\2000*11

ElseIf jf > 50000 And jf <= 100000 Then

       Cash = jf\2000*12

ElseIf jf > 100000 And jf <= 150000 Then

       Cash = jf\2000*13

ElseIf jf > 150000 Then

       Cash = jf\2000*14

End If

End Function


Private Sub FormLoad()

   Dim conn As New ADODB.Connection, rs As New ADODB.Recordset

   Dim intSQL As Long

   conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + App.Path + "\ customer.accdb"

    conn.Open

   intSQL = "SELECT score  FROM Integral" 

     Set rs.ActiveConnection = conn

     rs.CursorType = adOpenStatic

     rs.Open intSQL

     sc = 0

     Do While Not rs.EOF

       sc = sc + 1

       total(sc) = rs.Fields("score")

       rs.MoveNext

     Loop

rs.Close

     conn.Close

     Set rs = Nothing

     Set conn = Nothing

End Sub

  1. (1) 加框处①有错,应改为
  2. (2) 横线处②,应填入的语句是
由人民政府授权发放给市民用于办理个人相关事务和享受公共服务的集成电路卡(IC卡),具有信息储存、身份识别、电子支付等功能。每位市民都可以拥有一张唯一卡号的市民卡,卡内会记录每位市民的姓名、电话、金额等信息。

    假设共有500个市民,市民的相关信息都存储在“information.accdb”的data表中,”xm, ye,kh” 字段放市民的姓名,余额,卡号。查询程序界面如第16题图所示。工作人员在文本框Text1中输入卡号,单击“查询”按钮,如果找到,就在Label1中显示卡内市民姓名和卡内余额;否则显示“查无此人”。程序如下,请按要求将程序补充完整。

Private Sub command1_click()

Dim conn As New ADODB.Connection, rs As New ADODB.Recordset

Dim strSQL As String

Dim a,b,c as string

Dim n as integer

conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + App.Path + "\        ①              "

 conn.Open

strSQL ="select * from data"

 Set rs.ActiveConnection = conn    

  rs.Open strSQL 

  Label1.Caption = ""

c=val(text1.text)

n=0

rs.movefirst

Do while not rs.EOF

n=n+1

a=rs.Fields("xm")

           ②       

If c= rs.Fields("kh") then

Label1.caption=a+ "的卡内余额为"+b+"元"

Exit if

else

rs.movenext

end if

loop

if n=500 then Label1.caption=”查无此人”

rs.close

  conn.close

set rs=nothing

set conn=nothing

 End Sub

  1. (1) 程序中①划线处应填入
  2. (2) 程序中②划线处应填入
【加试题】小林和小王合作编写一个查询英语单词的VB程序:小林编写一个过程,单击“读取数据库”按钮Command1,从一个数据库中读取英语单词和中文含义,分别保存在a数组和b数组中。并显示在List1中;小王编写另一个过程,在文本框Text1中输入要查询的单词,单击“查询”按钮Command2,将查询单词的中文含义显示在Text2中,程序界面如图所示。

  1. (1) 分析程序,“英语单词”和“中文含义”被保存在数据表中。
  2. (2) 按此要求编写的程序如下,请在画线处填入合适的代码。

    Const n=3500               ’存储单词的总数

    Dim a(1 To n)As String      ’依次存储每个英语单词

    Dim b(1 To n) As Strin9    ’依次存储每个英语单词的中文含义

    Private Sub Command1_Click()

      Dim Conn As New ADODB.Connection

      Dim rs As New ADODB.Recordset

      Dim strSQL As String

    conn.ConnectionString=“Provider=Microsoft.ACE.OLEDB.12.0;Data source=”&App.Path&“\dictionary1.accdb”

      strSQL=”select*from list”

      conn.Open

      Set rs.ActiveConnection=conn

      rs.Open strSQL

      num=0

      Do While Not rs.EOF

           num=num+1

           a(mum)=rs.Fields(“英语单词”)

           b(num)=rs.Fields(“中文含义”)

           rs.MoveNext

      Loop

      rs.Close

      conn.Close

      Set rs=Nothing

      Set conn=Nothing

      For i==1 To n

             List1.AddItem a(i)+“  ”+b(i)

      Next i

      End Sub

      Private Sub Command2_Click()

      Dim s As String

      S=Text1.Text

      If search(s)=-1 Then

              Text2.text=“找不到该单词”

      Else

              Text2.Text=   ①  

      End If

      End Sub

      Function search(key As String)As Integer

      Dim i,j As Integer

      Dim mid1,mid2 As Integer

      i=1:j=n

      search=-1

      Do While i<=j

           mid1=Int(j+(j—i)/3)

           mid2=Int(j-(j-i)/3)

           If key=a(mid1)Then

                search=mid1

                Exit Do

           ElseIf key<a(mid1)Then

                j=mid1-1

           ElseIf key=a(mid2)Then

                search=mid2

                Exit Do

           Elself key>a(mid2)Then

                i=mid2+1

           Else

                i=mid1+1

                   ②  

           End If

     Loop

    End Function

        ②  

小杰为学校教务处编写了一个排考场座位的VB程序,考场采用“6排5列”共30人的模式,程序执行后,考生的考号与姓名显示在列表框List1中,单击“考场座位”按钮,考场号与座位显示在Text1中,程序运行界面如图所示,数据表如图

图片_x0020_100020   图片_x0020_100021

实现上述功能的VB程序如下,请回答下列问题:

  1. (1) 程序中读取的数据库文件是
  2. (2) 当“Form_load() 事件处理过程运行结束后,变量x的值为
  3. (3) 请在划线处填入合适的代码

    Dim sName(100) As String

    Dim kh(100) as string

    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

    Dim kcsName(100) As String

    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 conn As New ADODB.Connection

    Dim rs As New ADODB.Recordset

    conn.ConnectionString = "provider=microsoft.ace.oledb.12.0;data source=" & App.Path & "/kaochang.accdb"

    conn.Open

    Set rs.ActiveConnection = conn

    rs.Open "select * from banji"

    x = 1

    List1.AddItem " 考号  姓名"

    Do While Not rs.EOF    '

    kh(x) = rs.fields("kh")

    sName(x) = rs.fields("xm")

    List1.AddItem kh(x) + "  " + sName(x)

    x = x + 1

    rs.MoveNext

    Loop

    rs.Close

    End Sub

某学校开设多样化选修课程,学生可以根据个人兴趣和特长选择选修课。假设每门选修课的选课人数不超过40,学生选课的相关信息存放在数据库文件“student.accdb”的data 表中,选课查询程序运行时界面如图所示。

程序功能:在文本框Text1中输入课程号,单击“查询”按钮Command1,在列表框List1中显示选修本课程的学生信息。如果没人选修该课程显示“该课程当前无人报名”。

按此要求将程序补充完整。

Private Sub command1_click()

Dim xh(1 to 40),xm(1 to 40) As String ’学号和姓名的数组

Dim i, num as integer

 Dim conn As New ADODB.Connection,rs As New ADODB.Recordset

 Dim strSQL As String

conn.ConnectionString=“Provider=Microsoft.ACE.OLEDB.12.0;DataSource=”+App.Path+“ \      ①           ”                 ‘打开到数据库的链接

conn.Open

strSQL=”select xh,xm from     ②     where    ‘课程&(Text1.Text)&’”

‘设置查询的SQL 语句

Set rs.ActiveConnection =conn   ‘设置rs的ActiveConnection属性,指定与其关联的数据库链接

 rs.Open strSQL    ‘打开记录集,将从表student中读取的结果集保存到记录集rs中

 List1.Clear

 num=0

 Do while not rs.EOF

 num=num+1

  xh(num)= rs.Fields(“xh”)

  xm(num)= rs.Fields(“xm”)

  rs.MoveNext

 loop

 rs.Close

 conn.close

 set rs=nothing

 set conn=nothing

 For i=1 to num

list1.additem xh(i)+””+xm(i) Next i

    if num=0 then list1.additem(“该课程当前无人报名”)

End Sub

  1. (1) 程序中①划线处应填入
  2. (2) 程序中②划线处应填入
某单位招考公务员,2010年和2011年分别有4 020名和2 000名考生报名,下列VB程序用于统计两次考试都参加的考生信息。程序界面设计如图所示,2010年和2011年的考生信息分别显示在List1和List2中,点击“统计”按钮,在List3中显示两次考试都参加的考生信息和总人数。

  1. (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+“\data\KaoSheng.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. (2) 分析上述代码,在数据库中用于存放考试信息的数据表名称是
在VB中连接并读取Access数据库文件通常使用以下代码:

Dim conn As New ADODB Connection

Dim rs As New ADODB. Recordset

Dim n as Integer

Private Sub Form_Load ( )

conn. ConnectionString ="Provider= Microsoft. Ace. OLEDB. 12.0;

data source =" + App. Path + " \data \data. accdb"    ‘ 此处内容在同一行中,因印刷排版限制而换行

conn. Open

sqI = “select * from student”

Set rs. ActiveConnection = conn

rs. Open sql

n=0

Do while Not rs. EOF

  Call read ( )

  n=n+1

  rs. MoveNext

Loop

End sub

sub read ( )

  List1.AddItem rs ("name")

End sub

运行上述程序,以下说法不正确的是(  )

A . 当前读取的数据库文件为data目录下的data.acdb B . 数据库中存在一个名为student的数据表 C . List1列表框中将显示所有name字段的值 D . 当前读取的数据表中总记录数为n-1
关于Visual Basic程序与数据库的连接,下列法正确的是(  )
A . “Select * from info” 中的“info”是数据库文件名 B . rs.MoveNext中的MoveNext是记录集对象rs属性 C . rs. Fields (1)读取的是当前记录的第1个字段内容 D . 若记录集为空,则该记录集的EOF属性值为true
以下VB。程序段用于读取某数据库中的数据,相应数据表结构如图所示。

Dim adoConn As New ADODB.Connection

Dim adoRs As New ADODB.Recordset

Dim a(1 To 1000)As String,b(1 To 1000)As Integer

adoConn.ConnectionString=" provider=Microsoft.ACE.OLEDB.12.

0:datasource="& App.Path& " \mydata.Accdb "

adoConn.Open

Set adoRs.ActiveConnection= adoConn

adoRs.Open "Select * From Score"

n=0

Do While Not adoRs.EOF

  n=n+1

  a(n)= adoRs.Fields("学号").Value

  b(n)= adoRs.Fields(3).Value

adoRs.MoveNext

Loop

adoRs.Close:adoConn.Close

下列对于该程序段的理解正确的有(  )

①程序连接的数据库文件名是“\mydata.accdb”

②程序打开的数据表名称是“Score”

③程序将数据表中的数学成绩存入数组b

④程序运行后,变量n的值表示该数据表中记录的总数

⑤关闭数据表的语句为adoConn.close

A . ①②④ B . ②③④ C . ②④⑤ D . ②③④⑤
有如下VB程序段

Dim conn As New ADODB.Connection

Di mrs As New ADODB.Recordset

conn.ConnectionString=“Provider=Microsoft.ACE.OLEDB.12.0;DataSource=” & App.Path & “\词库.accdb”

conn.Open

Set rs.Active Connection=conn

rs.Open “SELECT*FROM words”

n=0

Do While Not rs.EOF

   n=n+1

   en(n) =rs.Fields(1)

  ch(n) =rs.Fields(2) 

  rs.MoveNext

Loop

rs.Close

conn.Close

下列说法中正确的是(  )

①连接的数据库文件名是“\词库.accdb”

②程序运行后,变量n的值表示该数据表中记录的总数

③数组en(n)所存储的是数据表第2个字段的字段值

④“ConnectionString”是conn对象的属性值

⑤查询的数据表名称是“words”

⑥省略语句“rs.MoveNext”,程序也可以正常运行

A . ①④⑤ B . ③④⑥ C . ②③⑤ D . ②③④
某个VB应用程序中使用如下代码读取数据库中的信息:

Dim conn As New ADODB. Connection

Dim rs As New ADODB. Recordset

Dim n as Integer

Private Sub Form_ Load()

conn. ConnectionString ="Provider= Microsoft.Ace.

OLEDB.12.0; data source ="+App. Path+"\data\data. accdb"

conn. Open

sql="select*from student"

Set rs. ActiveConnection=conn

rs. Open sql

n=0

Do while Not rs. EOF

List1.AddItem rs("name")

n=n+1

rs. MoveNext

Loop

End Sub

运行上述程序,以下说法不正确的是(    )

A . 当前读取的数据库文件是Data文件夹中的data.accdb文件 B . 数据库中存在一个名为student的数据表 C . List1列表框中将显示指定的数据表中所有记录name字段的值 D . 窗体加载完成后,读取的数据表中总记录数为n-1
某校老师编写一个VB程序分析学生技术成绩,功能如下:在列表框List1中显示原始学生信息,单击“分析”按钮Command1,统计各班参加考试人数、高分(97及以上)人数和均分,并按班级均分从大到小显示在列表框List2中,程序运行界面如图所示。

实现上述功能的VB程序段如下,请回答下列问题:

  1. (1) 学生成绩存储在数据表中,其字段名是
  2. (2) 请在划线处填入合适的代码。

    Dim recCount As Integer            '存放学生人数

    Dim sClass(1 To 1000) As Integer     '存放学生班级

    Dim sName(1 To 1000) As String     '存放学生姓名

    Dim sScore(1 To 1000) As Integer   '存放学生成绩

    Private Sub Command1_Click()

      Dim i As Integer, t As Integer, nc As Integer

      Dim a(1 To 20)  As Integer, b(1 To 20) As Integer    '分别存放班级高分人数和班级参加考试人数

      Dim sum(1 To 20) As Integer, ave(1 To 20) As Single  '分别存放班级总分和班级均分

      Dim c(1 To 20) As Integer

      For i = 1 To recCount

        

        b(t) = b(t) + 1

        If b(t) = 1 Then

          nc = nc + 1

          

        End If

        If sScore(i) >= 97 Then a(t) = a(t) + 1

        sum(t) = sum(t) + sScore(i)

      Next i

      For i = 1 To nc

        ave(c(i)) = Int(sum(c(i)) / b(c(i)) * 100 + 0.5) / 100

      Next i

      For i = 1 To nc - 1

        For j = nc To i + 1 Step -1

          If  Then

            t = c(j): c(j) = c(j - 1): c(j - 1) = t

         End If

        Next j

      Next i

      For i = 1 To nc

        List2.AddItem Str(c(i)) + " " + Str(b(c(i))) + " " + Str(a(c(i))) + " " + Str(ave(c(i)))

      Next i

    End Sub

    Private Sub Form_Load()

    '链接数据库,代码略

    recCount = 0

      Do While Not rs.EOF

        recCount = recCount + 1

        sClass(recCount) = rs.Fields("class")

        sName(recCount) = rs.Fields("name")

        sScore(recCount) = rs.Fields("score")

        rs.MoveNext

      Loop

    '将数据显示在列表框List1中,代码略

    End Sub

某学校要对班主任进行满意度调查,有20个评分项(为方便程序处理,评分项具体的名称本题中不显示,仅以序号代替),每个评分项学生可以打A、B、C 三个等级中的一个,现在已经收集所有学生对班主任的评价,为了保证隐私,不显示学生姓名,只显示班级,并存储在数据库的表中,点击command2(读取数据),读取原始数据显示在左侧list1中,左侧列表显示的原始评价数据第一条表示高二(01)班有1位同学在第9项给班主任打A,依次类推,点击command1(统计),统计出各项目的评价统计(A+B所占的百分比)。

  1. (1) 根据以下代码可知,本程序访问的数据库名称是
  2. (2) 完成划线处的代码填空:

    Dim classname(1 To 8000) As String       '存储原始数据中的班级名称

    Dim selectabc(1 To 8000) As String        '存储原始数据选项的值

    Dim xiangmu(1 To 8000) As String         '存储原始数据选项的序号

    Dim n As Integer

    Private Sub Command2_Click()             '从数据库读取数据,并且按班级名称排序

    Dim conn As New ADODB.Connection

    conn.ConnectionString = "provider=microsoft.ace.oledb.12.0;data source="&App.Path&"\pingjia.accdb"

    conn.Open

    Dim rs As New ADODB.Recordset

    Set rs.ActiveConnection = conn

    rs.Open "select * from data"

    n = 0' 记录评价的总条数

    '读取数据,并按班级排序,代码略

    End Sub

    Private Sub Command1_Click()

      Dim cstart(1 To 50) As Integer       '存储每个班级在数组classname中的起始位置

      Dim cend(1 To 50) As Integer        '存储每个班级在数组classname中的末尾位置

      Dim k As Integer                   '存储班级数量

      Dim testall(1 To 20) As Integer          '存储每一项总选择人数,例如testall(1)里存储这评价项目1里的总人数,testc(1)里存储评价项目1里选C的人数

      Dim testc(1 To 20) As Integer          '存储每一题(项)选c的人数

      '确定每个班级的起止位置,存储到cstart数组和cend数组

      cstart(1) = 1

      temp = classname(1)

      k = 1

      For i = 1 To n

        If classname(i) <> temp Then

          

          k = k + 1

          cstart(k) = i

          temp = classname(i)

        End If

      Next i

      cend(k) = n

      For i = 1 To k             '每个班级分别统计评价项目

        

        For q = 1 To 20          '对testall和testc数组初始化

          testall(q) = 0

          testc(q) = 0

        Next q

        For j = cstart(i) To cend(i)           '对第i个班级进行统计

          testall(xiangmu(j)) = testall(xiangmu(j)) + 1\

          If selectabc(j) = "C" Then 

        Next j

        For p = 1 To 20       '统计完成后输出这个班级的20个项目的A+B所占百分比

          s = s &""&Str(Round((testall(p) - testc(p)) / testall(p) * 100, 1))

        Next p

        List2.AddItem s

      Next i

    End Sub

如下代码将记录集rs中“售价”字段的数据通过循环依次存入数组a中。

i=0

Do While Not rs. EOF

    i=i+1

    a(i)=rs. Fields("售价")

    rs. MoveNext                  ‘①

Loop

若记录集rs共有10条记录,执行循环前,当前记录为第1条。循环结束后,①处代码共执行的次数为(  )

A . 8次 B . 9次 C . 10次 D . 11次
某校秋季运动会共有n名运动员参赛,小明编写了根据号码牌查询学生信息的程序,输入号码牌就能查询该号码牌所属的班级和选手姓名。数组a,b,c分别保存了本次运动会所有选手的号码牌、班级、姓名信息。第i个选手的号码牌保存在a(i)中,对应的班级和姓名保存在b(i)和c(i)中。程序界面如图所示,在文本框Text1中输入号码牌,单击“查询”按钮(Command1),如果找到对应的信息,就显示所属班级和选手姓名;如果没有找到,则显示“未找到”。

  1. (1) 分析程序,可知数据库的文件名为,当前数据表的名称为
  2. (2) 填入适当的代码,把程序补充完整。

    Dim n As Integer     ‘用于存储运动员总人数

    Dim a(1000)As Integer, b(1000)As String, c(1000)As String

    Private Sub Form_Load( )

      Dim conn As New ADODB. Connection

      Dim rs As New ADODB. Recordset

      conn. ConnectionString ="Provider =Microsoft. Jet. OLEDB. 4.0;DATA Source=" &App. Path & "\sport.accdb"

        conn.Open

        Set rs. ActiveConnection=conn

        rs.Open"Select*from号码牌"

        Do While Not rs. EOF  ‘到记录集rs的最后一条记录后退出循环

          n=n+1

          a(n)=rs. Fields("号码牌")    ‘读取当前记录“号码牌”字段值

          b(n)=     ①                ‘读取当前记录“班级”字段值

          c(n)=rs. Fields("姓名")      ‘读取当前记录“姓名”字段值

              ②                        ‘移动到下一条记录

        Loop

    ‘号码牌按升序排序后,显示在列表框List1中,其他代码略

    End Sub

    Private Sub Command1_Click( )

        Dim x As Integer

        x=Val(Text1.Text)

        pos=        ③         

        If pos>0 Then

          Text2.Text=b(pos):Text3.Text=c(pos)

        Else

          Text2.Text="未找到"

        End If

    End Sub

      Function Search(Key As Integer)As Integer

        Dim i As Integer,j As Integer

        i=1:j=n:Search=0

        Do While i<=j

            m=Fix((i+j)/2)

            If Key=a(m)Then

                Search=m:Exit Function

            ElseIf   ④   Then

                j=m-1

            Else

                i=m+1

            End If

        Loop

    End Function

    以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③;④

居民身份证号码由十七位数字和一位校验码组成。从左至右依次为:六位地址码,八位出生日期码,三位顺序码和一位校验码。校验码生成规则:把身份证前 17 位的每一个数字和一串加权因子相乘后累加求和;将求得的和与11做取余运算得到校验码序号,最后在校验码字符串中提取与序号相对应的字符作为校验码。具体步骤如下:

⑴计算校验码序号:根据公式∑(ai×Wi) Mod 11 (i=2~18)计算得到校验码的序号;

其中:i:表示号码字符的位置序号,身份证号左边开始第1位的位置序号为18,第2位为17,依次类推,……最后一位的序号为1;

ai:表示第i位置上的号码字符的值;

Wi:示第i位置上的加权因子,通过公式w(i) = 2 ^ (i - 1) Mod 11计算得到。

⑵提取校验码字符:根据步骤(1)得到的序号提取对应的校验码字符。对应关系如下表所示,如:序号0对应校验码“1”,序号1对应校验码“0”。

序号

0

1

2

3

4

5

6

7

8

9

10

校验码

1

0

X

9

8

7

6

5

4

3

2

若步骤(2)中提取到的校验码值和身份证号最后一位相同,则校验通过,否则校验失败(即身份证号有误)。

根据上述原理设计了一个身份证校验VB程序,功能如下:程序启动时从数据库student.accdb中读入学生身份证数据(共15个班级),并在列表框List1中显示,单击“校验”按钮Command1,在列表框List2中输出身份证号有误的班级、出错人数以及出错的学生信息。

实现上述功能的VB程序如下,请回答下列问题:

  1. (1) 分析程序,可知存放学生身份证信息的数据表为
  2. (2) 请在划线处填入合适的代码。

    Const max = 1000

    Dim n As Integer    '存放学生人数

    Dim sfzh(1 To max) As String, xm(1 To max) As String

    Dim bj(1 To max) As Integer, flag(1 To max) As Boolean, cw(1 To 15) As Integer

    Function check(x As String) As Boolean

      Dim jym As String

      Dim i As Integer, sum As Integer, xh As Integer

      Dim a(1 To 18) As Integer, w(1 To 18) As Integer

      jym = "10X98765432"

      For i = 18 To 2 Step -1

        a(i) = Val(Mid(x, 19 - i, 1))

      Next i

      For i = 18 To 1 Step -1

        w(i) = 2 ^ (i - 1) Mod 11

      Next i

      sum = 0

      For i = 2 To 18

       

      Next i

      xh = sum Mod 11

      If Mid(jym, xh + 1, 1) = Mid(x, 18, 1) Then

        check = True

      Else

        check = False

      End If

    End Function

    Private Sub Form_Load()

      Dim conn As New ADODB.Connection

      Dim rs As New ADODB.Recordset

      Conn.ConnectionString = "provider=Microsoft.ace.oledb.12.0;data source=" + App.Path + "\student.accdb"

      Conn.Open

      Set rs.ActiveConnection = conn

      rs.Open "select * from stu_info"

      '本过程其余代码实现读取学生的身份证号、姓名和班级分别存数组sfzh、xm和bj中,并在列表框List1中显示,学生人数存变量n中。代码略

    End Sub

    Private Sub Command1_Click()

      Dim i As Integer, j As Integer

      List2.Clear

      For i = 1 To n

        If  Then

          flag(i) = True

        Else

          flag(i) = False

        End If

      Next i

      For i = 1 To 15

        cw(i) = 0

      Next i

      For i = 1 To 15

        For j = 1 To n

          If  Then

            cw(i) = cw(i) + 1

            List2.AddItem sfzh(j) + "  " + adj(xm(j), 3)

          End If

        Next j

        If cw(i) > 0 Then

          List2.AddItem Str(i) + "班共有以上" + Str(cw(i)) + "个身份证号错误"

        End If

      Next i

    End Sub

小明利用所学的信息技术知识帮助语文老师设计一个语文学考等级查询系统,要求如下:输入某个等级,就能查出该等级的所有学生学号和姓名,并统计出该等级学生的人数,以便语文老师方便了解学生的学考情况。语文学考成绩分A、B、C、D、E五个等级,学生信息存储在数据库文件“stugrade.accdb”的数据表“Chinese”中,数据表“Chinese”的结构如图所示。

VB程序运行界面如图所示,在文本框Text1中输入查询的等级,单击“查询”按钮Command1,在列表框List1中显示所有该等级的学生学号和姓名,并按照学号从小到大排序,并在标签Label2 处显示学生的人数,如果人数为0,则在列表框中显示“没有该等级的学生”。按此要求编写程序如下,在划线处填上合适的代码。

Private Sub Command1_Click()

    Dim stuna(1 To 100) As String    '存放学生姓名的数组定义为stuna

    Dim stunum(1 To 100) As String    '存放学生学号的数组定义为stunum

    Dim i As Integer, j As Integer, n As Integer

    Dim t As String

    Dim cn As New ADODB. Connection

    '连接数据库

    Dim rs As New ADODB. Recordset

    Dim strSQL As String

    cn.ConnectionString =“Provider=Microsoft. ACE. OLEDB. 12. 0; Data Source=”+App. Path+“\stugrade. accdb”

    cn. Open

    strSQL=“select * from  where语文等级=‘ ”+Text1. Text+“’”

    Set rs. ActiveConnection= cn

    rs. Open strSQL

    n=0

    Do While Not rs. EOF   

        

        stuna(n)= rs. Fields(“姓名”). Value

        stunum(n)=rs. Fields(“学号”). Value

        rs. MoveNext

    Loop

    rs.Close

    cn.Close

    Set rs= Nothing

    Set cn= Nothing

        List1. Clear       '清除列表框

    If n=0 Then

        List1. AddItem“没有该等级的学生”

    Else

        For i=1 To n-1       '按学号排序

            For j=n To  Step - 1

                If  Then

                    t= stunum(j) : stunum(j) =stunum(j- 1) : stunum(j- 1)=t

                    t= stuna(j) : stuna(j) = stuna (j- 1) : stuna(j- 1)=t

                End If

            Next j

        Next i

        For i=1 To n

            List1. AddItem stunum(i)+“”+stuna(i)

        Next i

        Label2. Caption=“该等级的学生共有”+Str(n)+“名”

    End If

End Sub

编写一个技术成绩查询的VB程序。程序功能如下:在文本框Text1中输人分数key(0~ 50的整数),单击“查询”按钮Command1,查询出信息成绩大于等于key的所有记录,并以“信息”为主要关键字、“通用”为次要关键字均进行降序排序,结果输出在列表框List2 中。运行界面如图所示。

实现上述功能的VB程序如下,请回答下列问题:

Dim xm(1 To 600) As String      '存储学生姓名

Dim xx(1 To 600) As Integer      '存储信息成绩

Dim ty(1 To 600) As Integer      '存储通用成绩

Dim n As Integer      '存储记录总数

Private Sub Form_ Load()

    '本过程从数据库中读取学生数据,存储在相应的变量中,并在List1中显示

    '代码略

End sub

Private Sub Command1_ Click()

    Dim key As Integer,mid As Integer

    Dimi As Integer, L As Integer, R As Integer, k As Integer

    Dim tmpl As Integer, tmp2 As Integer

    '以“信息”为主要关键字、“通用”为次要关键字排序

    For i=1 To n-1

        k=i

        For j=i+1 To n

            If xx(k)< xx(j) or    ①    Then

                k=j

            End If

        Next j

        If k<>i Then

            tmp1= xm(k) : xm(k)= xm(i) : xm(i)= tmp1

            tmp2 = xx(k): xx(k)=xx(i) : xx(i) = tmp2

            tmp2= ty(k) : ty(k)= ty(i) : ty(i) = tmp2

        End If

    Next i    '查询记录

    key= Val(Text1. Text)

    L=1 : R=n

    Do While L<=R

        mid=(L+R) \ 2

        If     ②     Then

            L= mid+1

        Else

            R= mid- 1

        End If

    Loop

    List2.Clear

    'vbTab相当于是键盘上制表符TAB按键的功能

    List2. AddItem“姓名”& vbTab &.“信息”&vbTab&“通用”

    For i=1 to    ③   

        List2. AddItem xm (i) & vbTab & xx(i) & vbTab & ty(i)

    Next i

End sub

  1. (1) 观察上图,排序后第5位的学生姓名是
  2. (2) 请在划线处填入合适的代码。

     ② ③ 

小明基于Flask Web框架编写了“最喜欢诗人评选”的程序,“评选结果”页面如图a所示,“参加评选”页面如图b所示。评选规则:当推选的诗人已经存在时,将其热度值增加1;否则添加该诗人的记录,并将其热度值设为1。

图a

图b

采用SQLite3设计数据库data.db,其中info表包括两个字段:

段名

数据类刑

poet

text

heat

integer

  1. (1) 根据题意,数据库“data.db”的“info”表中“poet”字段用于存放 (单选,填字母:A .诗人的姓名 / B .诗人的热度值)。
  2. (2) 实现上述功能的Python程序部分代码如下,请选择▲处的代码 (单选,填字母:A .CREATE TABLE info / B .INSERT INTO info / C .SELECT * FROM info)。

    @app.route('/')

    def view( ):

    #按热度值降序查询info表中记录,并渲染“view.htm”网页模板显示结果,代码略

    @app.route('  ①   ', methods=['GET','POST'])

    def selectpoet():

    if request.method=='POST':

    x=request.form['xm'] #获取图b所示文本框中输入的内容

    conn=sqlite3.connect('data.db')

    cur=conn.cursor()

    cur.execute("  ▲   where poet='%s'" %x) #查询当前诗人记录

    data=cur.fetchall()

    if data:        #当data非空时,则表示所推选的诗人已经存在,将其热度值增1 y=data[0][1]+1

      cur.execute("update info set heat=%d where poet='%s'" %(y,x))

    else:

      cur.execute("insert into info(poet,heat) values('%s',%d)" %(    ②    ))

      conn.commit( )

      cur.close( )

      conn.close( )

    return '评选成功!'

    else:

      return render_template('select.htm')

    if __name__=='__main__':

      app.run()

  3. (3) 请在划线处填入合适的代码。

使用Python语言对SQLite数据库进行操作,实现创建名为my.db的数据库文件以及user表的语句如下。

①import sqlite3;

②conn.commit( );

③c.execute(sql);

④c.close( );⑤conn.close();

⑥c = conn.cursor( );

⑦conn = sqlite3.connect("my.db")

⑧sql = "CREATE TABLE user(username TEXT,password TEXT)"

语句执行的先后顺序正确的是(    )

A . ①⑦②⑧③④⑤⑥ B . ①②⑦⑥⑧③④⑤ C . ①②⑦③⑥⑧④⑤ D . ①⑦⑥⑧③②④⑤