



















Preview text:
  lOMoAR cPSD| 60729183
BỘ GIÁO DỤC VÀ ĐÀO TẠO 
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á    BÀI TẬP LỚN 
HỌC PHẦN: ĐỒ ÁN CHUYÊN NGÀNH 1 
 TÊN BÀI TẬP LỚN: ĐỒ ÁN CHUYÊN NGÀNH 1 
Sinh viên thực hiện  Khóa  Lớp  Mã sinh viên  Nguyễn Văn Duy  K11  CNTT5  20201193  Nguyễn Hải Tiến  K11  CNTT5  20201733  Đinh Ngọc Anh  K11  CNTT5  20201404  Hoàng Kim Phượng  K11  CNTT5  20200830  Phạm Minh Hiếu  K11  CNTT5  20201311 
Bắc Ninh, tháng 9 năm 2022  1    lOMoAR cPSD| 60729183 MỤC LỤC 
Chương I. Tổng quan về đề tài ......................................................................................... 4 
1.1. Giới thiệu về đề tài ................................................................................................... 4 
1.3. Giải pháp, các công nghệ sử dụng ............................................................................ 5 
Chương II. Mô hình cơ sở dữ liệu quan hệ (ERD) ......................................................... 5 
2.1. Thiết kế cơ sở dữ liệu ............................................................................................... 5 
2.1. Thực thể, thuộc tính, ràng buộc của mô hình ........................................................... 7 
2.2. Mối liên hệ giữa các thực thể với nhau, lược đồ ER ................................................ 9 
Chương III. Ứng dụng WINDOW FORM kết nối CSDL ............................................. 9 
3.1. Lớp Dangnhap.cs ...................................................................................................... 9 
3.2. Lớp Quanlynhanvien.cs .......................................................................................... 13 
3.3. Lớp PhongBanForm.cs ........................................................................................... 19 
3.4. DuAnForm.cs ......................................................................................................... 23 
3.5. Lớp DAL.cs ............................................................................................................ 26 
3.7. Lớp DTO ................................................................................................................. 36 
Kết luận ............................................................................................................................ 39 
Kết quả thu được............................................................................................................ 39 
Hạn chế và hướng phát triển của đề tài ......................................................................... 40 
Danh mục sách tham khảo ............................................................................................. 40      lOMoAR cPSD| 60729183
DANH MỤC BẢNG BIỂU VÀ SƠ ĐỒ   Số hiệu  Tên  Trang  2.1  Sơ đồ Diagram  8  2.2.1 
Lược đồ ER và mối liên hệ giữa các thực thể  10  3.1.1  Form Đăng nhập  11  3.1.2  Form Đăng ký  11  3.2  Form NhanSuForm  14  3.3  PhongBanForm  18  3.4  DuAnForm  21          lOMoAR cPSD| 60729183
PHÂN CÔNG CÔNG VIỆC  Thành viên  Chức vụ  Công việc  Theo %  Đinh Ngọc Anh  Nhóm  NhanVienForm, NhanVien_BUS,  20  trưởng  nhanvien_DTO, word 
Nguyễn Văn Duy Thành viên  PhongbanForm, phongban_BUS,  20  phongban_DTO  Nguyễn Hải Tiến  Thành viên  duanForm,duann_BUS, duan_DTO  25  Hoàng Kim  Thành viên 
dangnhapForm, user_BUS,user_DTO,  20  Phượng  word 
Phạm Minh Hiếu Thành viên 
DAL, sự kiện button, power point  15 
Chương I. Tổng quan về đề tài 
1.1. Giới thiệu về đề tài 
- Quản lý nhân sự hay là Quản lý nguồn nhân lực là công tác quản lý các lực lượng lao 
động của một tổ chức, công ty, xã hội, nguồn nhân lực. Chịu trách nhiệm thu hút, tuyển 
dụng, đào tạo, đánh giá, và tưởng thưởng người lao động, đồng thời giám sát lãnh đạo 
và văn hóa của tổ chức, và bảo đảm phù hợp với luật lao động và việc làm. 
- Quản lý nhân sự là một trong những công việc vô cùng quan trọng và thiết yếu đối với 
mỗi công ty từ trước đến nay. Dựa trên nhu cầu thực tế của xã hội nhằm giải quyết để 
giảm đi những bất cập trong công tác quản lý nhân sự và lương trong công ty, giải pháp 
hiệu quả nhất hiện nay là đầu tư công nghệ và thiết bị hiện đại, ứng dụng công nghệ 
thông tin và tự động hoá trong điều hành và quản lý nhân sự để nâng cao chất lượng 
phục vụ, đổi mới phương thức quản lý, tăng năng xuất hiệu quả. .. Đó là những nội 
dung cơ bản đề cập đến trong đề tài này. 
1.2. Lý do chọn đề tài 
- Với cách thức quản lý nhân sự như hiện nay, hầu hết các công ty vẫn còn sử dụng cách 
quản lý truyền thống đó là sử dụng Word hoặc Exel nên vẫn chưa được chuyên nghiệp, 
còn mắc phải nhiều hạn chế như khó kiểm soát dữ liệu, không có tính bảo mật cao,…      lOMoAR cPSD| 60729183
- Nhận thức được điều đó, khi được học môn lập trình với ngôn ngữ #C và kiến thức về 
hệ quản trị cơ sở dữ liệu SQL Sever chúng em đã xây dựng một phần mềm quản lý 
nhân sự đơn giản để có thể tháo gỡ những nhược điểm ở cách quản lý thông thường. 
1.3. Giải pháp, các công nghệ sử dụng 
- Giải pháp: Xây dựng phần mềm quản lý nhân sự dạng window form, kết nối cơ 
sở dữ liệu nhằm hỗ trợ việc quản lý nhân sự thông minh và hiệu quả hơn.  - Visual Studio 2019, 2022 
- Microsoft SQL Server Management Studio 18 
Chương II. Mô hình cơ sở dữ liệu quan hệ (ERD) 
2.1. Thiết kế cơ sở dữ liệu  • 
Quan hệ NHANVIEN (nhân viên)  Tên cột  Kiểu dữ liệu  Độ rộng  Miêu tả  (thuộc tính)  id_Nv  nchar  10  Mã nhân viên  name_Nv  nvarchar  100  Tên nhân viên  ngaysinh_Nv  date    Ngày sinh  diachi_Nv  nvarchar  50  Địa chỉ  luong_Nv  int    Lương  id_Pb  nchar  10  Mã phòng ban  id_Da  nchar  10  Mã dự án  • 
Quan hệ PHONGBAN (phòng ban)  Tên cột  Kiểu dữ liệu  Độ rộng  Miêu tả  (thuộc tính)  id_Pb  nchar  10  Mã phòng ban  name_Pb  nvarchar  50  Mã phòng ban  sonv_Pb  int    Số nhân viên  mota_Pb  nvarchar  100  Mô tả  • 
Quan hệ DUAN (dự án)      lOMoAR cPSD| 60729183 Tên cột  Kiểu dữ liệu  Độ rộng  Miêu tả  (thuộc tính)  id_Da  nchar  10  Mã dự án  name_ Da  nvarchar  50  Tên dự án  sonv_ Da  int    Số nhân viên  mota_ Da  nvarchar  100  Mô tả  • 
Quan hệ DANGNHAP (đăng nhập)  Tên cột  Kiểu dữ liệu  Độ rộng  Miêu tả  (thuộc tính)  username  nchar  50  Tên đăng nhập  password  nchar  20  Mật khẩu  id_Nv  nchar  10  Mã nhân viên          lOMoAR cPSD| 60729183  
Hình 2.1. Sơ đồ Diagram  
2.1. Thực thể, thuộc tính, ràng buộc của mô hình  • Các thực thể: 
o 1 nhân viên là một thực thể o 1 phòng ban là một thực thể o 1 
dự án là một thực thể o 1 đăng nhập là một thực thể     Thuộc tính: 
o NHANVIEN: id_Nv, name_NV, ngaysinh_Nv, diachi_Nv,  luong_NV, id_Pb, id_Da. 
o PHONGBAN: id_Pb, name_Pb, sonv_Pb, mota_Pb.      lOMoAR cPSD| 60729183
o DUAN: id_Da, name_Da, sonv_Da, mota_Da o DANGNHAP:  username, password, id_nv.  • Ràng buộc:        lOMoAR cPSD| 60729183
2.2. Mối liên hệ giữa các thực thể với nhau, lược đồ ER   
Hình 2.2.1. Lược đồ ER và mối liên hệ giữa các thực thể 
Chương III. Ứng dụng WINDOW FORM kết nối CSDL  3.1. Lớp Dangnhap.cs 
- Đầu tiên khi mở phần mềm sẽ hiện giao diện đăng nhập tài khoản   
Hình 3.1.1. Form Đăng nhập      lOMoAR cPSD| 60729183
- Nhân viên sẽ nhập tài khoản và mật khẩu cá nhân của mình rồi nhấn nút Đăng nhập 
để vào hệ thống. Trường hợp nhân viên mới chưa có tài khoản thì sẽ nhấn vào nút 
Đăng ký để tạo tài khoản   
Hình 3.1.2. Form Đăng ký    - Code DangNhapForm.cs  using System; 
using System.Collections.Generic;        lOMoAR cPSD| 60729183 using System.ComponentModel;  using System.Data; using 
System.Drawing; using System.Linq;  using System.Text; using  System.Windows.Forms; using  System.Data.SqlClient;  using BTL_QLNS.BUS; namespace  BTL_QLNS  { 
 public partial class DangNhapForm : Form   { 
 Ultis a = new Ultis(); public  DangNhapForm()   { 
 InitializeComponent(); remember();   } 
 private void frmdangky_Closed(object sender, FormClosedEventArgs e)   {   this.Show();   } 
 private void frmmhc_Closed(object sender, FormClosedEventArgs e)   {   this.Show();   } 
 User_BUS ub = new User_BUS(); 
 private void btnDangnhap_Click(object sender, EventArgs e)   { 
 if (txtUsername.Text == "" || txtPassword.Text == "") { 
 MessageBox.Show("Vui lòng nhập tài khoản hoặc mật khẩu"); return;   }   String condition; 
 condition = " username ='" + txtUsername.Text + "' AND password ='" + txtPassword.Text + "'"; 
 DataTable dt = new DataTable(); try   { 
 dt = ub.getUser(condition); if  (dt.Rows.Count>0)   { 
 MessageBox.Show("Đăng nhập thành công !"); a.setus(txtUsername.Text);   a.setpw(txtPassword.Text); 
 NhanSuForm form = new NhanSuForm(); 
 form.FormClosed += new FormClosedEventHandler(frmmhc_Closed);  form.Show(); this.Hide();   }  else   { 
 MessageBox.Show("Đăng nhập không thành công , mời bạn đăng ký !"); 
DangKyForm form = new DangKyForm();      lOMoAR cPSD| 60729183  
 form.FormClosed += new FormClosedEventHandler(frmdangky_Closed);  form.Show(); this.Hide();   }   }   catch (FormatException)   { 
 MessageBox.Show("Bạn đã nhập sai cú pháp");   }   catch (SqlException)   { 
 MessageBox.Show("Lỗi kết nối CSDL !");   }   } 
 private void btnDangky_Click(object sender, EventArgs e)   { 
 DangKyForm form = new DangKyForm(); 
 form.FormClosed += new FormClosedEventHandler(frmdangky_Closed); form.Show();  this.Hide();   } 
 private void txtPassword_KeyDown(object sender, KeyEventArgs e)   { 
 if(e.KeyCode == Keys.Enter) btnDangnhap_Click(sender, e);   } 
 private void remember() { if(a.remember) { 
 txtUsername.Text = a.getUsername(); txtPassword.Text =  a.getPw();   } else { 
 txtUsername.Text = ""; txtPassword.Text = "";   }   }   }  }      lOMoAR cPSD| 60729183
3.2. Lớp Quanlynhanvien.cs   
Hình 3.2. Form NhanSuForm   
- Ở trang quản lý nhân viên sẽ hiện bảng danh sách nhân viên và các nút chức năng: 
o Nút Reset để làm mới các ô textbox. o Nút Thêm cho phép ta thêm thông  tin một nhân viên mới. 
o Nút Sửa cho phép ta sửa thông tin của nhân viên theo mã nhân viên trong 
bảng. Nhấp vào dòng thông tin của nhân viên đó, thông tin sẽ hiện trên ô 
textbox và thực hiện sửa rồi ấn nút Sửa. 
o Nút Xóa cho phép ta xóa toàn bộ thông tin của nhân viên. Nhấp vào dòng 
thông tin của nhân viên đó rồi ấn nút Xóa. 
o Nút Tìm kiếm cho phép ta tìm kiếm theo mã nhân viên hoặc tên nhân viên.      lOMoAR cPSD| 60729183   - Code NhanSuForm.cs  using System; 
using System.Collections.Generic; using  System.ComponentModel;  using System.Data; using  System.Drawing; using  System.Linq; using  System.Text;        lOMoAR cPSD| 60729183
using System.Windows.Forms; using 
BTL_QLNS.BUS; using System.Data.SqlClient; 
using Microsoft.Office.Interop.Excel; 
using app = Microsoft.Office.Interop.Excel.Application; namespace BTL_QLNS  { 
 public partial class NhanSuForm : Form   {   public NhanSuForm()   {   InitializeComponent(); } 
 private void btnExit_Click(object sender, EventArgs e)   {   Ultis frmmch = new Ultis();  frmmch.Show(); this.Hide();   } 
 NhanVien_BUS nvb = new NhanVien_BUS(); 
 private void Quanlynhanvien_Load(object sender, EventArgs e)   { 
 //// TODO: This line of code loads data into the 
'quanlynhasu_3FDataSet1.DUAN' table. You can move, or remove it, as needed. 
 //this.dUANTableAdapter.Fill(this.quanlynhasu_3FDataSet1.DUAN); //// TODO: 
This line of code loads data into the 
'quanlynhasu_3FDataSet.PHONGBAN' table. You can move, or remove it, as needed. 
//this.pHONGBANTableAdapter.Fill(this.quanlynhasu_3FDataSet.PHONGBAN); 
dgvNhanVien.DataSource = nvb.getNhanvien();   } 
 private void btnExit_Click_1(object sender, EventArgs e)   { 
 DangNhapForm frmmch = new DangNhapForm();  frmmch.Show(); this.Hide();   } 
 private void btnThem_Click(object sender, EventArgs e)   {   int luongnv=0 ; try   { 
 luongnv = int.Parse(txtLuong.Text);   }   catch (FormatException)   { 
 MessageBox.Show("Kiểu dữ liệu của lương phải là kiểu số !");   } 
 if (txtMaNv.Text.Trim() == "") 
 MessageBox.Show("Mã nhân viên không được để trống !"); else if  (txtTenNv.Text.Trim() == "") 
 MessageBox.Show("Tên nhân viên không được để trống !"); else if (luongnv  == 0) 
 MessageBox.Show("Thêm thất bại !");      lOMoAR cPSD| 60729183       lOMoAR cPSD| 60729183  else   { 
 nvb.insertNV(txtMaNv.Text, txtTenNv.Text,ngaysinh.Text, txtDiachi.Text, luongnv, 
cbxPhongban.Text, cbxDuan.Text);   }   
 Quanlynhanvien_Load(sender, e);   } 
 private void btnSua_Click(object sender, EventArgs e)   {   int luongnv = 0; try   { 
 luongnv = int.Parse(txtLuong.Text);   }   catch (FormatException)   { 
 MessageBox.Show("Kiểu dữ liệu của lương phải là kiểu số !");   } 
 if (txtMaNv.Text.Trim() == "") 
 MessageBox.Show("Mã nhân viên không được để trống !"); else if  (txtTenNv.Text.Trim() == "") 
MessageBox.Show("Tên nhân viên không được để trống !"); else if  (luongnv == 0) 
 MessageBox.Show("Sửa thất bại !"); else 
 nvb.updateNV(txtMaNv.Text, txtTenNv.Text, ngaysinh.Text, 
txtDiachi.Text, luongnv, cbxPhongban.Text, cbxDuan.Text); 
Quanlynhanvien_Load(sender, e); } 
 private void btnXoa_Click(object sender, EventArgs e)   {   nvb.deleteNV(txtMaNv.Text); 
Quanlynhanvien_Load(sender, e); } 
 private void dgvNhanVien_CellClick(object sender, DataGridViewCellEventArgs e)   {   String mapb, mada; int 
row = e.RowIndex; if (row >= 0)   { 
 txtMaNv.Text = dgvNhanVien.Rows[row].Cells[0].Value.ToString(); txtTenNv.Text = 
dgvNhanVien.Rows[row].Cells[1].Value.ToString(); ngaysinh.Text = 
DateTime.Parse(dgvNhanVien.Rows[row].Cells[2].Value.ToString()).ToString("dd-MMyyyy"); 
 txtDiachi.Text = dgvNhanVien.Rows[row].Cells[3].Value.ToString(); 
txtLuong.Text = dgvNhanVien.Rows[row].Cells[4].Value.ToString(); mapb = 
dgvNhanVien.Rows[row].Cells[5].Value.ToString(); mada = 
dgvNhanVien.Rows[row].Cells[6].Value.ToString(); cbxPhongban.Text = 
nvb.selectPB(mapb); cbxDuan.Text = nvb.selectDA(mada);      lOMoAR cPSD| 60729183  }   } 
 private void btnTim_Click(object sender, EventArgs e)   {   if (txtSearch.Text == "") { 
 MessageBox.Show("Vui lòng nhập mã hoặc tên cần tìm"); return;   } 
 dgvNhanVien.DataSource = nvb.Search(txtSearch.Text);   } 
 private void btnreset_Click(object sender, EventArgs e)   { 
 txtDiachi.Text = ""; txtLuong.Text = 
""; txtMaNv.Text = ""; txtSearch.Text  = ""; txtTenNv.Text = ""; 
 ngaysinh.Text = "(ngày / tháng/ năm)";   } 
 private void ngaysinh_Enter(object sender, EventArgs e) { if 
(!(ngaysinh.Text == "(ngày / tháng/ năm)")) return; ngaysinh.Text = ""; 
 ngaysinh.ForeColor = Color.Black;   } 
 private void ngaysinh_Leave(object sender, EventArgs e) { if 
(!(ngaysinh.Text == "")) return; ngaysinh.Text = "(ngày / tháng/ năm)"; 
ngaysinh.ForeColor = Color.Silver;   } 
 private void btnPhongBan_Click(object sender, EventArgs e) { Ultis form =  new Ultis(); 
 form.btnPhongBan_Click(sender, e); this.Hide();   } 
 private void btnDuan_Click(object sender, EventArgs e) { Ultis 
form = new Ultis(); form.btnDuan_Click(sender, e); this.Hide();   } 
 private void ngaysinh_TextChanged(object sender, EventArgs e) { ngaysinh.ForeColor = Color.Black;   }   }  }         lOMoAR cPSD| 60729183
3.3. Lớp PhongBanForm.cs   
Hình 3.3. PhongBanForm 
- Ở trang Quản lý phòng ban sẽ hiện thị bảng danh sách các phòng ban và có các  nút chức năng: 
o Nút Thêm cho phép ta thêm thông tin của một phòng ban mới. 
o Nút Sửa cho phép ta sửa thông tin của phòng ban theo mã phòng ban trong 
bảng. Nhấp vào dòng thông của phòng ban, thông tin sẽ hiện trên ô textbox 
và thực hiện sửa rồi ấn nút Sửa. 
o Nút Xóa cho phép ta xóa thông tin của một phòng ban. Nhấp vào dòng thông 
tin của phòng ban cần xóa rồi ấn nút Xóa. 
o Nút Tìm kiếm cho phép ta tìm kiếm thông tin của phòng ban theo mã hoặc  tên phòng ban.      lOMoAR cPSD| 60729183   - Code PhongBanForm.cs  using System; 
using System.Collections.Generic; using  System.ComponentModel;  using System.Data; using  System.Drawing;