16.公司年會,領導要小李編寫一個小程序,用于抽獎,小李將參加年會的人員姓名、手機號保存在一個access數據庫中庫名:年會嘉賓.accdb 數據表名為:聯系人 程序設計的主要思路是:窗體裝入時讀出所有嘉賓的姓名和手機號,保存在兩個數據中,從text1中取得要抽獎的人數,用隨機函數產生1~num間的數作為中獎號,從數據中讀出對應的姓名和手機號,手機號中間4位用“新年快樂”代替.已抽中過的姓名和手機號從數據中刪除,以防止重復中獎. Dim sname(1To 1000)As String‘用于保存嘉賓姓名 Dim phone(1To 1000)As String‘用于保存嘉賓手機號 Dim num As Integer‘未抽獎人數 Private Sub Command1_Click ( ) Dim n As Integer‘擬抽獎人數 Randomize n=Val(Text1.Text) List1.Clear If
(1) Then For i=1To n k=Int(Rnd*num)+1 List1.AddItem Str(i)+““+sname(k)+““+
(2) For j=k To num sname(j)=sname(j+1) phone(j)=phone(j+1) Next j num=
(3) Next i Else List1.AddItem“剩余的數據不足!“ End If End Sub Rem 下列程序段用于從數據庫中讀取嘉賓的姓名和手機號,分別保存在全局變量sname ( )和phone ( )兩個數組中,設嘉賓個數不超過1000個. 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 &“\年會嘉賓.accdb“ conn.Open Set rs.ActiveConnection=conn rs.Open“select*from 聯系人“ num=0 Do While Not rs.EOF And num<1000 num=num+1 phone(num)=rs.Fields(“聯系電話“) sname(num)=rs.Fields(“姓名“) rs.MoveNext Loop rs.Close conn.Close Set rs=Nothing Set conn=Nothing End Sub.
17.小張學習了冒泡排序后,覺得還可以再改進,用K指向要排序的數的頭部,用m指向要排序的數的尾部,每一輪先從前向后掃描k~m-1,比較相鄰若逆序則交換,找出本輪最大數放到本輪數據的尾部,再從后到前掃描剩下的序列m~k+1,比較相鄰若逆序則交換,找出本輪最小數放到本輪數據頭部.直到k=m結束程序.以下是改進后的程序請補充完整. Dim n As Integer‘數字的個數 Rem 以下程序段為產生n個[10,99]之間的隨機整數并在list1中顯示 Private Sub Command1_Click ( ) Randomize Time n=50 For i=1To n List1.AddItem Str(Int(Rnd*90)+10) Next End Sub Rem 以下程序段為從list1中取出數并進行排序,最后在list2中顯示排序后的數 Private Sub Command2_Click ( ) Dim a(50)As Integer Dim k As Integer,m As Integer,i As Integer,j As Integer For i=1To n a(i)=Val(List1.List(i-1)) Next i m=n:k=1 Do While①
J=m-1:m=1 For i=k To j If a(i+1)<a(i) Then t=a(i):a(i)=a(i+1):a(i+1)=t:m=i Next i j=②
k=1 For i=m To j Step-1 If a(i)<a(i-1)Then t=a(i):a(i)=a(i-1):a(i-1)=t:③