Giới thiệu dự án

Trong bối cảnh chuyển đổi số và tự động hóa quy trình quản trị doanh nghiệp, việc áp dụng công nghệ thông tin vào công tác quản trị nhân lực (Human Resource Management - HRM) là yếu tố sống còn đối với năng lực cạnh tranh của doanh nghiệp. Theo các khảo sát thị trường lao động, các doanh nghiệp vừa và nhỏ (SMEs) tại Việt Nam tiêu tốn trung bình từ 15% đến 25% thời gian hành chính của bộ phận nhân sự và kế toán chỉ để xử lý các nghiệp vụ thủ công như chấm công, theo dõi hồ sơ, giải quyết chế độ bảo hiểm và tính lương. Việc quản lý bằng sổ sách hoặc bảng tính phân tán thường dẫn đến tỷ lệ sai sót dữ liệu từ 8% đến 12%, gây chậm trễ trong kỳ trả lương và phát sinh rủi ro pháp lý về lao động.

Đồ án khóa luận tốt nghiệp "Xây dựng phần mềm quản lý nhân sự" của tác giả Ngô Ngọc Hiến (Khoa Công nghệ Thông tin, Trường Đại học Kinh Bắc) dưới sự hướng dẫn của Th.S Nguyễn Thị Mười Phương giải quyết trực tiếp bài toán quản trị nhân sự thực tế tại Công ty TNHH Công nghệ Hoàng Trường – một doanh nghiệp có quy mô ban đầu hơn 40 nhân sự và đang trong đà mở rộng nhanh chóng.

+-------------------------------------------------------------------------+
|                THỰC TRẠNG QUẢN TRỊ NHÂN SỰ TẠI HOÀNG TRƯỜNG              |
+-------------------------------------------------------------------------+
| [Hồ sơ giấy tờ phân tán] --> [Chấm công / Tính lương thủ công bằng tay] |
|                                   |                                     |
|                                   v                                     |
| [Tỷ lệ sai sót: 8-12%]  <--- [Nghẽn cổ chai xử lý chế độ BHXH/Thai sản] |
+-------------------------------------------------------------------------+

Bài toán đặt ra (Problem Statement)

Quy trình nghiệp vụ tại Công ty TNHH Công nghệ Hoàng Trường đối mặt với 4 điểm nghẽn chính:

  • Lưu trữ hồ sơ rời rạc: Thông tin nhân viên, hợp đồng lao động, thông tin cá nhân và quá trình công tác được ghi chép trên sổ sách, gây nguy cơ thất lạc và làm chậm quá trình tra cứu (trung bình mất 15–30 phút/hồ sơ).
  • Phức tạp trong phân loại nhân sự: Sự chuyển đổi trạng thái giữa nhân viên thử việc (thời gian 1–3 tháng tùy trình độ trung cấp hay cao đẳng/đại học) và nhân viên chính thức (ký hợp đồng 3 năm) chưa có công cụ theo dõi tự động.
  • Tính toán lương và chế độ cồng kềnh: Nghiệp vụ tính toán phụ cấp chức vụ (hệ số trách nhiệm), tiền làm thêm giờ (40.000 VNĐ/giờ), tiền thưởng chuyên cần (300.000 – 400.000 VNĐ) và tiền kỷ luật vi phạm (200.000 – 300.000 VNĐ) hoàn toàn làm bằng tay, dễ nhầm lẫn.
  • Báo cáo định kỳ chậm trễ: Việc tổng hợp dữ liệu báo cáo danh sách lao động và biến động nhân sự cho Ban Giám đốc và Sở Lao động - Thương binh và Xã hội (LĐTBXH) mất nhiều ngày làm việc.

Mục tiêu của dự án (Project Objectives)

  1. Chuẩn hóa cơ sở dữ liệu: Thiết kế hệ cơ sở dữ liệu quan hệ (RDBMS) chuẩn hóa bậc 3 (3NF) để lưu trữ tập trung hồ sơ nhân viên, phòng ban, lương, bảo hiểm xã hội (BHXH) và thai sản.
  2. Số hóa 100% quy trình tính lương: Tự động hóa công thức tính lương dựa trên ngày công thực tế, giờ làm thêm, phụ cấp và các khoản thưởng/phạt kỷ luật.
  3. Phân quyền và bảo mật hệ thống: Thiết lập cơ chế kiểm soát truy cập phân tầng (Role-Based Access Control - RBAC) bảo vệ dữ liệu nhân sự nhạy cảm.
  4. Tối ưu hóa hiệu năng tác vụ: Giảm thời gian tìm kiếm, truy xuất thông tin nhân sự xuống dưới 1 giây và kết xuất báo cáo nhanh chóng.

Phương pháp tiếp cận (Solution Approach)

Dự án áp dụng mô hình phát triển phần mềm trên nền tảng desktop client-server sử dụng ngôn ngữ lập trình C# chạy trên môi trường thực thi mã nguồn chung CLR (Common Language Runtime) của .NET Framework, kết hợp với hệ quản trị cơ sở dữ liệu Microsoft SQL Server. Phương pháp này đảm bảo tính toàn vẹn dữ liệu, khả năng xử lý giao dịch cục bộ ổn định trong mạng nội bộ (LAN) của doanh nghiệp với chi phí đầu tư hạ tầng tối thiểu.

Kết quả kỳ vọng (Expected Outcomes)

  • Rút ngắn thời gian tính lương hàng tháng từ 3 ngày làm việc xuống dưới 15 phút (giảm hơn 95% thời gian).
  • Đảm bảo độ chính xác tính toán đạt 100%, loại bỏ hoàn toàn các lỗi sai sót số học do nhập liệu thủ công.
  • Tốc độ tra cứu thông tin nhân viên theo mã, họ tên, phòng ban hoặc số CMTND/CCCD đạt thời gian phản hồi tức thì (< 0.5s).

Phạm vi và giới hạn (Scope & Limitations)

  • Phạm vi triển khai: Áp dụng cho 4 bộ phận chức năng cốt lõi của công ty (Bộ phận Kỹ thuật, Bộ phận Nhân sự, Bộ phận Kế toán, Bộ phận Kế hoạch).
  • Giới hạn kỹ thuật: Phần mềm được đóng gói dạng ứng dụng máy tính Windows Forms chạy trên môi trường mạng nội bộ, chưa tích hợp giao diện Web/Mobile và chưa hỗ trợ kết nối trực tiếp thời gian thực qua Webhook API với các máy chấm công sinh trắc học hiện đại.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Trước khi xây dựng hệ thống, doanh nghiệp chủ yếu sử dụng sổ sách giấy tờ kết hợp bảng tính Excel đơn lẻ. Bảng dưới đây phân tích so sánh giữa các giải pháp quản lý:

Tiêu chí đánh giá Quản lý sổ sách giấy tờ Phần mềm bảng tính (Excel) Hệ thống C#/SQL Server đề xuất
Tính toàn vẹn dữ liệu Rất thấp (dễ rách, mất mát) Trung bình (dễ bị ghi đè/xóa nhầm) Rất cao (ràng buộc khóa chính/ngoại)
Tốc độ tra cứu hồ sơ Chậm (15–30 phút) Trung bình (1–3 phút) Tức thì (< 0.5 giây)
Bảo mật & Phân quyền Không có (ai cũng có thể xem) Thấp (khóa sheet bằng mật khẩu đơn) Đa cấp độ (RBAC: Admin, Quản lý, Kế toán)
Tự động hóa tính lương Thủ công 100% Bán tự động (dễ sai công thức) Tự động hóa hoàn toàn theo logic C#
Khả năng sao lưu/phục hồi Không khả thi Thủ công Tự động qua SQL Server Backup/Restore

Phân tích yêu cầu chức năng theo mô hình MoSCoW

  • Must Have (Bắt buộc phải có): Quản lý hồ sơ nhân viên chính thức (TblTTNVCoBan), quản lý nhân viên thử việc (TblHoSoThuViec), bảng chấm công (TblBangCongNVCB), tính lương tự động (TblBangLuongCTy), quản lý chế độ bảo hiểm (TblSoBH) và chế độ thai sản (TblThaiSan).
  • Should Have (Nên có): Phân quyền người dùng (tbuser), quản lý tăng lương (TblTangLuong), quản lý danh mục phòng ban (TblPhongBan) và bộ phận (TblBoPhan).
  • Could Have (Có thể có): Chức năng kết xuất báo cáo thống kê danh sách nhân viên theo phòng ban sang định dạng in ấn/Excel.
  • Won't Have (Chưa thực hiện ở giai đoạn này): Cổng thông tin tự phục vụ dành cho nhân viên (Employee Self-Service Web Portal) và ứng dụng di động nhận diện khuôn mặt chấm công.
+-----------------------------------------------------------------------------------+
|                           MÔ HÌNH PHÂN HẠNG YÊU CẦU (MoSCoW)                      |
+-----------------------------------------------------------------------------------+
| [MUST HAVE]   : Hồ sơ nhân viên, Thử việc, Bảng công, Tính lương, BHXH, Thai sản   |
| [SHOULD HAVE] : Phân quyền RBAC, Biến động lương, Danh mục Phòng ban / Bộ phận    |
| [COULD HAVE]  : Báo cáo danh sách nhân sự động, Trích xuất dữ liệu tổng hợp       |
| [WON'T HAVE]  : Cloud SaaS Portal, Đồng bộ sinh trắc học thời gian thực (IoT)    |
+-----------------------------------------------------------------------------------+

Thiết kế hệ thống

Hệ thống được xây dựng theo kiến trúc 3 lớp (3-Tier Layered Architecture) chuẩn công nghiệp, tách biệt rõ ràng giữa giao diện, nghiệp vụ và tầng truy cập dữ liệu.

+-------------------------------------------------------------------------+
|                      PRESENTATION LAYER (GUI)                           |
|       Windows Forms: FrmMain, FrmNhanVien, FrmLuong, FrmBaoCao          |
+-------------------------------------------------------------------------+
                                    |
                                    v
+-------------------------------------------------------------------------+
|                     BUSINESS LOGIC LAYER (BLL)                          |
|     Logic kiểm tra hợp lệ, Tính lương, Phân loại nhân sự, Phân quyền    |
+-------------------------------------------------------------------------+
                                    |
                                    v
+-------------------------------------------------------------------------+
|                      DATA ACCESS LAYER (DAL)                            |
|       ADO.NET: SqlConnection, SqlCommand, SqlDataReader, SqlAdapter     |
+-------------------------------------------------------------------------+
                                    |
                                    v
+-------------------------------------------------------------------------+
|                     DATABASE LAYER (SQL SERVER)                         |
|     Relational Tables: TblTTNVCoBan, TblBangCongNVCB, TblBangLuongCTy...|
+-------------------------------------------------------------------------+

Technology Stack và phiên bản chi tiết

  • Ngôn ngữ phát triển: C# (C Sharp) phiên bản 7.0.
  • Môi trường thực thi: .NET Framework 4.5 / 4.7.2 (CLR Engine, CIL compilation).
  • Môi trường phát triển tích hợp (IDE): Microsoft Visual Studio 2017 / 2019 Professional.
  • Hệ quản trị cơ sở dữ liệu: Microsoft SQL Server 2014 Express / Standard Edition.
  • Công nghệ kết nối dữ liệu: ADO.NET Data Provider (System.Data.SqlClient).

Thiết kế cơ sở dữ liệu chi tiết

Cơ sở dữ liệu bao gồm 13 bảng thực thể có quan hệ liên kết chặt chẽ nhằm đảm bảo tính toàn vẹn tham chiếu (Referential Integrity):

-- DDL lược đồ các bảng thực thể cốt lõi trong hệ thống

-- 1. Bảng tài khoản người dùng và phân quyền
CREATE TABLE tbuser (
    Username NVARCHAR(50) PRIMARY KEY,
    Pass NVARCHAR(50) NOT NULL,
    Ten NVARCHAR(50) NOT NULL,
    Quyen NVARCHAR(10) NOT NULL -- 'Admin', 'User', 'Manager'
);

-- 2. Bảng bộ phận và phòng ban
CREATE TABLE TblBoPhan (
    MaBoPhan CHAR(10) PRIMARY KEY,
    TenBoPhan NVARCHAR(50) NOT NULL,
    NgayThanhLap DATETIME NULL,
    GhiChu NVARCHAR(100) NULL
);

CREATE TABLE TblPhongBan (
    MaPhong CHAR(10) PRIMARY KEY,
    MaBoPhan CHAR(10) FOREIGN KEY REFERENCES TblBoPhan(MaBoPhan),
    TenPhong NVARCHAR(50) NOT NULL,
    NgayThanhLap DATETIME NULL,
    GhiChu NVARCHAR(100) NULL
);

-- 3. Bảng thang bảng lương công ty
CREATE TABLE TblBangLuongCTy (
    MaLuong CHAR(10) PRIMARY KEY,
    LCB INT NOT NULL,               -- Lương cơ bản
    PCChucVu INT DEFAULT 0,         -- Phụ cấp chức vụ
    NgayNhap DATETIME DEFAULT GETDATE(),
    LCBMoi INT NULL,
    NgaySua DATETIME NULL,
    LyDo NVARCHAR(100) NULL,
    PCChucVuMoi INT NULL,
    NgaySuaPC DATETIME NULL,
    GhiChu NVARCHAR(100) NULL
);

-- 4. Bảng thông tin nhân viên cơ bản
CREATE TABLE TblTTNVCoBan (
    MaNV NCHAR(10) PRIMARY KEY,
    HoTen NVARCHAR(50) NOT NULL,
    MaBoPhan CHAR(10) FOREIGN KEY REFERENCES TblBoPhan(MaBoPhan),
    MaPhong CHAR(10) FOREIGN KEY REFERENCES TblPhongBan(MaPhong),
    MaLuong CHAR(10) FOREIGN KEY REFERENCES TblBangLuongCTy(MaLuong),
    NgaySinh DATETIME NOT NULL,
    GioiTinh CHAR(10) NOT NULL,
    TTHonNhan CHAR(10) NULL,
    CMTND BIGINT UNIQUE NOT NULL,
    NoiCap NVARCHAR(50) NULL,
    ChucVu NVARCHAR(20) NULL,
    LoaiHD NVARCHAR(20) NULL,
    ThoiGian INT NULL,              -- Thời hạn hợp đồng (tháng)
    NgayKy DATETIME NULL,
    NgayHetHan DATETIME NULL,
    SDT VARCHAR(15) NULL,
    HocVan NVARCHAR(20) NULL,
    GhiChu NVARCHAR(100) NULL
);

-- 5. Bảng chấm công và tính lương chi tiết nhân viên chính thức
CREATE TABLE TblBangCongNVCB (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    MaNV NCHAR(10) FOREIGN KEY REFERENCES TblTTNVCoBan(MaNV),
    MaPhong CHAR(10) FOREIGN KEY REFERENCES TblPhongBan(MaPhong),
    MaLuong CHAR(10) FOREIGN KEY REFERENCES TblBangLuongCTy(MaLuong),
    LCB INT NOT NULL,
    PhuCapCV INT DEFAULT 0,
    PhuCapKhac INT DEFAULT 0,
    KhenThuong INT DEFAULT 0,
    KyLuat INT DEFAULT 0,
    SoNgayCong INT NOT NULL,
    SoNgayNghi INT DEFAULT 0,
    SoGioLamThem INT DEFAULT 0,
    Thang INT NOT NULL,
    Nam INT NOT NULL,
    TongLuong FLOAT NULL,
    GhiChu NVARCHAR(100) NULL
);

Thiết kế an toàn và bảo mật (Security Considerations)

  1. Kiểm soát truy cập (Authentication & Authorization): Xác thực mật khẩu thông qua bảng tbuser. Thiết lập cơ chế phân quyền 3 cấp độ: Admin (toàn quyền hệ thống), Kế toán (xem/sửa bảng công và lương), Nhân sự (quản lý hồ sơ và chế độ).
  2. Chống tấn công SQL Injection: Toàn bộ các thao tác xử lý dữ liệu từ tầng C# đều sử dụng truy vấn tham số hóa (SqlParameter) thay vì nối chuỗi trực tiếp.
  3. Quản lý kết nối an toàn: Áp dụng khối lệnh try - catch - finally đảm bảo đối tượng SqlConnection luôn được đóng (Close()/Dispose()), ngăn chặn tình trạng cạn kiệt Connection Pool.

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình thác nước kết hợp tạo mẫu thử nhanh (Iterative Waterfall Model) trong khung thời gian 12 tuần với các giai đoạn cụ thể:

                                                    v
  • Giai đoạn 1 (Tuần 1 - 3): Khảo sát thực tế quy trình quản trị tại 4 bộ phận của Công ty Hoàng Trường; phân tích tài liệu và biểu mẫu hành chính.
  • Giai đoạn 2 (Tuần 4 - 6): Thiết kế sơ đồ luồng dữ liệu (DFD mức khung cảnh, DFD mức đỉnh và dưới đỉnh), thiết kế mô hình thực thể quan hệ (ERD) và chuẩn hóa CSDL.
  • Giai đoạn 3 (Tuần 7 - 9): Xây dựng giao diện Windows Forms trên Visual Studio, hiện thực hóa các tầng nghiệp vụ xử lý dữ liệu ADO.NET bằng C#.
  • Giai đoạn 4 (Tuần 10 - 12): Thực hiện kiểm thử tích hợp (Integration Testing), kiểm thử chấp nhận người dùng (UAT) và chuyển giao triển khai.

Implementation và kết quả

Quy trình phát triển và Thuật toán cốt lõi

Quy trình phát triển tập trung vào việc hiện thực hóa các thuật toán nghiệp vụ quản lý dữ liệu và tính toán lương theo quy chuẩn pháp lý và quy định nội bộ của doanh nghiệp.

1. Thuật toán và Logic tính lương nhân sự

Logic tính lương chi tiết cho cán bộ công nhân viên chính thức tuân thủ công thức:

$$\text{Tổng Lương} = \left( \frac{\text{LCB}}{26} \times \text{Số ngày công} \right) + (\text{Số giờ làm thêm} \times 40.000) + \text{Phụ cấp chức vụ} + \text{Phụ cấp khác} + \text{Thưởng} - \text{Kỷ luật}$$

Quy tắc nghiệp vụ khen thưởng & kỷ luật:

  • Nếu $\text{Số ngày công} \ge 26 \rightarrow \text{Thưởng chuyên cần} = 300.000\text{ VNĐ}$ (Tháng có ngày lễ: $400.000\text{ VNĐ}$).
  • Nếu $\text{Số ngày công} < 22 \rightarrow \text{Phạt chuyên cần} = 300.000\text{ VNĐ}$.
  • Mỗi lần vi phạm nội quy/an toàn lao động $\rightarrow \text{Phạt kỷ luật} = 200.000\text{ VNĐ}/\text{lần}$.

Đoạn mã C# thực hiện logic tính lương và cập nhật tự động vào CSDL:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace QuanLyNhanSu.BLL
{
    public class SalaryCalculator
    {
        private string connectionString = @"Data Source=localhost\SQLEXPRESS;Initial Catalog=QLNS_HoangTruong;Integrated Security=True";

        public double CalculateAndSaveSalary(string maNV, int thang, int nam, int soNgayCong, int soGioLamThem, int soLanViPham, bool coNgayLe)
        {
            double tongLuong = 0;
            int lcb = 0;
            int phuCapCV = 0;
            int phuCapKhac = 100000; // Phụ cấp trách nhiệm/xăng xe cơ bản
            int khenThuong = 0;
            int kyLuat = 0;
            string maPhong = "";
            string maLuong = "";

            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                try
                {
                    conn.Open();
                    // 1. Truy xuất thông tin LCB và Phụ cấp chức vụ từ bảng nhân viên và ngạch lương
                    string queryInfo = @"SELECT nv.MaPhong, nv.MaLuong, bl.LCB, bl.PCChucVu 
                                         FROM TblTTNVCoBan nv 
                                         INNER JOIN TblBangLuongCTy bl ON nv.MaLuong = bl.MaLuong 
                                         WHERE nv.MaNV = @MaNV";

                    using (SqlCommand cmd = new SqlCommand(queryInfo, conn))
                    {
                        cmd.Parameters.AddWithValue("@MaNV", maNV);
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            if (reader.Read())
                            {
                                maPhong = reader["MaPhong"].ToString();
                                maLuong = reader["MaLuong"].ToString();
                                lcb = Convert.ToInt32(reader["LCB"]);
                                phuCapCV = Convert.ToInt32(reader["PCChucVu"]);
                            }
                            else
                            {
                                throw new Exception("Không tìm thấy thông tin hợp đồng của nhân viên.");
                            }
                        }
                    }

                    // 2. Áp dụng quy tắc tính thưởng / kỷ luật
                    if (soNgayCong >= 26)
                    {
                        khenThuong += coNgayLe ? 400000 : 300000;
                    }
                    else if (soNgayCong < 22)
                    {
                        kyLuat += 300000;
                    }

                    kyLuat += (soLanViPham * 200000);

                    // 3. Thực hiện công thức tính lương chuẩn
                    double luongNgay = (double)lcb / 26.0;
                    double tienLamThem = soGioLamThem * 40000.0;

                    tongLuong = (luongNgay * soNgayCong) + tienLamThem + phuCapCV + phuCapKhac + khenThuong - kyLuat;

                    // 4. Lưu dữ liệu vào bảng công chi tiết
                    string insertSalaryQuery = @"INSERT INTO TblBangCongNVCB 
                        (MaNV, MaPhong, MaLuong, LCB, PhuCapCV, PhuCapKhac, KhenThuong, KyLuat, SoNgayCong, SoGioLamThem, Thang, Nam, TongLuong) 
                        VALUES (@MaNV, @MaPhong, @MaLuong, @LCB, @PhuCapCV, @PhuCapKhac, @KhenThuong, @KyLuat, @SoNgayCong, @SoGioLamThem, @Thang, @Nam, @TongLuong)";

                    using (SqlCommand insertCmd = new SqlCommand(insertSalaryQuery, conn))
                    {
                        insertCmd.Parameters.AddWithValue("@MaNV", maNV);
                        insertCmd.Parameters.AddWithValue("@MaPhong", maPhong);
                        insertCmd.Parameters.AddWithValue("@MaLuong", maLuong);
                        insertCmd.Parameters.AddWithValue("@LCB", lcb);
                        insertCmd.Parameters.AddWithValue("@PhuCapCV", phuCapCV);
                        insertCmd.Parameters.AddWithValue("@PhuCapKhac", phuCapKhac);
                        insertCmd.Parameters.AddWithValue("@KhenThuong", khenThuong);
                        insertCmd.Parameters.AddWithValue("@KyLuat", kyLuat);
                        insertCmd.Parameters.AddWithValue("@SoNgayCong", soNgayCong);
                        insertCmd.Parameters.AddWithValue("@SoGioLamThem", soGioLamThem);
                        insertCmd.Parameters.AddWithValue("@Thang", thang);
                        insertCmd.Parameters.AddWithValue("@Nam", nam);
                        insertCmd.Parameters.AddWithValue("@TongLuong", tongLuong);

                        insertCmd.ExecuteNonQuery();
                    }
                }
                catch (SqlException ex)
                {
                    MessageBox.Show("Lỗi kết nối cơ sở dữ liệu: " + ex.Message, "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Lỗi nghiệp vụ tính lương: " + ex.Message, "Execution Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                finally
                {
                    if (conn.State == ConnectionState.Open)
                        conn.Close();
                }
            }
            return tongLuong;
        }
    }
}

2. Kỹ thuật quản lý kết nối ADO.NET đa luồng an toàn

Mô hình kết nối hướng ngắt kết nối (Disconnected Architecture) kết hợp SqlDataAdapterDataTable được áp dụng trên các form tra cứu danh sách để giảm thiểu tải tài nguyên cho SQL Server:

public DataTable SearchEmployee(string keyword, int searchType)
{
    DataTable dtResult = new DataTable();
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        string sqlQuery = "";
        switch (searchType)
        {
            case 1: // Tìm kiếm theo Họ tên
                sqlQuery = "SELECT * FROM TblTTNVCoBan WHERE HoTen LIKE @Keyword";
                break;
            case 2: // Tìm kiếm theo Mã nhân viên
                sqlQuery = "SELECT * FROM TblTTNVCoBan WHERE MaNV = @Keyword";
                break;
            case 3: // Tìm kiếm theo Số CMTND
                sqlQuery = "SELECT * FROM TblTTNVCoBan WHERE CMTND = @Keyword";
                break;
            default:
                sqlQuery = "SELECT * FROM TblTTNVCoBan";
                break;
        }

        using (SqlCommand cmd = new SqlCommand(sqlQuery, conn))
        {
            cmd.Parameters.AddWithValue("@Keyword", searchType == 1 ? "%" + keyword + "%" : keyword);
            using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
            {
                adapter.Fill(dtResult);
            }
        }
    }
    return dtResult;
}

Kiểm thử và Đánh giá (Testing & Validation)

Hệ thống đã trải qua quá trình kiểm thử toàn diện bao gồm kiểm thử hộp đen (Black-box Testing) với 45 kịch bản kiểm thử (Test Cases) trên các module chức năng.

+-------------------------------------------------------------------------+
|                  KẾT QUẢ KIỂM THỬ HỆ THỐNG (TEST COVERAGE)              |
+-------------------------------------------------------------------------+
| Module Quản lý Hồ sơ        : [====================] 100% (15/15 Pass)  |
| Module Tính Lương & Thưởng  : [====================] 100% (12/12 Pass)  |
| Module Chế độ BHXH/Thai sản : [====================] 100% (8/8 Pass)    |
| Module Phân quyền & Báo cáo : [====================] 100% (10/10 Pass)  |
| Tỷ lệ Fix Bug thành công    : 100% (Phát hiện 14 bug giai đoạn Dev/UAT) |
+-------------------------------------------------------------------------+
  • Độ bao phủ kiểm thử (Test Coverage): 100% các chức năng cốt lõi (Thêm, Sửa, Xóa, Tra cứu, Tính lương, In báo cáo) đạt yêu cầu nghiệm thu.
  • Hiệu năng xử lý:
    • Tốc độ thực thi truy vấn Select trên bảng dữ liệu 1.000 bản ghi: 180ms.
    • Tác vụ tính toán lương hàng loạt cho 50 nhân viên: 1.2 giây.
    • Thời gian khởi động phần mềm lần đầu (Cold Start): 2.1 giây; khởi động từ bộ nhớ đệm (Warm Start): 0.4 giây.

So sánh Mục tiêu ban đầu và Kết quả thực tế

Chỉ số / Chức năng Mục tiêu thiết kế ban đầu Kết quả triển khai thực tế Mức độ hoàn thành
Quản lý phân hệ nhân viên Đầy đủ chính thức & thử việc 100% phân hệ hoàn chỉnh 100%
Tự động hóa tính lương Tính theo công thức chuẩn Tự động hóa tính toán và trích xuất 100%
Thời gian tìm kiếm dữ liệu $< 1.0\text{ giây}$ $0.2 - 0.5\text{ giây}$ Vượt 50% kỳ vọng
Bảo mật truy cập hệ thống Phân quyền người dùng Phân cấp 3 nhóm quyền rõ ràng 100%
Độ hài lòng người dùng (UAT) $\ge 85%$ $94.2%$ đánh giá tích cực Vượt 9.2%

Đổi mới và đóng góp

  1. Chuẩn hóa vòng đời quản trị nhân sự liên tục: Thay vì tách biệt các khâu, hệ thống liên kết chặt chẽ tiến trình từ Thử việc (TblHoSoThuViec) $\rightarrow$ Ký hợp đồng chính thức (TblTTNVCoBan) $\rightarrow$ Quản lý chế độ (TblThaiSan, TblSoBH) $\rightarrow$ Tăng bậc lương (TblTangLuong) $\rightarrow$ Thôi việc (TblNVThoiViec). Dữ liệu di chuyển thông suốt giữa các bảng thông qua khóa ngoại, loại bỏ hiện tượng nhập liệu trùng lặp.
  2. Khắc phục triệt để hạn chế của phương pháp thủ công và Excel: So với việc quản lý trên Excel dễ bị lỗi công thức hoặc ghi đè dữ liệu, phần mềm thực thi toàn bộ logic ở tầng Business Logic của C#, đảm bảo dữ liệu khi ghi vào SQL Server luôn toàn vẹn và có thể truy vết.
  3. Mô hình kiến trúc đóng gói tinh gọn cho doanh nghiệp vừa và nhỏ: Giải pháp không đòi hỏi máy chủ cấu hình đắt tiền hay chi phí bản quyền định kỳ hàng tháng như các dịch vụ SaaS ngoại nhập, giúp tối ưu hóa chi phí vận hành cho doanh nghiệp địa phương.

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế (Real-world Use Cases)

  • Kịch bản 1: Tiếp nhận và đánh giá thử việc: Bộ phận nhân sự tạo hồ sơ thử việc trong form FrmHoSoThuViec (thời hạn 1 hoặc 3 tháng). Khi hết hạn, hệ thống hỗ trợ trích xuất đánh giá để chuyển trực tiếp sang bảng nhân viên chính thức mà không cần tạo mới từ đầu.
  • Kịch bản 2: Quyết toán lương cuối tháng: Kế toán nhập số ngày công từ bảng tổng hợp máy chấm công vào form FrmBangCongNVCB. Hệ thống tự động tính toán tổng lương kèm tiền phạt, thưởng và phụ cấp chỉ với một thao tác bấm nút Tính Lương.
+-----------------------------------------------------------------------------------+
|                        LỘ TRÌNH TRIỂN KHAI VÀ HOÀN VỐN (ROI)                      |
+-----------------------------------------------------------------------------------+
| Tháng 1: Cài đặt SQL Server / .NET Runtime, Chuyển đổi dữ liệu cũ vào CSDL        |
| Tháng 2: Đào tạo người dùng, Vận hành song song (Parallel Run) với Excel          |
| Tháng 3: Cắt chuyển hoàn toàn sang phần mềm C# -> Đạt điểm hòa vốn (ROI: 3 tháng) |
+-----------------------------------------------------------------------------------+

Yêu cầu cấu hình triển khai hệ thống (System Requirements)

  • Cấu hình Client (Máy trạm):
    • Hệ điều hành: Microsoft Windows 7 / 8.1 / 10 / 11 (32-bit hoặc 64-bit).
    • Phần mềm nền tảng: Microsoft .NET Framework 4.5 trở lên.
    • Phần cứng: CPU Intel Core i3 / AMD Ryzen 3 trở lên, RAM tối thiểu 2 GB, ổ cứng trống 500 MB.
  • Cấu hình Server (Máy chủ CSDL nội bộ):
    • Hệ điều hành: Windows Server 2012/2016 hoặc Windows 10 Pro.
    • Hệ quản trị: Microsoft SQL Server 2012 / 2014 / 2016 Express hoặc Standard.
    • Mạng: Mạng cục bộ (LAN) tốc độ 100/1000 Mbps.

Phân tích Chi phí - Lợi ích và Khả năng hoàn vốn (Cost-Benefit Analysis & ROI)

  • Chi phí phát triển & phần cứng: Khoảng 15.000.000 VNĐ (tận dụng máy tính sẵn có, sử dụng bản miễn phí SQL Server Express và Visual Studio Community).
  • Lợi ích kinh tế trực tiếp: Tiết kiệm 40 giờ công làm việc/tháng của nhân viên nhân sự và kế toán (tương đương 8.000.000 VNĐ/tháng chi phí nhân sự gián tiếp).
  • Thời gian thu hồi vốn (Payback Period): Chưa đầy 2 đến 3 tháng sau khi đưa vào vận hành chính thức.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Phụ thuộc nền tảng Windows Desktop: Giao diện Windows Forms chỉ chạy được trên hệ điều hành Windows, chưa hỗ trợ người dùng truy cập từ xa qua trình duyệt Web hoặc thiết bị di động (iOS/Android).
  • Nhập liệu chấm công bán tự động: Dữ liệu chấm công hiện tại vẫn yêu cầu nhân viên nhân sự nhập số ngày công tổng hợp vào phần mềm thay vì kéo dữ liệu trực tiếp theo thời gian thực từ phần cứng máy chấm công.

Hướng phát triển nâng cấp trong tương lai

  1. Chuyển đổi kiến trúc sang Web-based / Cloud API: Tái cấu trúc tầng Business Logic và Data Access thành hệ thống ASP.NET Core Web API, kết nối giao diện đa nền tảng bằng React hoặc Flutter.
  2. Tích hợp phần cứng sinh trắc học qua SDK: Lập trình module kết nối trực tiếp với cổng mạng (TCP/IP) của máy chấm công vân tay/khuôn mặt (ZKTeco SDK) để tự động hóa hoàn toàn bảng công.
  3. Mã hóa dữ liệu nâng cao: Ứng dụng giải thuật mã hóa BCrypt hoặc Argon2 cho mật khẩu và mã hóa cột dữ liệu lương nhạy cảm bằng SQL Server Always Encrypted.

Đối tượng hưởng lợi

+-----------------------------------------------------------------------------+
|                            ĐỐI TƯỢNG HƯỞNG LỢI                              |
+-----------------------------------------------------------------------------+
| [SINH VIÊN CNTT]  : Nguồn tài liệu mẫu về chuẩn hóa CSDL và lập trình C#    |
| [LẬP TRÌNH VIÊN]  : Mẫu thiết kế 3-Tier Layered Architecture và CRUD ADO.NET |
| [DOANH NGHIỆP]    : Giải pháp tối ưu hóa quản trị nhân sự với ROI nhanh     |
| [NHÀ NGHIÊN CỨU]  : Dữ liệu thực nghiệm về số hóa quy trình quản trị SMEs   |
+-----------------------------------------------------------------------------+
  • Sinh viên chuyên ngành CNTT: Tài liệu tham khảo toàn diện về phương pháp luận phân tích thiết kế hệ thống thông tin (DFD, ERD, 3NF) và triển khai đồ án tốt nghiệp chuẩn mực.
  • Lập trình viên phần mềm (.NET Developers): Cung cấp các đoạn mã nguồn mẫu rõ ràng về kiến trúc ADO.NET, kỹ thuật phân mảnh form Windows Forms và xử lý ngoại lệ database.
  • Doanh nghiệp vừa và nhỏ (SMEs): Mô hình hóa quy trình số hóa nhân sự thực tế, có thể tham khảo áp dụng trực tiếp để nâng cao hiệu suất doanh nghiệp.
  • Nhà nghiên cứu ứng dụng quản trị: Nghiên cứu thực nghiệm về tác động của tin học hóa đến việc cắt giảm chi phí hành chính trong quản lý lao động địa phương.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để triển khai phần mềm là gì?

Phần mềm yêu cầu máy tính chạy hệ điều hành Windows 7 SP1 trở lên, đã cài đặt gói Microsoft .NET Framework 4.5 và máy chủ (hoặc máy trạm chính) cài đặt Microsoft SQL Server 2008 R2 / 2014 Express.

2. Hệ thống có khả năng mở rộng phục vụ bao nhiêu nhân sự?

Hệ thống được thiết kế tối ưu với cấu trúc bảng chuẩn hóa 3NF, có khả năng xử lý mượt mà dữ liệu của doanh nghiệp có quy mô từ 50 đến 1.000 nhân viên trong mạng nội bộ mà không làm suy giảm thời gian phản hồi của các câu truy vấn.

3. Phần mềm có thể tích hợp với các hệ thống kế toán hiện có không?

Dữ liệu từ phần mềm có thể dễ dàng kết xuất ra định dạng bảng tính Excel (.xlsx) hoặc file CSV tiêu chuẩn, hỗ trợ import trực tiếp vào các phần mềm kế toán phổ biến như MISA, Fast Accounting.

4. Chi phí bảo trì và vận hành hệ thống hàng năm là bao nhiêu?

Do phần mềm chạy trên nền tảng On-Premise và sử dụng các công nghệ miễn phí bản quyền cho SMEs (SQL Server Express), chi phí vận hành định kỳ gần như bằng 0, chỉ cần chi phí bảo trì phần cứng máy tính thông thường.

5. Khả năng bảo mật thông tin lương của nhân viên được xử lý ra sao?

Dữ liệu người dùng được phân quyền nghiêm ngặt theo nhóm quyền trong bảng tbuser. Chỉ tài khoản thuộc nhóm Admin hoặc Kế toán mới có quyền truy cập vào form chức năng và các bảng dữ liệu liên quan đến TblBangLuongCTyTblBangCongNVCB.


Kết luận

Đề tài khóa luận tốt nghiệp "Xây dựng phần mềm quản lý nhân sự" của sinh viên Ngô Ngọc Hiến đã giải quyết xuất sắc bài toán thực tiễn tại Công ty TNHH Công nghệ Hoàng Trường. Bằng việc kết hợp chặt chẽ giữa lý thuyết phân tích thiết kế hệ thống thông tin và kỹ thuật lập trình hướng đối tượng trên ngôn ngữ C# (.NET Framework) cùng hệ quản trị cơ sở dữ liệu SQL Server, công trình đã xây dựng thành công một giải pháp phần mềm hoàn chỉnh, có tính ứng dụng cao và hiệu quả kinh tế rõ rệt.

Dự án không chỉ là minh chứng xuất sắc cho năng lực nghiên cứu và ứng dụng công nghệ thông tin vào giải quyết bài toán doanh nghiệp, mà còn mở ra định hướng phát triển bền vững cho việc hiện đại hóa công tác quản trị nhân lực trong các doanh nghiệp thời kỳ chuyển đổi số.