Mục tiêu bài họcHiểu về hệ thống phân cấp dữ liệu mà máy tính xử lý Hiểu về file, biết cách đọc và ghi dữ liệu từ file truy cậptuần tự Biết cách sử dụng điều khiển OpenFileDialog Biết cá
Trang 1BÀI 7:
THAO TÁC VỚI FILE – CÁC VẤN ĐỀ KHÁC
Trang 2Tổ chức ứng dụng, khái niệm “chia để trị”
Khái niệm về thủ tục, sử dụng thủ tục Function và thủ
tục Sub
Tham số Optional
Phạm vị biến
Ép kiểu ngầm định thu hẹp và sử dụng lớp Convert để
ép kiểu tường minh
Sử dụng các tùy chọn của trình gỡ lỗi
Hệ thống bài cũ
Tổ chức ứng dụng, khái niệm “chia để trị”
Khái niệm về thủ tục, sử dụng thủ tục Function và thủ
tục Sub
Tham số Optional
Phạm vị biến
Ép kiểu ngầm định thu hẹp và sử dụng lớp Convert để
ép kiểu tường minh
Sử dụng các tùy chọn của trình gỡ lỗi
Trang 3Mục tiêu bài học
Hiểu về hệ thống phân cấp dữ liệu mà máy tính xử lý
Hiểu về file, biết cách đọc và ghi dữ liệu từ file truy cậptuần tự
Biết cách sử dụng điều khiển OpenFileDialog
Biết cách sử dụng điều khiển MonthCalendar
Biết cách sử dụng điều khiển MenuStrip
Biết cách sử dụng mảng và mảng động
Hiểu về hệ thống phân cấp dữ liệu mà máy tính xử lý
Hiểu về file, biết cách đọc và ghi dữ liệu từ file truy cậptuần tự
Biết cách sử dụng điều khiển OpenFileDialog
Biết cách sử dụng điều khiển MonthCalendar
Biết cách sử dụng điều khiển MenuStrip
Biết cách sử dụng mảng và mảng động
Trang 4File là một tập hợp dữ liệu được lưu lại ngay cả khi ứngdụng đã kết thúc
File được lưu trữ trên các phương tiện thứ cấp như ổ
cứng máy tính, CD-ROM, DVD hay USB
Visual cung cấp các thao tác tạo, đọc và ghi dữ liệu vàoFile
File
File là một tập hợp dữ liệu được lưu lại ngay cả khi ứngdụng đã kết thúc
File được lưu trữ trên các phương tiện thứ cấp như ổ
cứng máy tính, CD-ROM, DVD hay USB
Visual cung cấp các thao tác tạo, đọc và ghi dữ liệu vàoFile
File được lưu
trên ổ cứng
Trang 5File truy cập tuần tự
Là file mà thông tin được đọc ra theo thứ tự mà nó được ghi vào trước đó
Bài này sẽ giới thiệu về cách đọc và ghi file tuần tự
File truy cập ngẫu nhiên
Là file mà thông tin được đọc ra theo thứ tự ngẫu nhiên
File truy cập tuần tự
và File truy cập ngẫu nhiên
File truy cập tuần tự
Là file mà thông tin được đọc ra theo thứ tự mà nó được ghi vào trước đó
Bài này sẽ giới thiệu về cách đọc và ghi file tuần tự
File truy cập ngẫu nhiên
Là file mà thông tin được đọc ra theo thứ tự ngẫu nhiên
Trang 6Các phần tử được xử lý bởi máy tính là một hệ thống
Trang 7Hệ thống được tổ chức như hình sau
Trang 8Phần tử nhỏ nhất mà máy tính xử lý Chỉ lưu giá trị 0 hoặc 1
Máy tính thực hiện thao tác đơn giản trên bit (kiểm tra giá trị của bit, gán giá trị cho bit, đảo giá trị bit)
Byte
Tập hợp gồm 8 bit Trong Visual Basic, mỗi ký tự gồm 2 byte Lập trình tạo ra các phần tử dữ liệu bằng các ký tự, máy tính thao tác trên chuỗi bit
Hệ thống phân cấp dữ liệu
Bit
Phần tử nhỏ nhất mà máy tính xử lý Chỉ lưu giá trị 0 hoặc 1
Máy tính thực hiện thao tác đơn giản trên bit (kiểm tra giá trị của bit, gán giá trị cho bit, đảo giá trị bit)
Byte
Tập hợp gồm 8 bit Trong Visual Basic, mỗi ký tự gồm 2 byte Lập trình tạo ra các phần tử dữ liệu bằng các ký tự, máy tính thao tác trên chuỗi bit
Trang 9Tập hợp các ký tự có thể truyền đạt ý nghĩa
Ví dụ như trường lưu tên
Bản ghi
Là tập hợp các trường có liên quan
Ví dụ như trường lưu thông tin về điểm cho một sinh viên
File
Là tập hợp các bản ghi có liên quan
Ví dụ như file lưu thông tin về điểm cho một lớp học
Để lấy bản ghi dễ dàng, một trường trong bản ghi được chọn làm khóa bản ghi (ví dụ như mã số sinh viên)
Là tập hợp các trường có liên quan
Ví dụ như trường lưu thông tin về điểm cho một sinh viên
File
Là tập hợp các bản ghi có liên quan
Ví dụ như file lưu thông tin về điểm cho một lớp học
Để lấy bản ghi dễ dàng, một trường trong bản ghi được chọn làm khóa bản ghi (ví dụ như mã số sinh viên)
Cơ sở dữ liệu
Là một nhóm file có liên quan
Trang 10Visual Basic cung cấp đối tượng luồng (stream) để hỗ
trợ cho việc đọc và ghi thông tin vào File
Khi một file được mở, một luồng được gắn vào đối tượngfile để “đổ” thông tin vào File hay “hút” dữ liệu từ file
Các lớp xử lý luồng được lưu trong namespace
System.IO
File và luồng
Visual Basic cung cấp đối tượng luồng (stream) để hỗ
trợ cho việc đọc và ghi thông tin vào File
Khi một file được mở, một luồng được gắn vào đối tượngfile để “đổ” thông tin vào File hay “hút” dữ liệu từ file
Các lớp xử lý luồng được lưu trong namespace
System.IO
Trang 11Thêm namespace System.IO
Khai báo biến StreamWriter
Khởi tạo giá trị cho đối tượng StreamWriter
Nếu tham số thứ hai là False, nội dung có sẵn trong file
(nếu file tồn tại) sẽ được xóa hết
Demo ghi dữ liệu ra file
Imports System.IO Dim output As StreamWriter output = New StreamWriter (“calendar.txt”, True)
Thêm namespace System.IO
Khai báo biến StreamWriter
Khởi tạo giá trị cho đối tượng StreamWriter
Nếu tham số thứ hai là False, nội dung có sẵn trong file
(nếu file tồn tại) sẽ được xóa hết
output = New StreamWriter (“calendar.txt”, True)
Tên file mà dữ liệu
sẽ được ghi ra
Mục đích là để báo rằng muốn thêm thông tin vào cuối file
Trang 12Ghi dữ liệu ra file
Trang 13Cơ chế ghi
Ứng dụng không đọc dữ liệu ra file ngay khi thực hiện lệnh Write hay WriteLine
Dữ liệu được đọc ra file theo từng khối
Khi gặp lệnh Close, ứng dụng sẽ đẩy những dữ liệu còn lại
ra file
Không đóng file sau khi ghi có thể làm mất dữ liệu
Cơ chế đọc và ghi ra file
Cơ chế ghi
Ứng dụng không đọc dữ liệu ra file ngay khi thực hiện lệnh Write hay WriteLine
Dữ liệu được đọc ra file theo từng khối
Khi gặp lệnh Close, ứng dụng sẽ đẩy những dữ liệu còn lại
ra file
Không đóng file sau khi ghi có thể làm mất dữ liệu
Trang 14Cơ chế đọc
Ứng dụng đọc từng khối dữ liệu từ file vào RAM
Tại một thời điểm, chỉ một ứng dụng truy cập đến file
Cố gắng mở một file đang mở sẽ gây lỗi
Phải đóng file ngay sau khi sử dụng xong
Cơ chế đọc và ghi ra file
Trang 15Thêm namespace System.IO
Khai báo khởi tạo biến StreamReader
Đọc dữ liệu từ file
Phương thức ReadLine đọc một dòng văn bản và trả về
String Trả về Nothing nếu đã đến cuối file
Sử dụng phương thức EndOfStream để xác định đã đến
cuối file hay chưa
Demo đọc dữ liệu từ file
Imports System.IO Dim input As StreamReader= New StreamReader (“calendar.txt”)
Thêm namespace System.IO
Khai báo khởi tạo biến StreamReader
Đọc dữ liệu từ file
Phương thức ReadLine đọc một dòng văn bản và trả về
String Trả về Nothing nếu đã đến cuối file
Sử dụng phương thức EndOfStream để xác định đã đến
cuối file hay chưa
Dim line As String
Do Until input.EndOfStream
line = input.Realine() MessageBox.Show(line)
Trang 16Là hộp thoại để mở file
Hộp thoại OpenFileDialog
Ký hiệu hộp thoại
trên ToolBox
Trang 17Thêm OpenFileDialog vào Form
Hiển thị hộp thoại cho người dùng chọn file khi Click vàomột Button trên Form
Sử dụng phương thức ShowDialog để hiển thị hộp thoại, kết quả trả về từ phương thức này cho biết người dùng đã nhấn vào Button nào
Sử dụng đối tượng DialogResult để lấy kết quả trả về từ
phương thức ShowDialog
Hiển thị tên file
Sử dụng thuộc tính FileName để lấy tên file được chọn
Dùng MessageBox để hiển thị tên file
Demo sử dụng hộp thoại OpenFileDialog
Thêm OpenFileDialog vào Form
Hiển thị hộp thoại cho người dùng chọn file khi Click vàomột Button trên Form
Sử dụng phương thức ShowDialog để hiển thị hộp thoại, kết quả trả về từ phương thức này cho biết người dùng đã nhấn vào Button nào
Sử dụng đối tượng DialogResult để lấy kết quả trả về từ
phương thức ShowDialog
Hiển thị tên file
Sử dụng thuộc tính FileName để lấy tên file được chọn
Dùng MessageBox để hiển thị tên file
Trang 18Sự kiện
DateChanged - Được thực thi khi một ngày (hoặc một
khoảng ngày tháng) mới được chọn.
Thuộc tính
Name - Xác định tên được dùng để truy cập các thuộc
tính của điều khiển MonthCalendar trong mã của ứng
dụng Tên nên có hậu tố MonthCalendar.
SelectionStart - trả về ngày được chọn đầu tiên (hoặc
duy nhất).
Điều khiển MonthCalendar
Sự kiện
DateChanged - Được thực thi khi một ngày (hoặc một
khoảng ngày tháng) mới được chọn.
Thuộc tính
Name - Xác định tên được dùng để truy cập các thuộc
tính của điều khiển MonthCalendar trong mã của ứng
dụng Tên nên có hậu tố MonthCalendar.
SelectionStart - trả về ngày được chọn đầu tiên (hoặc
duy nhất).
Trang 19Demo sử dụng hộp thoại OpenFileDialog
Private Sub openFileButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles openFileButton.Click
' hiển thị hộp thoại Open
Dim ketqua As DialogResult = openFileDialog.ShowDialog()
'mở file nếu người dùng không nhấn vào Button Cancel
If ketqua <> Windows.Forms.DialogResult.Cancel Then
'lấy tên file được chọn
Dim tenfile As String = openFileDialog.FileName
‘hiển thị tên file
MessageBox.Show(tenfile) End If
End Sub ' openFileButton_Click
Private Sub openFileButton_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles openFileButton.Click
' hiển thị hộp thoại Open
Dim ketqua As DialogResult = openFileDialog.ShowDialog()
'mở file nếu người dùng không nhấn vào Button Cancel
If ketqua <> Windows.Forms.DialogResult.Cancel Then
'lấy tên file được chọn
Dim tenfile As String = openFileDialog.FileName
‘hiển thị tên file
MessageBox.Show(tenfile) End If
End Sub ' openFileButton_Click
Trang 20Hiển thị lịch, từ đó người dùng có thể chọn một ngày
hoặc một khoảng ngày tháng
Điều khiển MonthCalendar
Ký hiệu MonthCalendar
trên ToolBox
Ký hiệu MonthCalendar
trên ToolBox
Trang 21Thêm MonthCalendar vào Form
Xử lý sự kiện DateChanged cho điều khiển này
Khi người dùng chọn ngày thì sẽ hiển thị ngày vừa chọn
Demo sử dụng MonthCalendar
' xử lý sự kiện DateChanged của MonthCalendar
Private Sub dateMonthCalendar_DateChanged( _ ByVal sender As System.Object, ByVal e As _ System.Windows.Forms.DateRangeEventArgs) _ Handles dateMonthCalendar.DateChanged
' hiển thị ngày vừa được chọn
MessageBox.Show(dateMonthCalendar.SelectionStart) End Sub ' dateMonthCalendar_DateChanged
' xử lý sự kiện DateChanged của MonthCalendar
Private Sub dateMonthCalendar_DateChanged( _ ByVal sender As System.Object, ByVal e As _ System.Windows.Forms.DateRangeEventArgs) _ Handles dateMonthCalendar.DateChanged
' hiển thị ngày vừa được chọn
MessageBox.Show(dateMonthCalendar.SelectionStart) End Sub ' dateMonthCalendar_DateChanged
Trang 22Dùng để nhóm các chức năng liên quan trong ứng dụngWindows
Menu
Trang 23Thêm MenuStrip vào Form
Thiết kế Menu
Xử lý sự kiện khi nhấn vào mục Menu
Demo sử dụng MenuStrip
Trang 24Thêm MenuStrip vào Form
MenuStrip được
thêm vào Form
Trang 25Thiết kế MenuStrip
Color…để hiển thị hộp chọn màu Thiết kế MenuStrip
Color…để hiển thị hộp chọn màu
Font…để hiển thị hộp chọn
font
Trang 26Xử lý sự kiện khi nhấn vào mục Color…
Trang 27Khai báo mảng không khởi tạo phần tử
Dim arr As Array
Dim int() As Integer = {12, 16, 20, 24, 28, 32}
arr = CType(int, Array)
Khai báo mảng có khởi tạo phần tử
Dim MangSo() As Integer = {12, 24, 36, 48}
Dim MangKyTu() As String = {"K", "S", "S", "D", "N"}
Dim MangDoiTuong() As Object = {"this", ”a”}
Dim objArray() As Object
Mảng và các cách khai báo
Khai báo mảng không khởi tạo phần tử
Dim arr As Array
Dim int() As Integer = {12, 16, 20, 24, 28, 32}
arr = CType(int, Array)
Khai báo mảng có khởi tạo phần tử
Dim MangSo() As Integer = {12, 24, 36, 48}
Dim MangKyTu() As String = {"K", "S", "S", "D", "N"}
Dim MangDoiTuong() As Object = {"this", ”a”}
Dim objArray() As Object
Trang 28Ta sử dụng vòng lặp để đọc dữ liệu từ mảng
Dim sourceArray() As Integer = {1, 2, 3}
Dim counter As Integer
For counter = 0 To sourceArray.Length - 1
result.Append(sourceArray(counter).ToString()) Next counter
Đọc dữ liệu từ mảng
Ta sử dụng vòng lặp để đọc dữ liệu từ mảng
Dim sourceArray() As Integer = {1, 2, 3}
Dim counter As Integer
For counter = 0 To sourceArray.Length - 1
result.Append(sourceArray(counter).ToString()) Next counter
Trang 29Ta sử dụng InsertArrayElement để thêm dữ liệu
vào mảng
Dim arrayInsert() As String = {"O", "A", "G", "B", "B"}
InsertArrayElement(Of String)(arrayInsert, 2, “Chanh")
Thêm dữ liệu vào mảng
Trang 30Khai báo dữ liệu kiểu cấu trúc
Structure Person
Dim strLastName As String Dim strFirstName As String Dim strPhone As String
End Structure
Gán dữ liệu cho kiểu dữ liệu cấu trúc
Dim udtPerson As New Person
With udtPerson
.strLastName = “Nguyen Van"
.strFirstName = “A"
Dữ liệu kiểu cấu trúc
Khai báo dữ liệu kiểu cấu trúc
Structure Person
Dim strLastName As String Dim strFirstName As String Dim strPhone As String
End Structure
Gán dữ liệu cho kiểu dữ liệu cấu trúc
Dim udtPerson As New Person
With udtPerson
.strLastName = “Nguyen Van"
.strFirstName = “A"
Trang 31Khai báo ArrayList
Dim alPersons As New ArrayList
Thêm dữ liệu vào ArrayList
alPersons.Add(udtPerson)
Insert dữ liệu vào một vị trí bất kỳ trong ArrayList
If Not alPersons.Contains(udtPerson) Then
alPersons.Insert(1, udtPerson)
End If
Xóa dữ liệu từ ArrayList
alPersons.RemoveAt(0)
Thêm, xóa dữ liệu từ ArrayList
Khai báo ArrayList
Dim alPersons As New ArrayList
Thêm dữ liệu vào ArrayList
alPersons.Add(udtPerson)
Insert dữ liệu vào một vị trí bất kỳ trong ArrayList
If Not alPersons.Contains(udtPerson) Then
alPersons.Insert(1, udtPerson)
End If
Xóa dữ liệu từ ArrayList
alPersons.RemoveAt(0)
Trang 32Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer
Dim ItemList As New ArrayList()
'insert an item
Ví dụ về ArrayList
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer
Dim ItemList As New ArrayList()
'insert an item
Trang 33End Sub
End Class
Trang 34Các phần tử được xử lý bởi máy tính là một hệ thống
phân cấp dữ liệu Các phần tử phức tạp được cấu thành
từ các phần tử đơn giản hơn
Các phần tử được xử lý bởi máy tính là một hệ thống
phân cấp dữ liệu Các phần tử phức tạp được cấu thành
từ các phần tử đơn giản hơn
Trang 35Hãy nhớ đóng file sau khi đã thao tác xong với file để
tránh lỗi xẩy ra
Hộp thoại OpenFileDialog để mở file
Điều khiển MonthCalender hiển thị lịch, từ đó người
dùng có thể chọn một ngày hoặc một khoảng ngày
Hộp thoại OpenFileDialog để mở file
Điều khiển MonthCalender hiển thị lịch, từ đó người
dùng có thể chọn một ngày hoặc một khoảng ngày
tháng
Điều khiển MenuStrip để thiết kế menu
Mảng và mảng động