Chương 5 Xây dựng các màn hình quản lý
5.7 Màn hình chi tiết trả sách
Xây dựng màn hình theo hình sau:
STT Tên Control Loại Tiêu đề (Caption)
1 lblDocGia Label “Độc giả”
2 lblTenDocGia Label Họ tên độc giả
3 lblNgayTra Label “Ngày trả”
4 lblNgay Label Giá trị ngày trả
5 group1 GroupBox
6 lblSachMuon Label “Sách đang mượn”
7 lblSach Label Giá trị số sách đang mượn
8 SDMList ListView
9 btnChon Button “Chọn”
Chương 5 - Xây dựng các màn hình quản lý
138 Màn hình chi tiết trả sách được cài đặt thành 2 lớp: lớp ChiTietPhieuTra_Form là lớp giao diện và lớp PhieuTraSach là lớp xử lý chính. Trong đó, lớp PhieuTraSach đã trình bày ở trên.
5.7.1 ChiTietPhieuTra_Form
Bên cạnh các controls mô tả ở trên, lớp ChiTietPhieuTra_Form còn các biến thành phần và phương thức như sau:
Lớp ChiTietPhieuTra_Form Thuộc tính
Tên Lớp Ý nghĩa
pt PhieuTraSach biến thành phần đảm nhận
việc xử lý thông tin
MaPhieuTra Integer Mã của phiếu trả hiện hành
MaDocGia Integer Mã độc giả của phiếu trả
hiện hành
TongTienPhat Double Tổng tiến phạt của phiếu trả hiện hành
Các hàm xử lý biến cố
Tên Điều kiện phát sinh Ý nghĩa
ChiTietPhieuTra_Form_Load Form load Hiện thị dách sách sách đã trả và chưa trả của phiếu này
btnChon_Click Người dùng nhấn btnChon Trả một quyển sách btnBoChon_Click Người dùng nhấn
btnBoChon
Hủy trả một quyển sách SMList_DoubleClick Người dùng double click
SMList
Trả một quyển sách STList_DoubleClick Người dùng double click
STList
Hủy trả một quyển sách Phương thức
Tên Ý nghĩa
HienThiDanhSachSachMuon Hiển thị danh sách sách đang mượn còn chưa trả HienThiDanhSachSachTra Hiển thị danh sách mượn đã trả
ThemSachTra Đưa một quyển sách đang mượn vào danh sách sách trả (trả sách)
XoaSachTra Đưa một quyển sách từ danh sách trả về lại danh sách sách mượn
Khi màn hình vừa được load, ứng dụng phải hiển thị được cho người dùng thông tin về độc giả cần trả sách, danh sách các quyển sách đang mượn và danh sách các quyển sách đã trả ứng với phiếu trả đang xét. Do đó, chúng ta cài đặt hàm xử lý cho sự kiện form load:
Private Sub ChiTietPhieuTra_Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
HienThiDanhSachSachMuon()
HienThiDanhSachSachTra() End Sub
Các hàm hiển thị được cài đặt như sau:
Private Sub HienThiDanhSachSachMuon() SMList.Items.Clear()
Dim s_dt As DataTable = pt.LayDanhSachSachMuon(MaDocGia) Dim i As Integer
Dim str As String
Dim lvi As ListViewItem Dim d As Date
For i = 0 To s_dt.Rows.Count - 1 str = s_dt.Rows(i)("TenSach")
lvi = SMList.Items.Add((i + 1).ToString) str = s_dt.Rows(i)("MaSach")
lvi.SubItems.Add(str)
str = s_dt.Rows(i)("TenSach") lvi.SubItems.Add(str)
str = s_dt.Rows(i)("TenTheLoai") lvi.SubItems.Add(str)
str = s_dt.Rows(i)("TacGia") lvi.SubItems.Add(str)
d = s_dt.Rows(i)("NgayMuon")
str = d.Month.ToString + "/" + d.Day.ToString + "/" + d.Year.ToString
lvi.SubItems.Add(str) Next
txtNumSM.Text = s_dt.Rows.Count.ToString End Sub
Private Sub HienThiDanhSachSachTra() STList.Items.Clear()
Dim s_dt As DataTable = pt.LayDanhSachSachTra(MaPhieuTra) Dim i As Integer
Dim str As String
Dim lvi As ListViewItem Dim songayphat As Integer Dim d As Date
TongTienPhat = 0
Dim tienphat As Double
For i = 0 To s_dt.Rows.Count - 1 str = s_dt.Rows(i)("TenSach")
lvi = STList.Items.Add((i + 1).ToString) str = s_dt.Rows(i)("MaSach")
lvi.SubItems.Add(str)
str = s_dt.Rows(i)("TenSach")
Chương 5 - Xây dựng các màn hình quản lý
140
lvi.SubItems.Add(str) 'Tính tiền phạt
songayphat = s_dt.Rows(i)("SoNgayMuon") - pt.DocThamSo("ThoiGianMuonToiDa")
If songayphat > 0 Then
tienphat = pt.DocThamSo("DonGiaPhat") * songayphat str = tienphat.ToString
TongTienPhat = TongTienPhat + tienphat Else
str = "0"
End If
lvi.SubItems.Add(str) Next
txtNumST.Text = s_dt.Rows.Count.ToString End Sub
Tất cả các công việc liên quan đến đọc và xử lý dữ liệu đều được ủy nhiệm cho biến thành phần pt thụoc lớp PhieuTraSach chứ không thực hiện trực tiếp ở lớp gian diện này. Các phương thức ở lớp này chỉ đơn giản làm việc nhận kết quả trả về từ biến pt và hiển thị lên màn hình.
Tiếp theo, chúng ta bắt đầu cài đặt chức năng cho màn hình. Trước tiên, ta cài đặt hàm xử lý cho sự kiện click của nút btnChon. Khi người dùng chon 1 quyển sách đang mượn và click nút này, sách này sẽ được chuyển qua danh sách sách trả.
Private Sub btnChon_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnChon.Click
ThemSachTra() End Sub
Hàm ThemSachTra được cài đặt như sau:
Private Sub ThemSachTra()
If (SMList.SelectedIndices.Count > 0) Then
'Kiểm tra xem người dùng này đã mược đủ 5 quyển chưa Dim lvi As ListViewItem = SMList.SelectedItems(0) 'Cập nhật lại CSDL
pt.ThemSachTra(MaPhieuTra.ToString, lvi.SubItems(1).Text, _ CDate(SMList.Items(SMList.SelectedIndices.Item(0)).SubItems(5).T ext), CDate(txtNgayTra.Text))
'Refresh
HienThiDanhSachSachMuon() HienThiDanhSachSachTra()
End If End Sub
Ta có thể dễ thấy, tất cả xử lý đều được ủy nhiệm cho biến pt thuộc lóp PhieuTraSach. Tương tự, ta cài đặt chức năng loại một quyển sách ra khỏi danh sách sách trả:
Private Sub btnBoChon_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBoChon.Click
XoaSachTra() End Sub
Private Sub XoaSachTra()
If STList.SelectedIndices.Count > 0 Then
Dim lvi As ListViewItem = STList.SelectedItems(0) 'Cập nhật CSDL
pt.XoaSachTra(MaPhieuTra.ToString, lvi.SubItems(1).Text) 'Refresh
HienThiDanhSachSachMuon() HienThiDanhSachSachTra()
End If End Sub
Để tăng tính tiện dụng cho chương trình, thay vì cứ phải chọn 1 quyển sách rồi nhấn nút Chọn hay bỏ chọn, người dụng có thể double click trên danh sách sách mượn hay danh sách sách trả để tiến hành trả 1 quyển sách hay loại sách ra khỏi danh sách sách trả.
Private Sub SMList_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles SMList.DoubleClick
ThemSachTra() End Sub
Private Sub STList_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles STList.DoubleClick
XoaSachTra() End Sub