1. Trang chủ
  2. » Luận Văn - Báo Cáo

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 xây dựng một ứng dụng quản lý nhân sự

52 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

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.. - Class “Login” sử dụng hoặc phụ thuộc vào class

Trang 1

TRƯỜNG ĐẠI HỌC PHENIKAA

⸎⸎⸎⸎⸎

ĐỐ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

Trang 2

MỤC LỤC

Contents

LỜI MỞ ĐẦU 3

1 Mục tiêu 4

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 6

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”) 7

Trang 3

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

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

Trang 4

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

Trang 5

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

- 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):

Trang 6

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

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”

Trang 7

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

3.2 Giao diện hệ thống QLNS (class “HRManagementGUI”)

Trang 8

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

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

Trang 9

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

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ị

Trang 10

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

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 ý)

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

Trang 11

3.2.2 Các chức năng

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

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 đó

Trang 12

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

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

Trang 13

“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 ý)

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

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() {}

Trang 14

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;

Trang 15

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, 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;

Trang 17

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(); }

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);

Trang 18

SystemName.setFont(new java.awt.Font("Segoe UI", 1, 17)); // NOI18N

SystemName.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

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);

} });

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);

} });

Trang 19

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)

.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)

Trang 20

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)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

addComponent(Username) .addComponent(jTextField1,

javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18)

Trang 21

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

addComponent(Password)

addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(51, 51, 51)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)

addComponent(Login) .addComponent(Exit))

addContainerGap(64, Short.MAX_VALUE)) );

pack();

}// </editor-fold> private void

jPasswordField1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here:

JOptionPane.showMessageDialog(Login.this, "Đăng nhập thành công!");

Trang 22

setVisible(false);

openHRManagementGUI(); } else {

JOptionPane.showMessageDialog(Login.this, "Sai tên đăng nhập hoặc mật khẩu, mời nhập lại.", "Đăng nhập thất bại!",

JOptionPane.ERROR_MESSAGE); jTextField1.setText(""); jPasswordField1.setText(""); }

new Login().setVisible(true); }

}); }

private void openHRManagementGUI() {

HRManagementGUI hrManagement = new HRManagementGUI(); hrManagement.setVisible(true);

}

// Variables declaration - do not modify private javax.swing.JButton Exit;

Trang 23

private javax.swing.JButton Login; private javax.swing.JLabel Password; private javax.swing.JLabel SystemName; private javax.swing.JLabel Username;

private javax.swing.JPasswordField jPasswordField1; private javax.swing.JTextField jTextField1;

// End of variables declaration }

4.4 Class HRManagementGUI

package VuThiTrang_22010386; import java.awt.event.KeyEvent; import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException; import java.io.FileOutputStream;

import java.io.IOException; import java.io.InputStream;

import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream;

import java.util.ArrayList; import java.util.List;

import javax.swing.JOptionPane;

import javax.swing.table.DefaultTableModel;

public class HRManagementGUI extends javax.swing.JFrame {

Trang 24

List<Employee> employees = new ArrayList<>(); List<Employee> listEmp = new ArrayList<>(); File file = new File("Employee.bin");

int selectedIndex;

DefaultTableModel Model; public HRManagementGUI() { initComponents();

Model = (DefaultTableModel)ManageTable.getModel(); }

Name = new javax.swing.JLabel(); dOB = new javax.swing.JLabel(); Gender = new javax.swing.JLabel(); Position = new javax.swing.JLabel(); Email = new javax.swing.JLabel();

phoneNumber = new javax.swing.JLabel(); Salary = new javax.swing.JLabel();

Trang 25

Address = new javax.swing.JLabel(); txtID = new javax.swing.JTextField(); txtName = new javax.swing.JTextField(); txtdOB = new javax.swing.JTextField();

txtPhoneNumber = new javax.swing.JTextField(); txtEmail = new javax.swing.JTextField();

txtSalary = new javax.swing.JTextField(); txtAddress = new javax.swing.JTextField(); Female = new javax.swing.JRadioButton(); Male = new javax.swing.JRadioButton();

choosePosition = new javax.swing.JComboBox<>(); LabelFindByID = new javax.swing.JLabel();

txtFindByID = new javax.swing.JTextField(); FindByID = new javax.swing.JButton(); Add = new javax.swing.JButton(); Delete = new javax.swing.JButton(); Update = new javax.swing.JButton(); Save = new javax.swing.JButton(); Exit = new javax.swing.JButton(); LabelFilter = new javax.swing.JLabel();

BoxFilter = new javax.swing.JComboBox<>(); TxtFilter = new javax.swing.JTextField(); Filter = new javax.swing.JButton();

Load = new javax.swing.JButton(); Refresh = new javax.swing.JButton();

Trang 26

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jPanel1.setPreferredSize(new java.awt.Dimension(1210, 700)); jPanel1.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { jPanel1KeyPressed(evt);

} });

systemName.setFont(new java.awt.Font("Segoe UI", 1, 25)); // NOI18N

systemName.setText("HỆ THỐNG QUẢN LÝ NHÂN SỰ");

ManageTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] {

{null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null}, {null, null, null, null, null, null, null, null, null},

{null, null, null, null, null, null, null, null, null},

Ngày đăng: 24/07/2024, 16:05

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN