字體:小 中 大 | |
|
|
2009/04/07 08:43:54瀏覽2806|回應47|推薦0 | |
Final notice: 2009/06/09 好吧!已經很久的一段時間了!這一次是最後一次的展延了!鐵定不再展延了!成績評定了!到本週日截止!逾期者!Sorry!我就不再給你(妳)評分了!請務必記得繳交的期限! 2009/06/14 23:00 是繳交的最後期限! Date:2009/05/26 -> 通知! 煩請同學们,務必在本週內完成這項作業,並建置成".exe" 執行檔,上傳到你個人在學校的網路儲存空間中,並將超連結(url: http://wwws.sysh.tc.edu.tw/~h710xxx/filename.exe ) 回應到本文,以便進行檢查,評分! 謝謝合作! *加油!已經過了一段"長時間"了!可是......但是.....仍然是........才"六篇回應" upload their homework! so hurry! don't be delay! 本文已經公佈Pretty long了,相信各位也應該有看過簡報檔了!那麼就請準備“開始“吧! 要把握時間!2009/05/05-> Please completed the work at this week! cause next week you will be busy! 隨機檔介紹 相關簡報檔案下載網址: badongo 要讓檔案中的資料能夠隨意存取,而不要依資料的先後順序寫入或讀出,就需要利用隨機檔。隨機檔中每一筆記錄都賦予一個編號,存取時是依照編號計算出其存放位置,來存取資料的。 若每筆資料實際長度差異很大時,使用隨機檔會較浪費磁碟空間。但是數值資料在隨機檔中是以二進位方式來存放,而循序檔則是以 ASCII 碼來存取,對於位數較長的數值,使用隨機檔反而會比循序檔較節省磁碟空間。在下列情況下,資料使用隨機檔較適宜: 1. 需要時常做線上查詢的資料檔。 2. 資料異動頻繁的資料檔 3. 可以將資料檔設成同時可讀寫的模式,循序檔無法做到,循序資料檔開啟檔案時只能單獨設成讀或寫的模式。 # 注意 1. 要節省磁碟存放空間 若檔案中每筆資料的記錄長度差異不大時,可使用隨機檔。若每筆資料的記錄長度差異很大時,可使用循序檔。 2. 存取要快時,請使用隨機檔。 1. 隨機檔的開檔與關檔 一、開檔 語法: Open " 檔名 " For Random As # 檔案代碼 [Len = 記錄長度 ] 功能:以隨機方式開啟檔案 1. Open 開啟的隨機檔可以指定記錄長度,如果省略 Len 參數則預設值為 128 bytes 。 2. 記錄長度可以用 Len 函數來取得其大小。 3. 隨機檔開檔後,不但可以讀取也可以寫入的動作,不像循序檔必須使用 Open … For Input 和 Open … For Output 來達成。 二、關 檔 語法: 1.Close[#file_num] 2.Reset 功能:用來關閉檔案 1. 關檔語法如同循序檔。 2. Reset 敘述會將緩衝區中的資料,寫入對應的檔案中,再關閉所有檔案。 2. 隨機檔的存取 隨機檔的每一筆記錄都有編號,當要搜尋某一筆記錄時,由於隨機檔每筆資料長度一樣,因此只要在程式中輸入該筆記錄的編號, V B 依照所指定的編號算出該筆記錄在隨機檔中的位置,便可取出該筆記錄,由於隨機檔可隨意存取,故存取速度比循序檔快,所以效率高是隨機檔的主要優點。 一、 Put 敘述 語法: Put[#] 檔案代碼, [ 記錄編號 ] ,變數 功能:將一筆資料寫入隨機檔中 二、 Get 敘述 語法: Get[#] 檔案代碼, [ 記錄編號 ] ,變數 功能:由隨機檔中讀取一資料 1. 記錄編號範圍 1 ~ 2,147,483,647 。 2. 省略記錄編號,則由上一次記錄編號的下一筆開始寫入或讀取。 3. 變數的長度不能大於隨機檔的記錄長度。 4. 隨機檔中對每一個記錄做存取時,所使用變數的資料型態要和記錄中 各對應欄位的資料型態一致,否則會出現錯誤。 三、隨機檔與記錄 將不同資料型態的變數聚集在一起,用一個簡單變數來代表,此變數即為記錄型態變數。 OK! now we shall design a score enter program with random files function! and teh file that storeage the recorded is call test.txt ( but beware that when we store the score to the file it isn't use pure text mode it has been compress so you can't directly read the content from that text file must go through the program file to open it and import the content to it! 1. design the form and change the property of the object 2. write the code 3. build the project to execute file! code as follow: Public Class Form1 Structure MyStd Public Id As Integer Public math As Integer Public eng As Integer Public chi As Integer End Structure Private Gbl_RecNo, Gbl_CurRec As Integer Private fileName As String Private fileNum As Integer Sub Clear_Screen() txtId.Text = "" txtName.Text = "" txtChi.Text = "" txtEng.Text = "" txtMath.Text = "" End Sub Sub Display_StdData() Dim fileNum As Integer Dim std As MyStd Dim recLen As Long = Len(std) lblCurrent.Text = Gbl_CurRec fileNum = FreeFile() ' 開啟隨機檔案 FileOpen(fileNum, fileName, OpenMode.Random, , , recLen) If Not EOF(fileNum) Then FileGet(fileNum, std, Gbl_CurRec) ' 取出結構資料 ' 顯示的記錄資料 txtId.Text = std.Id txtName.Text = std.name txtMath.Text = std.math txtEng.Text = std.eng txtChi.Text = std.chi End If FileClose(fileNum) End Sub Private Sub cmdWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdWrite.Click Dim std As MyStd Dim recLen As Long = Len(std) recLen = Len(std) If txtId.Text = "" Then MessageBox.Show("編號不可空白!") Exit Sub End If If txtName.Text = "" Then MessageBox.Show("姓名不可空白!") Exit Sub End If std.Id = CInt(txtId.Text) std.name = txtName.Text std.math = CInt(txtMath.Text) std.eng = CInt(txtEng.Text) std.chi = CInt(txtChi.Text) Gbl_RecNo += 1 fileNum = FreeFile() ' 開啟隨機檔案 FileOpen(fileNum, fileName, OpenMode.Random, , , recLen) FilePut(fileNum, std, Gbl_RecNo) ' 存入結構 FileClose(fileNum) Gbl_CurRec = Gbl_RecNo lblTotal.Text = Gbl_RecNo lblCurrent.Text = Gbl_CurRec Clear_Screen() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load fileName = CurDir() & "\test.txt" lblCurrent.Text = "0" lblTotal.Text = "0" End Sub Private Sub cmdFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFirst.Click Gbl_CurRec = 1 Display_StdData() End Sub Private Sub cmdLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLast.Click Gbl_CurRec = Gbl_RecNo Display_StdData() End Sub Private Sub cmdNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNext.Click If Gbl_CurRec < Gbl_RecNo Then Gbl_CurRec += 1 Else Gbl_CurRec = Gbl_RecNo End If Display_StdData() End Sub Private Sub cmdPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrevious.Click If Gbl_CurRec > 1 Then Gbl_CurRec -= 1 Else Gbl_CurRec = 1 End If Display_StdData() End Sub Private Sub cmdClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Clear_Screen() End Sub Private Sub cmdExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExit.Click Application.Exit() End Sub Private Sub cmdOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOpen.Click Dim fileNum As Integer Dim std As MyStd Dim recLen As Long = Len(std) fileNum = FreeFile() ' 開啟隨機檔案 FileOpen(fileNum, fileName, OpenMode.Random, , , recLen) Gbl_RecNo = 0 Do Until EOF(fileNum) Gbl_RecNo += 1 FileGet(fileNum, std, Gbl_RecNo) ' 取出結構資料 FileClose(fileNum) Gbl_CurRec = 1 lblTotal.Text = Gbl_RecNo lblCurrent.Text = Gbl_CurRec Display_StdData() End Sub Private Sub cmdEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEdit.Click Dim fileNum As Integer Dim std As MyStd Dim recLen As Long = Len(std) If txtId.Text = "" Then MessageBox.Show("編號不可空白!") Exit Sub End If If txtName.Text = "" Then MessageBox.Show("姓名不可空白!") Exit Sub End If std.Id = CInt(txtId.Text) ' 編輯的記錄編號 std.name = txtName.Text std.math = CInt(txtMath.Text) std.eng = CInt(txtEng.Text) std.chi = CInt(txtChi.Text) fileNum = FreeFile() ' 開啟隨機檔案 FileOpen(fileNum, fileName, OpenMode.Random, , , recLen) FilePut(fileNum, std, Gbl_CurRec) ' 存入結構資料 FileClose(fileNum) End Sub Private Sub cmdQuery_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdQuery.Click Dim fileNum, tid As Integer Dim std As MyStd Dim recLen As Long = Len(std) If txtId.Text = "" Then Exit Sub End If tid = CInt(txtId.Text) ' 查詢的記錄編號 If tid > 0 And tid <= Gbl_RecNo Then fileNum = FreeFile() ' 開啟隨機檔案 FileOpen(fileNum, fileName, OpenMode.Random, , , recLen) FileGet(fileNum, std, tid) ' 取出結構資料 FileClose(fileNum) txtId.Text = std.Id ' 顯示的記錄資料 txtName.Text = std.name txtMath.Text = std.math txtEng.Text = std.eng txtChi.Text = std.chi End If End Sub End Class |
|
( 知識學習|語言 ) |