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.. 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... BÀI THỰC HÀNH SỐ 4 Viết chư
Trang 1BÀ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: S = p ( p − a )( p − b )( p − c ) với
2
c b a
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
Trang 2Text5.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 ax2 + bx + c = 0 (a ≠ 0)
2 Giải hệ phương trình bậc nhất
= +
= +
2 2 2
1 1 1
c y b x a
c y b x a
Hướng dẫn:
D=
2
2
1
1
b
a
b
a
Dx=
2
2
1
1
c
b
c
b
; Dy=
2 2
1 1
a c
a c
- D ≠ 0: Có nghiệm x=Dx/D và
y=Dy/D
- D=0:
o Nếu Dx=0 và Dy=0: Vô số
nghiệm
o Nếu Dx≠ 0 hoặc Dy≠ 0: Vô
nghiệm
Trang 3BÀ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
Trang 4Text1.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:
Trang 5BÀ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()
Trang 6If 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
Trang 7BÀ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
Trang 8Form 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
Trang 9' 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"
Trang 10Case 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: