Bài giảng Xây dựng phần mềm quản lý nhân sự - Trường Cao đẳng công nghệ và nông lâm Nam Bộ

pdf 102 trang Gia Huy 17/05/2022 1880
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Xây dựng phần mềm quản lý nhân sự - Trường Cao đẳng công nghệ và nông lâm Nam Bộ", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_xay_dung_phan_mem_quan_ly_nhan_su_truong_cao_dang.pdf

Nội dung text: Bài giảng Xây dựng phần mềm quản lý nhân sự - Trường Cao đẳng công nghệ và nông lâm Nam Bộ

  1. BỘ NÔNG NGHIỆP VÀ PHÁT TRIỂN NÔNG THÔN TRƯỜNG CAO ĐẲNG CÔNG NGHỆ VÀ NÔNG LÂM NAM BỘ  BÀI GIẢNG XÂY DỰNG PHẦN MỀM QUẢN LÝ NHÂN SỰ Mã số: MĐ 42 NGHỀ: CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ THÔNG TIN Địa chỉ: QL 1K, Phường Bình An, TX. Dĩ An, Tỉnh Bình Dương Email: cntt.cnnlnb@gmail.com. [Lưu hành nội bộ] -2019-
  2. GIỚI THIỆU. Ngày nay, cùng với sự phát triển của xã hội hiện đại, việc tổ chức làm việc theo nhóm ngày càng phổ biến. Làm việc nhóm cũng là một trong những cách giúp Học sinh – Sinh viên (HS-SV) học tập chủ động hơn và có kết quả hơn. Sự hợp tác trong công việc, học tập và nghiên cứu là một trong những phương pháp tốt nhất để đi đến thành công. Cái ta tưởng là khó thì đối với những người khác lại rất dễ dàng, cái ta thiếu thì người khác lại dư Vì vậy, làm việc nhóm là sự cộng hưởng tốt nhất cho mọi người. - Nếu chúng ta tìm kiếm trong trang Google cụm từ “làm việc nhóm”, thì chúng ta sẽ có hàng nghìn kết quả về làm việc nhóm. Điều này chứng tỏ kỹ năng làm việc theo nhóm ngày càng phổ biến trên khắp thế giới và cần thiết cho mọi người. - Chương trình “Kỹ năng làm việc nhóm” dành cho HS-SV, cung cấp những kiến thức cơ bản đầu tiên cho trẻ về cách làm việc nhóm hiệu quả. Giúp trẻ hiểu được khái niệm kỹ năng cơ bản của việc làm việc nhóm, những ưu điểm vượt trội của kỹ năng làm việc nhóm đối với trẻ trong cuộc sống. - Chương trình được xây dựng dựa trên nền tảng các chương trình đào tạo kỹ năng sống cho ở các nước có nền kinh tế phát triển như Hoa Kỳ, Nhật Bản, kết hợp với hoàn cảnh thực tế ở Việt Nam hiện nay. Thông qua các câu chuyện sinh động, các hoạt động thực hành, làm việc nhóm, đóng vai, người học thực sự có cơ hội trải nghiệm và ứng dụng những kiến thức đã học vào cuộc sống thực tế. Đối với hầu hết chúng ta, làm việc nhóm là một phần tất yếu của cuộc sống. Tài liệu này sẽ khuyến khích người học khám phá những khía cạnh khác nhau của làm việc nhóm cũng như cách rèn luyện trở thành người có kỹ năng làm việc nhóm hiệu quả cao. Tài liệu được biên soạn có tham khảo từ các tài liệu, bài giảng và kinh nghiệm giảng dạy của tập thể giáo viên Khoa, nên không thể tránh khỏi các thiếu soát rất mong nhận được ý kiến góp ý để tài liệu hoàn thiện hơn. Mọi ý kiến đóng góp xin gửi về Khoa Công nghệ thông tin, Trường Cao đẳng nghề Công nghệ và Nông Lâm Nam Bộ. Điện thoại: 0274 3772 899; Email: cntt.cnnlnb@gmail.com. Chân thành cảm ơn ! Bình Dương, ngày 01 tháng 3 năm 2019 Nhóm biên soạn
  3. MỤC LỤC GIỚI THIỆU. 1 MỤC LỤC i Bài 1. KHẢO SÁT HIỆN TRẠNG VÀ TÌM HIỂU BÀI TOÁN QUẢN LÝ NHÂN SỰ 1 1.1. KHẢO SÁT HIỆN TRẠNG 1 1.1.1. Tìm hiểu đơn vị cần quản lý hệ thống thông tin 1 1.1.2. Nghiệp vụ quản lý của đơn vị 1 1.1.3. Yêu cầu hệ thống quản lý 1 1.2. BÀI ĐẶC TẢ HỆ THỐNG THÔNG TIN QUẢN LÝ NHÂN SỰ 1 Bài 2. PHÂN TÍCH HỆ THỐNG QUẢN LÝ NHÂN SỰ 3 2.1. SƠ ĐỒ USE-CASE 3 2.1.1. Danh sách Actor 4 2.1.2. Danh sách USE-CASE 4 2.2. PHÂN TÍCH QUẢN LÍ NHÂN SỰ 4 2.2.1. Sơ Đồ Lớp 4 2.2.2. Mô tả các lớp đối tượng 6 2.2.3. Sơ đồ chức năng hệ thống thông tin quản lý nhân sự 7 Bài 3. THIẾT KẾ VÀ CÀI ĐẶT HỆ THỐNG QUẢN LÝ NHÂN SỰ 8 3.1. THIÊT KẾ CÁC MÔ HÌNH DỮ LIỆU 8 3.1.1. Mô hình quan niệm dữ liệu (Conceptual Data Model) 8 3.1.2. Mô hình dữ liệu logic 8 3.1.3. Mô hình dữ liệu vật lý 9 3.2. CHI TIẾT CÁC KIỂU DỮ LIỆU TRONG SƠ ĐỒ VẬT LÝ 10 3.2.1. Bảng ghi chú 10 3.2.2. Chi tiết các kiểu dữ liệu 11 3.2.3. Cài đặt cơ sở dữ liệu 13 3.2.4. Sơ đồ cơ sở dữ liệu (database diagram) 17 3.3. THIẾT KẾ KIẾN TRÚC QUẢN LÍ NHÂN SỰ 17 3.3.1. Kiến trúc hệ thống 17 3.3.2. Chi tiết thành phần trong hệ thống 18 3.4. THIẾT KẾ GIAO DIỆN QUẢN LÍ NHÂN SỰ 19 3.4.1. Thiết kế form hệ thống. 20 3.4.2. Thiét kế các Form cập nhật dữ liệu hệ thống 28 3.4.3. Thiết kế các form báo cáo – tra cứu 86 Bài 4. BÁO CÁO KẾT QUẢ THỰC HIỆN PHẦN MỀM QUẢN LÝ NHÂN SỰ 94 4.1. THIẾT KẾ, XÂY DỰNG VÀ TRIỂN KHAI ỨNG DỤNG 94
  4. 4.2. KẾT QUẢ THỰC HIỆN 94 4.3. HƯỚNG PHÁT TRIỂN 94 TÀI LIỆU THAM KHẢO 95 Danh Mục Hình Ảnh 96 ii
  5. Bài 1. KHẢO SÁT HIỆN TRẠNG VÀ TÌM HIỂU BÀI TOÁN QUẢN LÝ NHÂN SỰ 1.1. KHẢO SÁT HIỆN TRẠNG 1.1.1. Tìm hiểu đơn vị cần quản lý hệ thống thông tin - Lịch sử đơn vị: Đơn vị là công ty TNHH, công ty liên doanh, - Lĩnh vực hoạt động: Hoạt động trong lĩnh vực điện tử viễn thông - Quy mô đơn vị: Quy mô về nhân sự, phạm vị kinh doanh sản xuất - Cơ cấu tổ chức tại đơn vị. - Nhiệm vụ, quyền hạng mỗi nhân sự cần quản lý. - Các mối quan hệ nhân sự tại đơn vị. - Các yếu tố khác liên quan đến hệ thống quản lý. 1.1.2. Nghiệp vụ quản lý của đơn vị - Phương thức quản lý nhân sự - Tài liệu quản lý nhân sư - Các file, biểu mẫu liên quan việc quản lý nhân sự 1.1.3. Yêu cầu hệ thống quản lý - Tiếp nhận yêu cầu quản lý của đơn vị - Tiếp nhận tài liệu yêu cầu quản lý của đơn vị. - 1.2. BÀI ĐẶC TẢ HỆ THỐNG THÔNG TIN QUẢN LÝ NHÂN SỰ Một công ty TNHH Nguyễn Sáng có nhu cầu quản lý nhân sự của họ trên máy tính bằng phần mềm có giao diện tương tác với người dùng. Công ty có hơn 200 nhân viên. Mỗi nhân viên cần quản lý các thông tin như họ tên, ngày sinh, địa chỉ, giới tính, phòng ban công tác, trình độ học vấn, bậc lương được hưởng, ngoại ngữ, chức vụ đảm nhận, chế độ làm việc, tiền lương được nhận theo tháng của nhân sự. Trình độ nhân viên cần quản lý: Tên trình độ. Mỗi nhân viên có nhiều ngoại ngữ khác nhau và mỗi ngoại ngữ có nhiều nhân viên đạt được. Ngoại ngữ chỉ quản lý tên ngoại ngữ và ngày cấp ngoại ngữ. Làm việc tại công ty nhân viên có chức vụ riêng cho mình. Mỗi nhân viên nhiều hơn một chức vụ và có nhiều nhân viên đồng chức vụ. Ta cần quản lý tên chức vụ, ngày bắt đầu nhận chức vụ và ngày kết thúc đảm nhận chức vụ đó. Nhân viên làm việc chính thức chỉ tại một phòng ban. Một phòng ban có nhiều nhân viên làm việc. Phòng ban cần quản lý tên phòng ban. Nhân viên có nhiều bảo hiểm khác nhau và mỗi bảo hiểm có nhiều nhân viên được hưởng. Cần quản lý tên bảo hiểm. Mỗi bảo hiểm 1
  6. của nhân viên có ngày bắt đầu và ngày kết thúc khác nhau cũng cần được quản lý. Ta quản lý thêm nơi cấp, và ghi chú cho bảo hiểm của nhân viên. Công tác tại công ty nhân viên được hưởng các chế độ nhất định. Mỗi chế độ cần quản lý tên chế độ. Nhân viên có nhiều chế độ và mỗi chế độ được nhiều nhân viên hưởng. Ngày bắt đầu và ngày kết thúc của việc hưởng chế độ cần được lưu trữ trên máy tính. Hệ thống thông tin quản lý nhân sự có chức năng tính lương nhân viên trong công ty. Nhân viên có một bậc lương riêng của mình dựa vào trình độ bằng cấp nhân viên có được. Bậc lương được cập nhật lại theo thâm niên công tác của nhân sự thông qua hệ số bậc lương. Cần quản lý thêm tên bậc lương cho bậc lương. Bảng công ghi nhận lại ngày công mà nhân viên làm tại công ty. Nhân viên làm đủ 8h/ngày mới được xác nhận công. Hệ thống quản lý nhân sự cần được bảo mật thông tin thông qua việc xác nhận tài khoản người dùng hệ thống. Mỗi đối tượng người dùng có quyền sử dụng hệ thống quản lý ở các cấp chức năng khác nhau. Bảng dữ liệu người dùng cần quản lý: Họ tên người dùng, tên tài khoản, mã bảo mật tài khoản và quyền cho tài khoản. 2
  7. Bài 2. PHÂN TÍCH HỆ THỐNG QUẢN LÝ NHÂN SỰ 2.1. SƠ ĐỒ USE-CASE HSSV thiết kế được sơ đồ Use – Case như sau gồm danh sách các Actor, danh sách các User – Case được thống kê trong các bảng dưới. Hinh 1. Sơ đồ use-case 3
  8. 2.1.1. Danh sách Actor Các Actor trong hệ thống quản lí nhân sự được thống kê như bảng dưới Stt Actor Ghi chú 1 Admin - Có quyền cao nhất trong hệ thống 2 Giám đốc - Giám đốc có tất cả các quyền (role) của người quản lý. - Giám đốc có quyền thống kê báo cáo, nhưng quản lý không có quyền này. 3 Quản lí -Dưới quyền Giám đốc -Có quyền quản lí các chức năng cập nhật dữ liệu cho hệ thống của hệ thống 4 Nhân viên Đội ngũ nhân viên tại đơn vị quản lý. 2.1.2. Danh sách USE-CASE HSSV cần thống kê đủ các các Use – Case. Các Use – Case thông dụng cho hệ thống: Stt Use - Case Ghi chú 1 DangNhap Đăng nhập 2 Thay đổi thông tin cho người Đổi mật khẩu, họ tên, tài khoản mới. dùng. 3 Quản lí người dùng Phân quyền người dùng, xóa tài khoản 4 Cập nhật thông tin nhân viên Thêm, xóa, sửa thông tin một nhân viên 5 Cập nhật trình độ nhân viên Thêm, xóa, sửa thông tin trình độ 6 Cập nhật ngoai ngữ Thêm, xóa, sửa ngoại ngữ 7 Cập nhật chức vụ Thêm, xóa, sửa chức vụ 8 Cập nhật phòng ban Thêm, xóa, sửa phòng ban 9 Cập nhật chế độ Thêm, xóa, sửa chế độ 10 Cập nhật bảo hiểm Thêm, xóa, sửa bảo hiểm 11 Cập nhật bậc lương Thêm, xóa, sửa bậc lương 12 Cập nhật ngày công Thêm, xóa, sửa ngày công 13 Cập nhật chi tiết ngoại ngữ Thêm, xóa, sửa chi tiết ngoại ngữ 14 Cập nhật chi tiết bảo hiểm Thêm, xóa, sửa chi tiết bảo hiểm 15 Cập nhật chi tiết chế độ Thêm, xóa, sửa chi tiết chế độ 16 Cập nhật chi tiết chức vụ Thêm, xóa, sửa chi tiết chức vụ 2.2. PHÂN TÍCH QUẢN LÍ NHÂN SỰ 2.2.1. Sơ Đồ Lớp 2.2.1.1. Sơ đồ lớp Sơ đồ lớp thể hiện được các lớp đối tượng, các lớp quan hệ. Thiết kế UML bài toán như sau: 4
  9. Hinh 2. Sơ đồ lớp 2.2.1.2. Danh sách các lớp đối tượng và quan hệ Các đối tượng và quan hệ giữa các đối tượng được thống kê như sau: STT Tên lớp/quan hệ Ghi chú 1 NhanVien Lưu thông tin của tất cả nhân viên trong công ty 2 PhongBan Lưu thông tin về các phòng ban trong công ty 3 BangCong Cho biết thông tin tiền lương của nhân viên 4 NguoiDung Lưu thông tin người sử dụng phần mềm 5 TrinhĐo Cho biết thông tin về các loại trình độ 6 NgoaiNgu Cho biết thông tin các loại ngoại ngữ 7 NhanVien_NgoaiNgu Cho biết thông tin chi tiết về ngoại ngữ của nhân viên 8 ChucVu Cho biết chức vụ của nhân viên 9 NhanVien_ChucVu Cho biết chi tiết chức vụ của nhân viên 10 CheDo Cho biết chế độ của nhân viên. 11 NhanVien_CheDo Cho biết chi tiết chế độ của nhân viên 12 BacLuong Cho biết bậc lương của nhân viên 13 BaoHiem Cho biết thông tin bảo hiểm của nhân viên 14 NhanVien_BaoHiem Cho biết chi tiết bảo hiểm. 5
  10. 2.2.2. Mô tả các lớp đối tượng STT Thực thể Phương Tên thuộc tính Ràng buộc Ghi chú Thức 1 NhanVien Thêm,xóa, MaNV, TenNV, PhongBan, Cho biết sửa NgaySinh, DiaChi, TrinhDo, thông tin GioiTinh, MaPB, BacLuong của nhân MaTD, MaBL viên 2 TrinhDo Thêm,xóa, MaTD,TenTD Cho biết sửa trình độ NV 3 NgoaiNgu Thêm,xóa, MaNN,TenNN Liệt kê các sửa loại Ngoại Ngữ 4 NhanVien_Ngo Thêm,xóa, MaNV, MaNN, NhanVien, Chi tiết aiNgu sửa NgayCap NgoaiNgu ngoại ngữ 5 PhongBan Thêm,xóa, MaPB,TenPB Chứa thông sửa tin về phòng ban 6 BangCong Thêm,xóa, MaNV, NgayCong NhanVien Cho biết sửa thông tin ngày công của nhân viên 7 NguoiDung Thêm,xóa, HoTen, UserNam, Cho biết sửa Pass_Word, Quyen thông tin người dùng 8 ChucVu Thêm,xóa, MaCV,TenCV Cho biết sửa chức vụ của nhân viên 9 NhanVien_Chu Thêm,xóa, MaNV, MaCV, Ngày NhanVien, Chi tiết cVu sửa BĐ, NgayKT ChucVu chức vụ 10 BaoHiem Thêm,xóa, MaBH, TenBH Bảo hiểm sửa của nhân viên 11 BacLuong Thêm,xóa, MaBL, TenBL, HeSBL Bậc lương sửa NV 12 NhanVien_Bao Thêm, MaNV, MaBH, NhanVien, Chi tiết bảo Hiem xóa, sửa NgayBD, NgayKT, BaoHiem hiểm NoiCap, GhiChu 13 CheDo Thêm, MaCD, TenCD Chế độ xóa, sửa nhân viên 14 NhanVien_Che Thêm, MaNV, MaCD, NhanVien, Chi tiết chế Do xóa, sửa NgayBD, NgayKT CheDo độ 6
  11. 2.2.3. Sơ đồ chức năng hệ thống thông tin quản lý nhân sự Hình. Sơ đồ chức năng quản lý Quá trình phân tích hệ thống thông tin cần HSSV phải nắm và thiết kế được sơ đồ chức năng hệ thống quản lý nhân sư. Đơn vị cần quản lý các chức năng như hình trên: Chức năng người dùng, chức năng quản lý người dùng, chức năng cập nhật hệ thống thông tin, chức năng thống kê báo cáo, chức năng tra cứu. Việc nắm rõ các chức năng sẽ góp phần thành công cho người thực hiện dự án. 7
  12. Bài 3. THIẾT KẾ VÀ CÀI ĐẶT HỆ THỐNG QUẢN LÝ NHÂN SỰ 3.1. THIÊT KẾ CÁC MÔ HÌNH DỮ LIỆU 3.1.1. Mô hình quan niệm dữ liệu (Conceptual Data Model) Tiếp sau việc phân tích là thiết kế HTTTQL. HSSV cần nắm và thiết kế được mô hình quan niệm dữ cho hệ thống. Mô hình thể hiện được các thực thể, mối kết hợp và đảm bảo chuẩn hóa cơ sở dữ liệu. Hình. Mô hình quan niệm dữ liệu (Conceptual data model) 3.1.2. Mô hình dữ liệu logic Mô hình dữ liệu logic thể hiện các ràng buộc khóa ngoại giữa các thực thể và được thiết kế vào trong các thực thể và cả trong các mối kết hợp. Điều này giúp người làm dự án quản lý được tốt hơn về hệ thống. 8
  13. Hinh 3. Sơ đồ logic 3.1.3. Mô hình dữ liệu vật lý Trên mô hình dữ liệu vật lý thể hiện được kiểu dữ liệu của các thuộc tính thực thể. Người làm dự án nắm được dung lượng dữ liệu hệ thống thông qua các kiểu dữ liệu này. Mô hình dữ liệu vật lý còn thể hiện ràng buộc khoá ngoại rõ ràng hơn các mô hình dữ liệu trước. Mô hình này là bước chuẩn bị để cài đặt CSDL lên máy tính. 9
  14. 3.2. CHI TIẾT CÁC KIỂU DỮ LIỆU TRONG SƠ ĐỒ VẬT LÝ 3.2.1. Bảng ghi chú Quá trình định nghĩa đối tượng dữ liệu có sử dụng các kí tự viết tắt, HSSV nên tuân thủ các qui tắc sau như bảng sau. Viết hoa các kí tự đầu mỗi chữ, viết hoa cụm kí tự viết tắt, viết hoa tất cả các kí tự, viết không khoảng trắng giữa các kí tự STT Tên bảng Ghi chú 1. NhanVien Nhân viên. 2. TrinhDo Trình độ 3. ChucVu Chức vụ 4. NhanVien_ChucVu Chi tiết chức vụ 5. PhongBan Phòng ban 6. BangCong Bảng công 7. NguoiDung Người dùng 8. NgoaiNgu Ngoại ngữ 9. NhanVien_ NgoaiNgu Chi tiết ngoại ngữ 10. CheDo Chế độ 11. NhanVien_CheDo Chi tiết chế độ 12. NhanVien_BaoHiem Chi tiết bảo hiểm 13. BaoHiem Bảo hiểm 14. BacLuong Bậc lương 10
  15. 3.2.2. Chi tiết các kiểu dữ liệu Mã nhân viên không được thiết lập giá trị null vì là khóa chính của bảng. Tên có thể null. Tuy nhiên ta nên thiết lập not null. Các trường dữ liệu chứa mã Unicode, ta thiết lập kiểu dữ liệu có tiền tố N phía trước. 1) Nhanvien STT Thuộc tính Kiểu Ghi chú 1. MaNV varchar(10) Không được null 2. TenNV nvarchar(50) Không được phép null 3. NgaySinh datetime Được phép null 4. DiaChi nvarchar(50) Được phép null 5. GioiTinh bit Được phép null 6. MaPB varchar(10) Được phép null 7. MaTD varchar(10) Được phép null 8. MaBL varchar(10) Được phép null 2) TrinhDo STT Thuộc tính Kiểu Ghi chú 1 MaTD varchar(10) Không được null 2 TenTD nvarchar(50) Không cho phép null 3) Ngoại Ngữ STT Thuộc tính Kiểu Ghi chú 1 MaNN varchar(10) Không được null 2 TenNN nvarchar(50) Không được null 4) Nhân Viên – Ngoại Ngữ STT Thuộc tính Kiểu Ghi chú 1 MaNV varchar(10) Không được null 2 MaNN varchar(10) Không được phép null 3 NgayCap datetime Cho phép null 5) Chức Vụ STT Thuộc tính Kiểu Ghi chú 1 MaCV varchar(10) Không được null 2 TenCV nvarchar(50) Không được phép null 6) Nhân Viên –Chức Vụ STT Thuộc tính Kiểu Ghi chú 1 MaNV varchar(10) Không được null 2 MaCV varchar(10) Không được null 3 NgayBD datetime Được null 4 NgayKT datetime Được phép null 11
  16. 7) Phòng Ban STT Thuộc tính Kiểu Ghi chú 1 MaPB varchar(10) Không được null 2 TenPB nvarchar(50) Không được phép null 8) Bảo Hiểm STT Thuộc tính Kiểu Ghi chú 1 MaBH varchar(10) không được null 2 TenBH nvarchar(50) không được phép null 9) Nhân Viên-Bảo Hiểm STT Thuộc tính Kiểu Ghi chú 1 MaNV varchar(10) Không được null 2 MaBH varchar(10) Không được phép null 3 NgayBD datetime Được phép null 4 NgayKT datetime Được phép null 5 NoiCap Nvarchar(50) Được phép null 6 GhiChu ntext Được phép null 10) Chế Độ STT Thuộc tính Kiểu Ghi chú 1 MaCĐ varchar(10) Không được null 2 TenCĐ nvarchar(50) Không được phép null 11) Nhân Viên –Chế Độ STT Thuộc tính Kiểu Ghi chú 1 MaNV varchar(10) Không được null 2 MaCĐ varchar(10) Không được null 3 NgayBD datetime Được null 4 NgayKT datetime Được phép null 12) Bậc Lương STT Thuộc tính Kiểu Ghi chú 1 MaBL varchar(10) không được null 2 TenBL nvarchar(50) không được null 3 HeSBL float được null 13) Bảng Công STT Thuộc tính Kiểu Ghi chú 1 MaNV varchar(10) không được null 2 NgayCong datetime không được null 12
  17. 14) User STT Thuộc tính Kiểu Ghi chú 1 HoTen nvarchar(50) không được null 2 UserName nvarchar(50) Không được null 3 Pass_Word nvarchar(50) Không được null 4 Quyen Nvarchar(50) Được null 3.2.3. Cài đặt cơ sở dữ liệu Để tạo lập cơ sở dữ liệu trên SQL Server ta có thể dùng mã lệnh Transact-SQL (T- SQL) hoặc dùng chức năng Design của SQL Server. - Cách 1: Microsofe SQL Server Management Studio New Query - Cách 2: Objec Explorer Tên CSDL nhấn chuột phải lên Table New Table a. Tạo bảng NhanVien CREATE TABLE [dbo].[NhanVien]( [MaNV] [varchar](10) NOT NULL, [TenNV] [nvarchar](50) NOT NULL, [NgaySinh] [datetime] NULL, [DiaChi] [nvarchar](50) NULL, [GioiTinh] [bit] NULL, [MaPB] [varchar](10) NULL, [MaTD] [varchar](10) NULL, [MaBC] [varchar](10) NULL, [MaBH] [varchar](10) NULL, [MaBL] [varchar](10) NULL, CONSTRAINT [PK_NhanVien] PRIMARY KEY CLUSTERED ( [MaNV] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] b. Tạo bảng TrinhDo CREATE TABLE [dbo].[TrinhDo]( [MaTD] [varchar](10) NOT NULL, [TenTD] [nvarchar](50) NOT NULL, CONSTRAINT [PK_TrinhDo] PRIMARY KEY CLUSTERED ( [MaTD] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] c. Tạo bảng NgoaiNgu CREATE TABLE [dbo].[NgoaiNgu]( [MaNN] [varchar](10) NOT NULL, [TenNN] [nvarchar](50) NOT NULL, CONSTRAINT [PK_NgoaiNgu] PRIMARY KEY CLUSTERED 13
  18. ( [MaNN] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] d. Tạo bảng NhanVien_NgoaiNgu CREATE TABLE [dbo].[NhanVien_NgoaiNgu]( [MaNV] [varchar](10) NOT NULL, [MaNN] [varchar](10) NOT NULL, [NgayCap] [datetime] NULL, CONSTRAINT [PK_NhanVien_NgoaiNgu] PRIMARY KEY CLUSTERED ( [MaNV] ASC, [MaNN] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] e. Tạo bảng ChucVu CREATE TABLE [dbo].[ChucVu]( [MaCV] [varchar](10) NOT NULL, [TenCV] [nvarchar](50) NOT NULL, CONSTRAINT [PK_ChucVu] PRIMARY KEY CLUSTERED ( [MaCV] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] f. Tạo bảng NhanVien_ChucVu CREATE TABLE [dbo].[NhanVien_ChucVu]( [MaNV] [varchar](10) NOT NULL, [MaCV] [varchar](10) NOT NULL, [NgayBD] [datetime] NULL, [NgayKT] [datetime] NULL, CONSTRAINT [PK_NhanVien_ChucVu] PRIMARY KEY CLUSTERED ( [MaNV] ASC, [MaCV] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] g. Tạo bảng CheDo CREATE TABLE [dbo].[CheDo]( [MaCD] [varchar](10) NOT NULL, 14
  19. [TenCD] [nvarchar](50) NOT NULL, CONSTRAINT [PK_CheDo] PRIMARY KEY CLUSTERED ( [MaCD] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] h. Tạo bảng NhanVien_CheDo CREATE TABLE [dbo].[NhanVien_CheDo]( [MaNV] [varchar](10) NOT NULL, [MaCD] [varchar](10) NOT NULL, [NgayBD] [datetime] NULL, [NgayKT] [datetime] NULL, CONSTRAINT [PK_NhanVien_CheDo] PRIMARY KEY CLUSTERED ( [MaNV] ASC, [MaCD] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] i. Tạo bảng BacLuong CREATE TABLE [dbo].[BacLuong]( [MaBL] [varchar](10) NOT NULL, [TenBL] [nvarchar](50) NOT NULL, [HeSBL] [float] NOT NULL, CONSTRAINT [PK_BacLuong] PRIMARY KEY CLUSTERED ( [MaBL] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO j. Tạo BangCong CREATE TABLE [dbo].[BangCong]( [MaNV] [varchar](10) NOT NULL, [NgayCong] [datetime] NOT NULL, CONSTRAINT [PK_BangCong] PRIMARY KEY CLUSTERED ( [MaNV] ASC, [NgayCong] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 15
  20. ) ON [PRIMARY] GO k. Tạo bảng PhongBan CREATE TABLE [dbo].[PhongBan]( [MaPB] [varchar](10) NOT NULL, [TenPB] [nvarchar](50) NOT NULL, CONSTRAINT [PK_PhongBan] PRIMARY KEY CLUSTERED ( [MaPB] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] l. Tạo bảng BaoHiem CREATE TABLE [dbo].[BaoHiem]( [MaBH] [varchar](10) NOT NULL, [TenBH] [nvarchar](50) NULL, CONSTRAINT [PK_BaoHiem] PRIMARY KEY CLUSTERED ( [MaBH] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] m. Tạo bảng NhanVien_BaoHiem CREATE TABLE [dbo].[NhanVien_BaoHiem]( [MaNV] [varchar](10) NOT NULL, [MaBH] [varchar](10) NOT NULL, [NgayBD] [datetime] NULL, [NgayKT] [datetime] NULL, [NoiCap] [nvarchar](50) NULL, [GhiChu] [ntext] NULL, CONSTRAINT [PK_NhanVien_BaoHiem] PRIMARY KEY CLUSTERED ( [MaNV] ASC, [MaBH] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] n. Tạo bảng User CREATE TABLE [dbo].[User]( [HoTen] [nvarchar](50) NOT NULL, [UserName] [nvarchar](50) NOT NULL, [Pass_Word] [nvarchar](50) NOT NULL, [Quyen] [nvarchar](50) NULL, 16
  21. CONSTRAINT [PK_User_1] PRIMARY KEY CLUSTERED ( [UserName] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] 3.2.4. Sơ đồ cơ sở dữ liệu (database diagram) Hinh 4. Database Diagram Tạo Database Diagram thể hiện các thực thể, mối quan hệ giữa các thực thể như sau: Object Explorer chuột phải lên Database Diagrams New Database Diagrams Add Table. Ta add tất cả các table liên quan và tạo quan hệ giữa chúng. 3.3. THIẾT KẾ KIẾN TRÚC QUẢN LÍ NHÂN SỰ 3.3.1. Kiến trúc hệ thống Kiến trúc hệ thống quản lí nhân sự gồm 3 bộ phận chính: Server, Admin, Client. Kiến trúc đã phân cấp chức năng lưu trữ, quản lí, thao tác dữ liệu. 17
  22. Hinh 5. Kiến trúc hệ thống Thành phần Diễn giải OGSClient Client OGSWebService Web Service OGSDatabaseManager Quản lý database Client-Quản lý Người quản lí hệ thống Client-Admin Người có quyền cao nhất trong hệ thống 3.3.2. Chi tiết thành phần trong hệ thống Hệ thống quản lí nhân sự cần có các giao diện bảo mật, các giao diện truy xuất – cập nhật dữ liệu trên CSDL. Phục vụ in ấn, báo cáo ta cần xây dưng các Report Form (Giao diện báo cáo). Xây dựng các file cấu hình hệ thống quản lí nhân sự, các lớp kết nối CSDL. Hinh 6. Chi tiết thành phần trong hệ thống 18
  23. Ta cần xây dựng các lớp kết nối dữ liệu, truyền tải dữ liệu và giao tiếp vời người dùng như lớp Trình Độ, Ngoại Ngữ, Bảng Công, Chức Vụ, Bảo Hiểm, Thông tin Nhân Viên Cụ thể như sau: Lớp đối tượng Diễn giải Resources Dùng để chứa các hình ảnh và icon sử dụng trong phần mềm Program Để khai báo trong hàm main User Cấp quyền sử dụng phần mềm Chucvu Để thêm ,chỉnh sửa lại thông tin chức vụ NgoaiNgu Để thêm,chỉnh sửa lại thông tin ngoại ngữ TrinhDo Để thêm,chỉnh sửa lại thông tin trình độ Dataprovider Tạo kết nối đến dữ liệu BangCong Tính công của nhân viên NhanVien Thông tin nhân viên 3.4. THIẾT KẾ GIAO DIỆN QUẢN LÍ NHÂN SỰ Chương trinh quản lí nhân sự có các chức năng chính như: Phân quyền, quản lí , Trình Độ, Ngày Công, Ngoại Ngữ, Thông tin Nhân Viên, Phòng Ban Ngoài chức năng lưu trữ hệ thống còn đáp ứng nhu cầu tìm kiếm của người dùng như: Tra cứu nhân viên, tra cứu phòng ban .Quan trọng hơn hết hệ thống có khả năng thống kê báo cáo cho người dùng. STT Tên màn hình Ghi chú 1 Đăng nhập Để đăng nhập vào hệ thống 2 Màn hình chính Chứa các chức năng của phần mềm 3 Tạo và phân quyền Để tạo tài khoản và tạo quyền truy xuất hệ thống 4 Đổi mật khẩu Để sửa đổi mật khẩu cho người dùng hệ thống 5 Chức vụ Để thêm , xóa, sửa thông tin về chức vụ 6 Trình độ Để thêm, xóa, sửa trình độ của nhân viên 8 Ngoại ngữ Thêm, xóa, sửa thông tin ngoại ngữ nhân viên 9 Nhanviên-Ngoại ngữ Để thêm, xóa, sửa chi tiết ngoại ngữ 10 Phòng ban Để thêm, xóa, sửa phòng ban 11 Nhân viên Để thêm, xóa, sửa thôn tin nhân viên 12 Nhân viên – Chức vụ Để thêm, xóa chi tiết chức vụ nhân sự 13 Bảo hiểm Để thêm, xóa, sửa bảo hiểm nhân sự 14 Nhân viên - Bảo hiểm Để thêm, xóa, sửa chi tiết bảo hiểm nhân sự 15 Bảng công Để quản lý ngày công nhân viên 16 Chế độ Thêm, xóa, sửa chế độ nhân viên 17 Nhân viên – Chế độ Quản lý chi tiết chế độ nhân sự 18 Bậc lương Thêm, xóa, sửa bậc lương nhân viên 19 Tra cứu nhân viên Tìm kiếm nhanh thông tin của nhân viên 20 Tra cứu lương theo tháng Tìm kiếm nhanh lương theo tháng của nhân viên 21 Báo cáo lương theo tháng In ấn, xuất file lương nhân sự theo tháng 19
  24. 22 Báo cáo danh sách tổng hợp In ấn, xuất file danh sách tổng hợp nhân sự thông tin nhân sự 3.4.1. Thiết kế form hệ thống. 3.4.1.1. Thiết kế form đăng nhập Form đăng nhập (Login Form) thường gồm hai textbox: textbox tiếp nhận thông tin tài khoản user và textbox mã bảo mật người dùng. Button Login dược thiết kế để xử lí chức năng đăng nhập người dùng. Hinh 7. Giao diện đăng nhập hệ thống quản lý nhân sự Mã hóa chức năng xử lí của button Login như sau: private void btnLogin_Click(object sender, EventArgs e) { if (txtUserName.Text == "" || txtPassWord.Text == "") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } if (KNDL.getDataTable("select * from [User] where UserName= N'" + txtUserName.Text + "' and Pass_Word=N'" + txtPassWord.Text + "'").Rows.Count == 1) { MessageBox.Show("Đăng nhập thành công."); frmMain.Quyen = KNDL.Field("select Quyen from [User] where UserName= N'" + txtUserName.Text + "' and Pass_Word=N'" + txtPassWord.Text + "' "); frmMain f = new frmMain(); f.Show(); this.Hide(); else { 20
  25. MessageBox.Show("Đăng nhập không thành công."); SetNull(); } } Dùng phương thức getDataTable của đối tượng KNDL để kiểm tra tài khoản người dùng là hợp lệ hay không. Lấy trường Quyen trong CSDL gán cho thuộc tính stactic Quyen trong frmMain nhằm phân quyền cho hệ thống. 3.4.1.2. Thiết kế form đổi mật khẩu Người dùng có thể đổi mật khẩu khi không cần thiết sử dụng mật khẩu cũ. Form này gồm năm textbox cơ bản: Họ tên truy cập mới, tên đăng nhập cũ, tên đăng nhập mới, mã bảo mật cũ, mã bảo mật mới. Ta cần có các button Thay đổi thông tin, Thiết lập để việc đổi mật khẩu được thành công. Hinh 8. Giao diện đổi mật khẩu private void btnThayDoiThongTin_Click(object sender, EventArgs e) { if (txtHoTenUserMoi.Text == "" || txtPassWord_Cu.Text == "" || txtPassWord_Moi.Text == "" || txtUserName_Cu.Text == "" || txtUserName_Moi.Text == "") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } try { KNDL.ExecuteData("update [User] set HoTen= N'"+txtHoTenUserMoi.Text+"', UserName= N'"+txtUserName_Moi.Text+"', Pass_Word=N'"+txtPassWord_Moi.Text+"' where UserName= 21
  26. N'"+txtUserName_Cu.Text+"' and Pass_Word=N'"+txtPassWord_Cu.Text+"' "); MessageBox.Show("Thông tin đã được thay đổi."); SetNull(); this.Close(); } catch { MessageBox.Show("Tài khoản đã tồn tại."); } } Nút lệnh Thay đổi thông tin được xử lí như sau: Xử lý kiểm tra các control nhập liệu đã được nhận thông tin hay chưa. Dùng phương thức ExecuteData của đối tượng KNDL để cập nhật lại thông tin người dùng. 3.4.1.3. Thiết kế form Đăng ký Người dùng có thể đăng kí một tài khoản đăng nhập nếu muốn thao tác trên hệ thống quản lí. Thông tin đăng kí bao gồm họ tên người dùng, tên tài khoản, mật mã người dùng. Ta có 2 button trên form này. Button Thiet lap tạo thêm tiện ích cho người dùng. Nút xử lí chính trên form là button Đăng kí. Hinh 9. Giao diện đăng kí thành viên hệ thống quản lý nhân sự Mã hóa nút lệnh Đăng kí ( Hoàn tất) như sau: private void btnDangKi_Click(object sender, EventArgs e) { if (txtHoTenUser.Text == "" || txtUserName.Text == "" || txtPassWord.Text == "") { 22
  27. MessageBox.Show("Xin vui lòng nhập đầy đủ thông tin."); return; } try { KNDL.ExecuteData("insert into [User] (HoTen, UserName, Pass_Word) values(N'"+txtHoTenUser.Text+"', N'"+txtUserName.Text+"', N'"+txtPassWord.Text+"')"); MessageBox.Show("Đăng kí thành công."); SetNull(); this.Close(); } catch { MessageBox.Show("Tên đăng nhập đã tồn tại."); } } - Đăng kí là việc chèn vào CSDL tại bảng User một dòng dữ liệu mới ( record) tương ứng với thông tin mà người dùng cung cấp. - Ta viết thêm đoạn mã kiểm tra dữ liệu đăng kí đã nhập vào điều khiển hay chưa. 3.4.1.4. Thiết kế form quản lý người dùng Form này dùng cho người sử dụng là admin nhằm quản lý các user. Trên form cho phép cập nhật và cấp quyền cho người dùng sau khi đăng kí tài khoản hệ thống. Mã hóa các chức năng xử lý trên form using System; using System.Collections.Generic; using System.ComponentModel; 23
  28. using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmQuanLiUser : Form { public frmQuanLiUser() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void HienThiDuLieuLenLuoi() { dgvUser.DataSource = KNDL.getDataTable("select * from [User]"); } void SetNull() { txtTenNguoiDung.Text = ""; txtUserName.Text = ""; txtPassWord.Text = ""; cbQuyen.Text = ""; } void KhoaDieuKhien() { txtPassWord.Enabled = false; txtTenNguoiDung.Enabled = false; txtUserName.Enabled = false; cbQuyen.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } void MoDieuKhien() 24
  29. { txtPassWord.Enabled = true; txtTenNguoiDung.Enabled = true; txtUserName.Enabled = true; cbQuyen.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; } private void frmQuanLiUser_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void dgvUser_CellClick(object sender, DataGridViewCellEventArgs e) { try { txtTenNguoiDung.Text = dgvUser.Rows[e.RowIndex].Cells[0].Value.ToString(); txtUserName.Text = dgvUser.Rows[e.RowIndex].Cells[1].Value.ToString(); txtPassWord.Text = dgvUser.Rows[e.RowIndex].Cells[2].Value.ToString(); cbQuyen.Text = dgvUser.Rows[e.RowIndex].Cells[3].Value.ToString(); } catch { } } private void btnThem_Click(object sender, EventArgs e) { SetNull(); MoDieuKhien(); 25
  30. txtTenNguoiDung.Focus(); themMoi = true; } private void btnSua_Click(object sender, EventArgs e) { SetNull(); MoDieuKhien(); txtTenNguoiDung.Focus(); txtPassWord.Enabled = false; txtUserName.Enabled = false; themMoi = false; } private void btnLuu_Click(object sender, EventArgs e) { if(txtTenNguoiDung.Text==""||txtUserName.Text==""|| txtPassWord.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } if(themMoi==true) { try { KNDL.ExecuteData("insert into [User] values(N'" + txtTenNguoiDung.Text + "',N'" + txtUserName.Text + "',N'" + txtPassWord.Text + "',N'" + cbQuyen.Text+ "')"); MessageBox.Show("Đã thêm thành công."); } catch { MessageBox.Show("Có lỗi."); } } else { try { 26
  31. KNDL.ExecuteData("update [User] set HoTen= N'" + txtTenNguoiDung.Text + "', Quyen= N'" + cbQuyen.Text + "' where UserName= N'" + txtUserName.Text + "'"); MessageBox.Show("Đã sửa thành công."); } catch { MessageBox.Show("Có lỗi."); } } SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void btnXoa_Click(object sender, EventArgs e) { if (txtTenNguoiDung.Text == "" || txtUserName.Text == "" || txtPassWord.Text == "") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } try { KNDL.ExecuteData("delete from [User] where UserName= N'" + txtUserName.Text + "'"); MessageBox.Show("Đã xóa thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } catch { MessageBox.Show("Có lỗi."); } } 27
  32. } } 3.4.2. Thiét kế các Form cập nhật dữ liệu hệ thống 3.4.2.1. Cập nhật hệ thống Hinh 10. Giao diện Cập Nhật Dữ Liệu Hệ Thống 3.4.2.2. Thiết kế form Thông Tin Nhân Viên Form có chức năng thêm mới, sửa, xóa thông tin nhân viên Hinh 11. Giao diện Thông Tin Nhân Viên. Mã hóa các chức năng trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; 28
  33. using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmNhanVien : Form { public frmNhanVien() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void SetNull() { txtMaNV.Text = ""; txtTenNV.Text=""; dtpNgaySinh.Text = ""; txtDC.Text = ""; cbGioiTinh.Text = ""; cbMaPB.Text = ""; cbMaTD.Text = ""; cbMaBL.Text = ""; } void KhoaDieuKhien() { txtMaNV.Enabled = false; txtTenNV.Enabled = false; txtDC.Enabled = false; dtpNgaySinh.Enabled = false; cbGioiTinh.Enabled = false; cbMaBL.Enabled = false; cbMaPB.Enabled = false; cbMaTD.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } 29
  34. void MoDieuKhien() { txtMaNV.Enabled = true; txtTenNV.Enabled = true; txtDC.Enabled = true; dtpNgaySinh.Enabled = true; cbGioiTinh.Enabled = true; cbMaBL.Enabled = true; cbMaPB.Enabled = true; cbMaTD.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; HienThiDuLieuLenCBBacLuong(); HienThiDuLieuLenCBPhongBan(); HienThiDuLieuLenCBTrinhDo(); } void HienThiDuLieuLenCBPhongBan() { cbMaPB.DataSource = KNDL.getDataTable("select * from PhongBan"); cbMaPB.DisplayMember = "MaPB"; cbMaPB.ValueMember = "MaPB"; } void HienThiDuLieuLenCBTrinhDo() { cbMaTD.DataSource = KNDL.getDataTable("select * from TrinhDo"); cbMaTD.DisplayMember = "MaTD"; cbMaTD.ValueMember = "MaTD"; } void HienThiDuLieuLenCBBacLuong() { cbMaBL.DataSource = KNDL.getDataTable("select * from BacLuong"); cbMaBL.DisplayMember = "MaBL"; cbMaBL.ValueMember = "MaBL"; } void HienThiDuLieuLenLuoi() { 30
  35. dgvNV.DataSource = KNDL.getDataTable("select MaNV, TenNV, NgaySinh, DiaChi, (case when GioiTinh= 'True' then 'Nam' else N'Nữ' end)as GioiTinh, MaPB, MaTD, MaBL from NhanVien"); } private void frmNhanVien_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void dgvNV_CellClick(object sender, DataGridViewCellEventArgs e) { try { txtMaNV.Text = dgvNV.Rows[e.RowIndex].Cells[0].Value.ToString(); txtTenNV.Text = dgvNV.Rows[e.RowIndex].Cells[1].Value.ToString(); dtpNgaySinh.Text = dgvNV.Rows[e.RowIndex].Cells[2].Value.ToString(); txtDC.Text = dgvNV.Rows[e.RowIndex].Cells[3].Value.ToString(); cbGioiTinh.Text = dgvNV.Rows[e.RowIndex].Cells[4].Value.ToString(); cbMaPB.Text = dgvNV.Rows[e.RowIndex].Cells[5].Value.ToString(); cbMaTD.Text = dgvNV.Rows[e.RowIndex].Cells[6].Value.ToString(); cbMaBL.Text = dgvNV.Rows[e.RowIndex].Cells[7].Value.ToString(); } catch { } } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); 31
  36. } private void btnThem_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); txtMaNV.Focus(); themMoi = true; } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); txtMaNV.Enabled = false; txtTenNV.Focus(); themMoi = false; } private void btnLuu_Click(object sender, EventArgs e) { if (txtMaNV.Text == "" || txtTenNV.Text == "") { MessageBox.Show("Xin vui long nhập đủ thông tin."); return; } if (themMoi == true) { try { if (cbGioiTinh.Text == "Nam") { KNDL.ExecuteData("insert into NhanVien values ('" + txtMaNV.Text + "', N'" + txtTenNV.Text + "', '" + dtpNgaySinh.Text + "', N'" + txtDC.Text + "','true','" + cbMaPB.Text + "','" + cbMaTD.Text + "', '" + cbMaBL.Text + "')"); } else { KNDL.ExecuteData("insert into NhanVien values ('" + txtMaNV.Text + "', N'" + txtTenNV.Text + "', '" + dtpNgaySinh.Text + "', N'" + txtDC.Text + "','false','" + cbMaPB.Text + "','" + cbMaTD.Text + "', '" + cbMaBL.Text + "')"); 32
  37. } MessageBox.Show("Đã thêm thành công."); } catch { MessageBox.Show("Có lỗi."); } } else { try { if(cbGioiTinh.Text=="Nam") { KNDL.ExecuteData("update NhanVien set TenNV= N'" + txtTenNV.Text + "',NgaySinh='" + dtpNgaySinh.Text + "',DiaChi= N'" + txtDC.Text + "',GioiTinh='true',MaPB='" + cbMaPB.Text + "',MaTD='" + cbMaTD.Text + "', MaBL='" + cbMaBL.Text + "' where MaNV='" + txtMaNV.Text + "'"); } else { KNDL.ExecuteData("update NhanVien set TenNV= N'" + txtTenNV.Text + "',NgaySinh='" + dtpNgaySinh.Text + "',DiaChi= N'" + txtDC.Text + "',GioiTinh='false',MaPB='" + cbMaPB.Text + "',MaTD='" + cbMaTD.Text + "', MaBL='" + cbMaBL.Text + "' where MaNV='" + txtMaNV.Text + "'"); } MessageBox.Show("Đã sửa thành công."); } catch { MessageBox.Show("Có lỗi."); } } SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void btnXoa_Click(object sender, EventArgs e) { if(txtMaNV.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); 33
  38. return; } try { KNDL.ExecuteData("delete from NhanVien where MaNV='"+txtMaNV.Text+"'"); MessageBox.Show("Đã xóa thành công"); SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } catch { MessageBox.Show("Có lỗi"); } } } } 3.4.2.3. Thiết kế form Trình Độ nhân viên Form có chức năng thêm, sửa, xóa trình độ nhân viên Hinh 12. Giao diện Trình Độ nhân viên. Mã hóa các chức năng trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; 34
  39. using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmTrinhDo : Form { public frmTrinhDo() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; private void SetNull() { txtMaTD.Text=""; txtTenTD.Text=""; } private void KhoaDieuKhien() { txtMaTD.Enabled = false; txtTenTD.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } private void MoDieuKhien() { txtMaTD.Enabled = true; txtTenTD.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; } void HienThiDuLieulenLuoi() { 35
  40. dgvTD.DataSource = KNDL.getDataTable("select * from TrinhDo"); } private void btnThem_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); txtMaTD.Focus(); themMoi = true; } private void frmTrinhDo_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieulenLuoi(); } private void dgvTD_CellClick(object sender, DataGridViewCellEventArgs e) { try { txtMaTD.Text = dgvTD.Rows[e.RowIndex].Cells[0].Value.ToString(); txtTenTD.Text = dgvTD.Rows[e.RowIndex].Cells[1].Value.ToString(); } catch { } } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); txtMaTD.Enabled = false; txtTenTD.Focus(); themMoi = false; } 36
  41. private void btnXoa_Click(object sender, EventArgs e) { if (txtMaTD.Text == "") { MessageBox.Show("Xin vui lòng nhập đủ thông tin cần xóa."); return; } try { KNDL.ExecuteData("delete from TrinhDo where MaTD='"+txtMaTD.Text+"'"); MessageBox.Show("Đã xóa thành công."); KhoaDieuKhien(); SetNull(); HienThiDuLieulenLuoi(); } catch { MessageBox.Show("Có lỗi"); } } private void btnLuu_Click(object sender, EventArgs e) { if(txtMaTD.Text==""||txtTenTD.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } if (themMoi == true) { try { KNDL.ExecuteData("insert into TrinhDo values('"+txtMaTD.Text+"', N'"+txtTenTD.Text+"')"); MessageBox.Show("Đã thêm thành công."); } catch { MessageBox.Show("Có lỗi."); } } else 37
  42. { try { KNDL.ExecuteData("update TrinhDo set TenTD= N'"+txtTenTD.Text+"' where MaTD='"+txtMaTD.Text+"' "); MessageBox.Show("Đã sửa thành công."); } catch { MessageBox.Show("Có lỗi."); } } SetNull(); KhoaDieuKhien(); HienThiDuLieulenLuoi(); } } } 3.4.2.4. Thiết kế form Thông Tin Ngoại Ngữ Form có chức năng thêm mới, sửa, xóa ngoại ngữ nhân viên Hinh 13. Giao diện Ngoại Ngữ Mã hóa các chức năng trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; 38
  43. using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmNgoaiNgu : Form { public frmNgoaiNgu() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void SetNull() { txtMaNN.Text= ""; txtTenNN.Text = ""; } void KhoaDieuKhien() { txtMaNN.Enabled = false; txtTenNN.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } void MoDieuKhien() { txtMaNN.Enabled = true; txtTenNN.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; } void HienThiDuLieu() { 39
  44. dgvNN.DataSource = KNDL.getDataTable("select * from NgoaiNgu"); } private void txtMaNN_TextChanged(object sender, EventArgs e) { } private void frmNgoaiNgu_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieu(); } private void btnThem_Click(object sender, EventArgs e) { SetNull(); MoDieuKhien(); txtMaNN.Focus(); themMoi = true; } private void dgvNN_CellClick(object sender, DataGridViewCellEventArgs e) { try { txtMaNN.Text = dgvNN.Rows[e.RowIndex].Cells[0].Value.ToString(); txtTenNN.Text = dgvNN.Rows[e.RowIndex].Cells[1].Value.ToString(); } catch { } } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void btnXoa_Click(object sender, EventArgs e) { 40
  45. if(txtMaNN.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } try { KNDL.ExecuteData("delete from NgoaiNgu where MaNN= '"+txtMaNN.Text+"'"); MessageBox.Show("Đã xóa thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieu(); } catch { MessageBox.Show("Có lỗi."); } } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); txtMaNN.Enabled = false; txtTenNN.Focus(); themMoi = false; } private void btnLuu_Click(object sender, EventArgs e) { if(txtMaNN.Text==""|| txtTenNN.Text=="") { MessageBox.Show("Vui lòng nhập đủ thông tin."); return; } if(themMoi==true) { try { KNDL.ExecuteData("insert into NgoaiNgu values('"+txtMaNN.Text+"', N'"+txtTenNN.Text+"')"); MessageBox.Show("Đã thêm thành công."); } catch 41
  46. { MessageBox.Show("Có lỗi."); } } else { try { KNDL.ExecuteData("update NgoaiNgu set TenNN= N'"+txtTenNN.Text+"' where MaNN='"+txtMaNN.Text+"'"); MessageBox.Show("Đã sửa thành công."); } catch { MessageBox.Show("Có lỗi."); } } SetNull(); HienThiDuLieu(); KhoaDieuKhien(); } } } 3.4.2.5. Thiết kế form Chức Vụ nhân sự Form có các chức năng thêm, sửa xóa chức vụ 42
  47. Mã hóa các chức năng trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmChucVu : Form { public frmChucVu() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; private void KhoaDieuKhien() { txtMaCV.Enabled = false; txtTenCV.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } private void MoDieuKhien() { txtMaCV.Enabled = true; txtTenCV.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; 43
  48. } private void SetNull() { txtMaCV.Text = ""; txtTenCV.Text = ""; } private void HienThiDuLieuLenLuoi() { dgvChucVu.DataSource = KNDL.getDataTable("select * from ChucVu"); } private void btnThem_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); txtMaCV.Focus(); themMoi = true; } private void dgvChucVu_CellClick(object sender, DataGridViewCellEventArgs e) { try { txtMaCV.Text = dgvChucVu.Rows[e.RowIndex].Cells[0].Value.ToString(); txtTenCV.Text = dgvChucVu.Rows[e.RowIndex].Cells[1].Value.ToString(); } catch { } } private void frmChucVu_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void btnLuu_Click(object sender, EventArgs e) { if(txtMaCV.Text==""||txtTenCV.Text=="") 44
  49. { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } if(themMoi==true) { try { KNDL.ExecuteData("insert into ChucVu values('" + txtMaCV.Text + "', N'" + txtTenCV.Text + "')"); MessageBox.Show("Đã thêm dữ liệu thành công."); } catch { MessageBox.Show("Có lỗi."); } } else { try { KNDL.ExecuteData("update ChucVu set TenCV= N'"+txtTenCV.Text+"' where MaCV= '"+txtMaCV.Text+"'"); MessageBox.Show("Cập nhật dữ liệu thành công."); } catch { MessageBox.Show("Có lỗi."); } } SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); txtMaCV.Enabled = false; txtTenCV.Focus(); themMoi = false; 45
  50. } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void btnXoa_Click(object sender, EventArgs e) { if (txtMaCV.Text == "") { MessageBox.Show("Xin vui lòng chọn chức vụ cần xóa."); return; } try { KNDL.ExecuteData("delete from ChucVu where MaCV='"+txtMaCV.Text+"'"); MessageBox.Show("Đã xóa dữ liệu thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } catch { MessageBox.Show("Có lỗi"); } } } } 3.4.2.6. Form Phòng Ban Form có các chức năng thêm mới, sửa xóa 46
  51. Mã hóa các chức năng xử lý trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmPhongBan : Form { public frmPhongBan() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void SetNull() { txtMaPB.Text = ""; txtTenPB.Text = ""; } void KhoaDieuKhien() { 47
  52. txtMaPB.Enabled = false; txtTenPB.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } void MoDieuKhien() { txtMaPB.Enabled = true; txtTenPB.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; } void HienThiDuLieu() { dgvPB.DataSource= KNDL.getDataTable("select * from PhongBan"); } private void frmPhongBan_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieu(); } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void dgvPB_CellClick(object sender, DataGridViewCellEventArgs e) { try { 48
  53. txtMaPB.Text = dgvPB.Rows[e.RowIndex].Cells[0].Value.ToString(); txtTenPB.Text = dgvPB.Rows[e.RowIndex].Cells[1].Value.ToString(); } catch { } } private void btnThem_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); txtMaPB.Focus(); themMoi = true; } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); txtMaPB.Enabled = false; txtTenPB.Focus(); themMoi = false; } private void btnXoa_Click(object sender, EventArgs e) { if (txtMaPB.Text == "") { MessageBox.Show("Xin vui lòng nhập đủ thông tin"); return; } try { KNDL.getDataTable("delete from PhongBan where MaPB='"+txtMaPB.Text+"'"); MessageBox.Show("Đã xóa thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieu(); } catch 49
  54. { MessageBox.Show("Có lỗi"); } } private void btnLuu_Click(object sender, EventArgs e) { if(txtMaPB.Text==""|| txtTenPB.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } if(themMoi==true) { try { KNDL.ExecuteData("insert into PhongBan values('"+txtMaPB.Text+"', N'"+txtTenPB.Text+"')"); MessageBox.Show("Đã thêm thành công."); } catch { MessageBox.Show("Có lỗi"); } } else { try { KNDL.ExecuteData("update PhongBan set TenPB= N'"+txtTenPB.Text+"' where MaPB= '"+txtMaPB.Text+"'"); MessageBox.Show("Đã cập nhật thành công."); } catch { MessageBox.Show("Có lỗi"); } } SetNull(); KhoaDieuKhien(); HienThiDuLieu(); } } } 50
  55. 3.4.2.7. Form Chế Độ Form có các chức năng thêm mới, sửa xóa Mã hóa chức năng xử lý trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmCheDo : Form { public frmCheDo() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void SetNull() { txtMaCD.Text = ""; 51
  56. txtTenCD.Text = ""; } void KhoaDieuKhien() { txtMaCD.Enabled = false; txtTenCD.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } void MoDieuKhien() { txtMaCD.Enabled = true; txtTenCD.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; } void HienThiDuLieu() { dgvCheDo.DataSource = KNDL.getDataTable("select * from CheDo"); } private void frmCheDo_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieu(); } private void dgvCheDo_CellClick(object sender, DataGridViewCellEventArgs e) { try { txtMaCD.Text = dgvCheDo.Rows[e.RowIndex].Cells[0].Value.ToString(); 52
  57. txtTenCD.Text = dgvCheDo.Rows[e.RowIndex].Cells[1].Value.ToString(); } catch { } } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void btnThem_Click(object sender, EventArgs e) { SetNull(); MoDieuKhien(); txtMaCD.Focus(); themMoi = true; } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); txtMaCD.Enabled = false; txtTenCD.Focus(); themMoi = false; } private void btnXoa_Click(object sender, EventArgs e) { if(txtMaCD.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin"); return; } try { KNDL.ExecuteData("delete from CheDo where MaCD='"+txtMaCD.Text+"'"); MessageBox.Show("Đã xóa thành công."); SetNull(); 53
  58. KhoaDieuKhien(); HienThiDuLieu(); } catch { MessageBox.Show("Có lỗi."); } } private void btnLuu_Click(object sender, EventArgs e) { if (txtMaCD.Text == "" || txtTenCD.Text == "") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } if (themMoi == true) { KNDL.ExecuteData("insert into CheDo values('" + txtMaCD.Text + "', N'" + txtTenCD.Text + "')"); MessageBox.Show("Đã thêm thành công."); } else { KNDL.ExecuteData(" update CheDo set TenCD= N'" + txtTenCD.Text + "' where MaCD= '" + txtMaCD.Text + "'"); MessageBox.Show("Đã sửa thành công."); } SetNull(); KhoaDieuKhien(); HienThiDuLieu(); } } } 3.4.2.8. Form Bảo Hiểm Form có các chức năng thêm mới, sửa xóa 54
  59. Mã hóa các chức năng xử lý trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmBaoHiem : Form { public frmBaoHiem() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void SetNull() { txtMaBH.Text = ""; txtTenBH.Text = ""; } void KhoaDieuKhien() { 55
  60. txtMaBH.Enabled = false; txtTenBH.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } void MoDieuKhien() { txtMaBH.Enabled = true; txtTenBH.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; } void HienThiDuLieu() { dgrBH.DataSource = KNDL.getDataTable("select * from BaoHiem"); } private void frmBaoHiem_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieu(); } private void dgrBH_CellClick(object sender, DataGridViewCellEventArgs e) { try { txtMaBH.Text = dgrBH.Rows[e.RowIndex].Cells[0].Value.ToString(); txtTenBH.Text = dgrBH.Rows[e.RowIndex].Cells[1].Value.ToString(); } catch { } } 56
  61. private void btnThem_Click(object sender, EventArgs e) { SetNull(); MoDieuKhien(); txtMaBH.Focus(); themMoi = true; } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); txtMaBH.Enabled = false; txtTenBH.Focus(); themMoi = false; } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void btnXoa_Click(object sender, EventArgs e) { if(txtMaBH.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } try { KNDL.ExecuteData("delete from BaoHiem where MaBH= '"+txtMaBH.Text+"'"); MessageBox.Show("Đã xóa thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieu(); } catch{ MessageBox.Show("Có lỗi."); } } private void btnLuu_Click(object sender, EventArgs e) 57
  62. { if (txtMaBH.Text == "" || txtTenBH.Text == "") { MessageBox.Show("Xin vui lòng nhập đầy đủ thông tin."); return; } if(themMoi==true) { try { KNDL.ExecuteData("insert into BaoHiem values('"+txtMaBH.Text+"', N'"+txtTenBH.Text+"')"); MessageBox.Show("Đã thêm thành công."); } catch { MessageBox.Show("Có lỗi"); } } else { try { KNDL.ExecuteData("update BaoHiem set TenBH= N'"+txtTenBH.Text+"' where MaBH= '"+txtMaBH.Text+"'"); MessageBox.Show("Đã sửa thành công."); } catch { MessageBox.Show("Có lỗi"); } } SetNull(); KhoaDieuKhien(); HienThiDuLieu(); } } } 3.4.2.9. Form Bậc Lương Form có các chức năng thêm mới, sửa xóa 58
  63. Mã hóa các chức năng trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmBacLuong : Form { public frmBacLuong() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void SetNull() { txtMaBL.Text = ""; txtTenBL.Text = ""; txtHSBL.Text = ""; } void KhoaDieuKhien() { 59
  64. txtMaBL.Enabled = false; txtTenBL.Enabled = false; txtHSBL.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } void MoDieuKhien() { txtMaBL.Enabled = true; txtTenBL.Enabled = true; txtHSBL.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; } void HienThiDuLieu() { dgvBL.DataSource = KNDL.getDataTable("select * from BacLuong"); } private void frmBacLuong_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieu(); } private void dgvBL_CellClick(object sender, DataGridViewCellEventArgs e) { txtMaBL.Text = dgvBL.Rows[e.RowIndex].Cells[0].Value.ToString(); txtTenBL.Text = dgvBL.Rows[e.RowIndex].Cells[1].Value.ToString(); txtHSBL.Text = dgvBL.Rows[e.RowIndex].Cells[2].Value.ToString(); } 60
  65. private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void btnThem_Click(object sender, EventArgs e) { SetNull(); MoDieuKhien(); txtMaBL.Focus(); themMoi = true; } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); txtMaBL.Enabled = false; txtTenBL.Focus(); themMoi = false; } private void btnXoa_Click(object sender, EventArgs e) { if(txtMaBL.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } try { KNDL.ExecuteData("delete from BacLuong where MaBL='"+txtMaBL.Text+"'"); MessageBox.Show("Đã xóa thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieu(); } catch { MessageBox.Show("Có lỗi."); } } 61
  66. private void btnLuu_Click(object sender, EventArgs e) { if(txtMaBL.Text==""||txtTenBL.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } if (themMoi == true) { try { KNDL.getDataTable("insert into BacLuong values('" + txtMaBL.Text + "', N'" + txtTenBL.Text + "','" + float.Parse(txtHSBL.Text) + "')"); MessageBox.Show("Đã thêm thành công."); } catch { MessageBox.Show("Có lỗi."); } } else { KNDL.getDataTable("update BacLuong set TenBL= N'" + txtTenBL.Text + "', HeSBL='" + float.Parse(txtHSBL.Text) + "' where MaBL= '" + txtMaBL.Text + "'"); MessageBox.Show("Đã sửa thành công."); } SetNull(); HienThiDuLieu(); KhoaDieuKhien(); } } } 62
  67. 3.4.2.10. Form Bậc Lương Form có các chức năng thêm mới, sửa, xóa Mã hóa các chức năng xử lý trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmBangCong : Form { public frmBangCong() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void SetNull() { cbMaNV.Text = ""; dtpNgayCong.Text = ""; } 63
  68. void KhoaDieuKhien() { cbMaNV.Enabled = false; dtpNgayCong.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnXoa.Enabled = true; } void MoDieuKhien() { cbMaNV.Enabled = true; dtpNgayCong.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnXoa.Enabled = false; HienThiDuLieuLenCBMaNhanVien(); } void HienThiDuLieuLenLuoi() { dgvBangCong.DataSource = KNDL.getDataTable("select * from BangCong"); } void HienThiDuLieuLenCBMaNhanVien() { cbMaNV.DataSource = KNDL.getDataTable("select * from NhanVien"); cbMaNV.DisplayMember = "MaNV"; cbMaNV.ValueMember="MaNV"; } private void frmBangCong_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void dgvBangCong_CellClick(object sender, DataGridViewCellEventArgs e) { 64
  69. try { cbMaNV.Text = dgvBangCong.Rows[e.RowIndex].Cells[0].Value.ToString(); dtpNgayCong.Text = dgvBangCong.Rows[e.RowIndex].Cells[1].Value.ToString(); } catch { } } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void btnThem_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); themMoi = true; cbMaNV.Focus(); } private void btnLuu_Click(object sender, EventArgs e) { if (cbMaNV.Text == "" || dtpNgayCong.Text == "") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } if (themMoi == true) { try { KNDL.ExecuteData("insert into BangCong values('"+cbMaNV.Text+"', '"+dtpNgayCong.Text+"')"); MessageBox.Show("Đã thêm thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); 65
  70. } catch { MessageBox.Show("Có lỗi."); } } } private void btnXoa_Click(object sender, EventArgs e) { if(cbMaNV.Text==""||dtpNgayCong.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } try { KNDL.ExecuteData("delete from BangCong where MaNV= '" + cbMaNV.Text + "'and NgayCong='" + dtpNgayCong.Text + "'"); MessageBox.Show("Đã xóa thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } catch { MessageBox.Show("Có lỗi."); } } } } 3.4.2.11. Form chi tiết ngoại ngữ nhân viên Form có các chức năng thêm mới, sửa, xóa 66
  71. Mã hóa các chức năng trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmNhanVien_NgoaiNgu : Form { public frmNhanVien_NgoaiNgu() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void SetNull() { cbMaNN.Text = ""; cbMaNV.Text = ""; dtpNgayCap.Text = ""; 67
  72. } void KhoaDieuKhien() { cbMaNV.Enabled = false; cbMaNN.Enabled = false; dtpNgayCap.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } void MoDieuKhien() { cbMaNV.Enabled = true; cbMaNN.Enabled = true; dtpNgayCap.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; HienThiDuLieuLenCBMaNgoaiNgu(); HienThiDuLieuLenCBMaNhanVien(); } void HienThiDuLieuLenLuoi() { dgvNV_NN.DataSource = KNDL.getDataTable("select * from NhanVien_NgoaiNgu"); } private void frmNhanVien_NgoaiNgu_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } void HienThiDuLieuLenCBMaNhanVien() { cbMaNV.DataSource = KNDL.getDataTable("select * from NhanVien"); cbMaNV.DisplayMember = "MaNV"; cbMaNV.ValueMember = "MaNV"; 68
  73. } void HienThiDuLieuLenCBMaNgoaiNgu() { cbMaNN.DataSource = KNDL.getDataTable("select * from NgoaiNgu"); cbMaNN.DisplayMember = "MaNN"; cbMaNN.ValueMember = "MaNN"; } private void dgvNV_NN_CellClick(object sender, DataGridViewCellEventArgs e) { try { cbMaNV.Text = dgvNV_NN.Rows[e.RowIndex].Cells[0].Value.ToString(); cbMaNN.Text = dgvNV_NN.Rows[e.RowIndex].Cells[1].Value.ToString(); dtpNgayCap.Text = dgvNV_NN.Rows[e.RowIndex].Cells[2].Value.ToString(); } catch { } } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void btnThem_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); cbMaNV.Focus(); themMoi = true; } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); cbMaNN.Enabled = false; cbMaNV.Enabled = false; dtpNgayCap.Focus(); 69
  74. themMoi = false; } private void btnXoa_Click(object sender, EventArgs e) { if(cbMaNV.Text==""||cbMaNN.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } try { KNDL.ExecuteData("delete from NhanVien_NgoaiNgu where MaNV='"+cbMaNV.Text+"' and MaNN='"+cbMaNN.Text+"'"); MessageBox.Show("Đã xóa thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } catch { MessageBox.Show("Có lỗi."); } } private void btnLuu_Click(object sender, EventArgs e) { if(cbMaNN.Text==""||cbMaNV.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } if(themMoi==true) { try { KNDL.ExecuteData("insert into NhanVien_NgoaiNgu values('"+cbMaNV.Text+"','"+cbMaNN.Text+"','"+dtpNgayCap.Text+"' )"); MessageBox.Show("Đã thêm thành công."); } catch 70
  75. { MessageBox.Show("Có lỗi."); } } else { try { KNDL.ExecuteData("update NhanVien_NgoaiNgu set NgayCap='" + dtpNgayCap.Text + "' where MaNV='" + cbMaNV.Text + "' and MaNN='" + cbMaNN.Text + "'"); MessageBox.Show("Đã sửa thành công."); } catch { MessageBox.Show("Có lỗi."); } } SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } } } 3.4.2.12. Form chi tiết bảo hiểm nhân viên Form có các chức năng thêm mới, sửa, xóa Mã hóa chức năng trên form using System; using System.Collections.Generic; 71
  76. using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmNhanVien_BaoHiem : Form { public frmNhanVien_BaoHiem() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void HienThiDULieuLenCBNhanVien() { cbMaNV.DataSource = KNDL.getDataTable("select * from NhanVien"); cbMaNV.DisplayMember = "TenNV"; cbMaNV.ValueMember = "MaNV"; } void HienThiDULieuLenCBBaoHiem() { cbMaBH.DataSource = KNDL.getDataTable("select * from BaoHiem"); cbMaBH.DisplayMember = "TenBH"; cbMaBH.ValueMember = "MaBH"; } void SetNull() { cbMaBH.Text = ""; cbMaNV.Text = ""; dtpNgayBD.Text = ""; dtpNgayKT.Text = ""; txtNoiCap.Text = ""; txtGhiChu.Text = ""; } void KhoaDieuKhien() 72
  77. { cbMaNV.Enabled = false; cbMaBH.Enabled = false; dtpNgayBD.Enabled = false; dtpNgayKT.Enabled = false; txtNoiCap.Enabled = false; txtGhiChu.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } void MoDieuKhien() { cbMaNV.Enabled = true; cbMaBH.Enabled = true; dtpNgayBD.Enabled = true; dtpNgayKT.Enabled = true; txtNoiCap.Enabled = true; txtGhiChu.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; HienThiDULieuLenCBBaoHiem(); HienThiDULieuLenCBNhanVien(); } void HienThiDuLieuLenLuoi() { dgvNhanVien_BaoHiem.DataSource = KNDL.getDataTable("select nv.MaNV, nv.TenNV, bh.MaBH, bh.TenBH, nvbh.NgayBD, nvbh.NgayKT, nvbh.NoiCap, nvbh.GhiChu from NhanVien_BaoHiem nvbh, NhanVien nv, BaoHiem bh where nv.MaNV= nvbh.MaNV and nvbh.MaBH= bh.MaBH"); } private void frmNhanVien_BaoHiem_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieuLenLuoi(); 73
  78. } private void dgvNhanVien_BaoHiem_CellClick(object sender, DataGridViewCellEventArgs e) { try { cbMaNV.Text = dgvNhanVien_BaoHiem.Rows[e.RowIndex].Cells[0].Value.ToString(); cbMaBH.Text = dgvNhanVien_BaoHiem.Rows[e.RowIndex].Cells[2].Value.ToString(); dtpNgayBD.Text = dgvNhanVien_BaoHiem.Rows[e.RowIndex].Cells[4].Value.ToString(); dtpNgayKT.Text = dgvNhanVien_BaoHiem.Rows[e.RowIndex].Cells[5].Value.ToString(); txtNoiCap.Text = dgvNhanVien_BaoHiem.Rows[e.RowIndex].Cells[6].Value.ToString(); txtGhiChu.Text = dgvNhanVien_BaoHiem.Rows[e.RowIndex].Cells[7].Value.ToString(); } catch { } } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void btnThem_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); cbMaNV.Focus(); themMoi = true; } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); cbMaNV.Enabled = false; cbMaBH.Enabled = false; 74
  79. dtpNgayBD.Focus(); themMoi = false; } private void btnLuu_Click(object sender, EventArgs e) { if (cbMaNV.Text == "" || cbMaBH.Text == "") { MessageBox.Show("Xin vui lòng nhập đủ thông tin"); return; } if (themMoi == true) { try { KNDL.ExecuteData("insert into NhanVien_BaoHiem values('"+cbMaNV.SelectedValue.ToString()+"', '"+cbMaBH.SelectedValue.ToString()+"', '"+dtpNgayBD.Text+"', '"+dtpNgayKT.Text+"', N'"+txtNoiCap.Text+"', N'"+txtGhiChu.Text+"')"); MessageBox.Show("Đã thêm thành công."); } catch { MessageBox.Show("Có lỗi."); } } else { try { KNDL.ExecuteData("update NhanVien_BaoHiem set NgayBD= '" + dtpNgayBD.Text + "', NgayKT= '" + dtpNgayKT.Text + "', NoiCap= N'" + txtNoiCap.Text + "', GhiChu= N'" + txtGhiChu.Text + "' where MaNV='"+cbMaNV.Text+"' and MaBH='"+cbMaBH.Text+"'"); MessageBox.Show("Đã sửa thành công."); } catch { MessageBox.Show("Có lỗi."); } } 75
  80. SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void btnXoa_Click(object sender, EventArgs e) { if (cbMaNV.Text == "" || cbMaBH.Text == "") { MessageBox.Show("Xin vui lòng nhập đủ thông tin"); return; } try { KNDL.ExecuteData("delete from NhanVien_BaoHiem where MaNV='"+cbMaNV.Text+"' and MaBH='"+cbMaBH.Text+"'"); MessageBox.Show("Đã xóa thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } catch { MessageBox.Show("Có lỗi."); } } } } 3.4.2.13. Form chi tiết chức vụ nhân viên Form có các chức năng thêm mới, sửa, xóa 76
  81. Mã hóa các chức năng trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmNhanVien_ChucVu : Form { public frmNhanVien_ChucVu() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void SetNull() { cbMaNV.Text = ""; cbMaCV.Text = ""; dtpNgayBD.Text = ""; dtpNgayKT.Text = ""; } 77
  82. void HienThiDuLieuLenCBChucVu() { cbMaCV.DataSource = KNDL.getDataTable("select * from ChucVu"); cbMaCV.DisplayMember = "TenCV"; cbMaCV.ValueMember = "MaCV"; } void HienThiDuLieuLenCBNhanVien() { cbMaNV.DataSource = KNDL.getDataTable("select * from NhanVien"); cbMaNV.DisplayMember = "TenNV"; cbMaNV.ValueMember = "MaNV"; } void KhoaDieuKhien() { cbMaCV.Enabled = false; cbMaNV.Enabled = false; dtpNgayBD.Enabled = false; dtpNgayKT.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnSua.Enabled = true; btnXoa.Enabled = true; } void MoDieuKhien() { cbMaCV.Enabled = true; cbMaNV.Enabled = true; dtpNgayBD.Enabled = true; dtpNgayKT.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnSua.Enabled = false; btnXoa.Enabled = false; HienThiDuLieuLenCBNhanVien(); HienThiDuLieuLenCBChucVu(); } void HienThiDuLieuLenLuoi() { dgvNhaVien_ChucVu.DataSource = KNDL.getDataTable("select nv.MaNV, cv.MaCV, nv.TenNV, cv.TenCV, nvcv.NgayBD, nvcv.NgayKT from NhanVien nv, NhanVien_ChucVu nvcv, ChucVu cv where nv.MaNV= nvcv.MaNV and nvcv.MaCV= cv.MaCV"); } 78
  83. private void frmNhanVien_ChucVu_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void dgvNhaVien_ChucVu_CellClick(object sender, DataGridViewCellEventArgs e) { try { cbMaNV.Text = dgvNhaVien_ChucVu.Rows[e.RowIndex].Cells[0].Value.ToString(); cbMaCV.Text = dgvNhaVien_ChucVu.Rows[e.RowIndex].Cells[1].Value.ToString(); dtpNgayBD.Text = dgvNhaVien_ChucVu.Rows[e.RowIndex].Cells[4].Value.ToString(); dtpNgayKT.Text = dgvNhaVien_ChucVu.Rows[e.RowIndex].Cells[5].Value.ToString(); } catch { } } private void btnThem_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); cbMaNV.Focus(); themMoi = true; } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); cbMaNV.Enabled = false; cbMaCV.Enabled = false; dtpNgayBD.Focus(); themMoi = false; } 79
  84. private void btnLuu_Click(object sender, EventArgs e) { if (cbMaNV.Text == "" || cbMaCV.Text == "") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } if(themMoi==true) { try { KNDL.ExecuteData("insert into NhanVien_ChucVu values('"+cbMaNV.SelectedValue.ToString()+"','"+cbMaCV.SelectedV alue.ToString()+"', '"+dtpNgayBD.Text+"', '"+dtpNgayKT.Text+"')"); MessageBox.Show("Đã thêm thành công."); } catch { MessageBox.Show("Có lỗi."); } } else { try { KNDL.ExecuteData("update NhanVien_ChucVu set NgayBD= '" + dtpNgayBD.Text + "', NgayKT= '" + dtpNgayKT.Text + "' where MaNV= '" + cbMaNV.Text + "' and MaCV='" + cbMaCV.Text + "'"); MessageBox.Show("Đã sửa thành công."); } catch { MessageBox.Show("Có lỗi."); } } SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void btnXoa_Click(object sender, EventArgs e) 80
  85. { if(cbMaNV.Text==""|| cbMaCV.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } try { KNDL.ExecuteData("delete from NhanVien_ChucVu where MaNV='" + cbMaNV.Text + "' and MaCV='" + cbMaCV.Text + "'"); MessageBox.Show("Đã xóa thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } catch { MessageBox.Show("Có lỗi."); } } } } 3.4.2.14. Form chi tiết chế độ nhân viên Form có các chức năng thêm mới, sửa, xóa Mã hóa các chức năng trên form 81
  86. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmNhanVien_CheDo : Form { public frmNhanVien_CheDo() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); bool themMoi; void HienThiDuLieuLenLuoi() { dgvNVCD.DataSource = KNDL.getDataTable("select nv.MaNV, cd.MaCD, nv.TenNV, cd.TenCD, nvcd.NgayBD, nvcd.NgayKT from NhanVien nv, CheDo cd, NhanVien_CheDo nvcd where nv.MaNV= nvcd.MaNV and nvcd.MaCD= cd.MaCD"); } void SetNull() { cbMaNV.Text = ""; cbMaCD.Text = ""; dtpNgayBD.Text = ""; dtpNgayKT.Text = ""; } void KhoaDieuKhien() { cbMaNV.Enabled = false; cbMaCD.Enabled = false; dtpNgayBD.Enabled = false; dtpNgayKT.Enabled = false; btnLuu.Enabled = false; btnThem.Enabled = true; btnXoa.Enabled = true; 82
  87. btnSua.Enabled = true; } void MoDieuKhien() { cbMaNV.Enabled = true; cbMaCD.Enabled = true; dtpNgayBD.Enabled = true; dtpNgayKT.Enabled = true; btnLuu.Enabled = true; btnThem.Enabled = false; btnXoa.Enabled = false; btnSua.Enabled = false; HienThiDuLieuLenCBCheDo(); HienThiDuLieuLenCBNhanVien(); } private void frmNhanVien_CheDo_Load(object sender, EventArgs e) { KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void dgvNVCD_CellClick(object sender, DataGridViewCellEventArgs e) { try { cbMaNV.Text = dgvNVCD.Rows[e.RowIndex].Cells[0].Value.ToString(); cbMaCD.Text = dgvNVCD.Rows[e.RowIndex].Cells[1].Value.ToString(); dtpNgayBD.Text = dgvNVCD.Rows[e.RowIndex].Cells[4].Value.ToString(); dtpNgayKT.Text = dgvNVCD.Rows[e.RowIndex].Cells[5].Value.ToString(); } catch { } } void HienThiDuLieuLenCBNhanVien() { 83
  88. cbMaNV.DataSource = KNDL.getDataTable("select * from NhanVien"); cbMaNV.DisplayMember = "TenNV"; cbMaNV.ValueMember = "MaNV"; } void HienThiDuLieuLenCBCheDo() { cbMaCD.DataSource = KNDL.getDataTable("select *from CheDo"); cbMaCD.DisplayMember = "TenCD"; cbMaCD.ValueMember = "MaCD"; } private void btnHuy_Click(object sender, EventArgs e) { SetNull(); KhoaDieuKhien(); } private void btnThem_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); cbMaNV.Focus(); themMoi = true; } private void btnSua_Click(object sender, EventArgs e) { MoDieuKhien(); SetNull(); cbMaCD.Enabled = false; cbMaNV.Enabled = false; dtpNgayBD.Focus(); themMoi = false; } private void btnLuu_Click(object sender, EventArgs e) { if(cbMaNV.Text==""||cbMaCD.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; 84
  89. } if (themMoi == true) { try { KNDL.ExecuteData("insert into NhanVien_CheDo values('"+cbMaNV.SelectedValue.ToString()+"', '"+cbMaCD.SelectedValue.ToString()+"', '"+dtpNgayBD.Text+"', '"+dtpNgayKT.Text+"')"); MessageBox.Show("Đã thêm thành công."); } catch { MessageBox.Show("Có lỗi."); } } else { try { KNDL.ExecuteData("update NhanVien_CheDo set NgayBD= '" + dtpNgayBD.Text + "', NgayKT= '" + dtpNgayKT.Text + "' where MaNV= '" + cbMaNV.Text + "' and MaCD='" + cbMaCD.Text + "'"); MessageBox.Show("Đã sửa thành công."); } catch { MessageBox.Show("Có lỗi."); } } SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } private void btnXoa_Click(object sender, EventArgs e) { if(cbMaNV.Text=="" ||cbMaCD.Text=="") { MessageBox.Show("Xin vui lòng nhập đủ thông tin."); return; } 85
  90. try { KNDL.ExecuteData("delete from NhanVien_CheDo where MaNV='" + cbMaNV.Text + "' and MaCD= '" + cbMaCD.Text + "'"); MessageBox.Show("Đã xóa thành công."); SetNull(); KhoaDieuKhien(); HienThiDuLieuLenLuoi(); } catch { MessageBox.Show("Có lỗi."); } } } } 3.4.3. Thiết kế các form báo cáo – tra cứu 3.4.3.1. Thiết kế form tra cứu lương nhân viên Form có chức năng tra cứu lương nhân viên theo tháng, thống kê các ngày làm trong tháng theo mã nhân viên nhập vào. Mã hóa các chức năng trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; 86
  91. using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmTraCuu : Form { public frmTraCuu() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); private void btnTraCuu_Click(object sender, EventArgs e) { try { DataTable dt = new DataTable(); dt = KNDL.getDataTable("select nv.MaNV, nv.TenNV, nv.NgaySinh, nv.DiaChi, (case when nv.GioiTinh='true' then 'Nam' else N'Nữ'end) as GioiTinh, round(BangLuong.TongLuong,2) as TongLuong, pb.TenPB from (select a.MaNV as MaNV,((Ngay_Cong* HeSBL*1150000)/DATEDIFF(DD,'" + dateTimePickerBD.Text + "' , '" + dateTimePickerKT.Text + "') + SoChucVu*(15/100)*(Ngay_Cong* HeSBL*1150000)/DATEDIFF(DD, '" + dateTimePickerBD.Text + "', '" + dateTimePickerKT.Text + "'))as TongLuong from (select nv.MaNV as MaNV ,count(bc.NgayCong) as Ngay_Cong from BangCong bc, NhanVien nv where bc.MaNV= nv.MaNV group by nv.MaNV) a, (select nv.MaNV as MaNV, HeSBL as HeSBL from NhanVien nv, BacLuong bl where nv.MaBL= bl.MaBL ) b,(select nv.MaNV as MaNV, COUNT (nv.MaNV) as SoChucVu from NhanVien nv, NhanVien_ChucVu nvcv where nv.MaNV= nvcv.MaNV group by nv.MaNV) c where a.MaNV= b.MaNV and a.MaNV=c.MaNV) as BangLuong, NhanVien nv, PhongBan pb where BangLuong.MaNV= nv.MaNV and pb.MaPB= nv.MaPB and nv.MaNV= '" + txtMaNV.Text + "'"); lblTenNV.DataBindings.Clear(); lblTenNV.DataBindings.Add("text", dt, "TenNV"); lblNgaySinh.DataBindings.Clear(); lblNgaySinh.DataBindings.Add("text", dt, "NgaySinh"); lblDiaChi.DataBindings.Clear(); 87
  92. lblDiaChi.DataBindings.Add("text", dt, "DiaChi"); lblGioiTinh.DataBindings.Clear(); lblGioiTinh.DataBindings.Add("text", dt, "GioiTinh"); lblTongLuong.DataBindings.Clear(); lblTongLuong.DataBindings.Add("text", dt, "TongLuong"); lblPhongBan.DataBindings.Clear(); lblPhongBan.DataBindings.Add("text",dt,"TenPB"); dgvNgayCong.DataSource = KNDL.getDataTable("select NgayCong from (select nv.MaNV as MaNV, bc.NgayCong as NgayCong from BangCong bc, NhanVien nv where nv.MaNV= bc.MaNV group by nv.MaNV, bc.NgayCong) t where MaNV='" + txtMaNV.Text + "'"); } catch { MessageBox.Show("Xin vui lòng nhập đầy đủ thông tin."); } } } } 3.4.3.2. Thiết kế form tra cứu thông tin tổng hợp nhân viên Form có chức năng tra cứu thông tin tổng hợp của nhân sự theo mã, họ tên, giới tính nhân sự. 88
  93. Mã hóa chức năng trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmTraCuuDanhSachTongHopNhanVien : Form { public frmTraCuuDanhSachTongHopNhanVien() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); private void btnTraCuu_Click(object sender, EventArgs e) { if (txtMaNV.Text != "" && txtTenNV.Text=="" ) { dgvDanhSachNhanSu.DataSource = KNDL.getDataTable("select nv.MaNV, nv.TenNV, nv.NgaySinh, nv.DiaChi, (case when nv.GioiTinh= 'true' then 'Nam' else N'Nữ' end)as GioiTinh, td.TenTD, pb.TenPB from NhanVien nv, TrinhDo td, PhongBan pb where nv.MaTD= td.MaTD and nv.MaPB= pb.MaPB and nv.MaNV='"+txtMaNV.Text+"'"); } if (txtTenNV.Text != "" && txtMaNV.Text=="") { dgvDanhSachNhanSu.DataSource = KNDL.getDataTable("select nv.MaNV, nv.TenNV, nv.NgaySinh, nv.DiaChi, (case when nv.GioiTinh= 'true' then 'Nam' else N'Nữ' end) as GioiTinh, td.TenTD, pb.TenPB from NhanVien nv, TrinhDo td, PhongBan pb where nv.MaTD= td.MaTD and nv.MaPB= pb.MaPB and nv.TenNV like N'%" + txtTenNV.Text + "%'"); } else if(txtTenNV.Text != "" && txtMaNV.Text!="") dgvDanhSachNhanSu.DataSource = KNDL.getDataTable("select nv.MaNV, nv.TenNV, nv.NgaySinh, nv.DiaChi, (case when nv.GioiTinh= 'true' then 'Nam' else N'Nữ' 89
  94. end)as GioiTinh, td.TenTD, pb.TenPB from NhanVien nv, TrinhDo td, PhongBan pb where nv.MaTD= td.MaTD and nv.MaPB= pb.MaPB and nv.TenNV like N'%" + txtTenNV.Text + "%' and nv.MaNV= '" + txtMaNV.Text + "'"); } private void radNam_Click(object sender, EventArgs e) { dgvDanhSachNhanSu.DataSource = KNDL.getDataTable("select nv.MaNV, nv.TenNV, nv.NgaySinh, nv.DiaChi, (case when nv.GioiTinh= 'true' then 'Nam' else N'Nữ' end)as GioiTinh, td.TenTD, pb.TenPB from NhanVien nv, TrinhDo td, PhongBan pb where nv.MaTD= td.MaTD and nv.MaPB= pb.MaPB and nv.GioiTinh=1"); } private void radNu_Click(object sender, EventArgs e) { dgvDanhSachNhanSu.DataSource = KNDL.getDataTable("select nv.MaNV, nv.TenNV, nv.NgaySinh, nv.DiaChi, (case when nv.GioiTinh= 'true' then 'Nam' else N'Nữ' end)as GioiTinh, td.TenTD, pb.TenPB from NhanVien nv, TrinhDo td, PhongBan pb where nv.MaTD= td.MaTD and nv.MaPB= pb.MaPB and nv.GioiTinh=0"); } private void frmTraCuuDanhSachTongHopNhanVien_Load(object sender, EventArgs e) { } } } 3.4.3.3. Thiết kế form báo cáo lương nhân sự Form có chức năng báo cáo lương nhân sự theo tháng, báo cáo chi tiết số ngày công trong tháng của nhân sự. 90
  95. Mã hóa chức năng trên form using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace EmployeeManagement { public partial class frmBaoCaoLuongNhanVien : Form { public frmBaoCaoLuongNhanVien() { InitializeComponent(); } KetNoiDuLieu KNDL = new KetNoiDuLieu(); private void frmBaoCaoLuongNhanVien_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) 91
  96. { try { DataTable dt = new DataTable(); dt = KNDL.getDataTable("select nv.MaNV, nv.TenNV, nv.NgaySinh, nv.DiaChi, (case when nv.GioiTinh='true' then 'Nam' else N'Nữ'end) as GioiTinh, BangLuong.TongLuong, bc.NgayCong, pb.TenPB from (select a.MaNV as MaNV,((Ngay_Cong* HeSBL*1150000)/DATEDIFF(DD,'" + dateTimePickerBD.Text + "' , '" + dateTimePickerKT.Text + "') + SoChucVu*(15/100)*(Ngay_Cong* HeSBL*1150000)/DATEDIFF(DD, '" + dateTimePickerBD.Text + "', '" + dateTimePickerKT.Text + "'))as TongLuong from (select nv.MaNV as MaNV ,count(bc.NgayCong) as Ngay_Cong from BangCong bc, NhanVien nv where bc.MaNV= nv.MaNV group by nv.MaNV) a, (select nv.MaNV as MaNV, HeSBL as HeSBL from NhanVien nv, BacLuong bl where nv.MaBL= bl.MaBL ) b,(select nv.MaNV as MaNV, COUNT (nv.MaNV) as SoChucVu from NhanVien nv, NhanVien_ChucVu nvcv where nv.MaNV= nvcv.MaNV group by nv.MaNV) c where a.MaNV= b.MaNV and a.MaNV=c.MaNV) as BangLuong, NhanVien nv, BangCong bc, ChucVu cv, PhongBan pb where BangLuong.MaNV= nv.MaNV and nv.MaNV= bc.MaNV and pb.MaPB= nv.MaPB group by nv.MaNV, nv.TenNV, nv.NgaySinh, nv.DiaChi, nv.GioiTinh, BangLuong.TongLuong, bc.NgayCong, pb.TenPB"); CrystalReport_TinhLuong rpt = new CrystalReport_TinhLuong(); rpt.SetDataSource(dt); frmBaoCaoLuongNhanVien f = new frmBaoCaoLuongNhanVien(); crystalReportViewer_TinhLuongNhanVien.ReportSource = rpt; } catch { MessageBox.Show("Xin vui lòng nhập thời điểm tính lương. "); } } private void crystalReportViewer_TinhLuongNhanVien_Load(object sender, EventArgs e) { } } } 92
  97. (*) Chú ý phải thiết lập trong file app.config chỉ thị sau: useLegacyV2RuntimeActivationPolicy="true" trong thẻ để chạy báo cáo thành công. 93
  98. Bài 4. BÁO CÁO KẾT QUẢ THỰC HIỆN PHẦN MỀM QUẢN LÝ NHÂN SỰ 4.1. THIẾT KẾ, XÂY DỰNG VÀ TRIỂN KHAI ỨNG DỤNG - Môi trường xây dựng và phát triển ứng dụng + Xây dựng và triển khai trên các hệ điều hảnh : Windows XP, Microsoft Win 7 professional + Dùng các hệ quản trị cơ sở dữ liệu: Microsoft SQL Express 2008 + Có thể dùng các ngôn ngữ lập trình Visual C#, VB, java, - Môi trường triển khai ứng dụng + Hệ điều hành :Microsoft Windows, + Cần cài đặt : Net Framework 3.5, 4.0 - Phần mềm phân tích thiết kế : Rational Rose hoặc Visual Paradigm for UML 4.2. KẾT QUẢ THỰC HIỆN - Khảo sát và tìm hiểu được bài toán quản lý nhân sự. - Phân tích được hệ thống quản lí nhân sự gồm: Dữ liệu, chức năng, luồng dữ liệu, thiết kế các thực thể, thuộc tính thực thể, chuẩn hóa cơ sở dữ liệu. - Thiết kế và cài đặt hệ thống quản lí nhân sự: Thiết kế được cơ sở dữ liệu, thiết kế được các form chương trình, lập trình xử lí các button lệnh, xây dưng các báo cáo thống kê. 4.3. HƯỚNG PHÁT TRIỂN - Mở rộng phạm vi quản lí của chương trình. - Hoàn thiện quá trình triển khai ứng dụng trên hệ thống mạng cục bộ. 94
  99. TÀI LIỆU THAM KHẢO [1] “C# 2005 – Lập Trình Cơ Bản”, Phạm Hữu Khang, NXB Lao Động và Xã Hội, 2010. [2] “C# in 21 Days”, Bradley L.Jones, SAMS [3] “Windows Forms Programming with C#”, Erik Brown, Manning. [4] MSDN Library. 95
  100. Danh Mục Hình Ảnh Hinh 1. Sơ đồ use-case 3 Hinh 2. Sơ đồ lớp 5 Hinh 3. Sơ đồ logic Error! Bookmark not defined. Hinh 4. Database Diagram 17 Hinh 5. Kiến trúc hệ thống 18 Hinh 6. Chi tiết thành phần trong hệ thống 18 Hinh 7. Giao diện đăng nhập hệ thống quản lý nhân sự 20 Hinh 8. Giao diện đổi mật khẩu 21 Hinh 9. Giao diện đăng kí thành viên hệ thống quản lý nhân sự 22 Hinh 10. Giao diện cập nhật dữ liệu hệ thống 28 Hinh 11. Giao diện thông tin nhân viên. 28 Hinh 12. Giao diện trình độ nhân viên. 34 Hinh 13. Giao diện ngoại ngữ 38 96