Xây dựng một ứng dụng quản lý nhân sự | Báo cáo bài tập lớn kết thúc học phần Lập trình hướng đối tượng
Hiện thực các chức năng quản lý cơ bản như thêm mới, xem danh sách, chỉnh sửa và xóa thông tin của nhân viên. Ngoài ra còn có các chức năng khác như tìm kiếm nhân viên thông qua mã nhân viên, thông kê các nhân viên theo các tiêu chí giới tính, chức vụ, địa chỉ. Phát triển giao diện người dùng thân thiện, dễ sử dụng. Đảm bảo rằng các chức năng được tổ chức một cách logic và dễ hiểu, giúp người dùng tương tác với hệ thống một cách hiệu quả nhất. Tài liệu giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời bạn đón xem.
Môn: Lập trình hướng đối tượng (Phenikaa)
Trường: Đại học Phenika
Thông tin:
Tác giả:
Preview text:
TRƯỜNG ĐẠI HỌC PHENIKAA KHOA KHOA HỌC CƠ BẢN ⸎⸎⸎⸎⸎
BÁO CÁO BÀI TẬP LỚN KẾT THÚC HỌC PHẦN LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Đề bài: “Xây dựng một ứng dụng quản lý nhân sự”
Giảng viên hướng dẫn : TRẦN ĐÌNH TÂN Sinh viên : VŨ THỊ TRANG Lớp
: Lập trình hướng ối tượng-1-2-23(N01) Mã SV : 22010386
HÀ NỘI, THÁNG 02/2024 MỤC LỤC Contents
LỜI MỞ ĐẦU ............................................................................................................ 2
1. Mục tiêu .................................................................................................................. 3
2. Phân tích yêu cầu .................................................................................................... 4
2.1. Giao diện cửa sổ với Swing ............................................................................. 4
2.2. Sơ ồ class ......................................................................................................... 4
2.3. Các tính năng và chức năng trong hệ thống .................................................... 5
2.4. Dữ liệu ược lưu trữ dưới dạng Collection ....................................................... 6
2.5. Lưu dữ liệu xuống file nhị phân ...................................................................... 6
2.6. Kiểm tra dữ liệu khi nhập vào ......................................................................... 6
3. Thiết kế và triển khai .............................................................................................. 6
3.1. Giao diện ăng nhập (class “Login”) ................................................................ 6
3.2. Giao diện hệ thống QLNS (class “HRManagementGUI”) ............................. 8
3.2.1. Các tính năng ............................................................................................ 8
3.2.2. Các chức năng ......................................................................................... 11
4. Source Code .......................................................................................................... 14
4.1. Class Person ................................................................................................... 14
4.3. Class Login .................................................................................................... 17
4.4. Class HRManagementGUI ............................................................................ 23 LỜI MỞ ĐẦU
Trong môi trường kinh doanh hiện ại, việc quản lý nhân sự là một phần quan trọng
không thể thiếu ối với mọi tổ chức. Việc hiệu quả hóa quản lý nhân sự không chỉ
ảm bảo sự hoạt ộng suôn sẻ của tổ chức mà còn giúp tăng cường năng suất lao ộng
và sự hài lòng của nhân viên. Đồng thời, với sự phát triển của công nghệ thông tin,
việc áp dụng phần mềm quản lý nhân sự ã trở thành một xu hướng không thể phủ
nhận, giúp tổ chức quản lý thông tin nhân sự một cách tự ộng, chính xác và tiết kiệm thời gian. 2
Trong bối cảnh ó, trong học phần Lập trình Hướng ối tượng Java, em ã quyết chọn
chủ ề là "Phần mềm ứng dụng quản lý nhân sự". Bài tập này không chỉ là cơ hội ể
áp dụng những kiến thức về lập trình hướng ối tượng mà em ã học, mà còn là một
bước ầu tiên ể tiếp cận và hiểu rõ hơn về quy trình phát triển phần mềm thực tế.
Qua bài tập này, em mong muốn không chỉ rèn luyện ược kỹ năng lập trình và phát
triển phần mềm mà còn có cơ hội tiếp cận và hiểu rõ hơn về quy trình phát triển
phần mềm từ ý tưởng ban ầu ến sản phẩm hoàn thiện. 1. Mục tiêu
Xây dựng một ứng dụng có khả năng quản lý thông tin về nhân sự của một
tổ chức bằng ngôn ngữ java.
Hiện thực các chức năng quản lý cơ bản như thêm mới, xem danh sách,
chỉnh sửa và xóa thông tin của nhân viên. Ngoài ra còn có các chức năng
khác như tìm kiếm nhân viên thông qua mã nhân viên, thông kê các nhân
viên theo các tiêu chí giới tính, chức vụ, ịa chỉ. 3
Phát triển giao diện người dùng thân thiện, dễ sử dụng. Đảm bảo rằng các
chức năng ược tổ chức một cách logic và dễ hiểu, giúp người dùng tương tác
với hệ thống một cách hiệu quả nhất.
2. Phân tích yêu cầu
2.1. Giao diện cửa sổ với Swing
Ứng dụng sẽ có giao diện người dùng ược thiết kế bằn Java Swing. Giao
diện sẽ gồm các cửa sổ (ăng nhập, hệ thống QLNS), bảng thông tin, các nút
chức năng và các trường nhập liệu ể người dùng tương tác. 2.2. Sơ ồ class
Ứng dụng có 4 classes Person, Employee, Login, HRManagementGUI. Với:
- Class “Person” ại diện cho thông tin cơ bản của mỗi con người bình
thường như tên, ịa chỉ, ngày sinh, giới tính.
- Class “Employee” ại diện cho thông tin cơ bản của mỗi nhân viên trong
hệ thống, ngoài các thông tin cơ bản kế thừa từ class “Person” còn có mã
nhân viên, chức vụ, số iện thoại, ịa chỉ email, lương.
- Class “Login” ại diện cho giao diện ăng nhập.
- Class “HRManagementGUI” ại diện cho giao diện người dùng và quản lý hiển thị dữ liệu. Các mối quan hệ:
- Class “Person” là base class của class “Employee”.
- Class “Employee” là class con kế thừa từ class “Person”.
- Class “HRManagement” sử dụng ố tượng của class “Employee” ể thao
tác và hiển thị thông tin nhân viên trong giao diện người dùng. Mối quan
hệ này cho phép “HRManagement” truy cập và thực hiện các thao tác
liên quan ến dữ liệu nhân viên thông qua các ối tượng của class
“Employee”. Do ó, mối quan hệ giữa hai class là một mối quan hệ Association. 4
- Class “Login” sử dụng hoặc phụ thuộc vào class “HRManagement” ể
hiển thị giao diện quản lý nhân sự sau khi người dùng ăng nhập thành
công. Do ó, mối quan hệ giữa hai class là một mối quan hệ Association. Sơ ồ class (ORD):
2.3. Các tính năng và chức năng trong hệ thống
Các chức năng quản lý thông tin như thêm, sửa, xóa các ối tượng, lưu và tải
dữ liệu lên. Các chức năng này sẽ ược kích hoạt khi người dùng thao tác trên
giao diện người dùng, thông qua các nút chức năng. 5
Chức năng tìm kiếm ối tượng cung cấp chức năng tìm kiếm ể người dùng có
thể tìm kiếm nhân viên thông qua tiêu chí mã nhân viên.
Chưc năng thống kê cung cấp chức năng thống kê thông tin về ối tượng ể
người dùng có thể thống kê nhân viên thông qua một trong 3 tiêu chí giới
tính, chức vụ, ịa chỉ.
2.4. Dữ liệu ược lưu trữ dưới dạng Collection
Dữ liệu của ứng dụng sẽ ược lưu trữ dưới dạng Collection là ArrayList ể dễ
dàng quản lý và truy xuất.
2.5. Lưu dữ liệu xuống file nhị phân
Khi ứng dụng khởi ộng, nếu file dữ liệu chưa tồn tại, ứng dụng sẽ tạo mới
file ể lưu trữ dữ liệu.
Nếu file ã tồn tại, muốn load dữ liệu từ file lên ể hiển thị trên giao diện
người dùng cần sử dụng nút chức năng chuyên dụng.
2.6. Kiểm tra dữ liệu khi nhập vào
Ứng dụng sẽ có các cơ chế kiểm tra dữ liệu khi người dùng nhập vào trên
giao diện. Kiểm tra sẽ ảm bảo tính hợp lệ của dữ liệu trước khi thêm, sửa,
hoặc xóa thông tin ối tượng.
3. Thiết kế và triển khai
Em ã thiết kế các class Person và Employee ể quản lý dữ liệu và xử lý logic.
Đồng thời, em ã hiện thực giao diện người dùng thông qua Java Swing, bao
gồm các giao diện ăng nhập và giao diện hệ thống QLNS.
3.1. Giao diện ăng nhập (class “Login”)
Class "Login" chứa giao diện cho phép người dùng nhập thông tin ăng nhập
là tên ăng nhập và mật khẩu. Giao diện này bao gồm các trường văn bản ể
người dùng nhập thông tin, nút ể xác nhận ăng nhập “Đăng nhập”, và nút ể
thoát khỏi giao diện “Hủy”. 6
Do hệ thống QLNS cũng là một trong những phần ược bảo mật của mỗi
công ty, cho nên giao diện ăng nhập sẽ giúp xác thực thông tin ăng nhập
nhập từ người dùng, bao gồm kiểm tra xem thông tin tài khoản và mật khẩu
có khớp với dữ liệu trong cơ sở dữ liệu hay không.
Nếu thông tin ăng nhập không hợp lệ, class “Login” sẽ hiển thị hộp thông
báo lỗi và yêu cầu nhập lại thông tin ăng nhâp.
Nếu thông tin ăng nhập hợp lệ, class "Login" sẽ hiển thị hộp thông báo ăng
nhập thành công sau ó chuyển hướng người dùng ến giao diện chính của
ứng dụng chính là giao diện QLNS. 7
3.2. Giao diện hệ thống QLNS (class “HRManagementGUI”)
Class “HRManagementGUI” là thành phần chính của giao diện người dùng
trong hệ thống quản lý nhân sự. Nó chứa tất cả các thành phần giao diện cần
thiết ể hiển thị thông tin nhân sự, thực hiện các thao tác quản lý và tương tác với người dùng.
3.2.1. Các tính năng
a) Hiển thị thông tin nhân sự
Tính năng hiển thị thông tin nhân sự cung cấp một bảng hiển thị thông tin
về các nhân viên trong hệ thống. 8
b) Tìm kiếm nhân viên
Tính năng tìm kiếm nhân viên cung cấp chức năng tìm kiếm ể người
dùng có thể tìm kiếm nhân viên thông qua tiêu chí mã nhân viên. Người
dùng nhập mã nhân viên cần tìm vào trường văn bản tìm kiếm theo mã
nhân viên, sau ó chọn nút “Tìm kiếm”. c) Lưu thông tin
Tính năng nhập vào file cung cấp chức năng lưu ể người dùng có thể lưu
trữ thông tin nhân sự vào file dưới dạng bin bằng cách chọn nút “Lưu”. d) Tải file lên 9
Tính năng nhập/xuất dữ liệu từ file cung cấp chức năng lưu ể người dùng
có thể tải dữ liệu lên từ các file dữ liệu có sẵn lên bảng hiển thị thông tin
nhân sự bằng cách chọn nút “Tải lên”. Nếu không có file nào ể tải lên,
class sẽ hiển thị hộp thông báo lỗi.
e) Thoát ứng dụng
Tính năng thoát cung cấp chức năng giúp người dùng thoát khỏi ứng
dụng ang sử dụng bằng cách chọn nút “Thoát”. Sau ó, class sẽ hiển thị
hộp thoại hỏi xem người dùng có chắc chắn muốn thoát không, và có hai
lựa chọn Yes ( ồng ý), No (không ồng ý). 10
f) Tải lại giao diện
Tính năng tải lại trang cung cấp chức năng giúp người dùng tải lại giao
diện về trạng thái ban ầu ể không tốn công xóa dữ liệu ã nhập vào các
trường văn bản. Sử dụng bằng cách chọn nút “F5”, sau ó giao diện sẽ tự ộng tải lại.
3.2.2. Các chức năng a) Thêm nhân viên
Cung cấp chức năng cho phép người dùng thêm mới nhân viên theo các
trường văn bản bên trái giao diện và lựa chọn ể nhập các thông tin của
nhân viên. Nếu dữ liệu nhập vào hợp lệ, sau khi chọn nút “Thêm” class
sẽ hiển thị hộp thông báo thêm thành công.
Nếu dữ liệu nhập vào không hợp lệ, sau khi chọn nút “Thêm” class sẽ
hiển thị hộp thông báo lỗi. 11
b) Chỉnh sửa thông tin nhân viên
Cung cấp chức năng cho phép người dùng chỉnh sửa thông tin của những
nhân viên ã thêm, bằng cách click vào hàng thông tin của nhân viên ó.
Rồi các trường văn bản bên trái giao diện sẽ hiển thị thông tin của nhân
viên ó theo từng tiêu chí, người dùng click vào các trường văn bản và chỉnh sửa thông tin.
Nếu dữ liệu nhập vào khi chỉnh sửa hợp lệ sau khi chọn nút “Sửa” class
sẽ hiển thị hộp thông báo sửa thành công.
Nếu dữ liệu nhập vào khi chỉnh sửa không hợp lệ, sau khi chọn nút “Sửa”
class sẽ hiển thị hộp thông báo lỗi giống lỗi ở phần thêm nhân viên. c) Xóa nhân viên 12
Cung cấp chức năng cho phép người dùng xóa nhân viên ã thêm vào,
vằng cách click vào hàng thông tin của nhân viên ó. Sau khi chọn nút
“Xóa”, class sẽ hiển thị hộp thoại hỏi xem người dùng có chắc chắn
muốn xóa không, và có hai lựa chọn Yes ( ồng ý), No (không ồng ý).
d) Thống kê danh sách nhân viên
Cung cấp chứ năng cho phép người dùng thống kê danh sách nhân viên
có chung một trong 3 tiêu chí giới tính, chức vụ, ịa chỉ. Người dùng chọn
1 trong 3 tiêu chí ở combobox, sau ó nhập chính xác thông tin chi tiết của
tiêu chí ó trong trường văn bản thống kế, cuối cùng là chọn nút “Thống
kê”. Danh sách nhân viên có chung tiêu chí ó sẽ hiển thị trên bảng hiển thị thông tin. 13 4. Source Code 4.1. Class Person
package VuThiTrang_22010386; import
java.io.Serializable; public class Person
implements Serializable{ protected String name, address, dOB, gender; public Person() {}
public Person(String name, String dOB, String gender, String address)
{ this.name = name; this.dOB = dOB; this.gender = gender; this.address = address; } public String getName() { return name; } 14
public void setName(String name) { this.name = name; } public String getdOB() { return dOB; }
public void setdOB(String dOB) { this.dOB = dOB; } public String getGender() { return gender; }
public void setGender(String gender) { this.gender = gender; } public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; } }
4.2. Class Employee package VuThiTrang_22010386; import
java.io.Serializable; public class Employee extends Person
implements Serializable{ protected String employeeID, 15
position, phoneNumber, email; protected String salary; public Employee() { }
public Employee(String employeeID, String name, String dOB, String
gender, String position, String phoneNumber, String email, String salary,
String address) { super(name, dOB, gender, address);
this.employeeID = employeeID; this.position = position;
this.phoneNumber = phoneNumber; this.email = email; this.salary = salary; }
public String getEmployeeID() { return employeeID; }
public void setEmployeeID(String employeeID)
{ this.employeeID = employeeID; } public String getPosition() { return position; }
public void setPosition(String position) { this.position = position; }
public String getPhoneNumber() { return phoneNumber; } 16
public void setPhoneNumber(String phoneNumber)
{ this.phoneNumber = phoneNumber; } public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; } public String getSalary() { return salary; }
public void setSalary(String salary) { this.salary = salary; } } 4.3. Class Login
package VuThiTrang_22010386; import javax.swing.JOptionPane; public
class Login extends javax.swing.JFrame { private static final String
CORRECT_USERNAME = "trangpii2023"; private static final String
CORRECT_PASSWORD = "Tr@ngpii2023"; public Login() { initComponents(); }
@SuppressWarnings("unchecked") //
private void initComponents() { 17
SystemName = new javax.swing.JLabel();
Username = new javax.swing.JLabel(); Password
= new javax.swing.JLabel(); jTextField1 = new
javax.swing.JTextField(); jPasswordField1 = new javax.swing.JPasswordField();
Login = new javax.swing.JButton();
Exit = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
SystemName.setFont(new java.awt.Font("Segoe UI", 1, 17)); // NOI18N
SystemName.setHorizontalAlignment(javax.swing.SwingConstants.CENTE R);
SystemName.setText("ĐĂNG NHẬP VÀO HỆ THỐNG QUẢN LÝ NHÂN SỰ");
Username.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
Username.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
Username.setText("Tên ăng nhập:");
Password.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
Password.setText("Mật Khẩu: "); jTextField1.setFont(new
java.awt.Font("Segoe UI", 0, 13)); // NOI18N
jPasswordField1.setFont(new java.awt.Font("Segoe UI", 0, 13)); // NOI18N
jPasswordField1.addActionListener(new
java.awt.event.ActionListener() { public void
actionPerformed(java.awt.event.ActionEvent evt)
{ jPasswordField1ActionPerformed(evt); } 18 });
Login.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N
Login.setText("Đăng nhập");
Login.addActionListener(new java.awt.event.ActionListener()
{ public void actionPerformed(java.awt.event.ActionEvent evt) { LoginActionPerformed(evt); } });
Exit.setFont(new java.awt.Font("Segoe UI", 0, 14)); // NOI18N Exit.setText("Hủy");
Exit.addActionListener(new java.awt.event.ActionListener()
{ public void actionPerformed(java.awt.event.ActionEvent evt) { ExitActionPerformed(evt); } });
javax.swing.GroupLayout layout = new
javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout); layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup() .addContainerGap() .addComponent(SystemName,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup() .addGap(59, 59, 59) 19
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .LEADING) .addComponent(Username,
javax.swing.GroupLayout.PREFERRED_SIZE, 100,
javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(Password)) .addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .TRAILING)
.addGroup(layout.createSequentialGroup() .addComponent(Exit) .addGap(91, 91, 91) .addComponent(Login))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment .LEADING, false) .addComponent(jTextField1,
javax.swing.GroupLayout.DEFAULT_SIZE, 265, Short.MAX_VALUE)
.addComponent(jPasswordField1)))
.addContainerGap(47, Short.MAX_VALUE)) ); layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING )
.addGroup(layout.createSequentialGroup() .addGap(31, 31, 31) .addComponent(SystemName) .addGap(49, 49, 49) 20