中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

2020版算法與程序設(shè)計第五單元第5講 算法在數(shù)據(jù)管理中的應(yīng)用(19張PPT課件+學案)

資源下載
  1. 二一教育資源

2020版算法與程序設(shè)計第五單元第5講 算法在數(shù)據(jù)管理中的應(yīng)用(19張PPT課件+學案)

資源簡介

第5講 算法在數(shù)據(jù)管理中的應(yīng)用
考試內(nèi)容
考試要求
VB訪問數(shù)據(jù)庫
c
算法與數(shù)據(jù)管理
c
一、VB訪問數(shù)據(jù)庫
1.ADO訪問Access數(shù)據(jù)庫
ADO是微軟公司提供的一種應(yīng)用程序訪問數(shù)據(jù)庫的編程接口。該接口包含了多個對象,其中Connection對象用于和數(shù)據(jù)庫建立連接,在建立連接后,用Recordset對象獲取數(shù)據(jù)表中的數(shù)據(jù)。
2.通過Connection連接數(shù)據(jù)庫
在用Connection建立和數(shù)據(jù)庫的連接時,需要設(shè)置ConnectionString屬性的值(即連接字符串),以指定連接數(shù)據(jù)庫所用的驅(qū)動程序、數(shù)據(jù)源名稱、用戶名和密碼。下列語句定義一個Connection對象的實例conn,并設(shè)置conn的連接字符串:
Dim conn As New ADODB.Connection
conn.ConnectionString=“Provider=Microsoft.ACE.OLEDB.12.0;DATA Source=”&App.Path&“Contacts.accdb”
其中,參數(shù)“Provider”用于指定連接的提供者(Microsoft.ACE.OLEDB.12.0可以訪問Access2010數(shù)據(jù)庫);
DATA Source用于指定數(shù)據(jù)庫的文件名(含絕對路徑);
App.Path返回當前應(yīng)用程序所在的絕對路徑。
Connection對象具有Open、Close等方法,其中Open方法用于打開到數(shù)據(jù)源的連接,Close方法用于關(guān)閉連接。
3.通過Recordset對象獲取數(shù)據(jù)表中的數(shù)據(jù)
在用Recordset對象從數(shù)據(jù)庫中獲取數(shù)據(jù)時,要設(shè)置ActiveConnection屬性的值。
語句Set rs.ActiveConnection=conn,使Recordset對象的實例rs與Connection對象的實例conn建立關(guān)聯(lián)。
在與conn建立關(guān)聯(lián)后,可用Recordset對象的Open方法獲取數(shù)據(jù)表中的數(shù)據(jù)。下列語句用于打開記錄集,將SQL語句的查詢結(jié)果保存到記錄集rs中:
rs.Open“SELECT*FROM info”
該語句執(zhí)行后,記錄集rs中的數(shù)據(jù)為SQL語句“SELECT * FROM info”查詢到的結(jié)果。
打開Recordset時,若Recordset非空,當前記錄位于第一條記錄。
Recordset對象的Close方法用于關(guān)閉對象。
Recordset對象的Fields集合用于返回當前記錄中的數(shù)據(jù)。如:rs.Fields(“fName”)返回當前記錄中“fName”字段的值;rs.Fields(0)返回當前記錄中第一個字段的值,如果第一個字段名為“fName”,rs.Fields(0)與rs.Fields(“fName”)返回值相同。
Recordset對象的MoveNext方法用于把當前移動到下一條記錄。若到結(jié)尾處還繼續(xù)向下移動,程序會出錯,因此在使用MoveNext時要判斷Recordset的EOF屬性,判斷是不是到達結(jié)尾處。EOF屬性取值為“True”或“False”。
4.Select語句
Select語句是結(jié)構(gòu)化查詢語言SQL中最常見的語句,主要用于從數(shù)據(jù)表中查詢數(shù)據(jù)。如語句“SELECT * FROM info”表示查詢數(shù)據(jù)表“info”中的全部數(shù)據(jù)。
二、算法在數(shù)據(jù)管理中的綜合應(yīng)用
VB程序獲取到的Access數(shù)據(jù)庫中的數(shù)據(jù),可采用數(shù)組等方式進行存儲,并可以通過編程對這些數(shù)據(jù)進行各種加工處理,如統(tǒng)計、分析、查找、排序等。
一、VB訪問數(shù)據(jù)庫
VB訪問Access數(shù)據(jù)庫,從數(shù)據(jù)表中讀取相關(guān)數(shù)據(jù),并存儲在數(shù)組中。
【典例1】 讀取Access數(shù)據(jù)庫“student.accdb”的數(shù)據(jù)表“xsinfo”中讀取記錄,并分別顯示在相應(yīng)位置。
程序運行時,單擊“顯示記錄”按鈕Command1,并在文本框Text1、Text2、Text3中顯示第一條記錄的信息,單擊“下一條”按鈕Command2,將顯示下一條記錄。程序運行效果如下圖所示:
實現(xiàn)上述功能的VB程序如下,請在劃線處填入合適的代碼。
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Private Sub Command1_Click()
 conn.ConnectionString = “Provider = Microsoft.ACE.OLEDB.12.0;DATA Source=” & App.Path & “____①____”
 conn.Open
 Set rs.ActiveConnection = conn
 rs.Open “SELECT * FROM ____②____”
 Text1.Text = rs.Fields(“姓名”)
 Text2.Text = rs.Fields(“班級”)
 Text3.Text = rs.Fields(“性別”)
End Sub
Private Sub Command2_Click()
 rs.MoveNext     ′移動到下一條記錄
 If Not rs.EOF Then  ′判斷是否已到記錄集的最后一條記錄
Text1.Text = rs.Fields(“姓名”)
Text2.Text = rs.Fields(“班級”)
Text3.Text = rs.Fields(“性別”)
 Else
MsgBox (“記錄已全部顯示完畢!”)
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
 End If
End Sub
解析 本題主要考查的是VB訪問數(shù)據(jù)庫的相關(guān)知識。劃線①處為訪問的數(shù)據(jù)庫的名稱,從題中可知數(shù)據(jù)庫名稱為“student.accdb”;劃線②處為數(shù)據(jù)表的名稱,從題中可知數(shù)據(jù)表名稱為“xsinfo”。
答案 ①student.accdb ②xsinfo
【方法總結(jié)】 VB訪問數(shù)據(jù)庫時,需要知道正確的數(shù)據(jù)庫名稱和數(shù)據(jù)表的名稱。
二、數(shù)據(jù)分析
【典例2】 讀取Access數(shù)據(jù)庫“student.accdb”的數(shù)據(jù)表“xsinfo”中讀取記錄,將記錄顯示在列表框中,并統(tǒng)計女生的人數(shù)。
程序運行時,單擊“顯示記錄”按鈕Command1,將記錄信息分別存儲在數(shù)組a、b、c中,并顯示在列表框List1中,單擊“統(tǒng)計”按鈕Command2,將女生人數(shù)顯示在標簽Label1中。程序運行效果如下圖所示:
實現(xiàn)上述功能的VB程序如下,請在劃線處填入合適的代碼。
Dim b(1 To 100) As String
Dim c(1 To 100) As String
Private Sub Form_Load()
 conn.ConnectionString = “Provider = Microsoft.ACE.OLEDB.12.0;DATA Source=” & App.Path & “student.accdb”
 conn.Open
 Set rs.ActiveConnection = conn
 rs.Open “xsinfo”
 p = 0
 Do While  ____①____
____②____
a(p) = rs.Fields(“姓名”)
b(p) = rs.Fields(“班級”)
c(p) = rs.Fields(“性別”)
rs.MoveNext      
 Loop
 rs.Close
 conn.Close
 Set rs = Nothing
 Set conn = Nothing
End Sub
Private Sub Command1_Click()
 Dim i As Integer
 List1.AddItem “姓名” + “班級” + “性別”
 For i = 1 To p
  List1.AddItem a(i) + “  ” + b(i) + “ ” + c(i)
 Next i
End Sub
Private Sub Command2_Click()
 Dim i As Integer
 Dim count As Integer
 For i = 1 To p
  If ____③____ Then count = count + 1
 Next i
 Label1.Caption = “共有女生數(shù):” + Str(count)
End Sub
解析 本題主要考查的是VB訪問數(shù)據(jù)庫,將進行簡單的統(tǒng)計分析。劃線①處表示將數(shù)據(jù)表中的每一條記錄存儲在數(shù)組中,讀取記錄時需判斷當前位置是否已到達記錄集的最后一條記錄,否則將會出錯,因此①處代碼為Not rs.EOF;②處代碼表示統(tǒng)計記錄的個數(shù),用變量p進行計數(shù),因此②處代碼為p=p+1;③代碼表示統(tǒng)計女生的人數(shù),性別存儲在數(shù)組c中,因此③處代碼為c(i) = “女”。
答案 ①Not rs.EOF ②p = p + 1 ③c(i) =“女”
【方法總結(jié)】 將數(shù)據(jù)庫中數(shù)據(jù)存儲在數(shù)組中,可對數(shù)組中數(shù)據(jù)進行統(tǒng)計分析。
某同學設(shè)計了一個用于查詢學考成績的查詢系統(tǒng),要求如下:
(1)輸入某個等級(分為A、B、C、D、E五個等級),就能查詢出該等級的所有學生考號與姓名,并統(tǒng)計出該等級學生的總?cè)藬?shù)。
(2)學生成績信息存儲在數(shù)據(jù)庫“TechGrade.accdb”中一張數(shù)據(jù)表中,該數(shù)據(jù)表的結(jié)構(gòu)如圖1所示;
(3)程序運行界面如圖2所示,在文本框“Text1”中輸入要查詢的等級,單擊“查詢”按鈕“Command1”,在列表框“List1”中顯示所有該等級的學生考號與姓名,并按照考號從小到大排序,并在標簽“Label3”處顯示該等級學生人數(shù),如果該等級學生人數(shù)為“0”,則“List1”列表框顯示“沒有該等級的學生!”。
(1)學生成績信息(考號、姓名、等級)來源于數(shù)據(jù)庫TechGrade.accdb中________數(shù)據(jù)表。
(2)實現(xiàn)上述功能的VB程序如下,請在劃線處填入合適的代碼。
Private Sub Command1_Click()
 Dim snum(1 To 1000) As String ′數(shù)組snum存放學生的考號
 Dim sname(1 To 1000) As String ′數(shù)組sname存放學生的姓名
 Dim n As Integer, i As Integer, j As Integer, k As Integer
 Dim tnum As String, tname As String
 grade = Text1.Text
 Dim Conn As New ADODB.Connection
 Dim RsAs New ADODB.Recordset
 Conn.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” + App.Path + “Techgrade.accdb”
 Conn.Open
 Set Rs.ActiveConnection = Conn
 Rs.Open “SELECT * FROM tech where 等級=′” +________①________ + “′”
 n = 0
 Do While Not Rs.EOF
n = n + 1
snum(n) = Rs.Fields(“考號”)
sname(n) = Rs.Fields(“姓名”)
Rs.MoveNext
 Loop
 Rs.Close
 Conn.Close
 List1.Clear ′清除列表框
 If n < > 0 Then
i = 1
Do While ________②________
 k = i
 For j = i + 1 To n
   If ________③________ Then k = j
 Next j
 If k < >i Then
 tnum = snum(i): snum(i) = snum(k): snum(k) = tnum
 tname = sname(i): sname(i) = sname(k): sname(k) = tname
 End If
 i = i + 1
Loop
For i = 1 To n
List1.AddItem snum(i) + “ ” + sname(i)
 Next i
 Else
List1.AddItem “沒有該等級的學生!”
 End If
 Label3.Caption = grade + “等學生共有” + Str(n) + “名”
End Sub
解析 (1)本題主要考查的是數(shù)據(jù)庫中的數(shù)據(jù)表。從語句“Rs.Open “SELECT * FROM tech where 等級=′” + grade + “′””可知,考生信息來源于數(shù)據(jù)表tech;(2)劃線①處循環(huán)表示讀取數(shù)據(jù)表中等級為grade的記錄,并存儲在相應(yīng)數(shù)組中,循環(huán)條件表示記錄還沒讀完時,即當前位置還未到達數(shù)據(jù)表的末尾,因此①處代碼為grade;劃線②處的循環(huán)表示將學生信息按考生升序排序,這里使用的是選擇排序, 劃線②處表示n個數(shù)進行排序,共需進行n-1趟,因此②處代碼為i<=n-1或isnum(j)或snum(j)答案 (1)TECH (2)①grade ②i<=n-1或i③snum(k)>snum(j)或snum(j)基礎(chǔ)鞏固
1.小王準備編寫一個依據(jù)技術(shù)學考、加試成績進行賦分的VB程序,需對成績進行預處理。預處理算法的基本思想:先從數(shù)據(jù)庫中讀取考生的考號、學考、加試成績,然后進行排序,排序規(guī)則是按學考+加試的總分降序,若總分相同按加試成績降序排列。再根據(jù)排序結(jié)果給出名次,同分同名,學考、加試成績相同,則名次相同。
程序運行時,學生數(shù)據(jù)顯示在列表框List1中,單擊“計算”按鈕Command1,計算結(jié)果顯示在列表框List2中,程序運行界面如圖所示。
實現(xiàn)上述功能的VB程序如下,請回答下列問題:
(1)如圖所示,學生總數(shù)為1500人,排名前1%的學生可賦分為100,則共有________名學生可賦分為100。
(2)分析數(shù)據(jù),可知存放學生成績的數(shù)據(jù)庫文件為________。
(3)請在劃線處填入合適的代碼。
Dim kh(1 To 1500) As String  ′存放學生考號
Dim a(1 To 1500) As Integer  ′存放學考成績
Dim b(1 To 1500) As Integer   ′存放加試成績
Dim pm(1 To 1500) As Integer  ′存放排名
Dim n As Integer        ′存放總?cè)藬?shù)
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 + “cj.accdb”
conn.Open
Set rs.ActiveConnection = conn
rs.Open “select * from stu_cj”
List1.AddItem “ 考號 ” & “ 學考 ” & “加試”
n = 0
Do While Not rs.EOF ′到記錄集最后一條記錄后退出循環(huán)
n = n + 1  ′計數(shù)
kh(n) = rs.Fields(“考號”)
a(n) = rs.Fields(“學考成績”)
b(n) = rs.Fields(“加試成績”)
List1.AddItem kh(n) & “ ” & Str(a(n)) & “  ” & Str(b(n))
  ____①____
Loop
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
Private Sub Command1_Click()
 Dim i As Integer, j As Integer, t As Integer, k As String
 For i = 1 To n - 1
For j = n To i + 1 Step -1
If a(j) + b(j) > a(j - 1) + b(j - 1) Or ____②____Then
   t = a(j): a(j) = a(j - 1): a(j - 1) = t
   t = b(j): b(j) = b(j - 1): b(j - 1) = t
   k = kh(j): kh(j) = kh(j - 1): kh(j - 1) = k
End If
Next j
 Next i
 
 pm(1) = 1
 For i = 2 To n
If a(i) = a(i - 1) And b(i) = b(i - 1) Then
   ____③____
Else
pm(i) = i
End If
 Next
 List2.Clear
 List2.AddItem “排名” & “考號” & “ 學考” & “加試”
 For i = 1 To n
List2.AddItem pm(i) & “ ” & kh(i) & “  ”
& a(i) & “  ” & b(i)
 Next i
End Sub
解析 本題考查VB程序的綜合能力。(1)1500人的1%為15名之前,從圖中可知為17人。(2)本小題主要考查VB連接數(shù)據(jù)庫的知識,從代碼中可知數(shù)據(jù)庫cj.accdb。(3)本小題閱讀程序代碼可知采用冒泡排序。①空處程序的功能是讀完一條記錄后,光標移到下一條記錄,因此代碼為rs.MoveNext;排序時,若第一關(guān)鍵詞相同,則按第二關(guān)鍵詞進行排序,若總分相同按加試成績降序,所以②空答案為a(j) + b(j) = a(j - 1) + b(j - 1) And b(j) > b(j - 1)。③空位置程序段為進行排名,若a(i) = a(i - 1) And b(i) = b(i - 1),也就是第i個學生的學考和加試與第i-1個學生的成績完全相同,則名次相同,pm(i) = pm(i - 1),否則第i個學生排名在第i位,pm(i) = i。
答案 (1)17 (2)cj.accdb (3)①rs.MoveNext ②a(j)+b(j)=a(j-1)+b(j-1) And b(j)> b(j-1) ③pm(i) = pm(i - 1)
2.某校開展“七選三”選課調(diào)查,選課數(shù)據(jù)存數(shù)據(jù)庫文件“student.accdb”中,如圖a所示。“選課”字段存儲7位“0”、“1”組成的數(shù)串,每位對應(yīng)一個科目,從左往右依次為“物化生政史地技”,“1”表示選擇,“0”表示未選擇,如“1110000”表示選擇科目“物化生”。小吳設(shè)計了一個VB程序統(tǒng)計全校選課情況,功能如下:程序啟動時從數(shù)據(jù)庫中讀入全校學生的學籍輔號、姓名、班級、選課信息,處理后在列表框List1中顯示,單擊“選課統(tǒng)計”按鈕Command1,在列表框List2中按選課人數(shù)從高到低輸出各選課組合及人數(shù)。程序界面如圖b所示(學籍輔號和姓名的部分內(nèi)容不顯示)。
圖a
圖b
實現(xiàn)上述功能的VB程序如下,請回答下列問題:
(1)若某記錄“選課”字段值為“1100001”,則該生的選課科目是________________。
(2)請在劃線處填上合適的代碼。
Const max = 1000
Const s = “物化生政史地技”
Dim n As Integer  ′存放學生人數(shù)
Dim xjfh(1 To max) As String, xm(1 To max) As String ′數(shù)組xjfh、xm分別存儲學籍輔號和姓名
Dim bj(1 To max) As Integer, xk(1 To max) As String ′數(shù)組bj、xk分別存放班級和選課標志
Dim zh(1 To 35) As String, tj(1 To 35) As Integer
′數(shù)組zh存儲不同選課組合,數(shù)組tj存儲某一組合選課的學生數(shù)
Function adj(a As String, n As Integer) As String
 ′函數(shù)功能:在被顯示數(shù)據(jù)之后添加上合適的空格,代碼略
End Function
Function convert(x As String) As String
 Dim i As Integer, st As String
 st = “ ”
 For i = 1 To Len(x)
If Mid(x, i, 1) = “1” Then st = st + Mid(s, i, 1)
 Next i
 convert = st
End Function
Private Sub Form_Load()
 Dim i As Integer, km As String
 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”
 n = 0
 Do While Not rs.EOF
n = n + 1
xjfh(n) = rs.Fields(0):xm(n) = rs.Fields(1)
bj(n) = rs.Fields(2):xk(n) = rs.Fields(3)
①____
List1.AddItem xjfh(n) + adj(xm(n), 4) + adj(Str(bj(n)), 4) + adj(km, 6)
rs.MoveNext
 Loop
 ′剩余部分代碼略
 功能:產(chǎn)生35種選課組合的“0”、“1”數(shù)串,存數(shù)組zh,;數(shù)組tj各元素初始化為0。
End Sub
Private Sub Command1_Click()
 Dim i As Integer, j As Integer, temp2 As Integer, temp1 As Integer
 For i = 1 To 35
For j = 1 To n
  If xk(j) = zh(i) Then ____②____
Next j
 Next i
 For i = 1 To 34
For j = 35 To i + 1 Step -1
  If ____③____Then
temp1 = zh(j): zh(j) = zh(j - 1): zh(j - 1) = temp1
temp2 = tj(j): tj(j) = tj(j - 1): tj(j - 1) = temp2
  End If
Next j
 Next i
For i =1 To 35
 List2.AddItem Str(i) + adj(convert(zh(i)), 6) + adj(Str(tj(i)), 6)
Next i
End Sub
解析 (1)“選課”字段值為“1100001”,7選3科目順序為“物化生政史地技”,因此可知所選科目為物化技。(2)自定義函數(shù)convert(x)的功能是將選科標志轉(zhuǎn)換為對應(yīng)的科目,學生的選科標志存放在數(shù)組xk中,數(shù)組元素xk(n)表示第n位學生的選科標志,科目信息存儲在變量km中,因此①處代碼為km = convert(xk(n));②處代碼表示統(tǒng)計各選科組合的人數(shù),因此②處代碼為tj(i) = tj(i) + 1;③處代碼表示采用冒泡排序按各組合的人數(shù)降序排序,因此代碼為tj(j) >tj(j - 1)。
答案 (1)物化技 (2)①km = convert(xk(n)) ②tj(i) = tj(i) + 1 
③tj(j) >tj(j - 1)
能力提升
3.小林和小王合作編寫了一個查詢英語單詞的VB程序:小林編寫一個過程,單擊“讀取數(shù)據(jù)庫”按鈕Command1,從一個數(shù)據(jù)庫中讀取英語單詞和中文含義,分別保存在a數(shù)組和b數(shù)組中,并顯示在List1中;小王編寫另一個過程,在文本框Text1中輸入要查詢的單詞,單擊“查詢”按鈕Command2,將查詢單詞的中文含義顯示在Text2中,程序界面如圖所示。
(1)分析程序,“英語單詞”和“中文含義”被保存在數(shù)據(jù)表________中。
(2)實現(xiàn)上述要求的VB程序如下,請在劃線處填入合適的代碼。
Const n=3500′存儲單詞的總數(shù)
Dim a(1 To n) As String′依次存儲每個英語單詞
Dim b(1 To n) As String′依次存儲每個英語單詞的中文含義
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(num) = rs.Fields(“word”)
b(num) = rs.Fields(“mean”)
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(i + (j - i) / 3)
mid2 = Int(j - (j - i) / 3)
If key = a(mid1) Then
  search = mid1
  Exit Do
ElseIf key   j = mid1 - 1
ElseIf key = a(mid2) Then
  search = mid2
  Exit Do
ElseIf key >a(mid2) Then
  i = mid2 + 1
Else
  i = mid1 + 1
______②________
End If
 Loop
End Function
解析 (1)本小題主要考查的是數(shù)據(jù)表。從語句“strSQL = “select * from list””可知數(shù)據(jù)表名稱為list。(2)①處代碼為調(diào)用自定義函數(shù)search,自定義函數(shù)search(key)使用三分查找的思想來數(shù)組元素中查找單詞key,若能找到,則返回函數(shù)值為單詞在數(shù)組中的位置,若找不到,則返回的函數(shù)值為-1;②處代碼表示要想找的單詞在中間段中,因此將分別修改查找范圍的起點i和終點j的值。
答案 (1)list (2)①b(search(s)) ②j=mid2-1
4.醫(yī)院每天提前發(fā)放100個預約號。考慮到老人身體原因,預約病人按照以下規(guī)則進行就診:
①老年人(年齡>=60)比非老年人優(yōu)先就診。
②老年人按年齡從大到小的順序就診,年齡相同的按預約號順序就診。
③非老年人按預約號順序就診。
小王根據(jù)以上規(guī)則編寫了一個VB程序,通過引入索引數(shù)組temp,進行排序,使得age(temp(1))≥age(temp(2))≥age(temp(3))……≥age(temp(n))。示例如圖a所示。
程序運行時,病人數(shù)據(jù)顯示在列表框List1中,單擊“”就診排序按鈕Command1,排序結(jié)果顯示在列表框List2中,程序運行界面如圖b所示。
圖b
實現(xiàn)上述功能的VB程序如下,請回答下列問題:
(1)分析程序,可知程序中讀取的病人名單來自________數(shù)據(jù)庫中的________數(shù)據(jù)表中的________字段(填寫具體的名稱)。
(2)請在劃線處填入合適的代碼。
Dim pname(1 To 100) As String, age(1 To 100) As Integer
Dim n As Integer, num(1 To 100) As Integer
Private Sub Form_Load()
 dim conn as New ADODB.Connection,rs As New ADODB Recordset
 conn.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” & App.Path & “pdxt.accdb”
 conn.open
 Set rs.ActiveConnection = conn
 rs.open “select * from jzmd”
 n = 0
 List1.AddItem “就診號 名單 年齡”
 Do While Not rs.EOF
______①____
num(n) = n
pname(n) = rs.Fields(“l(fā)ist”)
age(n) = n
pname(n) = rs.Fields(“age”)
List1.AddItem Str(num(n)) & “ ” & pname(temp2(n)) & “ ” & Str(age(n))
rs.movenext
 Loop
 rs.Close: conn.Close
 Set rs = Nothing: Set conn = Nothing
End Sub
Private Sub Command1_Click()
 Dim temp1(1 To 100) As Integer, temp2(1 To 100) As Integer
 Dim i As Integer, j As Integer, k1 As Integer, k2 As Integer, t As Integer
 k1 = 0: k2 = 0
 For i = 1 To n
If age(i) < 60 Then
  k1 = k1 + 1
  temp1(k1) = num(i)
Else
  k2 = k2 + 1
  temp1(k2) = num(i)
End If
 Next i
 For i = 1 To k2 - 1
For j = k2 To i + 1 Step -1
  if ____②____ then
t = temp2(j): temp2(j) = temp2(j - 1): temp2(j - 1) = t
  End If
Next j
 Next i
 List2.Clear
 List2.AddItem “就診號  名單 年齡”
 For i = 1 To k2
List2.AddItem Str(i) & “ ” & pname(temp2(i)) & “ ” & Str(age(temp2(i)))
 Next i
 For j = 1 To k1
List2.AddItem ____③____ & “ ” & pname(temp2(j)) & “ ” & Str(age(temp2(j)))
 Next j
End Sub
解析 (1)本小題主要考查的VB訪問數(shù)據(jù)庫的相關(guān)知識。(2)變量n表示讀取的記錄數(shù),每讀取一條記錄,則進行計數(shù),因此①處為n=n+1;②處代碼的功能是使用冒泡排序按年齡大小降序排序,存放年齡的數(shù)組為age,下標為temp2(j),因此②處代碼為age(temp2(j))答案 (1)pdxt.accdb jzmd list 
(2)①n=n+1 ②age(temp2(j))課件19張PPT。第5講 算法在數(shù)據(jù)管理中的應(yīng)用一、VB訪問數(shù)據(jù)庫1.ADO訪問Access數(shù)據(jù)庫ADO是微軟公司提供的一種應(yīng)用程序訪問數(shù)據(jù)庫的編程接口。該接口包含了多個對象,其中Connection對象用于和數(shù)據(jù)庫建立連接,在建立連接后,用Recordset對象獲取數(shù)據(jù)表中的數(shù)據(jù)。2.通過Connection連接數(shù)據(jù)庫在用Connection建立和數(shù)據(jù)庫的連接時,需要設(shè)置ConnectionString屬性的值(即連接字符串),以指定連接數(shù)據(jù)庫所用的驅(qū)動程序、數(shù)據(jù)源名稱、用戶名和密碼。下列語句定義一個Connection對象的實例conn,并設(shè)置conn的連接字符串:
Dim conn As New ADODB.Connection
conn.ConnectionString=“Provider=Microsoft.ACE.OLEDB.12.0;DATA Source=”&App.Path&“Contacts.accdb”
其中,參數(shù)“Provider”用于指定連接的提供者(Microsoft.ACE.OLEDB.12.0可以訪問Access2010數(shù)據(jù)庫);DATA Source用于指定數(shù)據(jù)庫的文件名(含絕對路徑);
App.Path返回當前應(yīng)用程序所在的絕對路徑。
Connection對象具有Open、Close等方法,其中Open方法用于打開到數(shù)據(jù)源的連接,Close方法用于關(guān)閉連接。3.通過Recordset對象獲取數(shù)據(jù)表中的數(shù)據(jù)在用Recordset對象從數(shù)據(jù)庫中獲取數(shù)據(jù)時,要設(shè)置ActiveConnection屬性的值。
語句Set rs.ActiveConnection=conn,使Recordset對象的實例rs與Connection對象的實例conn建立關(guān)聯(lián)。在與conn建立關(guān)聯(lián)后,可用Recordset對象的Open方法獲取數(shù)據(jù)表中的數(shù)據(jù)。下列語句用于打開記錄集,將SQL語句的查詢結(jié)果保存到記錄集rs中:
rs.Open“SELECT*FROM info”
該語句執(zhí)行后,記錄集rs中的數(shù)據(jù)為SQL語句“SELECT * FROM info”查詢到的結(jié)果。
打開Recordset時,若Recordset非空,當前記錄位于第一條記錄。
Recordset對象的Close方法用于關(guān)閉對象。Recordset對象的Fields集合用于返回當前記錄中的數(shù)據(jù)。如:rs.Fields(“fName”)返回當前記錄中“fName”字段的值;rs.Fields(0)返回當前記錄中第一個字段的值,如果第一個字段名為“fName”,rs.Fields(0)與rs.Fields(“fName”)返回值相同。Recordset對象的MoveNext方法用于把當前移動到下一條記錄。若到結(jié)尾處還繼續(xù)向下移動,程序會出錯,因此在使用MoveNext時要判斷Recordset的EOF屬性,判斷是不是到達結(jié)尾處。EOF屬性取值為“True”或“False”。4.Select語句Select語句是結(jié)構(gòu)化查詢語言SQL中最常見的語句,主要用于從數(shù)據(jù)表中查詢數(shù)據(jù)。如語句“SELECT * FROM info”表示查詢數(shù)據(jù)表“info”中的全部數(shù)據(jù)。二、算法在數(shù)據(jù)管理中的綜合應(yīng)用VB程序獲取到的Access數(shù)據(jù)庫中的數(shù)據(jù),可采用數(shù)組等方式進行存儲,并可以通過編程對這些數(shù)據(jù)進行各種加工處理,如統(tǒng)計、分析、查找、排序等。一、VB訪問數(shù)據(jù)庫VB訪問Access數(shù)據(jù)庫,從數(shù)據(jù)表中讀取相關(guān)數(shù)據(jù),并存儲在數(shù)組中。【典例1】 讀取Access數(shù)據(jù)庫“student.accdb”的數(shù)據(jù)表“xsinfo”中讀取記錄,并分別顯示在相應(yīng)位置。
程序運行時,單擊“顯示記錄”按鈕Command1,并在文本框Text1、Text2、Text3中顯示第一條記錄的信息,單擊“下一條”按鈕Command2,將顯示下一條記錄。程序運行效果如下圖所示:實現(xiàn)上述功能的VB程序如下,請在劃線處填入合適的代碼。
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Private Sub Command1_Click()
 conn.ConnectionString = “Provider = Microsoft.ACE.OLEDB.12.0;DATA Source=” & App.Path & “____①____”
 conn.Open Set rs.ActiveConnection = conn
 rs.Open “SELECT * FROM ____②____”
 Text1.Text = rs.Fields(“姓名”)
 Text2.Text = rs.Fields(“班級”)
 Text3.Text = rs.Fields(“性別”)
End Sub
?
Private Sub Command2_Click()
 rs.MoveNext     ′移動到下一條記錄
 If Not rs.EOF Then  ′判斷是否已到記錄集的最后一條記錄 Text1.Text = rs.Fields(“姓名”)
Text2.Text = rs.Fields(“班級”)
Text3.Text = rs.Fields(“性別”)
 Else
MsgBox (“記錄已全部顯示完畢!”)
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
 End If
End Sub解析 本題主要考查的是VB訪問數(shù)據(jù)庫的相關(guān)知識。劃線①處為訪問的數(shù)據(jù)庫的名稱,從題中可知數(shù)據(jù)庫名稱為“student.accdb”;劃線②處為數(shù)據(jù)表的名稱,從題中可知數(shù)據(jù)表名稱為“xsinfo”。
答案 ①student.accdb ②xsinfo
【方法總結(jié)】 VB訪問數(shù)據(jù)庫時,需要知道正確的數(shù)據(jù)庫名稱和數(shù)據(jù)表的名稱。二、數(shù)據(jù)分析【典例2】 讀取Access數(shù)據(jù)庫“student.accdb”的數(shù)據(jù)表“xsinfo”中讀取記錄,將記錄顯示在列表框中,并統(tǒng)計女生的人數(shù)。
程序運行時,單擊“顯示記錄”按鈕Command1,將記錄信息分別存儲在數(shù)組a、b、c中,并顯示在列表框List1中,單擊“統(tǒng)計”按鈕Command2,將女生人數(shù)顯示在標簽Label1中。程序運行效果如下圖所示:實現(xiàn)上述功能的VB程序如下,請在劃線處填入合適的代碼。
Dim b(1 To 100) As String
Dim c(1 To 100) As String
Private Sub Form_Load()
 conn.ConnectionString = “Provider = Microsoft.ACE.OLEDB.12.0;DATA Source=” & App.Path & “student.accdb”
 conn.Open
 Set rs.ActiveConnection = conn
 rs.Open “xsinfo”
 p = 0 Do While  ____①____
____②____
a(p) = rs.Fields(“姓名”)
b(p) = rs.Fields(“班級”)
c(p) = rs.Fields(“性別”)
rs.MoveNext      
 Loop
 rs.Close
 conn.Close
 Set rs = Nothing
 Set conn = Nothing
End SubPrivate Sub Command1_Click()
 Dim i As Integer
 List1.AddItem “姓名” + “班級” + “性別”
 For i = 1 To p
 List1.AddItem a(i) + “  ” + b(i) + “ ” + c(i)
 Next i
End SubPrivate Sub Command2_Click()
 Dim i As Integer
 Dim count As Integer
 For i = 1 To p
 If ____③____ Then count = count + 1
 Next i
 Label1.Caption = “共有女生數(shù):” + Str(count)
End Sub解析 本題主要考查的是VB訪問數(shù)據(jù)庫,將進行簡單的統(tǒng)計分析。劃線①處表示將數(shù)據(jù)表中的每一條記錄存儲在數(shù)組中,讀取記錄時需判斷當前位置是否已到達記錄集的最后一條記錄,否則將會出錯,因此①處代碼為Not rs.EOF;②處代碼表示統(tǒng)計記錄的個數(shù),用變量p進行計數(shù),因此②處代碼為p=p+1;③代碼表示統(tǒng)計女生的人數(shù),性別存儲在數(shù)組c中,因此③處代碼為c(i) = “女”。
答案 ①Not rs.EOF ②p = p + 1 ③c(i) =“女”【方法總結(jié)】 將數(shù)據(jù)庫中數(shù)據(jù)存儲在數(shù)組中,可對數(shù)組中數(shù)據(jù)進行統(tǒng)計分析。

展開更多......

收起↑

資源列表

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 沐川县| 腾冲县| 满洲里市| 南皮县| 琼中| 抚州市| 得荣县| 高邑县| 徐汇区| 垣曲县| 辽中县| 城步| 资中县| 集安市| 西乌| 盱眙县| 大姚县| 乌什县| 左贡县| 阿拉善右旗| 诸城市| 长寿区| 哈密市| 湟中县| 岚皋县| 哈密市| 绥德县| 遂溪县| 麻城市| 东平县| 海伦市| 商洛市| 奉新县| 工布江达县| 崇文区| 樟树市| 浪卡子县| 阿拉善右旗| 佛坪县| 嘉义县| 嘉义县|