Màn hình Tiếp nhận nhân viên

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 85 - 94)

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

5.1 Màn hình Tiếp nhận nhân viên

Xây dựng màn hình tiếp nhận nhân viên theo hình sau:

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

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

86

7 lblHoTen Label “Họ tên”

8 txtHoTen Textbox

9 lblBangCap Label “Bằng cấp”

10 cbBangCap ComboBox

11 lblBoPhan Label “Bộ phân”

12 cbBoPhan ComboBox

13 lblChucVu Label “Chức vụ”

14 cbChucVu ComboBox

15 lblNgaySinh Label “Ngày sinh”

16 dtNgaySinh DateTimePicker

17 lblDienThoai Label “Điện thoại”

18 txtDienThoai Textbox

19 lblDiaChi Label “Địa chỉ”

20 txtDiaChi Textbox

Màn hình tiếp nhận nhân viên được cài đặt thành 2 lớp: lớp NhanVien_Form là lớp giao diện và lớp NhanVien là lớp xử lý chính.

5.1.1 Lớp NhanVien_Form

Bên cạnh các controls mô tả ở trên, lớp NhanVien_Form còn các biến thành phần và phương thức như sau:

Lớp NhanVien_Form Thuộc tính

Tên Lớp Ý nghĩa

nv NhanVien Biến đảm nhận việc xử lý

dữ liệu Các hàm xử lý biến cố

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

NhanVien_Form_Load Form Load Khi form load, hiển thị danh sách các nhân viên hiện tại lên listview NVList_SelectedIndexChanged Khi một item khác của

listview được chọn

Khi một nhân viên trong listivew được chọn, thông tin chi tiết của nhân viên này sẽ được hiện thị trong phậ “Thông tin chi tiết”

ToolBar1_ButtonClick Các nút của toolbar được click

Thực hiện tác vụ tương ứng với các nút “Thêm”, “Xóa”,

“Sửa” và “Soạn lại”

Phương thức

Tên Ý nghĩa

HienThiDanhSachBangCap Nạp danh sách bằng cấp lên combobox cbBangCap HienThiDanhSachBoPhan Nạp danh sách các bộ phận lên combobox cbBoPhan

HienThiDanhSachChucVu Nạp danh sách chức vụ lên combobox cbChucVu HienThiDanhSachNhanVien Hiển thị danh sách nhận viên lên listview

HienThiThongTinChiTiet Hiển thị thông tin chi tiết của 1 nhận viên KiemTraNhap Kiểm tra dữ liệu nhập hợp lệ không SoanLai Xóa tất cả các ô nhập liệu.

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 nhân viên hiện có. 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ị 4 thông tin: danh sách các bằng cấp, danh sách các bô phận, danh sách các chức vụ, và danh sách các nhận viên hiện tại.

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

'Nap du lieu

HienThiDanhSachBangCap() HienThiDanhSachBoPhan() HienThiDanhSachChucVu() HienThiDanhSachNhanVien() 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 HienThiDanhSachBangCap()

Dim dt As DataTable = nv.LayDanhSachBangCap

Việc lấy dữ liệu được ủy nhiệm cho biến thuộc lớp xử lý (lớp NhanVien) chứ không trực tiếp thực hiện ở đây

Dim i As Integer Dim str As String

Nạp dữ liệu lên combobox

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

str = CType(dt.Rows(i)("TenBangCap"), String) cbBangCap.Items.Add(str)

Next

If cbBangCap.Items.Count > 0 Then cbBangCap.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 NhanVien 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 HienThiDanhSachBoPhan()

Dim dt As DataTable = nv.LayDanhSachBoPhan Dim i As Integer

Dim str As String

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

88

End Sub

Private Sub HienThiDanhSachChucVu()

Dim dt As DataTable = nv.LayDanhSachChucVu Dim i As Integer

Dim str As String

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

str = CType(dt.Rows(i)("TenChucVu"), String) cbChucVu.Items.Add(str)

Next

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

End If End Sub

Private Sub HienThiDanhSachNhanVien() NVList.Items.Clear()

Dim dt As DataTable = nv.LayDanhSachNhanVien Dim i As Integer

Dim str As String Dim ma As Integer

'Hiển thị danh sách nhân viên For i = 0 To dt.Rows.Count - 1 Dim lvi As ListViewItem

lvi = NVList.Items.Add((i + 1).ToString()) 'Số thứ tự của nhân viên

str = CType(dt.Rows(i)("HoTenNhanVien"), String) lvi.SubItems.Add(str)

ma = CType(dt.Rows(i)("MaBangCap"), String)

lvi.SubItems.Add(cbBangCap.GetItemText(cbBangCap.Items(ma - 1))) ma = CType(dt.Rows(i)("MaBoPhan"), String)

lvi.SubItems.Add(cbBoPhan.GetItemText(cbBoPhan.Items(ma - 1))) ma = CType(dt.Rows(i)("MaChucVu"), String)

lvi.SubItems.Add(cbChucVu.GetItemText(cbChucVu.Items(ma - 1))) If (i + 1) Mod 2 = 0 Then

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

Next

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

lbNVNum.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 nhân viên trong listview, chúng ta sẽ hiển thị thông tin chi tiết của nhân viên đó. Để 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 NVList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles NVList.SelectedIndexChanged

If NVList.SelectedIndices.Count > 0 Then

HienThiThongTinChiTiet(NVList.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 nhân viên đượ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 = nv.NhanVienInfo

txtHoTen.Text = dt.Rows(index)("HoTenNhanVien") dtNgaySinh.Value = dt.Rows(index)("NgaySinh") txtDiaChi.Text = dt.Rows(index)("Diachi")

txtDienThoai.Text = dt.Rows(index)("DienThoai") Dim str As String

cbBangCap.SelectedIndex =

cbBangCap.FindString(NVList.Items(index).SubItems(2).Text) cbBoPhan.SelectedIndex =

cbBoPhan.FindString(NVList.Items(index).SubItems(3).Text) cbChucVu.SelectedIndex =

cbChucVu.FindString(NVList.Items(index).SubItems(4).Text) 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 nhân viên. Để 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 nhân viên.

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

nv.ThemNhanVien(txtHoTen.Text,

dtNgaySinh.Value.ToString, txtDiaChi.Text, txtDienThoai.Text, _

cbBangCap.SelectedIndex, cbBoPhan.SelectedIndex, cbChucVu.SelectedIndex)

'Hiển thị lại danh sách nhân viên HienThiDanhSachNhanVien()

MessageBox.Show("Nhân viên '" + txtHoTen.Text + "' đã được thêm thành công", "Thông báo",

MessageBoxButtons.OK, MessageBoxIcon.Information) SoanLai()

End If ....

Khi thêm một nhân viên, 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 nhân viên này vào cơ sở dữ liệu nhờ biến thành phần nv thuộc lớp NhanVien. Tiếp đó, do danh sách nhân viên đã thay đổi, ta tiến hành nạp lại dữ liệu để cập nhật lại danh sách nhân viên hiển thị

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

90

End If Return True End Function

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 'Xoa

If NVList.SelectedIndices.Count > 0 Then

If MessageBox.Show("Bạn có chắc chắn là muốn xóa nhân viên '" + txtHoTen.Text + "' không ?", "Hỏi lại", MessageBoxButtons.YesNo,

MessageBoxIcon.Question) = DialogResult.Yes Then nv.XoaNhanVien(NVList.SelectedIndices.Item(0))

HienThiDanhSachNhanVien() 'Thông báo xóa thành công

MessageBox.Show("Nhân viên '" + txtHoTen.Text + "' đã được xóa.", "Thông báo",

MessageBoxButtons.OK,

MessageBoxIcon.Information) SoanLai()

End If Else

MessageBox.Show("Bạn phải chọn 1 nhân viên 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 nv thuộc lớp NhanVien, và sau khi xóa cũng hiển thị lại danh sách nhân viên. Để tiện cho người sử dụng trong việc nhập liệu, sau khi xóa một nhân viên, ứng dụng sẽ tự xóa trắng các ô nhập liệu cho người dùng, việc này được thực hiện nhò hàm SoanLai.

Private Sub SoanLai() txtHoTen.Text = ""

dtNgaySinh.Value = Today() txtDiaChi.Text = ""

txtDienThoai.Text = ""

End Sub

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

...

Case 2 'Cập nhật

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

nv.CapNhatNhanVien(NVList.SelectedIndices.Item(0), txtHoTen.Text, dtNgaySinh.Value.ToString,

txtDiaChi.Text, txtDienThoai.Text, _

cbBangCap.SelectedIndex, cbBoPhan.SelectedIndex, cbChucVu.SelectedIndex)

'Hiển thị lại danh sách nhân viên HienThiDanhSachNhanVien()

'Thông báo cập nhật thành công

MessageBox.Show("Nhân viên '" + txtHoTen.Text + "' đã đượ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 nhân viên trong danh sách trước", "Thông báo", MessageBoxButtons.OK,

MessageBoxIcon.Exclamation) End If

...

Tương tự như thêm nhân viên, 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 nv, sau đó hiển thị lại danh sách nhân viên. 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.

Đến đây chúng ta đã cài đặt xong lớp NhanVien_Form. Vì đây là lớp giao diện nên nó chỉ phục phụ cho việc tương tác với người dụng, mọi tác vụ xử lý thông tin đều được ủy nhiệm cho biến thuộc lớp NhanVien.

5.1.2 Lớp NhanVien

Lớp NhanVien là lớp đảm nhận việc xử lý cho màn hình tiếp nhận nhân viên.

Lớp NhanVien Thuộc tính

Tên Lớp Ý nghĩa

db Database Lớp giao tiếp với CSDL

nv_dt DataTable Bảng Nhân viên

bc_dt DataTable Bảng Bằng cấp

bp_dt DataTable Bảng Bộ phận

cv_dt DataTable Bảng Chức vụ

Phương thức

Tên Ý nghĩa

New Hàm tạo

LayDanhSachBangCap Lấy danh sách bằng cấp từ CSDL LayDanhSachBoPhan Lấy danh sách bô phận từ CSDL LayDanhSachChucVu Lấy danh sách chức vụ từ CSDL LayDanhSachNhanVien Lấy danh sách nhân viên từ CSDL ThemNhanVien Thêm 1 nhân viên vào CSDL XoaNhanVien Xóa 1 nhân viên ra khỏi CSDL CapNhatNhanVien Cập nhật 1 nhân viên

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

92 toán (chứ không phải select all)

• Thực thi câu lẹnh truy vấn

• Trả về kết quả là một DataTable

2. Nhóm phương thức nghiệp vụ: có cấu trúc như sau:

• Phát sinh mã (nếu cần)

• Phát sinh câu lệnh truy vấn

• Thực thi lệnh truy vấn này

• Trả về kết quả thực thi true/false

5.1.3 New

Public Sub New()

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

5.1.4 LayDanhSachBangCap

Public Function LayDanhSachBangCap() As DataTable

bc_dt = db.Execute("Select MaBangCap,TenBangCap from BANGCAP") Return bc_dt

End Function

5.1.5 LayDanhSachBoPhan

Public Function LayDanhSachBoPhan() As DataTable

bp_dt = db.Execute("Select MaBoPhan,TenBoPhan from BOPHAN") Return bp_dt

End Function

5.1.6 LayDanhSachChucVu

Public Function LayDanhSachChucVu() As DataTable

cv_dt = db.Execute("Select MaChucVu,TenChucVu from CHUCVU") Return cv_dt

End Function

5.1.7 LayDanhSachNhanVien

Public Function LayDanhSachNhanVien() As DataTable nv_dt = db.Execute("Select * from NHANVIEN") Return nv_dt

End Function

5.1.8 ThemNhanVien Tham số:

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

ten String Tên nhân viên

ngaysinh DateTime Ngày sinh nhân viên

diachi String Địa chỉ

dienthoai String Điện thoại

index_bc Integer Số thứ tự của bằng cấp trong combox index_bp Integer Số thứ tự của bộ phận trong combox index_cv Integer Số thứ tự của chức vụ trong combox Kết quả trả về: True/False

Mã nguồn:

Public Function ThemNhanVien(ByVal ten As String, ByVal ngaysinh As String, ByVal diachi As String, ByVal dienthoai As String, ByVal index_bc As Integer, ByVal index_bp As Integer, ByVal index_cv As Integer) As Boolean

'Mã nhân viên mới = Mã nhân viên lớn nhật hiện tại + 1

Dim dt As DataTable

dt = db.Execute("select MaNhanVien from NHANVIEN where MaNhanVien >=

all (select MaNhanVien from NHANVIEN)")

'dt chỉ có 1 dòng chữa mã nhân viên lớn nhất

Dim MaNV As Integer MaNV = dt.Rows(0)(0) + 1 Dim str As String

Tạo câu lệnh truy vấn

str = "Insert into NHANVIEN values(" + MaNV.ToString() + ",N'" + ten +

"','" + _

ngaysinh + "',N'" + diachi + "','" + dienthoai + "'," + bc_dt.Rows(index_bc)("MaBangCap").ToString + "," + _

bp_dt.Rows(index_bp)("MaBoPhan").ToString + "," + cv_dt.Rows(index_cv)("MaChucVu").ToString + ")"

db.ExecuteNonQuery(str)

'Cập nhật lại nv_dt

LayDanhSachNhanVien() Return True

End Function

5.1.9 XoaNhanVien Tham số:

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

index Integer Số thứ tự của nhân viên cần xóat Kết quả trả về: True/False

Mã nguồn:

Public Function XoaNhanVien(ByVal index As Integer) As Boolean Dim str As String

Chuẩn bị câu lệnh truy vấn

str = "Delete from NHANVIEN where MaNhanVien = " + nv_dt.Rows(index)("MaNhanVien").ToString

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

94 5.1.10 CapNhatNhanVien

Tham số:

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

index Integer Số thứ tự của nhân viên cần cập nhật

ten String Tên nhân viên

ngaysinh DateTime Ngày sinh nhân viên

diachi String Địa chỉ

dienthoai String Điện thoại

index_bc Integer Số thứ tự của bằng cấp trong combox index_bp Integer Số thứ tự của bộ phận trong combox index_cv Integer Số thứ tự của chức vụ trong combox Kết quả trả về: True/False

Mã nguồn:

Public Function CapNhatNhanVien(ByVal index As Integer, ByVal hoten As

String, ByVal ngaysinh As String, ByVal diachi As String, ByVal dienthoai As String, ByVal index_bc As Integer, ByVal index_bp As Integer, ByVal index_cv As Integer)

Dim str As String

Chuẩn bị câu lẹnh truy vấn

tr = "Update NHANVIEN set HoTenNhanVien = N'" + hoten + "', NgaySinh = '" + ngaysinh + _

"',diachi = N'" + diachi + "', dienthoai = '" + dienthoai + _

"', MaBangCap = " + bc_dt.Rows(index_bc)("MaBangCap").ToString + ", MaBoPhan = " + bp_dt.Rows(index_bp)("MaBoPhan").ToString + _

", MaChucVu = " + cv_dt.Rows(index_cv)("MaChucVu").ToString + " where MaNhanVien = " + nv_dt.Rows(index)("MaNhanVien").ToString

db.ExecuteNonQuery(str)

'Cập nhật lại data table nv_dt

LayDanhSachNhanVien() End Function

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 85 - 94)

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

(178 trang)