试题

试题 试卷

logo

题型:综合题 题类:常考题 难易度:普通

浙江省诸暨市牌头中学2018-2019学年高二上学期信息技术期中考试试卷

某学校开设多样化选修课程,学生可以根据个人兴趣和特长选择选修课。假设每门选修课的选课人数不超过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)、程序中①划线处应填入
(2)、程序中②划线处应填入
举一反三
某超市举行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

小月设计了一个VB程序,用于对全班55名同学的体质调查分析,该程序能将55名同学的身高与体重录入到数据库中,之后通过如图所示的VB应用程序计算出这些同学的BMI指数,并按BMI指数从小到大进行排序,并显示这些学生的体质情况。

    注:BMI指数的计算公式为:BMI=体重(千克)除以身高(米)的平方(kg/m2)。 BMI<18.5为偏瘦(表明营养不足);BMI=18.5~24.9为体重正常;BMI=25~29.9为超重;BMI>30为肥胖。

该VB应用程序的代码如下:

Dim stuBMI(1 To 55) As Single

Dim stuName(1 To 55) As String

Private Sub Command1_Click()

    Dim k As Integer, i As Integer, j As Integer

    Dim t1 As Single, t2 As String

    Dim Results As String

    For i = 1 To 54        

        For j = i + 1 To 55

            If stuBMI(j) < stuBMI(k) then      ②    

        Next j

        If  k<>I  Then  

            t1 = stuBMI(i): stuBMI(i) = stuBMI(k): stuBMI(k) = t1

            t2 = stuName(i): stuName(i) = stuName(k): stuName(k) = t2

        End If

    Next i

List1.AddItem "姓名" + vbTab + "BMI指数" + vbTab + "结果"  

    For i = 1 To 55

        If stuBMI(i) < 18.5 Then

            Results = "偏瘦"

        ElseIf stuBMI(i) >= 18.5 And stuBMI(i) < 25 Then

            Results = "正常"

        ElseIf stuBMI(i) >= 25 And stuBMI(i) < 30 Then

            Results = "超重"

        Else

            Results = "肥胖"

        End If

        List1.AddItem stuName(i) + vbTab + str(stuBMI(i)) + vbTab + Results

    Next i

End Sub

Private Sub Form_load()

    Dim conn As New ADODB.Connection

    Dim rs As New ADODB.Recordset

    Dim strSQL As String

    Dim i As Integer

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

    conn.Open

    strSQL = "SELECT * FROM Student"

    Set rs.ActiveConnection = conn

    rs.Open strSQL

    i = 0

    Do While Not rs.EOF

        i = i + 1

        stuName(i) = rs.Fields("StuName")

        stuBMI(i) = Round(rs.Fields("Weight") / rs.Fields("height") ^ 2, 1)

        rs.MoveNext

    Loop

    rs.Close

    conn.Close

    Set rs = Nothing

    Set conn = Nothing

End Sub

编写一个成绩查找程序,只要输入成绩,即可输出其排名、同分数的人数以及比此分高的人数。具体算法思路如下:

⑴预处理。用数组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

⑵对需要查找的成绩二分查找。读入需要查找的成绩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={#blank#}1{#/blank#}    ‘名次增加1

    a(rank)={#blank#}2{#/blank#}   ‘存储当前分数到数组a中

    s(rank)={#blank#}3{#/blank#}   ‘求高于本分数的人数并存储至数组s

    b(rank)=1     ‘将自身统计入同分人数

   End If

     {#blank#}4{#/blank#}   ‘更新上一个分数

  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 {#blank#}5{#/blank#}

    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

学校需要统计学生的作业完成数,需要将学生的完成数按从高到低显示,下列程序模拟该信息处理过程,程序在数据库stud中找到的学生信息(编号和完成次数),并将所有学生按照完成数从高到低显示。先将所有学生的编号和完成次数从数据库stud的info表中ID和finshed两字段中取出分别保存在数组a和数组b中,第i个学生的编号保存在a(i)中,对应的作业完成次数保存在b(i)中。

数据库文件“stud. accdb”信息如图所示。

程序界面如图所示,左边列表框List1中显示所有学生信息(包括编号和完成次数),单击“排序”按钮(Command),所有编号按照作业完成次数从高到低显示在列表框List2中。

代码如下:

Dim conn As New ADODB. Connection

Dim rs As New ADODB. Recordset

Dim n As Integer

Dim a(500)As String

Dim b(500)As Integer

Private Sub Fom Load()

    Dim i As Integer

    conn. Connection String="Provider=Mi-crosoft. AC

    A.OLEDB. 12.0;DATA Source="& App. Path &"\stud. accdb"

    conn Open

    Set rs. Active Connection=conn

    rs. Open "Select*From info"

    n=0

    Do While not rs.EOF            '到记录集最后一条记录后退出循环

        n=n+1

        a(n)=rs. fields("id")

        b(n)=rs. fields("finshed")

        rs. MoveNext                 '移动到下一条记录

    Loop

    For i=1 To n

        List1. AddItem a(i)+" "+Str(b(i))

    Next i

    rs. Close

    conn. Close

    Set rs= Nothing

    Set conn= Nothing

End sub

Private Sub Command1_Click()

    Dim i As Integer, j As Integer, t1 As Integer, t2 As String, k As Integer

    For i=1 To n-1             'n表示学生总数

        k=i           'k保存第i大的数,一开始假定是a(i)

        For j=i+1 To n

            If b(k)<b(j) Then k=j            '比较完成数

                ①      

            If    ②      Then

                t1=b(i): b(i)=b(k): b(k)=t1           '交换完成次数

                t2=a(i): a(i)=a(k): a(k)=t2           '交换编号

            End If

        Next j

    Next i

    For i=1 To n          '在列表框List2中输出排序结果

        Listt2. Addltem a(i)+" "+Str(b(i))

    Next i

End sub

返回首页

试题篮