Tải bản đầy đủ (.pdf) (18 trang)

Bài thực hành VB số 1 ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (547 KB, 18 trang )

BÀI THỰC HÀNH SỐ 1
Viết chương trình nhập vào 3 giá trị dương a, b, c. Kiểm tra xem chúng có thể tạo thành
ba cạnh của một tam giác hay không, nếu đúng thì đó là tam giác vuông, cân, đều hay tam
giác thường và cho biết chu vi và diện tích của hình tam giác đó.
Hướng dẫn
Diện tích tam giác được tính:
))()(( cpbpappS −−−=
với
2
cba
p
+
+
=

Giao diện chương trình:

- Các đối tượng TextBox có thuộc tính Name là: Text1 -> Text7 (thứ tự từ trên xuống)
- Các đối tượng CommandButton (nút lệnh) có Name từ: Command1 -> Command3
Mã lệnh tham khảo
Dim a As Byte, b As Byte, c As Byte ‘ Các biến chứa ba cạnh tam giác
Dim S As Single, P As Single ‘ Chứa diện tích và chu vi của tam giác
‘ Sự kiện Click của nút Command2 (nút Tiep tuc)
Private Sub Command2_Click()
Text1.Text = "" ‘ Xóa rỗng các đối tượng TextBox
Text2.Text = "" : Text3.Text = ""
Text4.Text = "" : Text5.Text = ""
Text6.Text = "" : Text7.Text = ""
End Sub
‘Sự kiện Click của nút Command3 (nút Ket thuc)
Private Sub Command3_Click()


Unload Me
End Sub
‘Sự kiện Click của nút Command1 (nút Kiem tra)
Private Sub Command1_Click()
a = Val(Text1.Text) ‘ Cho biến a nhận giá trị từ Text1
b = Val(Text2.Text) ‘ Cho biến b nhận giá trị từ Text2
c = Val(Text3.Text) ‘ Cho biến c nhận giá trị từ Text3
If (a + b > c) And (a + c > b) And (b + c > a) Then
' Kiểm tra loại tam giác - Chỉ khi a, b, c là ba cạnh của tam giác
Text4.Text = "DIEU NAY DUNG"
If (a = b) And (b = c) Then
Text5.Text = "TAM GIAC DEU"
ElseIf (a = b) Or (a = c) Or (b = c) Then
Text5.Text = "TAM GIAC CAN"
ElseIf (a*a + b*b = c^2) Or (b*b + c*c = a^2) Or (a*a + c*c = b^2) Then
Đúng / Sai

Cân/Vuông/Ðều/Thường
Text5.Text = "TAM GIAC VUONG"
Else
Text5.Text = "TAM GIAC THUONG"
End If
P = (a + b + c) / 2 ‘ Tính chu vi của tam giác
’ Đối tượng Text6 chứa chu vi tam giác
Text6.Text = Str(2 * P)
‘ Tính diện tích tam giác
S = Sqr(P * (P - a) * (P - b) * (P - c))
‘ Đối tượng text7 chứa diện tích tam giác
Text7.Text = Str(S)
Else

Text4.Text = "DIEU NAY SAI"
End If
End Sub
Các bài tập khác
1. Giải phương trình bậc hai ax
2
+ bx + c = 0 (a ≠ 0)

2. Giải hệ phương trình bậc nhất



=+
=+
222
111
cybxa
cybxa

Hướng dẫn:
D=
22
11
ba
ba

D
x
=
22

11
cb
cb
; D
y
=
22
11
ac
ac

- D≠0: Có nghiệm x=D
x
/D và
y=D
y
/D
- D=0:
o Nếu D
x
=0 và D
y
=0: Vô số
nghiệm
o Nếu D
x
≠0 hoặc D
y
≠0: Vô
nghiệm

BÀI THỰC HÀNH SỐ 2
Viết chương trình mô phỏng một máy tính bỏ túi dạng đơn giản, có thể thực hiện được
các phép toán +, -, *, / và các hàm Sin(x), Cos(x), Tan(x), Cotang(x), n!,
Thiết kế giao diện

Mã lệnh tham khảo
Dim s1 As Double, s2 As Double, kq As Double ‘ Số thứ nhất, thứ hai và kết quả
Dim Pheptoan As Byte
‘ Sự kiện Click mảng đối tượng Command2 (0, 1, 2,…,9 và .)
Private Sub Command2_Click(Index As Integer)
Text1.Text = Text1.Text & Command2(Index).Caption
End Sub
‘ Sự kiện Click mảng đối tượng Command1 (Sin, Cos, Tan,…)
Private Sub Command1_Click(Index As Integer)
Dim a As Double, ra As Double
a = Val(Text1.Text) ‘ Nhận giá trị của a từ đối tượng Text1
ra = ToRadian(a) ‘ Gọi CTC đổi a sang đơn vị Radian
Select Case Index
Case 0: Text1.Text = Sin(ra) ‘ Gọi hàm tính Sin
Case 1: Text1.Text = Cos(ra) ‘ Gọi hàm tính Cos
Case 2: Text1.Text = Tan(ra) ‘ Gọi hàm tính Tan
Case 3: Text1.Text = 1/Tan(ra) ‘ Gọi hàm tính Cotang
Case 4: Text1.Text = Sqr(a) ‘ Gọi hàm tính căn bậc hai
Case 5: Text1.Text = Giaithua(CByte(a)) ‘ Gọi CTC tính N! (định nghĩa ở dưới)
Case 6: Text1.Text = Log(a) / Log(10) ‘ Tính Lôgarít cơ số 10 (thập phân)

Case 7: Text1.Text = Exp(a) ‘ Gọi hàm tính Exp(x) _ tính e mũ x
End Select
End Sub
‘ Sự kiện Click đối tượng Command3 (=)

Private Sub Command3_Click()
s2 = Val(Text1.Text) ‘ Lưu số thứ 2 vào biến s2
Select Case Pheptoan
Case 0: kq = s1 + s2
Case 1: kq = s1 - s2
Case 2: kq = s1 * s2
Case 3: kq = s1 / s2
End Select
Các đối tượng trên FORM bao gồm:
Ä Ðối tượng độc lập: Text1
Ä Mảng đối tượng Command1
Bao gồm: Sin, Cos, Tan, Ctan, Sqr, n!, Log, Exp với
chỉ số Index tương ứng chạy từ 0 → 7
Ä Mảng đối tượng Command2
Bao gồm: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 và . với chỉ số Index
tương ứng chạy từ 0 → 11
Ä Ðối tượng độc lập Command3: nút =
Ä Mảng đối tượng Command4
Bao gồm: các nút +, -, , / có chỉ số Index tương ứng
chạy từ 0 → 3.
Ä Ðối tượng độc lập Command5: Exit
Ä

Đ
ối t
ư
ợng
đ
ộc lập
Command6

: Clear

Text1.Text = kq ‘ Hiển thị kết quả
End Sub
‘ Sự kiện Click mảng đối tượng Command4 (=)
Private Sub Command4_Click(Index As Integer)
Pheptoan = Index ‘ Lưu phép toán
s1 = Val(Text1.Text) ‘ Lưu số thứ nhất vào biến s1
Text1.Text = "" ‘ Xoá nội dung màn hình
End Sub
‘ Sự kiện Click đối tượng Command5 (Exit)
Private Sub Command5_Click()
Unload Me
End Sub
‘ Sự kiện Click đối tượng Command6 (Clear)
Private Sub Command6_Click()
Text1.Text = ""
End Sub
‘ Ðịnh nghĩa hàm đổi từ Ðộ → Radian
Private Function ToRadian(a As Double) As Double
Dim kq As Double
kq = (3.141592654 / 180) * a
ToRadian = kq ‘ Gán kết quả lại cho tên hàm
End Function
‘ Ðịnh nghĩa hàm tính N!
Private Function Giaithua(N As Byte) As Long
Dim i As Byte, Dim kq As Long
kq = 1
For i = 1 To N
kq = kq * i

Next i
Giaithua = kq ‘ Gán kết quả lại cho tên hàm
End Function
Các bài tập khác
Viết chương trình hiện lên màn hình 8 bảng cửu chương từ 2 đến 9.
Hướng dẫn:

BÀI THỰC HÀNH SỐ 3
Viết chương trình cho phép xem ảnh và quản lý File dạng đơn giản.
Giao diện

Mã lệnh thao khảo
Option Explicit
‘ Sự kiện khi Click vào đối tượng File1 để chọn ảnh cần xem:
Private Sub File1_Click()
Dim fName As String, s As String
Dim pos As Integer
fName = File1.FileName ‘ Lấy tên của File ảnh
Text1.Text = File1.FileName ‘ Hiện tên của File ảnh vào Text1
pos = Val(InStr(1, fName, ".")) ‘ Tìm vị trí của dấu chấn trong tên
s = LCase(Mid(fName, pos)) ‘ Chuyển từ chữ thường sang chữ hoa
If s = ".gif" Or s = ".jpg" Or s = ".bmp" Then
Picture2.Picture = LoadPicture(File1.Path & "\" & File1.FileName)
End If
Picture2.Move 0, 0 ‘ Di chuyển Picture2 đến góc trái trên
' Thanh cuộn ngang
If Picture2.Width <= Picture1.Width Then
HScroll1.Visible = False ' Ẩn thanh cuộn ngang
Else
HScroll1.Visible = True ' Hiển thị thanh cuộn ngang

HScroll1.Max = Picture2.Width - Picture1.Width
End If
' Thanh cuộn dọc
If Picture2.Height <= Picture1.Height Then
VScroll1.Visible = False ' Ẩn thanh cuộn dọc
Else
VScroll1.Visible = True ' Hiển thị thanh cuộn dọc
VScroll1.Max = Picture2.Height - Picture1.Height
End If
End Sub
‘ Sự kiện Click của Check1, 2, 3, 4
Private Sub Check1_Click()
If Check1.Value = 0 Then
File1.Archive = False
Else
File1.Archive = True
End If
End Sub
Private Sub Check2_Click()
If Check2.Value = 0 Then
File1.System = False
Else
File1.System = True
End If
End Sub

Private Sub Check3_Click()
If Check3.Value = 0 Then
File1.Hiđen = False
Else

File1.Hiđen = True
End If
End Sub

Private Sub Check4_Click()
If Check4.Value = 0 Then
File1.Normal = False
Else
File1.Normal = True
End If
End Sub

Private Sub Combo1_Click()
Select Case Combo1.ListIndex
‘ Thiết lập thuộc tính Fillter
Case 0: File1.Pattern = "*.jpg; *.gif;
*.bmp"
Case 1: File1.Pattern = "*.*"
Case 2: File1.Pattern = "*.txt"
End Select
File1.Refresh
‘ Xóa nội dung của bức ảnh hiện tại
Picture1.Picture = LoadPicture()
End Sub
‘ Sự kiện Change của đối tượng Dir1
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
‘ Sự kiện Change của Drive1
Private Sub Drive1_Change()

Dir1.Path = Drive1.Drive
End Sub
‘ Sự kiện nạp của FORM
Private Sub Form_Load()
Text1.Text = ""
Combo1.AddItem ("Picture Files_ (*.jpg;
*.gif; *.bmp)")
Combo1.AddItem ("All Files (*.*)")
Combo1.AddItem ("Text Files (*.txt)")
Combo1.ListIndex = 1
If File1.Archive = True Then
Check1.Value = 1
Else
Check1.Value = 0
End If
If File1.System = True Then
Check2.Value = 1
Else
Check2.Value = 0
End If
If File1.Hiđen = True Then
Check3.Value = 1
Else
Check3.Value = 0
End If
If File1.Normal = True Then
Check4.Value = 1
Else
Check4.Value = 0
End If

Form1.ScaleMode = vbPixels
Picture1.ScaleMode = vbPixels
Picture2.AutoSize = True
Picture2.BorderStyle = 0
End Sub
‘ Sự kiện Change của HScroll1
Private Sub HScroll1_Change()
Picture2.Left = -HScroll1.Value
End Sub
Private Sub VScroll1_Change()
Picture2.Top = -VScroll1.Value
End Sub
BÀI THỰC HÀNH SỐ 4
Viết chương trình quản lý sinh viên dạng đơn giản
sử dụng đối tượng ADO gồm có:
o 3 form: frmConnect, frmLogin và form
chính frmMain
o 1 Module: Module1 (chứa đối tượng Db kết
nối CSDL)
Form frmConnect (kết nối CSDL)
* Giao diện
Gồm các đối tượng để nhập dữ liệu Text1, Text2, Text3, Text4 và 2 nút lệnh
Command1, Command2
* Mã lệnh tham khảo
Private Sub Command1_Click() ' Nút Kết nối
Dim rs As New ADODB.Recordset
Set Db = New ADODB.Connection
Db.Provider = "SQLOLEDB.1"
Db.ConnectionString = "Data Source=" + Text1.Text + ";Initial Catalog=" + Text2.Text + ";User
ID=" + Text3.Text + ";Password=" + Text4.Text + ""

On Error Resume Next ' Bẫy lỗi
Db.Open
If Db.Errors.Count <> 0 Then
MsgBox "Loi : " & Err.Description, vbCritical
Else
frmLogin.Show ' Hiển thị form Login
Unload Me
End If
End Sub
Private Sub Command2_Click() ' Nút Thoát
Unload Me
End Sub
Form frmLogin (đăng nhập)
* Giao diện
Gồm các đối tượng để nhập dữ liệu Text1, Text2 và 2 nút lệnh Command1, Command2
* Mã lệnh tham khảo
Option Explicit

Private Sub Command1_Click()
Dim rs As New ADODB.Recordset
rs.Open "Select * from Users where Username='" + Text1.Text + "' and Password='" +
Text2.Text + "'", Db
If rs.EOF Then
MsgBox "Ten User khong ton tai hoac mat khau khong dung !", vbCritical
Else
frmMain.Show ' Hiển thị form chính
Unload Me ' Đóng form log in
End If
End Sub


Private Sub Command2_Click() ' Nút thoát
Unload Me
End Sub
Form frmMain (giao diện chính)
* Giao diện
Gồm các đối tượng có tên giống như hình sau, ngoài ra còn có các đối tượng
chkGioitinh (þGiới tính), cmdNew (nút Tạo mới), cmdSave (nút Lưu), cmdDelete (nút
Xoá).

* Mã lệnh tham khảo
‘ Câu lệnh sau yêu cầu các biến phải khai báo
Option Explicit
Dim MaSV As Integer, MaL As Integer ' Chứa Mã SV và Mã lớp

Private Sub Form_Load()
Dim rs As New ADODB.Recordset
cboLop.Clear: cboMaL.Clear
rs.Open "select * from Lop order by TenL", Db
Do While Not rs.EOF
cboMaL.AddItem rs!MaL
cboLop.AddItem rs!TenL
rs.MoveNext
Loop
ClearAll
End Sub
' Chương trình con liệt kê DSSV
Public Sub LietkeDSSV(MaL As Integer)
Dim rs As New ADODB.Recordset
lstHoten.Clear: lstMaSV.Clear
ClearAll ‘ Gọi Chương trình con xoá các thông tin

rs.Open "select * from Sinhvien where MaL=" & MaL & " order by Hoten", Db
Do While Not rs.EOF
lstHoten.AddItem rs!Hoten
lstMaSV.AddItem rs!MaSV
rs.MoveNext
Loop
MaSV = 0
End Sub
' Chương trình con hiển thị thông tin sinh viên
Private Sub HienthiSV(MaSV As Integer)
Dim rs As New ADODB.Recordset
rs.Open "select * from Sinhvien where MaSV=" & MaSV & "", Db
If Not rs.EOF Then
txtHoten.Text = rs!Hoten
chkGioitinh.Value = IIf(rs!Gioitinh = True, 1, 0)
txtNgaysinh.Text = rs!Ngaysinh & ""
txtNoisinh.Text = rs!Noisinh & ""
txtMon1.Text = rs!Mon1 & "": txtMon2.Text = rs!Mon2 & ""
txtMon3.Text = rs!Mon3 & ""
txtDTB.Text = rs!dtb & ""
txtXeploai.Text = rs!Xeploai & ""
Else
ClearAll ‘ Gọi Chương trình con xoá các thông tin
End If
End Sub
' Chương trình con xoá các thông tin
Private Sub ClearAll()
txtHoten.Text = "": txtNgaysinh.Text = "": txtNoisinh.Text = ""
txtMon1.Text = "": txtMon2.Text = "": txtMon3.Text = ""
txtDTB.Text = "": txtXeploai.Text = ""

End Sub
‘ Xảy ra khi chọn một lớp từ danh sách lớp
Private Sub cboLop_Click()
MaL = cboMaL.List(cboLop.ListIndex) ' Mã lớp đang xem
LietkeDSSV MaL
End Sub
‘ Xảy ra khi chọn một sinh viên từ danh sách
Private Sub lstHoten_Click()
MaSV = lstMaSV.List(lstHoten.ListIndex) ' Mã sinh viên hiện tại
HienthiSV MaSV ' Gọi CTC hiển thị thông tin sinh viên
End Sub
‘ Xảy ra khi nhắp nút Tạo mới một sinh viên
Private Sub cmdNew_Click() ' Nút tạo mới
ClearAll ‘ Gọi Chương trình con xoá các thông tin
MaSV = 0
End Sub
‘ Lưu thông tin về sinh viên
Private Sub cmdSave_Click() ' Nút lưu
Dim rs As New ADODB.Recordset
If txtHoten.Text = "" Or txtNgaysinh.Text = "" Or MaL = 0 Then
MsgBox "Chua nhap Ho ten, Ngay sinh hoac chua chon Lop !", vbCritical
Else
rs.Open "select * from Sinhvien where MaSV='" & MaSV & "'", Db, adOpenStatic,
adLockOptimistic
If rs.EOF Then rs.AddNew
rs!Hoten = txtHoten.Text
rs!Ngaysinh = txtNgaysinh.Text
rs!Noisinh = txtNoisinh.Text
rs!Gioitinh = IIf(chkGioitinh.Value = 1, True, False)
rs!Mon1 = Val(txtMon1.Text)

rs!Mon2 = Val(txtMon2.Text)
rs!Mon3 = Val(txtMon3.Text)
txtDTB.Text = Round((rs!Mon1 + rs!Mon2 + rs!Mon3) / 3, 2) ' Làm tròn 2 chữ số
Select Case Val(txtDTB.Text)
Case Is >= 8: txtXeploai.Text = "Giỏi"
Case Is >= 7: txtXeploai.Text = "Khá"
Case Is >= 5: txtXeploai.Text = "Trung bình"
Case Else: txtXeploai.Text = "Yếu"
End Select
rs!dtb = txtDTB.Text
rs!Xeploai = txtXeploai.Text
rs!MaL = MaL
rs.Update ' Lưu vào CSDL
If MaSV = 0 Then LietkeDSSV MaL
End If
End Sub
‘ Xoá thông tin về sinh viên
Private Sub cmdDelete_Click()
Dim traloi As Integer
If MaSV = 0 Then
MsgBox "Phai chon SV can xoa", vbInformation
Else
traloi = MsgBox("Ban muon xo SV nay hay khong?", vbQuestion + vbYesNo)
If traloi = vbYes Then
Db.Execute "delete from Sinhvien where MaSV=" & MaSV & ""
LietkeDSSV MaL
End If
End If
End Sub
Một số yêu cầu khác

1. Ứng dụng thanh tiến trình ProgressBar trong khi hiển thị danh sách sinh viên của
một lớp.

2. Xây dựng hệ thống Menu cho form gồm
các mục như hình bên. Khi nhắp chọn
các mục ‘Chon mau nen’ và ‘Chon hinh
nen’ sẽ cho phép đổi màu nền và hình
nền của form (sử dụng điều khiển
Common Dialog).




3. Xây dựng thanh công cụ (Toolbar) gồm
một số mục tuỳ ý. Chẳng hạn như hình
sau:

BÀI THỰC HÀNH SỐ 5
Viết chương trình quản lý sinh viên dạng đơn giản.
Giao diện
Tạo giao diện với các đối tượng được đặt tên (trong thuộc tính Name) như trên hình sau:




















Trong đó:
- ImageList1: Chứa các hình ảnh làm biểu tượng cho các nút lệnh trên Toolbar1
- ImageList2: Chứa các hình ảnh làm biểu tượng cho các nút lệnh trên TreeView1
- Nội dung Menu: Với các mục có tên (Name) như hình bên phải

Mã lệnh tham khảo
Option Explicit
Dim MaSV As Integer, MaL As Integer ' Chứa mã SV và mã lớp được chọn
‘ Định nghĩa CTC xoá các nội dung các TextBox (Vào Tools → Add Procedure → …)
Private Sub ClearAll()
txtHoten.Text = "": txtNgaysinh.Text = "": txtNoisinh.Text = ""
txtMon1.Text = "": txtMon2.Text = "": txtMon3.Text = "" : txtDTB.Text = "": txtXeploai.Text = ""
End Sub
TreeView1
ImageList2
ImageList1
ToolBar1
ProgressBar1

CommonDialog1

Các đối tượng lần lượt có
tên là: txtHoten, chkGioitinh,
txtNgaysinh. txtNoisinh,
txtMon1, txtMon2, txtMon3,
txtDTB, txtXeploai
Các nút lần lượt có tên là:
cmdTinhDTB, cmdNew,
cmdSave, cmdDelete

mnuHethong
mnuDMLop
mnuDMNganh
mnuLine1
mnuKetthuc
mnuDinhdang
mnuMauchu
mnuHinhnen
mnuCongcu
mnuTimkiem
mnuThongke
Name
‘ Thêm các cột vào ListView1
Public Sub AddColumns()
ListView1.View = lvwReport ' Xem dạng bảng
ListView1.ColumnHeaders.Add , , "Họ tên", 3000, 0
ListView1.ColumnHeaders.Add , , "Ngày sinh", 1500, 1
ListView1.ColumnHeaders.Add , , "Nơi sinh", 1500, 2
End Sub
‘ Nạp nội dung vào cây TreeView
Public Sub LoadTree()

Dim nod As Node, rs As New ADODB.Recordset
' Thêm nút gốc
Set nod = TreeView1.Nodes.Add(, , "R", "Quản lý sinh viên", 1, 1)
nod.ForeColor = vbRed: nod.Bold = True: nod.Expanded = True
' Thêm các nút ngành học
rs.Open "select * from Nganh", Db
Do While Not rs.EOF
Set nod = TreeView1.Nodes.Add("R", tvwChild, "N" & rs!MaNG, rs!TenNG, 2, 3)
nod.Bold = True: nod.ForeColor = vbBlue
rs.MoveNext
Loop
' Thêm các nút lớp
rs.Close
rs.Open "select * from Lop", Db
Do While Not rs.EOF
Set nod = TreeView1.Nodes.Add("N" & rs!MaNG, tvwChild, "L" & rs!MaL, rs!TenL, 4, 5)
rs.MoveNext
Loop
End Sub
‘ Sự kiện xảy ra khi form hiển thị
Private Sub Form_Load()
ClearAll ‘ Gọi các CTC
LoadTree
AddColumns
End Sub
‘ Định nghĩa CTC liệt kê DS sinh viên của lớp có mã là MaL vào ListView1
Public Sub LietkeDSSVListView(MaL As Integer)
Dim rs As New ADODB.Recordset, Item As ListItem
ListView1.ListItems.Clear ' Xoá nội dung hiện tại
ClearAll ' Xoá các TextBox

rs.Open "select * from Sinhvien where MaL=" & MaL, Db, adOpenStatic, adLockOptimistic
' Thiết lập cho thanh tiến trình
ProgressBar1.Min = 0: ProgressBar1.Value = 0
If Not rs.EOF Then
rs.MoveLast: ProgressBar1.Max = rs.RecordCount: rs.MoveFirst
End If
' Hiển thị danh sách SV vào ListView1
Do While Not rs.EOF
Set Item = ListView1.ListItems.Add
Item.Key = "SV" & rs!MaSV
Item.Text = rs!Hoten & ""
Item.SubItems(1) = rs!Ngaysinh & ""
Item.SubItems(2) = rs!Noisinh & ""
rs.MoveNext
ProgressBar1.Value = ProgressBar1.Value + 1 : DoEvents
Loop
ProgressBar1.Value = 0 : MaSV = 0 ' Xoá thanh tiến trình
End Sub
‘ Sự kiện xảy ra khi chọn một lớp nào đó từ cây TreeView1
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
If Left(Node.Key, 1) = "L" Then ' Nếu chọn lớp
MaL = Mid(Node.Key, 2)
LietkeDSSVListView MaL
Else ' Nếu không chọn lớp
ListView1.ListItems.Clear ' Xoá các nội dung
MaL = 0: ClearAll
End If
End Sub
‘ Định nghĩa CTC hiển thị thông tin của SV có mã SV là MaSV
Private Sub HienthiSV(MaSV As Integer)

Dim rs As New ADODB.Recordset
rs.Open "select * from Sinhvien where MaSV=" & MaSV & "", Db
If Not rs.EOF Then
txtHoten.Text = rs!Hoten
chkGioitinh.Value = IIf(rs!Gioitinh = True, 1, 0)
txtNgaysinh.Text = rs!Ngaysinh & "" : txtNoisinh.Text = rs!Noisinh & ""
txtMon1.Text = rs!Mon1 & "": txtMon2.Text = rs!Mon2 & "": txtMon3.Text = rs!Mon3 & ""
txtDTB.Text = rs!DTB & "" : txtXeploai.Text = rs!Xeploai & ""
Else
ClearAll ‘ Xoá nội dung
End If
End Sub
‘ Sự kiện xảy ra khi nhắp chọn một phần tử trong ListView1
Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
MaSV = Mid(Item.Key, 3) ' Mã SV được chọn
HienthiSV MaSV ‘ Gọi CTC hiển thị thông tin của SV
End Sub
‘ Nút Tạo mới một sinh viên
Private Sub cmdNew_Click()
MaSV = 0 : ClearAll ' Xoá nội dung
End Sub
‘ Nút Lưu thông tin sinh viên
Private Sub cmdSave_Click()
Dim rs As New ADODB.Recordset
If txtHoten.Text = "" Or txtNgaysinh.Text = "" Or MaL = 0 Then
MsgBox "Chua nhap Ho ten, Ngay sinh hoac chua chon Lop !", vbCritical
Else
rs.Open "select * from Sinhvien where MaSV=' " & MaSV & " ' ", Db, adOpenStatic, adLockOpt…
If rs.EOF Then rs.AddNew
rs!Hoten = txtHoten.Text

rs!Ngaysinh = txtNgaysinh.Text : rs!Noisinh = txtNoisinh.Text
rs!Gioitinh = IIf(chkGioitinh.Value = 1, True, False)
rs!Mon1 = Val(txtMon1.Text) : rs!Mon2 = Val(txtMon2.Text) : rs!Mon3 = Val(txtMon3.Text)
txtDTB.Text = Round((rs!Mon1 + rs!Mon2 + rs!Mon3) / 3, 2)
Select Case Val(txtDTB.Text)
Case Is >= 8: txtXeploai.Text = "Giỏi"
Case Is >= 7: txtXeploai.Text = "Khá"
Case Is >= 5: txtXeploai.Text = "Trung bình"
Case Else: txtXeploai.Text = "Yếu"
End Select
rs!DTB = txtDTB.Text : rs!Xeploai = txtXeploai.Text : rs!MaL = MaL
rs.Update ' Lưu vào CSDL
If MaSV = 0 Then LietkeDSSVListView MaL
End If
End Sub
‘ Nút Delete (xoá sinh viên)
Private Sub cmdDelete_Click()
Dim traloi As Integer
If MaSV = 0 Then
MsgBox "Phai chon SV can xoa", vbInformation
Else
traloi = MsgBox("Ban muon xo SV nay hay khong?", vbQuestion + vbYesNo)
If traloi = vbYes Then
Db.Execute "delete from Sinhvien where MaSV=" & MaSV & ""
LietkeDSSVListView MaL
End If
End If
End Sub
‘ Nút Tính ĐTB cho tất cả các SV
Private Sub cmdTinhDTB_Click()

Dim rs As New ADODB.Recordset
rs.Open "select * from Sinhvien", Db, adOpenStatic, adLockOptimistic
' Thiết lập thanh tiến trình
ProgressBar1.Min = 0: ProgressBar1.Value = 0
If Not rs.EOF Then
rs.MoveLast: ProgressBar1.Max = rs.RecordCount: rs.MoveFirst
End If
' Tính ĐTB cho từng SV
Do While Not rs.EOF
rs!DTB = Round((rs!Mon1 + rs!Mon2 + rs!Mon3) / 3, 2)
rs.Update
ProgressBar1.Value = ProgressBar1.Value + 1
rs.MoveNext
Loop
ProgressBar1.Value = 0
End Sub
‘ Menu chọn hình nền cho form
Private Sub mnuHinhnen_Click()
CommonDialog1.Filter = "Picture file (*.jpg)|*.jpg|All files (*.*)|*.*"
CommonDialog1.FilterIndex = 1
CommonDialog1.ShowOpen
frmMain.Picture = LoadPicture(CommonDialog1.FileName)
End Sub
‘ Menu chọn màu nền cho form
Private Sub mnuMaunen_Click()
CommonDialog1.ShowColor
ListView1.BackColor = CommonDialog1.Color
End Sub
‘ Sự kiện xảy ra khi click chọn các nút lệnh của Toolbar
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)

Select Case Button.Index
Case 1: MsgBox "Ban vua chon nut Phan quyen"
Case 2: MsgBox "Ban vua chon nut Doi mat khau"
Case 4: mnuMaunen_Click ' Chon mau nen
Case 5: mnuHinhnen_Click ' Chon hinh nen
End Select
End Sub
‘ Sự kiện xảy ra khi click chuột vào các mục menu con của nút kiểu DropDown
Private Sub Toolbar1_ButtonMenuClick(ByVal ButtonMenu As MSComctlLib.ButtonMenu)
Select Case ButtonMenu.Index
Case 1: MsgBox "Tim kiem theo ten !"
Case 2: MsgBox "Tim kiem theo ngay sinh !"
Case 3: MsgBox "Tim kiem theo noi sinh !"
End Select
End Sub
Form Tìm kiếm sinh viên (frmTimkiem)
Xây dựng form frmTimkiem để tìm kiếm thông thông tin về sinh viên theo họ tên, ngày
sinh và nơi sinh.
Giao diện:
Xem hình sau:











Mã lệnh tham khảo:
Option Explicit
‘ Thiết lập các thuộc tính cho ListView1
Private Sub Form_Load()
ListView1.View = lvwReport ' Chế độ xem dạng bảng
ListView1.FullRowSelect = True ‘ Cho phép chọn cả dòng
ListView1.GridLines = True
ListView1.ColumnHeaders.Add , , "Họ tên", 3000, 0
ListView1.ColumnHeaders.Add , , "Ngày sinh", 1500, 1
ListView1.ColumnHeaders.Add , , "Nơi sinh", 1500, 2
End Sub
‘ Nút Tìm kiếm
Private Sub Command1_Click()
Dim rs As New ADODB.Recordset, item As ListItem
If Text1.Text = "" Then
MsgBox "Phai nhap thong tin tim kiem !", vbCritical
Else
If Option1.Value = True Then ‘ Tìm kiếm theo tên
rs.Open "select * from Sinhvien where Hoten Like '%" + Text1.Text + "%' ", Db
End If
If Option2.Value = True Then ‘ Tìm kiếm theo ngày sinh
rs.Open "select * from Sinhvien where Ngaysinh=' " + Text1.Text + " ' ", Db
End If
If Option3.Value = True Then ‘ Tìm kiếm theo nơi sinh
rs.Open "select * from Sinhvien where Noisinh=' " + Text1.Text + " ' ", Db
End If
ListView1.ListItems.Clear
' Liệt kê các kết quả tìm kiếm được vào ListView1
Do While Not rs.EOF
Set item = ListView1.ListItems.Add

item.Text = rs!Hoten & ""
item.SubItems(1) = rs!Ngaysinh & ""
item.SubItems(2) = rs!Noisinh & ""
rs.MoveNext
Loop
End If
End Sub
Text1 Command1
Option
1,2,3
ListView1
Form thống kê sinh viên (frmThongke)

Giao diện:
Giống như hình bên, trong đó các
đối tượng có tên (thuộc tính Name) mặc
định.








Mã lệnh tham khảo:
Option Explicit
‘ Thiết lập các thuộc tính cho ListView1
Private Sub Form_Load()
ListView1.View = lvwReport ' Chế độ xem dạng bảng

ListView1.FullRowSelect = True ‘ Cho phép chọn cả dòng
ListView1.ColumnHeaders.Add , , "Tên lớp", 3000, 0
ListView1.ColumnHeaders.Add , , "Thống kê", 1500, 1
End Sub
‘ Nút Thống kê
Private Sub Command1_Click()
Dim rs As New ADODB.Recordset, item As ListItem
Dim sql As String ‘ Biến sql chứa câu lệnh SQL để thống kê
If Option1.Value = True Then ‘ Thống kê theo số lượng mỗi lớp
sql = sql & "select TenL, Count(MaSV) as Thongke from Sinhvien as A, Lop as B "
sql = sql & "Where (A.MaL=B.MaL) Group by TenL order by TenL"
End If
If Option2.Value = True Then ‘ Thống kê theo ĐTB cao nhất mỗi lớp
sql = sql & "select TenL, Max(DTB) as Thongke from Sinhvien as A, Lop as B "
sql = sql & "Where (A.MaL=B.MaL) Group by TenL order by Max(DTB) DESC"
End If
If Option3.Value = True Then
sql = sql & "select TenL, Count(MaSV) as Thongke from Sinhvien as A, Lop as B "
sql = sql & "Where (A.MaL=B.MaL) and (DTB<5) Group by TenL order by Count(MaSV) DESC"
End If
rs.Open sql, Db ‘ => Thực hiện truy vấn với câu lệnh SQL nằm trong biến sql
ListView1.ListItems.Clear
' Liệt kê các kết quả tìm kiếm được vào ListView1
Do While Not rs.EOF
Set item = ListView1.ListItems.Add
item.Text = rs!TenL & ""
item.SubItems(1) = rs!Thongke & ""
rs.MoveNext
Loop
End Sub


Lưu ý: Sinh viên tự nghĩ ra một số tiêu chuẩn khác để thống kê thêm !
BÀI THỰC HÀNH SỐ 6
Viết chương trình quản lý sinh viên sử dụng các điều
khiển ADO có cấu trúc như hình bên.
* Giao diện: Gồm có các đối tượng sau:
- 3 đối tượng kết nối CSDL ADODC: Adodc1 (bảng
Sinhvien), Adodc2 (bảng Dantoc) và Adcdc3 (bảng
Tongiao). Mỗi đối tượng Adodc gồm các thuộc tính:
o ConnectioString: nhắp nút ‘…’ → nhắp ‘Build’ → chọn ‘Microsoft OLE DB
Provider for SQL Server’ → nhắp ‘Next>>’ → nhập các thông tin kết nối đến
CSDL
o RecordSource: chọn nguồn dữ liệu lấy từ bảng Sinhvien
- Đối tượng DataGrid1: Hiển thị danh sách SV
o RecordSource: chọn Adodc1
o Thêm các cột: RightClick → Properties → Thêm vào 3 cột Hoten, Ngaysinh,
Noisinh.
- Các đối tượng: txtHoten, chkGioitinh, txtNgaysinh, txtNoisinh, txtMon1, txtMon2,
txtMon3, txtDTB, txtXeploai thiết lập các thuộc tính: DataSource và DataField
- Các đối tượng DataCombo1 và DataList1 thiết lập các thuộc tính: DataSource,
DataField,
RowSource,
ListField,
BoundColumn













* Mã lệnh:
Dim MaL As Integer ' Chứa mã lớp hiện đang được chọn
Public Sub LoadTree()
‘ Giống bài thực hành trước
End Sub
‘ Sự kiện xảy ra khi form được hiển thị
Private Sub Form_Load()
Set Db = New ADODB.Connection
Db.ConnectionString = Adodc1.ConnectionString
On Error Resume Next ' Bẫy lỗi
Db.Open
If Db.Errors.Count <> 0 Then ' Nếu bị lỗi
MsgBox "Loi xay ra: " & Err.Description, vbCritical
Unload Me
End If
DataGrid1
TreeView1
ToolBar1
Các đối tượng lần lượt có
tên là: txtHoten, chkGioitinh,
txtNgaysinh. txtNoisinh,
txtMon1, txtMon2, txtMon3,
txtDTB, txtXeploai
Các nút lần lượt có tên là:

cmdTinhDTB, cmdNew,
cm
dSave, cmdDelete

DataGrid1.AllowUpdate = False
LoadTree
End Sub
‘ Xảy ra khi nhắp chọn một lớp nào đó trên cây
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
If Left(Node.Key, 1) = "L" Then ' Nếu chọn lớp
MaL = Mid(Node.Key, 2)
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select * from Sinhvien where MaL=" & MaL
Adodc1.Refresh
End If
End Sub
‘ Nút Tạo mới sinh viên
Private Sub cmdNew_Click()
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("MaL") = MaL
End Sub
‘ Nút lưu thông tin sinh viên
Private Sub cmdSave_Click()
With Adodc1.Recordset
.Fields("DTB") = Round((.Fields("Mon1") + .Fields("Mon2") + .Fields("Mon3")) / 3, 2)
Select Case .Fields("DTB")
Case Is >= 8: .Fields("Xeploai") = "Gioi"
Case Is >= 7: .Fields("Xeploai") = "Kha"
Case Is >= 5: .Fields("Xeploai") = "Trung binh"
Case Else: .Fields("Xeploai") = "Yeu"

End Select
.Update ' Lưu ĐTB và Xeploai vào CSDL
End With
End Sub
‘ Nút xoá sinh viên
Private Sub cmdDelete_Click()
Dim traloi As Integer
traloi = MsgBox("Ban muon xoa SV nay hay khong?", vbQuestion + vbYesNo)
If traloi = vbYes Then Adodc1.Recordset.Delete
End Sub
‘ Tính ĐTB cho tất cả các sinh viên
Private Sub cmdTinhDTB_Click()
Dim rs As New ADODB.Recordset
rs.Open "select * from Sinhvien", Db, adOpenStatic, adLockOptimistic
ProgressBar1.Min = 0: ProgressBar1.Value = 0
If Not rs.EOF Then
rs.MoveLast: ProgressBar1.Max = rs.RecordCount: rs.MoveFirst
End If
Do While Not rs.EOF
rs!DTB = Round((rs!Mon1 + rs!Mon2 + rs!Mon3) / 3, 2)
Select Case rs!DTB
Case Is >= 8: rs!Xeploai = "Gioi"
Case Is >= 7: rs!Xeploai = "Kha"
Case Is >= 5: rs!Xeploai = "Trung binh"
Case Else: rs!Xeploai = "Yeu"
End Select
rs.Update
ProgressBar1.Value = ProgressBar1.Value + 1 : rs.MoveNext
Loop
ProgressBar1.Value = 0

End Sub

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×