Java课程设计——基于swing实现的工资管理系统(附程序源码)

                                             工资管理系统功能模块结构图

  1. 实现职工基本信息的管理:主要包括职工信息的新增、修改、查询、删除等操作;
  2. 实现工资等级信息管理:具体包括等级的新增、修改、查询等操作;
  3. 职工变动工资管理:具体包括每月职工变动工资的新增、修改、删除、查询等操作;
  4. 、统计:分类汇总并输出所有员工的基本工资、补贴金额、奖励金额、扣除金额、实发工资的总金额和平均金额.

链接:https://pan.baidu.com/s/1tFZGNoatjvbPp0WyXj3XaA?pwd=1234 
提取码:1234

该项目使用maven管理

pom.xml设置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>classwork</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>
    </dependencies>

</project>
Employee类
package gui_total.basic;

import java.time.LocalDate;
import java.util.Objects;

public class Employee {
    public static int cnt = -1;
    private int id;
    private String name;
    private String gender;
    private LocalDate joiningDate;
    private SalaryGrade  salaryGrade;

    public Employee(int id, String name, String gender, LocalDate joiningDate, SalaryGrade  salaryGrade) {
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.joiningDate = joiningDate;
        this.salaryGrade = salaryGrade;
    }

    public Employee(int id, String name, String gender, LocalDate joiningDate) {
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.joiningDate = joiningDate;
    }

    public Employee() {

    }

    public static int getCnt() {
        return cnt;
    }

    public static void upCnt() {
        Employee.cnt++;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public LocalDate getJoiningDate() {
        return joiningDate;
    }

    public void setJoiningDate(LocalDate joiningDate) {
        this.joiningDate = joiningDate;
    }

    public String getSalaryGrade() {
        return salaryGrade.getGrade();
    }
    public SalaryGrade getSalaryGrade1() {
        return salaryGrade;
    }

    public void setSalaryGrade(SalaryGrade salaryGrade) {
        this.salaryGrade = salaryGrade;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Employee employee = (Employee) o;
        return id == employee.id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", joiningDate=" + joiningDate +
                ", salaryGrade=" + salaryGrade +
                '}';
    }
}

SalaryGrade类:
package gui_total.basic;

import java.util.Objects;

public class SalaryGrade {
        public static int cntSalaryGrade = 0;
        int id;
        int basicmoney;
        int Workmoney;
        int transitmoney;
        String grade;

    public SalaryGrade(int id, int basicmoney, int workmoney, int transitmoney) {
        this.id = id;
        this.basicmoney = basicmoney;
        this.Workmoney = workmoney;
        this.transitmoney = transitmoney;
        if(getBasicmoney()+getTransitmoney()+getWorkmoney()<5000)
        {
            grade="C";
        } else if (getBasicmoney()+getTransitmoney()+getWorkmoney()>= 5000
                &&getBasicmoney()+getTransitmoney()+getWorkmoney()<13000){
            grade="B";
        }
        else {grade="A";}
    }

    public static int cntSalaryGrade() {
        return cntSalaryGrade;
    }

    public static void upcntSalaryGrade() {
        SalaryGrade.cntSalaryGrade++;
    }

    public String getGrade() {
        return grade;
    }

    public void setId() {
        this.id = Employee.getCnt();
    }

    public int getId() {
        return id;
    }

    public int getBasicmoney() {
        return basicmoney;
    }

    public void setBasicmoney(int basicmoney) {
        this.basicmoney = basicmoney;
    }

    public int getWorkmoney() {
        return Workmoney;
    }

    public void setWorkmoney(int workmoney) {
        Workmoney = workmoney;
    }

    public int getTransitmoney() {
        return transitmoney;
    }

    public void setTransitmoney(int transitmoney) {
        this.transitmoney = transitmoney;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        SalaryGrade that = (SalaryGrade) o;
        return id == that.id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    @Override
    public String toString() {
        return "SalaryGrade{" +
                "id=" + id +
                ", basicmoney=" + basicmoney +
                ", Workmoney=" + Workmoney +
                ", transitmoney=" + transitmoney +
                ", grade='" + grade + '\'' +
                '}';
    }
}
SalaryChange类
package gui_total.basic;

import java.time.LocalDate;
import java.util.Objects;

public class SalaryChange {
    public static int cntSalaryChange = 0;
    private int employeeId;
    private int month;
    private double reward;
    private double deduction;

    public SalaryChange(int employeeId, int month, double reward, double deduction) {
        this.employeeId = employeeId;
        this.month = month;
        this.reward = reward;
        this.deduction = deduction;
    }

    public static int cntSalaryChange() {
        return cntSalaryChange;
    }

    public static void upcntSalaryChange() {
        SalaryChange.cntSalaryChange++;
    }

    public int getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId() {
        this.employeeId = Employee.getCnt();
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public double getReward() {
        return reward;
    }

    public void setReward(double reward) {
        this.reward = reward;
    }

    public double getDeduction() {
        return deduction;
    }

    public void setDeduction(double deduction) {
        this.deduction = deduction;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        SalaryChange that = (SalaryChange) o;
        return employeeId == that.employeeId;
    }

    @Override
    public int hashCode() {
        return Objects.hash(employeeId);
    }
}
MonthlySalary类
package gui_total.basic;

import java.time.LocalDate;
import java.util.Objects;

public class MonthlySalary implements Comparable<MonthlySalary>{
    private int employeeId;
    private int month;
    private double baseSalary;//基础工资
    private double reward;//奖金
    private double deduction;//扣款
    private double netSalary;//总工资

    public MonthlySalary(int employeeId, int month, double baseSalary, double reward, double deduction) {
        this.employeeId = employeeId;
        this.month = month;
        this.baseSalary = baseSalary;
        this.reward = reward;
        this.deduction = deduction;
    }

    public int getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(int employeeId) {
        this.employeeId = employeeId;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public double getBaseSalary() {
        return baseSalary;
    }

    public void setBaseSalary(double baseSalary) {
        this.baseSalary = baseSalary;
    }

    public double getReward() {
        return reward;
    }

    public void setReward(double reward) {
        this.reward = reward;
    }

    public double getDeduction() {
        return deduction;
    }

    public void setDeduction(double deduction) {
        this.deduction = deduction;
    }

    public double getNetSalary() {
        return netSalary;
    }

    public void setNetSalary(double netSalary) {
        this.netSalary = netSalary;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        MonthlySalary that = (MonthlySalary) o;
        return employeeId == that.employeeId && month == that.month && Double.compare(that.baseSalary, baseSalary) == 0 && Double.compare(that.reward, reward) == 0 && Double.compare(that.deduction, deduction) == 0 && Double.compare(that.netSalary, netSalary) == 0;
    }

    @Override
    public int hashCode() {
        return Objects.hash(employeeId, month, baseSalary, reward, deduction, netSalary);
    }

    @Override
    public int compareTo(MonthlySalary other) {
        // 对净工资进行比较
        if(this.netSalary > other.getNetSalary()) {
            return 1;
        } else if(this.netSalary < other.getNetSalary()) {
            return -1;
        } else {
            return 0;
        }
    }

    @Override
    public String toString() {
        return "MonthlySalary{" +
                "employeeId=" + employeeId +
                ", month=" + month +
                ", baseSalary=" + baseSalary +
                ", reward=" + reward +
                ", deduction=" + deduction +
                ", netSalary=" + netSalary +
                '}';
    }
}

 DateInit 类:进行数据的初始化

package gui_total.data;

import gui_total.Tool;
import gui_total.basic.Employee;
import gui_total.basic.MonthlySalary;
import gui_total.basic.SalaryChange;
import gui_total.basic.SalaryGrade;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import static gui_total.Tool.loadObjectToJsonFile;

@SuppressWarnings({"all"})
public class DateInit {
    public static HashMap<Integer, Employee> employeeHashMap = new HashMap<Integer, Employee>();
    public static HashMap<Integer, SalaryGrade> SalaryGradeHashMap = new HashMap<Integer, SalaryGrade>();
    public static HashMap<Integer, SalaryChange> SalaryChangeHashMap = new HashMap<Integer, SalaryChange>();
    public static HashMap<Integer, MonthlySalary> MonthlySalaryHashMap = new HashMap<Integer, MonthlySalary>();

    public static HashMap<Integer, Employee> getEmployeeHashMap() {
        return employeeHashMap;
    }

    public static HashMap<Integer, SalaryGrade> getSalaryGradeHashMap() {
        return SalaryGradeHashMap;
    }

    public static HashMap<Integer, SalaryChange> getSalaryChangeHashMap() {
        return SalaryChangeHashMap;
    }

    public static HashMap<Integer, MonthlySalary> getMonthlySalaryHashMap() {
        return MonthlySalaryHashMap;
    }
    public static void main(String[] args) {
//        initAll();
        SalaryGradeInit();
        EmployeeInit();
        SalarychangeInit();
        MonthlySalaryInit();
//    }
    }
    public static void Init()
    {
        ArrayList<Employee> employees = (ArrayList<Employee>) Tool.loadObjectToJsonFile("Employee.json",
                new TypeToken<ArrayList<Employee>>(){}.getType());
        for (Employee o:employees) {
            o.upCnt();
        }
    }

    public static void InitSalaryChange()
    {
        ArrayList<SalaryChange> SalaryChanges = (ArrayList<SalaryChange>) Tool.loadObjectToJsonFile("SalaryChange.json",
                new TypeToken<ArrayList<SalaryChange>>(){}.getType());
        for (SalaryChange o:SalaryChanges) {
            o.upcntSalaryChange();
        }
    }

    public static void InitSalaryGrade()
    {
        ArrayList<SalaryGrade> SalaryGrades = (ArrayList<SalaryGrade>) Tool.loadObjectToJsonFile("SalaryGrade.json",
                new TypeToken<ArrayList<SalaryGrade>>(){}.getType());
        for (SalaryGrade o:SalaryGrades) {
            o.upcntSalaryGrade();
        }
    }

    public static void initAll() {
        ArrayList<Employee> employees = new ArrayList<>();
        ArrayList<SalaryGrade> grades = new ArrayList<>();
        ArrayList<SalaryChange> salaryChanges = new ArrayList<>();
        ArrayList<MonthlySalary> monthlysalaries = new ArrayList<>();
        String jsonFilePath1="Employee.json";
        String jsonFilePath2="SalaryGrade.json";
        String jsonFilePath3="SalaryChange.json";
        String jsonFilePath4="MonthlySalary.json";
        employees=(ArrayList<Employee>)loadObjectToJsonFile(jsonFilePath1,new TypeToken<ArrayList<Employee>>(){}.getType());
        grades=(ArrayList<SalaryGrade>)loadObjectToJsonFile(jsonFilePath2,new TypeToken<ArrayList<SalaryGrade>>(){}.getType());
        salaryChanges=(ArrayList<SalaryChange>)loadObjectToJsonFile(jsonFilePath3,new TypeToken<ArrayList<SalaryChange>>(){}.getType());
        monthlysalaries=(ArrayList<MonthlySalary>)loadObjectToJsonFile(jsonFilePath4,new TypeToken<ArrayList<MonthlySalary>>(){}.getType());
        for(Employee employee:employees)
        {
            employeeHashMap.put(employee.getId(),employee);
        }
        for(SalaryGrade grade:grades)
        {
            SalaryGradeHashMap.put(grade.getId(),grade);
        }
        for(SalaryChange change:salaryChanges)
        {
            SalaryChangeHashMap.put(change.getEmployeeId(),change);
        }
        for(MonthlySalary salary:monthlysalaries)
        {
            MonthlySalaryHashMap.put(salary.getEmployeeId(),salary);
        }

    }

    public static void EmployeeInit()
    {
        ArrayList<Employee> employees = new ArrayList<>();
        ArrayList<SalaryGrade> grades = new ArrayList<>();
        String jsonFilePath="SalaryGrade.json";
        grades=(ArrayList<SalaryGrade>)loadObjectToJsonFile(jsonFilePath,new TypeToken<ArrayList<SalaryGrade>>(){}.getType());
        for (int i = 0; i < grades.size(); i++) {
            Employee employee = new Employee(i,"aa","男", LocalDate.of(2022, 1, 1),grades.get(i));
            employee.upCnt();
//            System.out.println(employee);
            employeeHashMap.put(i,employee);
            employees.add(employee);
//            System.out.println(employeeHashMap.size());
        }
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(employees);

        try (FileWriter fileWriter = new FileWriter("Employee.json")) {
            fileWriter.write(json);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Employee.json创建成功");
    }
    public static void SalaryGradeInit()
    {
        ArrayList<SalaryGrade> salaryGrades = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            new Employee().upCnt();
            double randomDouble = Math.random();
            int randomNum = (int) (randomDouble * 1000);
            SalaryGrade grade = new SalaryGrade(i,1000+randomNum,200+randomNum,300+randomNum);
            salaryGrades.add(grade);
            SalaryGradeHashMap.put(i,grade);
        }
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(salaryGrades);

        try (FileWriter fileWriter = new FileWriter("SalaryGrade.json")) {
            fileWriter.write(json);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("SalaryGrade.json创建成功");
    }
    public static void SalarychangeInit()
    {
        ArrayList<SalaryChange> salaryChanges = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            double randomDouble1 = Math.random();
            double randomDouble2 = Math.random();
            double randomDouble3 = Math.random();
            int month = (int) (randomDouble1 * 10);
            int reward = (int) (randomDouble2 * 1000);
            int deduction = (int) (randomDouble3 * 1000);
            SalaryChange change = new SalaryChange(i,month,reward,deduction);
            salaryChanges.add(change);
            SalaryChangeHashMap.put(i,change);
        }
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(salaryChanges);

        try (FileWriter fileWriter = new FileWriter("SalaryChange.json")) {
            fileWriter.write(json);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("SalaryChange.json创建成功");
    }
    public static void MonthlySalaryInit()
    {
        ArrayList<SalaryGrade> grades = new ArrayList<>();
        ArrayList<SalaryChange> changes = new ArrayList<>();
        ArrayList<MonthlySalary> salaries = new ArrayList<>();
        String jsonFilePath1="SalaryGrade.json";
        String jsonFilePath2="SalaryChange.json";
        grades=(ArrayList<SalaryGrade>)loadObjectToJsonFile(jsonFilePath1,new TypeToken<ArrayList<SalaryGrade>>(){}.getType());
        changes=(ArrayList<SalaryChange>)loadObjectToJsonFile(jsonFilePath2,new TypeToken<ArrayList<SalaryChange>>(){}.getType());
        if (grades.size()>0) {
            for (int i = 0; i < grades.size(); i++) {
                MonthlySalary salary = new MonthlySalary(i, changes.get(i).getMonth(),
                        grades.get(i).getBasicmoney()+grades.get(i).getWorkmoney()+grades.get(i).getTransitmoney(),
                        changes.get(i).getReward(), changes.get(i).getDeduction());
                salary.setNetSalary(salary.getBaseSalary()+salary.getReward()-salary.getDeduction());
                salaries.add(salary);
                MonthlySalaryHashMap.put(i,salary);
            }
        }
        else System.out.println("error");
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(salaries);

        try (FileWriter fileWriter = new FileWriter("MonthlySalary.json")) {
            fileWriter.write(json);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("MonthlySalary.json创建成功");
    }
    public static void UpdataMonthlySalary()
    {
        ArrayList<SalaryGrade> grades = new ArrayList<>();
        ArrayList<SalaryChange> changes = new ArrayList<>();
        ArrayList<MonthlySalary> salaries = new ArrayList<>();
        String jsonFilePath1="SalaryGrade.json";
        String jsonFilePath2="SalaryChange.json";
        grades=(ArrayList<SalaryGrade>)loadObjectToJsonFile(jsonFilePath1,new TypeToken<ArrayList<SalaryGrade>>(){}.getType());
        changes=(ArrayList<SalaryChange>)loadObjectToJsonFile(jsonFilePath2,new TypeToken<ArrayList<SalaryChange>>(){}.getType());
        if (grades.size()>0) {
            for (int i = 0; i < grades.size(); i++) {
                MonthlySalary salary = new MonthlySalary(grades.get(i).getId(), changes.get(i).getMonth(),
                        grades.get(i).getBasicmoney()+grades.get(i).getWorkmoney()+grades.get(i).getTransitmoney(),
                        changes.get(i).getReward(), changes.get(i).getDeduction());
                salary.setNetSalary(salary.getBaseSalary()+salary.getReward()-salary.getDeduction());
                salaries.add(salary);
            }
        }
        else System.out.println("error");
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(salaries);

        try (FileWriter fileWriter = new FileWriter("MonthlySalary.json")) {
            fileWriter.write(json);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("MonthlySalary.json更新成功");
    }
    public static void UpdataEmployee()
    {
        ArrayList<Employee> employees = (ArrayList<Employee>) Tool.loadObjectToJsonFile("Employee.json",
                new TypeToken<ArrayList<Employee>>(){}.getType());
        ArrayList<Employee> employeeArrayList = new ArrayList<>();
        ArrayList<SalaryGrade> grades = new ArrayList<>();
        String jsonFilePath="SalaryGrade.json";
        grades=(ArrayList<SalaryGrade>)loadObjectToJsonFile(jsonFilePath,new TypeToken<ArrayList<SalaryGrade>>(){}.getType());
        for (int i = 0; i < grades.size(); i++) {
            Employee employee = new Employee(employees.get(i).getId(),employees.get(i).getName(),employees.get(i).getGender(),
                    employees.get(i).getJoiningDate()
                    ,grades.get(i));
            employeeArrayList.add(employee);
        }
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(employeeArrayList);

        try (FileWriter fileWriter = new FileWriter("Employee.json")) {
            fileWriter.write(json);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Employee.json创建成功");
    }
}
Login
package gui_total.general;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import gui_total.User;
import gui_total.manage.ShowAll;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;

public class Login extends JFrame implements ActionListener {

    private JTextField usernameText;
    private JPasswordField passwordText;
    private JButton loginBtn;
    private JButton registerBtn;

    public Login() {
        setTitle("登录");
        setAlwaysOnTop(true);
        setLayout(null);//关闭默认布局类型 自己手动设置布局
        setSize(400, 400);
        setDefaultCloseOperation(3);//设置关闭模式
        setLocationRelativeTo(null);//设置GUI显示居中
        //创建界面组件
        JLabel username = new JLabel("账号:");
        JLabel password = new JLabel("密码:");
        loginBtn = new JButton("登录");
        loginBtn.addActionListener(this);//监听登录事件
        registerBtn = new JButton("注册");
        registerBtn.addActionListener(this);//监听注册事件
        usernameText = new JTextField(15);
        passwordText = new JPasswordField(15);
        // 设置字体和背景颜色
        usernameText.setForeground(Color.BLACK);
        passwordText.setForeground(Color.BLACK);
        usernameText.setBorder(BorderFactory.createLineBorder(Color.GRAY));
        passwordText.setBorder(BorderFactory.createLineBorder(Color.GRAY));
        //创建装组件的容器
        JPanel usernameJp = new JPanel();
        JPanel passwordJp = new JPanel();
        JPanel loginJp = new JPanel();
        //设置容器的位置
        usernameJp.setBounds(30, 0, 300, 40);
        passwordJp.setBounds(30, 40, 300, 40);
        loginJp.setBounds(30, 90, 300, 40);
        usernameJp.add(username);
        usernameJp.add(usernameText);
        passwordJp.add(password);
        passwordJp.add(passwordText);
        loginJp.add(loginBtn);
        loginJp.add(registerBtn);
        //将组件装入GUI
        add(usernameJp);
        add(passwordJp);
        add(loginJp);
        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == loginBtn) {
            String username = usernameText.getText();
            String password = new String(passwordText.getPassword());
            // 根据读取的用户账号信息进行校验
            boolean temp = readUser(username, password);
            System.out.println(temp);
            if (temp) {
                JOptionPane.showMessageDialog(this, "登录成功", "Success", JOptionPane.INFORMATION_MESSAGE);
                this.dispose();//登录成功关闭此窗口 跳转页面
                new ShowAll();
            } else {
                JOptionPane.showMessageDialog(this, "登陆失败", "Error", JOptionPane.ERROR_MESSAGE);
            }
        }//注册操作
        else {
            this.dispose();
            new Register();
        }
    }

    //读取用户数据
    public boolean readUser(String username, String password) {

        try (BufferedReader br = new BufferedReader(new FileReader("User.json"))) {
            String json = "";
            String line;
            while ((line = br.readLine()) != null) {
                json += line + "\n";
            }
            Gson gson = new Gson();
            ArrayList<User> dataList = gson.fromJson(json, new TypeToken<ArrayList<User>>() {
            }.getType());
            for (User data : dataList) {
                if (data.getUsername().equals(username) && data.getPassword().equals(password)) {
                    return true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

}
Register:
package gui_total.general;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import gui_total.User;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.io.FileReader;
import java.io.FileWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;

public class Register extends JFrame implements ActionListener {

    private JTextField usernameText;
    private JPasswordField passwordText;
    private JPasswordField passwordTextTrue;
    private JButton registerBtn;

    public Register() {
        setLayout(null);
        setTitle("注册");
        setSize(400, 400);
        setAlwaysOnTop(true);//设置界面一直处于最上层
        setDefaultCloseOperation(3);
        setLocationRelativeTo(null);
        //组件
        JLabel username = new JLabel("账号:");
        JLabel password = new JLabel("密码:");
        JLabel passwordTrue = new JLabel("确认密码:");
        registerBtn = new JButton("注册");
        registerBtn.addActionListener(this);
        usernameText = new JTextField(15);
        passwordText = new JPasswordField(15);
        passwordTextTrue = new JPasswordField(15);
        // 设置字体和背景颜色
        usernameText.setForeground(Color.BLACK);
        passwordText.setForeground(Color.BLACK);
        passwordTextTrue.setForeground(Color.BLACK);
        usernameText.setBorder(BorderFactory.createLineBorder(Color.GRAY));
        passwordText.setBorder(BorderFactory.createLineBorder(Color.GRAY));
        passwordTextTrue.setBorder(BorderFactory.createLineBorder(Color.GRAY));
        //创建装组件的容器
        JPanel usernameJp = new JPanel();
        JPanel passwordJp = new JPanel();
        JPanel passwordTrueJp = new JPanel();
        JPanel registerJp = new JPanel();
        //设置容器的位置
        usernameJp.setBounds(30, 0, 300, 40);
        passwordJp.setBounds(30, 50, 300, 40);
        passwordTrueJp.setBounds(18, 100, 300, 40);
        registerJp.setBounds(40, 150, 300, 40);

        usernameJp.add(username);
        usernameJp.add(usernameText);
        passwordJp.add(password);
        passwordJp.add(passwordText);
        passwordTrueJp.add(passwordTrue);
        passwordTrueJp.add(passwordTextTrue);
        registerJp.add(registerBtn);
        //将组件装入GUI
        add(usernameJp);
        add(passwordJp);
        add(passwordTrueJp);
        add(registerJp);
        setVisible(true);
        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String username = usernameText.getText();
        String password = new String(passwordText.getPassword());
        String passwordTrue = new String(passwordTextTrue.getPassword());

        ArrayList<User> user = getUserList();
        for (User data : user) {
            System.out.println(data.getUsername());
        }
        boolean found = false;
        found = (!username.equals("") && !password.equals("") && !passwordTrue.equals("") && password.equals(passwordTrue));
        System.out.println(found);
        if (found) {
            boolean temp = readUser(username, user);//检测用户名是否重复
            if (temp) {
                JOptionPane.showMessageDialog(this, "注册成功", "Success", JOptionPane.INFORMATION_MESSAGE);
                String id = "00" + (user.toArray().length + 1);
                user.add(new User(id, username, password));
                String jsonFilePath = "User.json";
                writeUser(jsonFilePath, username, password, user);//将新用户的数据写入json表中
                this.dispose();
                new Login();
            } else {
                JOptionPane.showMessageDialog(this, "用户名重复,注册失败", "Error", JOptionPane.ERROR_MESSAGE);
            }
        } else {
            JOptionPane.showMessageDialog(this, "注册失败,请正确填写用户名和密码", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    //获取用户的所有信息数据
    public ArrayList<User> getUserList() {
        try (BufferedReader br = new BufferedReader(new FileReader("User.json"))) {
            String json = "";
            String line;
            while ((line = br.readLine()) != null) {
                json += line + "\n";
            }
            Gson gson = new Gson();
            ArrayList<User> dataList = gson.fromJson(json, new TypeToken<ArrayList<User>>() {
            }.getType());
            return dataList;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ArrayList<User>();
    }

    //读取用户数据 检查有没有出现用户名重复的情况
    public boolean readUser(String username, ArrayList<User> user) {
        for (User data : user) {
            if (data.getUsername().equals(username)) {
                return false;
            }
        }
        return true;
    }

    //将用户信息写入json文件中
    public void writeUser(String jsonFilePath, String username, String password, ArrayList<User> user) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        // 1. 从 JSON 文件中读取并反序列化已有的对象列表
        if (!(Files.exists(Paths.get(jsonFilePath)))) {
            try {
                Files.createFile(Paths.get(jsonFilePath));
                try (FileWriter fileWriter = new FileWriter(jsonFilePath)) {
                    fileWriter.write("[]");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try (Writer writer = new FileWriter(jsonFilePath)) {
            Gson gsone = new GsonBuilder().setPrettyPrinting().create();
            gsone.toJson(user, writer);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Tool:静态方法实现数据增删读写。

package gui_total;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import gui_total.basic.Employee;
import gui_total.basic.MonthlySalary;
import gui_total.basic.SalaryChange;
import gui_total.basic.SalaryGrade;
import gui_total.data.DateInit;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Type;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import static gui_total.basic.Employee.cnt;
import static gui_total.data.DateInit.*;

//接收三个参数:
//newObj:表示要添加到 JSON 文件的新对象。
//jsonFilePath:表示要操作的 JSON 文件的路径。
//targetType:表示 JSON 文件的目标类型。在本例中,目标类型是 List<Item>,
// 因此需要使用 new TypeToken<ArrayList<Item>>(){}.getType() 来获取该类型。
public class Tool {
    public static <T> void addObjectToJsonFile(T newObj, String jsonFilePath, Type targetType) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        // 1. 从 JSON 文件中读取并反序列化已有的对象列表
        List<T> items = new ArrayList<>();
        if (Files.exists(Paths.get(jsonFilePath))) {
            try (FileReader fileReader = new FileReader(jsonFilePath)) {
                items = gson.fromJson(fileReader, targetType);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            // 1.2 如果不存在,则创建新的 JSON 文件并存储一个空白数组
            try {
                Files.createFile(Paths.get(jsonFilePath));
                try (FileWriter fileWriter = new FileWriter(jsonFilePath)) {
                    fileWriter.write("[]");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        // 2. 向反序列化后的对象列表中添加新对象
        if (items == null) items = new ArrayList<>();
        else
        {
            items.add(newObj);
        }
        if(newObj instanceof Employee)
        {
            employeeHashMap.put(((Employee) newObj).getId(),(Employee) newObj);
        } else if (newObj instanceof SalaryGrade) {
            SalaryGradeHashMap.put(((SalaryGrade) newObj).getId(),(SalaryGrade) newObj);
        }
        else if (newObj instanceof SalaryChange) {
            SalaryChangeHashMap.put(((SalaryChange) newObj).getEmployeeId(),(SalaryChange) newObj);
        }
        else if (newObj instanceof MonthlySalary) {
            MonthlySalaryHashMap.put(((MonthlySalary) newObj).getEmployeeId(),(MonthlySalary) newObj);
        }
        // 3. 将更新后的对象列表序列化并写回 JSON 文件
        String updatedJson = gson.toJson(items);
        try (FileWriter fileWriter = new FileWriter(jsonFilePath)) {
            fileWriter.write(updatedJson);
        } catch (IOException e) {
            e.printStackTrace();
        }
        DateInit.initAll();
    }
    public static <T> void removeObjectToJsonFile(T newObj, String jsonFilePath, Type targetType) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        // 1. 从 JSON 文件中读取并反序列化已有的对象列表
        List<T> items = new ArrayList<>();
        if (Files.exists(Paths.get(jsonFilePath))) {
            try (FileReader fileReader = new FileReader(jsonFilePath)) {
                items = gson.fromJson(fileReader, targetType);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // 2. 向反序列化后的对象列表中删除新对象
        Iterator<T> iterator = items.iterator();
        while (iterator.hasNext()) {
            T currentElement = iterator.next();
            if (currentElement.equals(newObj)) {
                iterator.remove();
                System.out.println("删除成功");
                if(newObj instanceof Employee)
                {
                    employeeHashMap.remove(((Employee) newObj).getId());
                } else if (newObj instanceof SalaryGrade) {
                    SalaryGradeHashMap.remove(((SalaryGrade) newObj).getId());
                }
                else if (newObj instanceof SalaryChange) {
                    SalaryChangeHashMap.remove(((SalaryChange) newObj).getEmployeeId());
                }
                else if (newObj instanceof MonthlySalary) {
                    MonthlySalaryHashMap.remove(((MonthlySalary) newObj).getEmployeeId());
                }
                break;
            }
            else
            {
                System.out.println("匹配失败");
            }
        }
        // 3. 将更新后的对象列表序列化并写回 JSON 文件
        String updatedJson = gson.toJson(items);
        try (FileWriter fileWriter = new FileWriter(jsonFilePath)) {
            fileWriter.write(updatedJson);
        } catch (IOException e) {
            e.printStackTrace();
        }
        DateInit.initAll();
    }

    public static List loadObjectToJsonFile(String jsonFilePath, Type targetType) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        // 1. 从 JSON 文件中读取并反序列化已有的对象列表
        List items = new ArrayList<>();
        if (Files.exists(Paths.get(jsonFilePath))) {
            try (FileReader fileReader = new FileReader(jsonFilePath)) {
                items = gson.fromJson(fileReader, targetType);
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("读取成功");
        } else {
            // 1.2 如果不存在,则创建新的 JSON 文件并存储一个空白数组
            try {
                Files.createFile(Paths.get(jsonFilePath));
                try (FileWriter fileWriter = new FileWriter(jsonFilePath)) {
                    fileWriter.write("[]");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("读取失败,目标为空");
        }
        return items;
    }
    public static void writeObjectToJsonFile(List items, String jsonFilePath, Type targetType) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        // 1. 从 JSON 文件中读取并反序列化已有的对象列表
        if (Files.exists(Paths.get(jsonFilePath))) {
            String updatedJson = gson.toJson(items);
            try (FileWriter fileWriter = new FileWriter(jsonFilePath)) {
                fileWriter.write(updatedJson);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        DateInit.initAll();
    }
}

ShowUser:通过refreshTable实现数据刷新。

package gui_total.manage;

import com.google.gson.reflect.TypeToken;
import gui_total.Tool;
import gui_total.User;
import gui_total.basic.Employee;
import gui_total.window.AddWindow1;
import gui_total.window.EditWindow1;
import gui_total.window.RemoveWindow1;
import gui_total.window.SearchWindow1;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class ShowUser extends JFrame implements ActionListener {
    private DefaultTableModel model;//表格数据模型
    private JScrollPane scrollPane;//滚动窗格
    private JButton AddBtn;//增 删 改 查 按钮
    private JButton RemoveBtn;
    private JButton EditBtn;
    private JButton SearchBtn;

    public ShowUser() {
        setTitle("显示所有职工基本信息");
        setAlwaysOnTop(true);
        //setBounds(100,100,500,400);
        setDefaultCloseOperation(2);//设置关闭模式
        // 设置窗口大小和位置
        setSize(500, 300);
        setLocationRelativeTo(null);

        //创建表格数据模型
        ArrayList<Employee> employees = (ArrayList<Employee>) Tool.loadObjectToJsonFile("Employee.json", new TypeToken<ArrayList<Employee>>(){}.getType());
        int len = employees.toArray().length;//数据的行数
        Object[][] data = new Object[len][4];
        Object[] column = {"id", "username", "gender",  "joiningDate"};//每一列的字段
        //System.out.println(users);
        int i = 0;
        for (Employee x : employees){
            data[i][0] = x.getId();
            data[i][1] = x.getName();
            data[i][2] = x.getGender();
            data[i][3] = x.getJoiningDate();
            i ++;
        }
        model = new DefaultTableModel(data, column);
        JTable table = new JTable(model);//创建 JTable 组件
        scrollPane = new JScrollPane(table);//使用 JScrollPane 将 JTable 放置在滚动窗格中,以便在表格中显示大量数据

        // 创建一个 JPanel,使用 BoxLayout 布局
        //BoxLayout 布局管理器默认情况下会将组件沿着 Y 轴方向排列(即垂直方向)
        //如果需要水平排列,需要将 BoxLayout 构造函数的第二个参数设置为 BoxLayout.X_AXIS
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        // 将 JScrollPane 添加到面板中
        panel.add(scrollPane);

        AddBtn = new JButton("增添");
        RemoveBtn = new JButton("删除");
        EditBtn = new JButton("修改");
        SearchBtn = new JButton("查看");

        AddBtn.addActionListener(this);//监听增添事件
        RemoveBtn.addActionListener(this);//监听删除事件
        EditBtn.addActionListener(this);//监听修改事件
        SearchBtn.addActionListener(this);//监听查看事件

        // 创建一个 JPanel,使用 FlowLayout 布局将 4个按钮排列在同一行中。
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        buttonPanel.add(AddBtn);
        buttonPanel.add(RemoveBtn);
        buttonPanel.add(EditBtn);
        buttonPanel.add(SearchBtn);

        // 将面板添加到 JFrame中
        getContentPane().add(panel);

        // 将按钮面板添加到面板中
        panel.add(buttonPanel);

        setVisible(true);
    }


    public void dateupdate()
    {
        model.setRowCount(0);
        ArrayList<Employee> employees = (ArrayList<Employee>) Tool.loadObjectToJsonFile("Employee.json", new TypeToken<ArrayList<Employee>>(){}.getType());
        int len = employees.size();//数据的行数
        System.out.println("ShowUser当前数据个数"+len);
        Object[][] data = new Object[len][4];
        Object[] column = {"id", "username", "gender",  "joiningDate"};//每一列的字段
        int i = 0;
        for (Employee x : employees){
            data[i][0] = x.getId();
            data[i][1] = x.getName();
            data[i][2] = x.getGender();
            data[i][3] = x.getJoiningDate();
            i ++;
        }
        model = new DefaultTableModel(data, column);
    }
    public void refreshTable() {
        dateupdate();
        scrollPane.setViewportView(new JTable(model));
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == AddBtn){
            new AddWindow1(this,"id:", "name:", "gender:", "joiningDate:");
        }
        else if (e.getSource() == RemoveBtn){
            new RemoveWindow1(this,"id:", "name:", "gender:", "joiningDate:");
        }
        else if (e.getSource() == EditBtn){
            new EditWindow1(this,"id:", "name:", "gender:", "joiningDate:");
        }
        else {
            new SearchWindow1("id:", "name:", "gender:", "joiningDate:");
        }
    }
}

运行截图:

课程设计小结:

其实还有很多可以改进的地方,有很多地方图省事直接copy过来,导致代码写的很长,而且这gui界面也不是很满意,另外就是数据处理的地方没有加入server层作为中间层,代码扩展性不好,除此以为我感觉这个数据刷新的方法不是很好,不能同时刷新多个界面,后续还可以继续优化。总的来说写出这个系统还是让我对以往学过的知识进行了巩固,后续的编写也会吸取这次教训,争取让代码更精简。 

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
"得分: " " " " " 课程设计报告 "企业工资管理系统 " " "XXX " "班级 "XXXXX " "学号 "XXXXXX " "课程名称 "数据库原理及应用 " "指导教师 " " 201X年X月X日 目 录 一.工资管理系统需求分析………………………………… 1.1功能需求………………………………………………… 1.1.1功能划分……………………………………… 1.1.2功能描述…………………………………………… 1.2性能需求………………………………………………… 1.3数据流图……………………………………………… 二.总体设计………………………………………………… 2.1数据库概念设计………………………………………… 2.2功能模块………………………………………………… 三.系统详细设计…………………………………………… 3.1数据库逻辑设计………………………………………… 3.2各模块功能……………………………………………… 3.2.1职工信息管理系统………………………………… 3.2.2职工工资管理系统………………………………… 3.2.3职工津贴管理系统………………………………… 四.系统实现………………………………………………… 4.1界面截图………………………………………………… 4.1.1主界面及工资基本信息界面…………………… 4.1.2登录界面………………………………………… 4.1.3系统主界面……………………………………… 4.1.4信息录入,修改,删除,查询界面………… 4.2设计代码………………………………………………… 五.实验总结………………………………………………… 1. 需求分析 1. 功能需求 1.1.1功能划分 (1)、员工信息表;及时反映员工的基本信息 (2)、员工津贴表,反映员工津贴 (3)、员工基本工资表 1.1.2 功能描述 (1)、基本工资的设定 (2)、津贴的设定 (3)、计算出月工资 (4)、录入员工工资信息 (5)、添加员工工资信息 (6)、更改员工工资信息 1.2性能需求 此工资管理系统对工资数据精度的计算能在默认情况之下精确到小数点后3位小数, 即是精确到分的计算。但在用户使用过程中,能自行根据实际情况进行小数计算精度的 设定,最大能允许保留小数点后5位的精度。在时间特性上,当用户发出命令请求时的服 务器的响应时间、对数据更新处理、工资数据的查询检索等上,同样要求系统响应时间 不会超过0.5秒时间。系统支持多种操作系统的运行环境,多不同操作系统,不同文件格 式的磁盘上的数据均能实现信息的互通,及共享。当服务器移植到其他的系统平台,如 :Linux平台下时,同样能和其他的系统进行数据存取同步,不会出现系统之间互不兼容 的情况,系统支持多系统之间的互连互通,系统有巨大的强健性。本课程设计是用Java 语言编写,mysql数据库。 1.3数据流图 根据工资管理要求及用户需求调查分析,得到以下数据流图 图1.1第一层数据流图 图1.2职工信息的载入 图1.4考勤的信息载入 2.总体设计 2.1数据库概念设计 有了数据流图,用E-R图来说明工资信息管理系统的数据库概念模式,如图 1 n m 图2.1实体之间关系E-R图 2.2功能模块 3.系统详细设计 3.1数据库逻辑设计 将以上E-R转换成如下关系模式 员工(职工号,,密码) 工资(职工号,,基本工资,) 津贴(职工号,,奖金) 其中,标有下划线的字段表示为该数据表的主码,即主关键字。在上面的实体以及实 体之间关系的基础上,形成数据库中的表格以及各个表格之间的关系。 工资信息管理系统数据库中各个表格的设计结果如下面的几个表格所示。每个表格表 示在数据库中的一个表。 表一:员工信息表: "列名 "数据类型 "可否取空 "备注说明 " "no " Char ( 8 ) "NOT NULL "职工号(主键) " "name "Char(10) "NOT NULL "职工 " "mi "Smallint "NOT NULL "登录密码 " 表二:基本工资表: "列名 "数据类型 "可否取空 "备注说明 " "no "Char ( 8 ) "NOT NULL "职工号(主键) " "name "Char(10) "NOT NULL "职工 " "Jb "money "NOT NULL "基本工资 " 表四:津贴信息表 "列名 "数据类型 "可否为空 "备注说明 " "no "Char ( 8 ) "NOT NULL "职工号(主键) " "name "Char(10) "NOT NULL "职工 " "Jt "money "NOT NULL "津贴 " 3.2各模块功能 3.2.1职工信息管理系统 功能为:财务部门相关

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值