Màn hình Thanh lý sách

Một phần của tài liệu Hướng dẫn cài đặt chương trình quản lý thư viện (Trang 160 - 169)

Chương 5 Xây dựng các màn hình quản lý

5.10 Màn hình Thanh lý sách

Xây dựng màn hình theo hình sau:

STT Tên Control Loại Tiêu đề (Caption) 1 toolbar Toolbar

2 group1 Groupbox “Thông tin chung”

3 PhieuThanhLyList ListView

4 lblTongptl Label “Tổng số phiếu thanh lý”

5 lblTong Label Giá trị tổng số phiếu thanh lý 6 btnChiTietThanhLy Button “Chi tiết thanh lý”

7 group2 Groupbox “Thông tin chi tiết”

8 lblNgayThanhLy Label “Ngày thanh lý”

9 dtNgayThanhLy DateTimePicker

10 lblNhanVien Label “Nhân viên”

11 cbNhanVien ComboBox

Chương 5 - Xây dựng các màn hình quản lý

162 Lớp PhieuThanhLy_Form

Thuộc tính

Tên Lớp Ý nghĩa

ptl PhieuThanhLy Biến thành phần đảm nhận

việc xử lý thông tin Các hàm xử lý biến cố

Tên Điều kiện phát sinh Ý nghĩa

PhieuThanhLy_Form_Load Form load Hiển thị danh sách phiếu thanh lý và các thông tin liên quan

PTLList_SelectedIndexChanged Khi người dùng chọn 1 item khác trên listview

Hiển thị thông tin chi tiết của phiếu thanh lý được chọn

ToolBar1_ButtonClick Khi người dùng nhấn nút thêm, xóa, sửa hay soạn lại trên toolbar

Thực hiện các tác vụ tương ứng

btnChiTiet_Click Khi người dùng nhấn nút btnChiTietThanhLy

Hiển thị màn hình chi tiết phiếu thành lý

Phương thức

Tên Ý nghĩa

HienThiDanhSachNhanVien Nạp danh sách nhân viên lên cbNhanVien HienThiDanhSachPhieuThanhLy Hiển thị danh sách phiếu thanh lý lên listview HienThiThongTinChiTiet Hiển thị thông tin chi tiết của phiếu thanh lý KiemTraNhap Kiểm tra dũ liệu nhập có hợp lệ không

Trước hết, khi màn hình hiển thị, ta cần phải hiển thị cho người dùng danh sách các phiếu thanh lý. Do đó, ta sẽ viết biến cố xử lý cho sự kiện form load. Trong hàm xử lý sự kiện này, ta sẽ phải hiển thị 2 thông tin: danh sách nhân viên và danh sách phiếu thanh lý.

Private Sub PhieuThanhLy_Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

HienThiDanhSachNhanVien() HienThiDanhSachPhieuThanhLy() End Sub

Việc hiển thị do được thực hiện nhiều lần nên ta cài đặt chúng thành các hàm. Cụ thể các hàm như sau:

Private Sub HienThiDanhSachNhanVien() Dim i As Integer

Dim str As String Dim dt As DataTable

dt = ptl.LayDanhSachNhanVien For i = 0 To dt.Rows.Count - 1

str = CType(dt.Rows(i)("HoTenNhanVien"), String) cbNhanVien.Items.Add(str)

Next

If cbNhanVien.Items.Count > 0 Then cbNhanVien.SelectedIndex = 0

End If

End Sub

Lưu ý là việc đọc dữ liệu được ủy nhiệm cho lớp xử lý là lớp PhieuThanhLy chứ không thực hiện trực tiếp ở đây, vì đây là lớp giao diện, không đảm nhiệm các tác vụ xử lý. Tương tự cho các phương thức còn lại:

Private Sub HienThiDanhSachPhieuThanhLy() PTLList.Items.Clear()

Dim dt As DataTable Dim d As Date

dt = ptl.LayDanhSachPhieuThanhLy Dim i As Integer

Dim str As String

For i = 0 To dt.Rows.Count - 1 Dim lvi As ListViewItem

lvi = PTLList.Items.Add((i + 1).ToString()) 'Số thứ tự của d = dt.Rows(i)("NgayThanhLy")

str = d.Month.ToString + "/" + d.Day.ToString + "/" + d.Year.ToString

lvi.SubItems.Add(str)

str = dt.Rows(i)("HoTenNhanVien").ToString lvi.SubItems.Add(str)

If (i + 1) Mod 2 = 0 Then

PTLList.Items(i).BackColor = MainForm.ListRowColor End If

Next

'Hiển thị tổng số nhân viên

lbPTLNum.Text = dt.Rows.Count.ToString End Sub

Sau khi viết xong mã nguồn cho phần form load, chúng ta bắt đầu quan tâm đến các biến cố.

Khi người dùng click chọn một phiếu thanh lý trong listview, chúng ta sẽ hiển thị thông tin chi tiết của phiếu đó. Để làm được điều này, chúng ta viết hàm xử lý cho sự kiện

SelectedIndexChanged của listview.

Private Sub PTLList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles PTLList.SelectedIndexChanged

If PTLList.SelectedIndices.Count > 0 Then

HienThiThongTinChiTiet(PTLList.SelectedIndices.Item(0)) End If

End Sub

Trong đó, hàm HienThiThongTinChiTiet sẽ làm công việc là lấy thông tin của phiếu được chọn đưa lên các textbox và combobox tương ứng. Cài đặt như sau:

Private Sub HienThiThongTinChiTiet(ByVal index As Integer) Dim dt As DataTable

dt = ptl.PhieuThanhLyInfo cbNhanVien.SelectedIndex =

cbNhanVien.FindString(dt.Rows(index)("HoTenNhanVien"))

Chương 5 - Xây dựng các màn hình quản lý

164

Dim f As New ChiTietPhieuThanhLy_Form(ptl)

Dim index As Integer = PTLList.SelectedIndices.Item(0) Dim dt As DataTable = ptl.PhieuThanhLyInfo

Dim d As Date = dt.Rows(index)("NgayThanhLy")

f.txtNhanVien.Text = dt.Rows(index)("HoTenNhanVien")

f.txtNgayTra.Text = d.Month.ToString + "/" + d.Day.ToString +

"/" + d.Year.ToString f.MaPhieuThanhLy =

ptl.PhieuThanhLyInfo.Rows(index)("MaPhieuThanhLy") f.ShowDialog()

End If End Sub

Tiếp theo, ta sẽ viết mã nguồn xử lý cho các tác vụ thêm, xóa, sửa phiếu thanh lý. Để làm việc này, ta viết hàm xử lý sự kiện click của các nút trên Toolbar. Trước hết ta viết hàm xử lý cho tác vụ thêm phiếu thanh lý.

Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles

ToolBar1.ButtonClick

Select Case ToolBar1.Buttons.IndexOf(e.Button) Case 0 'Them

If KiemTraNhap() = True Then

ptl.ThemPhieuThanhLy(dtNgayThanhLy.Value.ToString, cbNhanVien.SelectedIndex)

HienThiDanhSachPhieuThanhLy()

MessageBox.Show("Phiếu thanh lý đã được thêm thành công", "Thông báo", MessageBoxButtons.OK,

MessageBoxIcon.Information) End If

...

Khi thêm một phiếu thanh lý, cần phải kiểm tra thông tin nhập vào có hợp lệ không, việc này được thực hiện thông qua hàm KiemTraNhap. Nếu không tin nhập là không hợp lệ thì sẽ hiện thông báo cho người dùng. Sau khi đảm bào thông tin nhập là hợp lệ, chúng ta tiến hành thêm phiếu thanh lý này vào cơ sở dữ liệu nhờ biến thành phần ptl thuộc lớp PhieuThanhLy. Tiếp đó, do danh sách phiếu thanh lý đã thay đổi, ta tiến hành nạp lại dữ liệu để cập nhật lại danh sách phiếu thanh lý hiển thị trên màn hình. Sau cùng là hiện thị thông báo thêm thành công cho người dùng. Hàm KiemTraNhap được cài đặt như sau:

Private Function KiemTraNhap() As Boolean Return True

End Function

Tại thời điểm này vì chưa có ràng buộc nên hàm KiemTraNhap chỉ đơn giản như trên. Sau này nếu có xuất hiện ràng buộc, chúng ta chỉ việc thay đổi hàm này, phần còn lại của chương trình giữ nguyên.

Sau khi viết xong hàm cho sự kiện thêm, chúng ta tiếp tục viết hàm xử lý cho sự kiện xóa.

...

Case 1 'Xóa

If PTLList.SelectedIndices.Count > 0 Then

If MessageBox.Show("Bạn có chắc chắn là muốn xóa phiếu thanh lý này không ?", "Hỏi lại",

MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then

ptl.XoaPhieuThanhLy(PTLList.SelectedIndices.Item(0)) 'Xóa phiếu mượn này ra khỏi list

PTLList.Items.Remove(PTLList.SelectedItems(0)) 'Thông báo xóa thành công

MessageBox.Show("Phiếu thanh lý đã được xóa.",

"Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)

End If Else

MessageBox.Show("Bạn phải chọn 1 dòng trong danh sách trước", "Thông báo", MessageBoxButtons.OK,

MessageBoxIcon.Exclamation) End If

...

Đối với sư kiện xóa, chúng ta phải hỏi lại người dùng cho chắc chắn. Chỉ khi họ xác nhận lại là họ thực sự muốn xóa, chúng ta mới tiến hành xóa. Tương tự như thêm, việc xóa được thực hiện thông qua biến thành phần ptl thuộc lớp PhieuThanhLy, và sau khi xóa cũng hiển thị lại danh sách phiếu thanh lý. Vì ở đây không có ô nhập liệu nên không cần phải có hàm SoanLai như các màn hình khác.

Tiếp đến, chúng ta viết hàm xử lý cho tác vụ cập nhật phiếu thanh lý.

...

Case 2 'Cap Nhat

If PTLList.SelectedIndices.Count > 0 Then If KiemTraNhap() = True Then

ptl.CapNhatPhieuThanhLy(PTLList.SelectedIndices.Item (0), dtNgayThanhLy.Value.ToString,

cbNhanVien.SelectedIndex) HienThiDanhSachPhieuThanhLy() 'Thong bao cap nhat thanh cong

MessageBox.Show("Phiếu thanh lý đã được cập nhật thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)

End If Else

MessageBox.Show("Bạn phải chọn 1 dòng trong danh sách trước", "Thông báo", MessageBoxButtons.OK,

MessageBoxIcon.Exclamation) End If

Tương tự như thêm phiếu thanh lý, khi tiến hành cập nhật, ta phải kiểm tra xem dữ liệu mới có hợp lệ không bằng hàm KiemTraNhap. Nếu dữ liệu không hợp lệ thì thông báo cho người dùng, còn nếu hợp lệ thì tiến hành cập nhật nhờ biến thành phần ptl, sau đó hiển thị lại danh sách phiếu thanh lý. Sau cùng là thông báo cho người dùng biết là việc cập nhật đã được tiến hành thành công.

Chương 5 - Xây dựng các màn hình quản lý

166 Lớp Phiếu thanh lý

Thuộc tính

Tên Lớp Ý nghĩa

db Database Giao tiếp CSDL

ptl_dt DataTable Danh sách phiếu thanh lý

nv_dt DataTable Danh sách nhân viên

ld_dt DataTable Danh sách lý do thanh lý

Phương thức

Tên Ý nghĩa

New Hàm tạo

LayDanhSachNhanVien Lấy danh sách nhân viên LayDanhSachPhieuThanhLy Lấy danh sách phiếu thanh lý LayDanhSachSach Lấy danh sách sách

LayDanhSachSachThanhLy Lấy danh sách sách thanh lý LayDanhSachLyDoThanhLy Lấy danh sách lý do thanh lý ThemPhieuThanhLy Thêm 1 phiếu thanh lý XoaPhieuThanhLy Xóa 1 phiếu thanh lý CapNhatPhieuThanhLy Cập nhật phiếu thanh lý

ThemSachThanhLy Thêm 1 quyển sách vào danh sách vào danh sách thanh lý XoaSachThanhLy Xóa 1 quyển sách ra khỏi danh sách thanh lý

5.10.3 New

Public Sub New()

db = New Database(MainForm.SvrName, MainForm.DbName, True, "", "") End Sub

5.10.4 LayDanhSachNhanVien

Public Function LayDanhSachNhanVien() As DataTable

'Chúng ta chỉ hiển thị những nhân viên thuộc bộ phận thủ kho

nv_dt = db.Execute("Select MaNhanVien, HoTenNhanVien from NHANVIEN nv, BOPHAN bp" + _

" where nv.MaBoPhan = bp.MaBoPhan and bp.TenBoPhan like N'%thủ%kho%'") Return nv_dt

End Function

5.10.5 LayDanhSachPhieuThanhLy

Public Function LayDanhSachPhieuThanhLy() As DataTable

ptl_dt = db.Execute("Select MaPhieuThanhLy, NgayThanhLy, HoTenNhanVien from PHIEUTHANHLY ptl, NHANVIEN nv where ptl.MaNhanVien =

nv.MaNhanVien") Return ptl_dt End Function

5.10.6 LayDanhSachSach

Public Function LayDanhSachSach() As DataTable

Dim dt As DataTable

'Lấy danh sách các quyển sách CHƯA bị thanh lý, tức là select những quyển sách trong bảng SACH mà không nằm trong bảng CHITIETPHIEUTHANHLY Dim str As String

str = "Select MaSach,TenSach,TenTheLoai,TacGia from SACH s,THELOAISACH tl " + _

"where s.MaTheLoai = tl.MaTheLoai and " + _

"s.MaSach not in (Select MaSach from CHITIETPHIEUTHANHLY) " + _

"order by s.TenSach"

dt = db.Execute(str) Return dt

End Function

5.10.7 LayDanhSachSachThanhLy

Public Function LayDanhSachSachThanhLy(ByVal MaPTL As Integer) As DataTable Dim dt As DataTable

Dim str As String

'Do chúng ta phải hiển thị những quyển sách được mượn nên chúng ta phải truy vấn thông tin chi tiết của chúng

str = "Select s.MaSach,s.TenSach,TenLyDo from CHITIETPHIEUTHANHLY cttl,SACH s,LYDOTHANHLY ld " + _

"where cttl.MaSach = s.MaSach and cttl.MaLyDo = ld.MaLyDo and " + _ "MaPhieuThanhLy = " + MaPTL.ToString

dt = db.Execute(str) Return dt

End Function

5.10.8 LayDanhSachLyDoThanhLy

Public Function LayDanhSachLyDoThanhLy() As DataTable

'Chúng ta chỉ show lên những nhân viên thuộc bộ phận thủ kho ld_dt = db.Execute("Select * from LYDOTHANHLY order by TenLyDo") Return ld_dt

End Function

5.10.9 ThemPhieuThanhLy Tham số:

Tên Kiểu / Lớp Ý nghĩa

ngaythanhly String Ngày thanh lý

index_nv Integer Số thứ tự nhân viên thanh lý Kết quả trả về: True/False

Mã nguồn:

Public Sub ThemPhieuThanhLy(ByVal ngaythanhly As String, ByVal index_nv As

Chương 5 - Xây dựng các màn hình quản lý

168

",'" + ngaythanhly + "'," +

nv_dt.Rows(index_nv)("MaNhanVien").ToString + ")"

db.ExecuteNonQuery(str) 'Cập nhật lại ptl_dt LayDanhSachPhieuThanhLy() End Sub

5.10.10 XoaPhieuThanhLy Tham số:

Tên Kiểu / Lớp Ý nghĩa

index Integer Số thứ tự của phiếu thanh lý cần xóa Mã nguồn:

Public Sub XoaPhieuThanhLy(ByVal index As Integer) Dim str As String

str = "Delete from PHIEUTHANHLY where MaPhieuThanhLy = " + ptl_dt.Rows(index)("MaPhieuThanhLy").ToString

db.ExecuteNonQuery(str) 'Cập nhật lại ptl_dt

ptl_dt.Rows.RemoveAt(index) End Sub

5.10.11 CapNhatPhieuThanhLy Tham số:

Tên Kiểu / Lớp Ý nghĩa

index Integer Số thứ tự của phiếu thanh lý cần cập nhật

ngaythanhly String Ngày thanh lý

index_nv Integer Số thứ tự nhân viên thanh lý Kết quả trả về: True/False

Mã nguồn:

Public Sub CapNhatPhieuThanhLy(ByVal index_ptl As Integer, ByVal ngaythanhly As String, ByVal index_nv As Integer)

Dim str As String

str = "Update PHIEUTHANHLY set NgayThanhLy = '" + ngaythanhly.ToString + _

"',MaNhanVien = " + nv_dt.Rows(index_nv)("MaNhanVien").ToString + _

" where MaPhieuThanhLy = " +

ptl_dt.Rows(index_ptl)("MaPhieuThanhLy").ToString db.ExecuteNonQuery(str)

End Sub

5.10.12 ThemSachThanhLy

Public Sub ThemSachThanhLy(ByVal MaPhieuThanhLy As String, ByVal MaSach As String, ByVal index_ld As Integer)

Dim str As String

str = "Insert into CHITIETPHIEUTHANHLY values(" + MaPhieuThanhLy + _

"," + MaSach + "," + ld_dt.Rows(index_ld)("MaLyDo").ToString + ")"

db.ExecuteNonQuery(str)

End Sub

5.10.13 XoaSachThanhLy

Public Sub XoaSachThanhLy(ByVal MaPhieuThanhLy As String, ByVal MaSach As String)

Dim str As String

str = "Delete from CHITIETPHIEUTHANHLY where MaPhieuThanhLy = " + MaPhieuThanhLy + _

" and MaSach = " + MaSach db.ExecuteNonQuery(str) End Sub

Một phần của tài liệu Hướng dẫn cài đặt chương trình quản lý thư viện (Trang 160 - 169)

Tải bản đầy đủ (PDF)

(178 trang)