VB应用程序界面如上图所示,在文本框text1中输入查询的日期(以月日形式,如0623),单击“查询”按钮,在列表框中显示所有这个日子出生的员工姓名(按姓名排序),并在Label3处显示员工数量,如果人数为0,则在列表框中显示“本天没有员工生日”。
解决此问题的VB程序如下,阅读程序并完成后面的问题。
‘定义存放员工姓名的数组na
Private Sub CmsqClick()
Dim n As Integer , i As Integer , j As Integer
Dim t1 As String
‘连接数据库获取数据
Dim cn As new connection
Dim rs As new recordest
Dim str1 As String , str2 As String
str1 =”driver=Microsoft access driver(*.mdb)”;dbq=”&app.path”&”员工信息.mdb”
cn.open str1
str2 = “select * form members where 生日 =’“ + text1.text + ”’”
rs.open str2 , cn.adOpenDynamic ,adLockOptimistic
n = 0
Do While Not Rs.EOF
n = n + 1
na(i) = rs.Fields(“姓名”).value
rs.MoveNext
Loop
rs.close
cn.close
‘按姓名排序
If n = 0 Then
List1.AddItem “本天没有员工生日”
Else
For i = 1 to n-1
For j = 1 to n+1 Step -1
If na(j) < na(j-1) Then
t1 = na(j) : ① : na(j-1) = t1
End If
Next j
Next i
For i = 1 to n
List1.AddItem ②
Next i
Label3.Caption = “这天共” + Str(n) + “位员工生日”
End If
End Sub
注: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
①把身份证前 17 位的每个数字和加权系数相乘并累加求和。身份证号码前17位数的加权系数见下表:
身份证号位数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
加权系数 | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 |
②根据步骤①求得的和值,与11做取余运算得到序号,再根据序号提取校验码字符。如:所得和值除以11的余数为“0”,则对应的校验码为“1”。如下表:
序号 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
校验码 | 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
若步骤②中提取的校验码和身份证号最后一位相同,则校验通过,否则校验失败。
某人根据上述原理设计了一个身份证校验VB程序,功能如下:程序启动时从数据库student.accdb中读入全校学生身份证数据(全校共15个班级),并在列表框List1中显示,单击“校验”按钮Command1,在列表框List2中输出各班身份证号出错学生的信息和出错人数,若某班无出错学生,则不显示。程序界面如图所示。实现上述功能的VB程序如下,请回答下列问题:
Const max = 1000
Dim n As Integer '存放学生人数
Dim sfzh(1 To max) As String, xm(1 To max) As String
'数组sfzh、xm分别存放学生身份证号、姓名
Dim bj(1 To max) As Integer, flag(1 To max) As Boolean
'数组bj、flag分别存放学生班级、身份证校验结果
Dim cw(1 To 15) As Integer '数组cw存放各班身份证号出错人数
Function check(x As String) As Boolean
'本函数功能:校验身份证号x,若校验通过返回True;否则返回False
Dim i As Integer, sum As Integer, xh As Integer, jym As String
Dim a(1 To 18) As Integer, w(1 To 18) As Integer
jym = "10X98765432" : sum = 0
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
For i = 2 To 18
sum = sum + a(i) * w(i)
Next i
xh = sum Mod 11
If = Mid(x, 18, 1) Then check = True Else check = False
End Function
Private Sub Form_Load()
'本过程从数据库中读入指定数据到数组sfzh、xm、bj,并在List1中显示
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"
'本过程其它语句略,学生人数存变量n,数组cw各元素初值置为0
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer
For i = 1 To n
If check(sfzh(i)) Then flag(i) = True Else flag(i) = False
Next i
For i = 1 To 15
For j = 1 To n
If bj(j) = i And flag(j) = False Then
List2.AddItem sfzh(j) + " " + xm(j)
End If
Next j
If cw(i) > 0 Then
List2.AddItem Str(i) + "班共有以上" + Str(cw(i)) + "个身份证号错误"
List2.AddItem ""
End If
Next i
End Sub
Dim kh(1 to 500) As string,cj(1 to 500) As Integer Dim n As Integer ‘参加考试总人数
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+”\BSCJ.accdb”
conn.Open
set rs.activeconnection=conn
rs.Open“select*FROM scoreinfo”
‘本过程其他代码略 End Sub
Private Sub Command1_Click()
Dim m As Integer,i As Integer,j As Integer
Dim t1 As Integer,t2 As String,flag As Boolean For i = 1 To n-1 ‘排序
For j = ① If cj(i)<cj(j) Then
t1 = cj(i):cj(i) = cj(j):cj(j) = t1
t2 = kh(i):kh(i) = kh(j):kh(j) = t2 Elseif cj(i) = cj(j) And kh(i) > kh(j) Then
t2 = kh(i):kh(i) = kh(j):kh(j) = t2
End If Next j
Next i
m = ②
If m <= n Then ‘统计进入面试人数
i = m
flag = False
Do While ③ If cj(i) = cj(i+1) Then
i = i+1 Else
flag = True End If
Loop
Text2.text = Str(cj(m)) Text3.text = Str(i)
For j = 1 To i
List2.AddItem kh(j) + “ ” + Str(cj(i)) Next j
Else
Text2.Text=”面试人数超过总人数了” End If
End Sub
② ③
①两位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程序如下,请回答下列问题:
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
实现上述功能的VB程序如下,请回答下列问题:
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
程序运行界面如题图所示。运行程序后,输入梯子高度a、手伸直高度b、可用力气s的值,单击“计算”按钮(Command1),在文本框Text4中输出小林最多能摘得的苹果数ans。
Dim c(1 To 100) As Integer
Dim h(1 To 100) As Integer
Dim d(1 To 100) As Integer
Dim n As Integer
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 + "\GameDate.accdb"
‘从数据库中读取n个苹果的摘取所需力气和高度存放在数组c和h中,并显示在List1中,代码略
End Sub
Private Sub Command1_Click()
Dim a As Integer, b As Integer, s As Integer
Dim i As Integer, j As Integer, m As Integer
a = Val(Text1.Text) ‘梯子高度
b = Val(Text2.Text) ‘手伸直高度
s = Val(Text3.Text) ‘可用力气
m = 0
For i = 1 To n ‘将所有能够摘得的苹果所需力气存储到数组d中
If
m = m + 1
d(m) = c(i)
End If
Next
For i = 1 To m - 1
k = i
For j = i + 1 To m
If Then k = j
Next
If k <> i Then
t = d(k): d(k) = d(i): d(i) = t
End If
Next
ans = 0 ‘用剩余的力气去摘最多的苹果
For i = 1 To m
If s >= d(i) Then
ans = ans + 1
End If
Next
Text4.Text = Str(ans)
End Sub
数组元素 |
数组元素的含义 |
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班每个学生的单科成绩 |
… |
|
… |
张老师依据数组a中的相关数据编写了VB程序来统计各班平均分。
程序功能如下:在文本框Text1中输入科目名称,单击“读取数据库”按钮Command1程序从数据库读取数据;单击“开始统计”按钮Command2程序进行统计处理,结果输出在列表框List1中。程序运行界面如图所示。
Dim a (1 To 600) As Integer数组大小满足处理要求 Private Sub Command1_Click ( )
‘本过程从数据库读取指定科目的各相关数据,存储在数组a中
‘本过程语句略
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)+ “” n+ str(a(i+1)) + “” + Str(aver)
Next i
End Sub
① ②
Dim conn As New ADODB Connection
Dim rs As New ADODB. Recordset
conn ConnectionString =“Provider = Microsoft. ACE. OLEDB. 12.0; DATA Source =" & App. Path &"\ data accdb”
Set rs.ActiveConnection = conn
rs. Open “select * from table”
n = 0
Do While Not rs EOF
n=n+1
rs.MoveNext
Loop
下列对于以上代码的理解正确的有( )
①连接的数据库文件名是“data”
②“ConnectionString”是conn对象的属性值
③查询的数据表名称是“table”
④程序运行后,变量n的值表示该数据表中记录的总数
⑤省略语句“rs. MoveNext”,程序也可以正常运行
数组元素 |
数组元素的含义 |
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程序如下,请回答下列问题:
Dim a(1 To 600)As Integer '数组大小满足处理要求
Private Sub Command 1_Click()
'本过程由小王完成,从数据库读取指定科目的各相关数据,存储在数组a中
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString =" provider = Microsoft. ACE.
OLEDB.12.0;datasource="+"Score.Accdb"
conn.Open
Set rs.ActiveConnection=conn
'本过程的其他语句略
End Sub
Private Sub Command 2_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)
Listl. Addltem Str(i)+""+Str(a(i+1))+""+Str(aver)
Next i
End Sub
① ②
①按分数从高到低排序。若分数相同,则按学号进行升序排序。
②以班级为单位,排出从1号开始的机房座位表。章老师编写了一个位置编排功能的VB程序,在文本框Text1中输入班级名称,单击“读数据库”按钮Command1后,从数据库读取数据并显示在列表框List1中;单击“编排”按钮Command2,在列表框List2中输出学号、姓名、成绩和位置信息。运行界面如下图所示。
实现以上功能的 VB 程序如下,请回答下列问题:
Dim n As Integer
Dim xh(1 To 40) As Integer, xm(1 To 40) As String, cj(1 To 40) As Integer
Private Sub Command1_Click()
'本过程在文本框 Text1 中输入班级名称,从数据库中读取指定班级的学号、姓名和成绩的'数据分别存储在数组 xh,xm 和 cj 中
Dim conn As New ADODB.Connection
conn.ConnectionString = "provider=microsoft.ace.oledb.12.0;data source="
+ App.Path + "\js.accdb"
conn.Open
Dim rs As New ADODB.Recordset rs.ActiveConnection = conn
rs.Open "select * from 技术"
'本过程的其他语句略
End Sub
Private Sub Command2_Click()
Dim wz(1 To 40) As Integer
Dim i As Integer, j As Integer
List2.AddItem "学号" & " " & "姓名" & " " & "成绩" & " " & "位置"
For i = 1 To n
①
Next i
For i = 1 To n
For j = 1 To n
If ② Then wz(i) = wz(i) + 1
End If
Next j
List2.AddItem adj(Str(xh(i))) + adj(xm(i)) + adj(Str(cj(i))) + adj(Str(wz(i)))
Next i
End Sub
Function adj(c As String) As String '固定输出5个字符长度
Dim i As Integer
③
For i = 1 To 5 - Len(c)
adj = adj + " "
Next i
End Function
① ② ③
第一步:建立与的连接;第二步:根据需要;第三步:访问记录集,;第四步:根据需要把处理好的数据中;第五步:与数据库的连接。
Dim conn As ADODB.Connection
Dim rs As New ADODB.Recordset
Dim a(1 To 100) As String
conn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;data Source=" & App.Path & "\Mydata.accdb"
Set rs.ActiveConnection = conn
rs.Open "SELECT * FROM book"
n = 0
Do While Not
a(n) = rs.Fields("name")
Loop
上述程序段中方框处可选语句为:
①n = n + 1 ②rs.MoveNext ③rs.BOF ④rs.EOF
则方框处语句依次可为( )
某VB应用程序的功能如下:程序运行时在列表框List中依次显示数据库表“info”中每个人的编号、每天的走路步数,单击“计算”按钮Command1后,在List2中依次显示每个人的编号和每个人平均走路步数(平均走路步数=三天的走路总步数/3),程序的运行结果如图所示。
代码如下:
Dim b(1 To 100)As String '定义存储编号的数组b
Dim m(1 To 100)As single '定义存储第一天的走路步数的数组m
Dim s(1 To 100)As single '定义存储第二天的走路步数的数组s
Dim w(1 To 100)As single '定义存储第三天的走路步数的数组w
Dim p(1 To 100)As Single '定义存储平均步数的数组p
Dim n As Integer '定义存储人数的变量n
Private Sub Command1_Click()
For i=1 To
p(i)=(m(i))+s(i)+w(i))/3
Next i
List2. Clear
For i=1 To n '在List2中显示每个人的编号和平均步数
List2. AddItem b(i)+ "平均走路步数为"+ +"步"
Next i
End Sub
Private Sub Form_Load()
Dim conn As New ADOD
A.Connection '定义 Connection对象实例conn
Dim rs as New adode. Recordset '定义Recordset对象实例rs
conn. Connection String="provider= Microsoft. ACE OLEDB 12.0; DATA Source=" & App. Path & "\zoulu. accdb"
conn Open
rs. ActiveConnection=conn
rs Open "Select*From info"
n=0
Do While not rs.EOF
n=n+1
b(n)=rs. fields("id")
m(n)=rs. fields("mon")
s(n)=rs. fields("sue")
w(n)=rs. fields("wed")
rs. MoveNext
Loop
rs Close
conn. Close
Set conn=Nothing
Set conn= Nothing
List1. Clear
For i=1 To n '在 List1中显示每个人的编号、每天的走路步数
List1. AddItem b(i)+" "+Str(m(i))+" "+Str((i))+" "+Str(w(i))
Next i
End Sub
请回答下列问题:
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString="provider=Microsoft.ACE.OLEDB.12.0;data sourc="
+App.Path+"\socre.accdb"
Conn.Open
Set rs.ActiveConnection=conn
Rs. Open"Selec*from cj"
n=1
Do While Not rs.EOF
Score(n)=rs.fields("成绩"):Name(n)=rs.fields("姓名")
n=n+1:rs.MoveNext
Loop
下列说法中不正确的是( )
数据库文件“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
运行程序,点击“数据导入”按钮后,在列表框list1中显示所有数据。点击“排序"按钮,按总分从高到低计算名次(成绩相同的名次相同),并按排名先后在列表框list2中显示,数据要求对齐。程序运行界面如图16-1所示:
Dim cj(1 To 100) As Integer
Dim b(1 To 301) As Integer '分数为i的人数存入b(i)
Private Sub Cmdl_ Click( )
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString = "Provider =Microsoft.ACE.OLEDB.12.0;Data Source= " &App.Path& "\studentaccdb"
conn.Open
Set rs.ActiveConnection = conn
rs.Open "SELECT*FROM cj"
n =1
Do While Not rs.EOF
cj(n)= rs.Fields("语文"):cj(n+1) = rs.Fields("数学")
cj(n+2) = rs.Fields("英语"):cj(n+3) = cj(n)+cj(n+1)+cj(n+3)
rs.MoveNext
Loop
rs.Close:conn.Close
'此处代码略,用来实现将数据在list1中输出
End Sub
Private Sub paixu_ Click( )
Dim mc As Integer
'预处理求b数组的值
For j=4 To 100 Step 4
Next j
'以下程序用于计算名次并按要求对齐输出
mc=1:b(301)=0
List2.AddItem"语文"+"数学"+"英语"+"总分"+"名次
List2.AddItem "------------------------------------------------"
For i=300 To 1 Step -1
If b(i) <> 0 Then
For c=4 To 100 Step 4
If cj(c) = i Then
List2.AddItem
End If
Next c
End If
Next i
End Sub
'以下函数输出时数据s时,不足7位末尾补空格
Function gs(s As Integer) As String
Dim cd As String
ed = CStr(s)
For i=1 To 7 -Len(cd)
cd= cd+" "
Next i
gs = cd
End Function
Dim xm (1 To 1000) As String, bj(1 To 1000) As Integer
Dim tc1 (1 To 1000) As String, tc2(1 To 1000) As String ,n As Integer
Private Sub Form Load( )
'从数据库中按班级、学号有序地读取学生的姓名、班级、中午套餐、晚上套餐,依次存入xm、bj、tc1、tc2数组中,总人数存入n中,部分代码如下,其余代码略
Dim conn As New ADODB.Conncction
Dim rs As New ADODB.Recordset
conn ConncctionString = "provider=Microsoft.ACE.OLEDB.12.0;data source=" + "jiucan.accdb"
conn.Open
Set rs.ActiveConnection = conn
End Sub
Private Sub Command1_Click()
Dim k As Integer, i As Integer, t As Integer, m As Integer, s1 As String, s2 As Integer Dim zc (1 To 4) As Integer, wc (1 To 4) As Integer '用于统计套餐数量
Dim bs (0 To 20) As Integer , ljs (0 To 20) As Integer
t = Val (Text1. Text):m = 0
For i = 1 To 4 '为数组赋初始值
zc(i) = 0: wc(i) = 0
Next i
For i = 0 To 20 '为数组赋初始值
bs(i) = 0: ljs(i) = 0
Next i
For i = 1 To n – 1 '按班级编号进行升序排序
For j = i To n- 1
If bj(j) < bj(k) Then k = j
Next j
s1 = xm(i): xm (i) = xm (k): xm (k) = s1
s2 = bj(i): bj (i) = bj (k): bj (k) = s2
s1 = tc1(i): tc1 (i) = tc1 (k): tc1 (k) = s1
s1 = tc2(i): tc2 (i) = tc2 (k): tc2 (k) = s1
bs(bj(i)) = bs(bj(i)) + 1
If bs(bj(i)) = 1 Then
Next i
bs(bj(i)) = bs(bj(i)) + 1
For i = 1 To m
Next i
For i = ljs(t) - bs(t) + 1 To ljs(t)
zc(fx(tc1(i))) = zc(fx(tc1(i))) + 1
wc(fx(tc2(i))) = wc(fx(tc2(i))) + 1
Next i
'查询班级的用餐情况,在列表框 List 中输出,代码略
End Sub
Function fx(a As String) As Integer
End Function
解决此问题的算法流程图如下图所示:
相应的VB程序如下,在程序①和②划线处,填入适当的语句或表达式,把程序补充完整。
Dim cp(1 To 30000) As String
'存放已使用的车牌号码
Dim plate As String
'输入的自主编制车牌号码
Dim num As Integer
'已使用车牌号码的数量
Private Sub Command1_Click()
Dim f As Boolean, i As Integer, j As Integer, m As Integer
Label3. Caption=“”
i= 1:j= num
plate=“浙A”& Text1. Text
f= False
Do While (i <=j) And Not f
m=Fix((i+j) / 2)
If plate= cp(m) Then
f= True
Else
If plate<cp(m) Then
j=m-1
Else
①
End If
End If
Loop
If f Then
Label3. Caption=“车牌号码已被使用!”
Else
Label3. Caption=“选车牌号码成功!”
End if
End Sub
Private Sub Form_ Load( )
Dim conn As New ADODB. Connection,rs
As New ADODB. Recordset
Dim strSQL As String
conn. ConnectionString =“Provider = Mi-crosoft. ACE. OLEDB.12. 0;Data Source=” +App. Path+“\chepai. accdb”
conn. ( )pen
'设置查询的SQL语句,从数据表chepai 中选取number列数据,并按升序排序。
strSQL=“SELECT number FROM chepai order by number asc'
Set rs. ActiveConnection= conn
rs. Open strSQL
num=0
Do While ②
num= num+1
cp( num) = rs. Fields(“number”)
rs. MoveNext
Loop
rs. Close
conn. Close
End Sub
①②