在工资支付系统中,雇员的记录由:雇员号、姓名(String)、地址(String)和工资(double).编写一个程序完成雇员记录的添加、修改、删除、查询功能

题目

在工资支付系统中,雇员的记录由:雇员号、姓名(String)、地址(String)和工资(double).编写一个程序完成雇员记录的添加、修改、删除、查询功能。要求在系统退出时将系统所有的雇员记录写入文件中;在下次进入系统时,从该文件中恢复雇员信息

代码

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

class Employee implements Serializable {
    private int uid;
    private String name;
    private String address;
    private double salary;

    public Employee() {

    }

    public Employee(int uid, String name, String address, double salary) {
        setUid(uid);
        setName(name);
        setAddress(address);
        setSalary(salary);
    }

    @Override
    public String toString() {
        return "雇员号:" + uid + "     姓名:" + name + "     地址:" + address + "     工资:" + salary;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getName() {
        return name;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

public class Main extends JFrame implements ActionListener {
    private Vector<Employee> employees;
    private JTextArea jTextArea;
    private JButton insertButton;
    private JButton deleteButton;
    private JButton findButton;
    private JButton modifyButton;
    private Container container;
    private InsertWindow insertWindow;
    private DeleteWindow deleteWindow;
    private FindWindow findWindow;
    private ModifyWindow modifyWindow;

    public Main() {
        employees = new Vector<>();
        jTextArea = new JTextArea(20, 48);
        jTextArea.setForeground(Color.green);
        jTextArea.setBackground(Color.black);
        jTextArea.setEditable(false);
        container = getContentPane();
        container.setLayout(new FlowLayout());

        insertButton = new JButton("插入");
        insertButton.addActionListener(this);
        deleteButton = new JButton("删除");
        deleteButton.addActionListener(this);
        findButton = new JButton("查找");
        findButton.addActionListener(this);
        modifyButton = new JButton("修改");
        modifyButton.addActionListener(this);

        addComponent();
        setSize(500, 400);
        read();
        setText();
        setLocationRelativeTo(null);
    }

    //内部类,实现输入并插入雇员信息
    class InsertWindow extends JDialog implements ActionListener {
        private JLabel uidLabel;
        private JTextField uidTextFiled;
        private JLabel nameLabel;
        private JTextField nameTextFiled;
        private JLabel addressLabel;
        private JTextField addressTextField;
        private JLabel salaryLabel;
        private JTextField salaryTextFiled;
        private Container container;
        public JButton ensure;

        public InsertWindow(Frame owner, String title, boolean modal) {
            super(owner, title, modal);
            container = getContentPane();
            container.setLayout(new FlowLayout());
            uidLabel = new JLabel("雇员号:");
            uidTextFiled = new JTextField(14);
            nameLabel = new JLabel("姓 名:");
            nameTextFiled = new JTextField(15);
            addressLabel = new JLabel("地 址:");
            addressTextField = new JTextField(15);
            salaryLabel = new JLabel("工 资:");
            salaryTextFiled = new JTextField(15);
            ensure = new JButton("确定插入");
            container.add(uidLabel);
            container.add(uidTextFiled);
            container.add(nameLabel);
            container.add(nameTextFiled);
            container.add(addressLabel);
            container.add(addressTextField);
            container.add(salaryLabel);
            container.add(salaryTextFiled);
            container.add(ensure);
            ensure.addActionListener(this);
            setSize(250, 180);
            setResizable(false);
            setLocationRelativeTo(owner);//设置居中出现在父窗口上
            setVisible(true);
        }

        public Employee getEmployee() {
            Employee employee = new Employee();
            employee.setUid(Integer.parseInt(uidTextFiled.getText()));
            employee.setName(nameTextFiled.getText());
            employee.setAddress(addressTextField.getText());
            employee.setSalary(Double.parseDouble(salaryTextFiled.getText()));
            return employee;
        }

        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            if (actionEvent.getSource() == ensure) {
                insert(getEmployee());
                setText();
                dispose();
            }
        }
    }
    //内部类,实现查找雇员信息
    class FindWindow extends JDialog implements ActionListener{
        private JLabel uidLabel;
        private JTextField uidJTextField;
        private JButton ensure;
        private JTextArea jTextArea;
        Container container;

        public FindWindow(Frame owner, String title, boolean modal) {
            super(owner, title, modal);
            uidLabel = new JLabel("请输入要查找的雇员号:");
            uidJTextField = new JTextField(15);
            ensure = new JButton("确认查找");
            jTextArea = new JTextArea(12,36);
            jTextArea.setBackground(Color.lightGray);
            jTextArea.setForeground(Color.black);
            container = getContentPane();
            container.setLayout(new FlowLayout());
            container.add(uidLabel);
            container.add(uidJTextField);
            container.add(ensure);
            container.add(jTextArea);
            ensure.addActionListener(this);
            setSize(400, 275);
            setResizable(false);
            setLocationRelativeTo(this);//设置居中出现在父窗口上
            setVisible(true);
        }
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            if(actionEvent.getSource()==ensure){
                int uid = Integer.parseInt(uidJTextField.getText());
                int index = find(uid);
                if(index==-1){
                    jTextArea.setText("未找到uid为"+uid+"的雇员");
                }
                else {
                    jTextArea.setText("找到以下内容:\n"+employees.elementAt(index).toString());
                }
            }
        }
    }
    //内部类,实现删除雇员信息
    class DeleteWindow extends JDialog implements ActionListener {
        private JLabel uidLabel;
        private JTextField uidJTextField;
        private JButton ensure;
        Container container;

        public DeleteWindow(Frame owner, String title, boolean modal) {
            super(owner, title, modal);
            uidLabel = new JLabel("请输入要删除的雇员号:");
            uidJTextField = new JTextField(15);
            ensure = new JButton("确认删除");
            container = getContentPane();
            container.setLayout(new FlowLayout());
            container.add(uidLabel);
            container.add(uidJTextField);
            container.add(ensure);
            ensure.addActionListener(this);
            setSize(200, 120);
            setResizable(false);
            setLocationRelativeTo(owner);//设置居中出现在父窗口上
            setVisible(true);
        }

        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            if (actionEvent.getSource() == ensure) {
                delete(Integer.parseInt(uidJTextField.getText()));
                setText();
                dispose();
            }
        }
    }
    //内部类,实现修改雇员信息
    class ModifyWindow extends JDialog implements ActionListener{
        private JLabel preuidLabel;
        private JTextField preuidJTextFiled;
        private JLabel signLabel;
        private JLabel uidLabel;
        private JTextField uidTextFiled;
        private JLabel nameLabel;
        private JTextField nameTextFiled;
        private JLabel addressLabel;
        private JTextField addressTextField;
        private JLabel salaryLabel;
        private JTextField salaryTextFiled;
        private Container container;
        public JButton ensure;
        public ModifyWindow(JFrame owner,String title,boolean modal){
            super(owner,title,modal);
            container = getContentPane();
            container.setLayout(new FlowLayout());
            preuidLabel = new JLabel("请输入要修改的雇员号");
            preuidJTextFiled = new JTextField(15);
            signLabel = new JLabel("请输入修改后的雇员信息");
            uidLabel = new JLabel("雇员号:");
            uidTextFiled = new JTextField(14);
            nameLabel = new JLabel("姓 名:");
            nameTextFiled = new JTextField(15);
            addressLabel = new JLabel("地 址:");
            addressTextField = new JTextField(15);
            salaryLabel = new JLabel("工 资:");
            salaryTextFiled = new JTextField(15);
            ensure = new JButton("确定修改");
            container.add(preuidLabel);
            container.add(preuidJTextFiled);
            container.add(signLabel);
            Box h1 =Box.createHorizontalBox();
            h1.add(uidLabel);
            h1.add(uidTextFiled);
            container.add(h1);
            Box h2 =Box.createHorizontalBox();
            h2.add(nameLabel);
            h2.add(nameTextFiled);
            container.add(h2);
            Box h3 =Box.createHorizontalBox();
            h3.add(addressLabel);
            h3.add(addressTextField);
            container.add(h3);
            Box h4 =Box.createHorizontalBox();
            h4.add(salaryLabel);
            h4.add(salaryTextFiled);
            container.add(h4);
            container.add(ensure);
            ensure.addActionListener(this);
            setSize(250, 240);
            setResizable(false);
            setLocationRelativeTo(owner);//设置居中出现在父窗口上
            setVisible(true);

        }
        @Override
        public void actionPerformed(ActionEvent actionEvent) {
            if(actionEvent.getSource()==ensure){
                int index = find(Integer.parseInt(preuidJTextFiled.getText()));
                if(index==-1){
                    JOptionPane.showMessageDialog(container,"你要修改的雇员不存在",null,JOptionPane.WARNING_MESSAGE);
                }
                else {
                    Employee employee = new Employee();
                    employee.setUid(Integer.parseInt(uidTextFiled.getText()));
                    employee.setName(nameTextFiled.getText());
                    employee.setAddress(addressTextField.getText());
                    employee.setSalary(Double.parseDouble(salaryTextFiled.getText()));
                    modify(index, employee);
                    setText();
                }
                this.dispose();
            }
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == insertButton) {
            insertWindow = new InsertWindow(this, "插入", true);
        }
        if (e.getSource() == deleteButton) {
            deleteWindow = new DeleteWindow(this, "删除", true);
        }
        if(e.getSource()==findButton){
            findWindow = new FindWindow(this,"查找",true);
        }
        if(e.getSource()==modifyButton){
            modifyWindow = new ModifyWindow(this,"修改",true);
        }
    }

    public void addComponent() {
        container.add(jTextArea);
        container.add(insertButton);
        container.add(deleteButton);
        container.add(findButton);
        container.add(modifyButton);
    }

    public void setText() {
        int sign = 1;
        jTextArea.setText("");
        for (Employee each : employees) {
            jTextArea.append(sign + ". " + each.toString() + "\n");
            sign++;
        }
    }

    // 写入文件
    public void write() {
        try {
            FileOutputStream file = new FileOutputStream("./employee.dat");
            ObjectOutputStream out = new ObjectOutputStream(file);
            out.writeObject(employees);
            out.flush();
            out.close();
            file.close();
            employees.clear();
        } catch (Exception e) {
            System.err.println(e);
        }
    }

    //读取文件
    public void read() {
        try {
            FileInputStream file = new FileInputStream("./employee.dat");
            ObjectInputStream in = new ObjectInputStream(file);
            employees = (Vector<Employee>) in.readObject();
            in.close();
            file.close();
        } catch (Exception e) {
            System.err.println(e);
        }
    }

    //插入雇员信息
    public void insert(Employee employee) {
        employees.add(employee);
    }

    //删除雇员信息
    public boolean delete(int uid) {
        int index = find(uid);
        if (index == - 1) {
            return false;
        } else {
            employees.removeElementAt(index);
            return true;
        }
    }

    //查找雇员信息
    public int find(int uid) {
        for (int i = 0; i < employees.size(); i++) {
            if (employees.elementAt(i).getUid() == uid) {
                return i;
            }
        }
        return - 1;//未找到返回-1
    }

    //修改雇员信息
    public boolean modify(int index,Employee employee) {
        if (index == - 1) {
            return false;
        } else {
            //修改
            employees.set(index,employee);
            return true;
        }
    }

    public static void main(String[] args) {
        Main app = new Main();
        app.setVisible(true);
        app.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {//关闭时保存文件
                app.write();
                System.exit(0);
            }
        });
    }
}

结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

工资发放系统 某公司按月给其雇员发放工资,该公司有4种雇员:  固定薪金的雇员:不管工作多长时间,总拿固定月薪;(但如果请假,要扣除相应的薪金,请假次数×每次扣除金额30)  小时工:以小时计算,加上加班费;(每月基本工作时间为160小时,其余为加班时间)  销售员:按销售收入提成计算;(每月基本销售额度为30000元,低于此额度,在月薪里扣除少于30000部分的千分之二)  带薪销售员:底薪加上销售收入提成(要求同上,若有请假,也要扣除相应的薪金) 如果雇员的生日所在的月份在本月,那么公司无条件补贴200元。 设计一工资发放系统完成各种工资的计算,并实现以下功能: 1) 初始化系统 创建存储该公司职工信息的存储系统(Employee.dat),并进行职工信息的输入,注意:公司的职工编系统按顺序自动生成,并且员工一旦分配好就不可以再修改! 第一次运行系统,根据系统提示从键盘输入员工的相应信息进行初始化操作,并保存至Employee.dat文件。以后每次运行程序,初始化时都从文件Employee.dat读取员工数据即可。 2) 职工信息输出 要求可以输出: 某类职工当月的薪水发放信息 分类输出全体职工当月的薪水发放信息 某一名职工当月的薪水发放信息 格式如下: ******************************** 固定薪金职员********************************* 编 姓名 出生年月 工种 奖励薪金 固定月薪 请假天数 应扣 实发工资 是否领取 **********************************计时职员*********************************** 编 姓名 出生年月 工种 奖励薪金 工作时长 时薪 加班时长 实发工资 是否领取 **********************************普通销售员*********************************** 编 姓名 出生年月 工种 奖励薪金 销售额 提成比例 应扣 实发工资 是否领取*********************************带薪销售员************************************ 编 姓名出生年月工种奖励薪金固定月薪销售额提成比例请假天数应扣实发工资是否领取 3) 添加职工 通过键盘输入相应的职工信息,添加职工,并保存至Employee.dat文件。 4) 删除职工 通过输入职工的工,首先输出要删除的职工相应的信息,经确认后删除,要考虑职工不存在的情况。删除后保存至Employee.dat文件。 5) 修改信息 要求可以修改: 除编外的所有职工信息,包括工种以及由修改工种带来的各项操作 修改某一类工种的信息,如销售人员的提成比例,统一提高0.05; 输出修改前的职工信息,经确认后修改后,输出修改后的职工信息,考虑职工不存在的情况,修改后保存至Employee.dat文件。 6) 工资发放 通过输入职工方式,输出查询到的职工相应的信息,经确认发放工资,将员工是否领取工资信息设置为是(即真),考虑所要查询的职工编不存在和已经发放过工资的情况。 7) 保存退出 通过确认,保存修改的信息至文件Employee.dat,退出系统,结束运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值