一次很水的java-GUI作品,职工管理系统

提示:本作品视图代码大部分使用Jformdesigner自动生成,使用idea运行没有任何问题,

特色:使用了序列化与反序列化的方法,使得职工的数据不会因为程序的停止,而造成数据丢失。
注意:视图代码的setTitle(“xxxxxx:xxxxxxx”);这里的xxxx可以修改为你想要的程序标题,登录界面的用户名为root,密码:123
1.视图代码:
(1)AddEmployeeView添加员工的界面代码

/*
 * Created by JFormDesigner on Sat Apr 03 11:45:59 CST 2021
 */

package view;

import Controller.*;
import model.Employee;
import model.Save;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.GroupLayout;

/**
 * @author Brainrain
 */
public class AddEmployeeView extends JFrame {
    public AddEmployeeView() {
        initComponents();
    }

    private void CommitButtonActionPerformed(ActionEvent e) {    //进行用户交互,添加用户信息
        // 添加员工信息
        try {

            new Write(new Employee(
                    EmployName.getText().toString(),
                    EmployBirthday.getText().toString(),
                    EmploySalary.getText().toString(),
                    EmployEmail.getText().toString()));
            JOptionPane.showMessageDialog(this,"成功添加!!!");
        } catch (EmailErrorException exception) {
            JOptionPane.showMessageDialog(this,"您输入的邮箱格式有误,请重新输入,例如:1234567@qq.com");
        } catch (BirthdayErrorException birthdayErrorException) {
            JOptionPane.showMessageDialog(this,"您输入的出生日期格式有误,请重新输入,例如:2001-01-01");
        } catch (NumFromatException numFromatException) {
            JOptionPane.showMessageDialog(this,"您输入的数字有误,请重新输入,");
        } catch (EmpNullException empNullException) {
            JOptionPane.showMessageDialog(this,"请不要输入空信息");
        } catch (NameException nameException) {
            JOptionPane.showMessageDialog(this,"您输入的名字为空!!");
        }
    }

    private void initComponents() {
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
        label1 = new JLabel();
        label2 = new JLabel();
        label3 = new JLabel();
        label5 = new JLabel();
        label6 = new JLabel();
        EmployBirthday = new JTextField();
        EmploySalary = new JTextField();
        EmployEmail = new JTextField();
        EmployName = new JTextField();
        CommitButton = new JButton();

        //======== this ========
        setTitle("xxxxxx:xxxxxxx");
        Container contentPane = getContentPane();

        //---- label1 ----
        label1.setText("\u57fa\u672c\u5de5\u8d44:");

        //---- label2 ----
        label2.setText("email:");

        //---- label3 ----
        label3.setText("\u51fa\u751f\u5e74\u6708:");

        //---- label5 ----
        label5.setText("\u59d3\u540d:");

        //---- CommitButton ----
        CommitButton.setText("\u63d0\u4ea4");
        CommitButton.addActionListener(e -> CommitButtonActionPerformed(e));

        GroupLayout contentPaneLayout = new GroupLayout(contentPane);
        contentPane.setLayout(contentPaneLayout);
        contentPaneLayout.setHorizontalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(contentPaneLayout.createSequentialGroup()
                    .addGap(115, 115, 115)
                    .addGroup(contentPaneLayout.createParallelGroup()
                        .addComponent(label5)
                        .addComponent(label3)
                        .addComponent(label1)
                        .addComponent(label2))
                    .addGap(60, 60, 60)
                    .addGroup(contentPaneLayout.createParallelGroup()
                        .addGroup(contentPaneLayout.createSequentialGroup()
                            .addComponent(CommitButton)
                            .addContainerGap(244, Short.MAX_VALUE))
                        .addGroup(contentPaneLayout.createSequentialGroup()
                            .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.TRAILING)
                                .addComponent(EmployBirthday, GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE)
                                .addComponent(EmployName, GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE)
                                .addComponent(EmploySalary, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE)
                                .addComponent(EmployEmail, GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE))
                            .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(label6, GroupLayout.PREFERRED_SIZE, 49, GroupLayout.PREFERRED_SIZE)
                            .addGap(171, 171, 171))))
        );
        contentPaneLayout.setVerticalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(GroupLayout.Alignment.TRAILING, contentPaneLayout.createSequentialGroup()
                    .addContainerGap(57, Short.MAX_VALUE)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label5)
                        .addComponent(label6)
                        .addComponent(EmployName, GroupLayout.PREFERRED_SIZE, 18, GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label3, GroupLayout.PREFERRED_SIZE, 23, GroupLayout.PREFERRED_SIZE)
                        .addComponent(EmployBirthday, GroupLayout.PREFERRED_SIZE, 18, GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label1)
                        .addComponent(EmploySalary, GroupLayout.DEFAULT_SIZE, 0, Short.MAX_VALUE))
                    .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label2)
                        .addComponent(EmployEmail, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE))
                    .addGap(68, 68, 68)
                    .addComponent(CommitButton)
                    .addGap(132, 132, 132))
        );
        pack();
        setLocationRelativeTo(getOwner());
        // JFormDesigner - End of component initialization  //GEN-END:initComponents
    }

    // JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
    private JLabel label1;
    private JLabel label2;
    private JLabel label3;
    private JLabel label5;
    private JLabel label6;
    private JTextField EmployBirthday;
    private JTextField EmploySalary;
    private JTextField EmployEmail;
    private JTextField EmployName;
    private JButton CommitButton;
    // JFormDesigner - End of variables declaration  //GEN-END:variables
}


(2)DeleteView(删除用户的界面)

/*
 * Created by JFormDesigner on Sat Apr 03 14:01:29 CST 2021
 */

package view;

import java.awt.*;
import Controller.Delete;
import Controller.EmptyException;
import Controller.NotFoundNoException;
import Controller.NotFoundNoException;

import java.awt.event.*;
import javax.swing.*;
import javax.swing.GroupLayout;

/**
 * @author Brainrain
 */
public class DeleteView extends JFrame {
    public DeleteView() {
        initComponents();
    }

    private void DeleteButtonActionPerformed(ActionEvent e) {  //进行用户交互,删除用户信息
        try {
            Delete.delete(EmployNo.getText().toString());
            JOptionPane.showMessageDialog(this,"删除成功");
        } catch (EmptyException exception) {
            JOptionPane.showMessageDialog(this,"员工表为空,无法删除");
        }catch (NotFoundNoException exception)
        {
            JOptionPane.showMessageDialog(this,"无法查询到对应的员工号,请检查员工号");
        }
    }

    private void initComponents() {
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
        label2 = new JLabel();
        label6 = new JLabel();
        EmployNo = new JTextField();
        DeleteButton = new JButton();

        //======== this ========
        setTitle("xxxxxx:xxxxxxx");
        setMinimumSize(new Dimension(420, 280));
        Container contentPane = getContentPane();

        //---- label2 ----
        label2.setText("\u5de5\u53f7\uff1a");

        //---- DeleteButton ----
        DeleteButton.setText("\u5220\u9664");
        DeleteButton.addActionListener(e -> DeleteButtonActionPerformed(e));

        GroupLayout contentPaneLayout = new GroupLayout(contentPane);
        contentPane.setLayout(contentPaneLayout);
        contentPaneLayout.setHorizontalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(contentPaneLayout.createSequentialGroup()
                    .addGap(115, 115, 115)
                    .addComponent(label2)
                    .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 47, Short.MAX_VALUE)
                    .addGroup(contentPaneLayout.createParallelGroup()
                        .addGroup(GroupLayout.Alignment.TRAILING, contentPaneLayout.createSequentialGroup()
                            .addComponent(label6, GroupLayout.PREFERRED_SIZE, 49, GroupLayout.PREFERRED_SIZE)
                            .addGap(171, 171, 171))
                        .addGroup(GroupLayout.Alignment.TRAILING, contentPaneLayout.createSequentialGroup()
                            .addComponent(EmployNo, GroupLayout.PREFERRED_SIZE, 114, GroupLayout.PREFERRED_SIZE)
                            .addGap(76, 76, 76))))
                .addGroup(contentPaneLayout.createSequentialGroup()
                    .addGap(154, 154, 154)
                    .addComponent(DeleteButton)
                    .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        contentPaneLayout.setVerticalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(GroupLayout.Alignment.TRAILING, contentPaneLayout.createSequentialGroup()
                    .addContainerGap(15, Short.MAX_VALUE)
                    .addComponent(label6)
                    .addGap(67, 67, 67)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label2)
                        .addComponent(EmployNo, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE))
                    .addGap(18, 18, 18)
                    .addComponent(DeleteButton)
                    .addGap(98, 98, 98))
        );
        pack();
        setLocationRelativeTo(getOwner());
        // JFormDesigner - End of component initialization  //GEN-END:initComponents
    }

    // JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
    private JLabel label2;
    private JLabel label6;
    private JTextField EmployNo;
    private JButton DeleteButton;
    // JFormDesigner - End of variables declaration  //GEN-END:variables
}

(3)LoginView 登录界面

/*
 * Created by JFormDesigner on Sat Apr 03 10:05:04 CST 2021
 */

package view;

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

/**
 * @author Brainrain
 */
public class LoginView extends JFrame {
    public static void main(String[] args) {
        new LoginView().setVisible(true);
    }
    public LoginView() {
        initComponents();
    }

    private void ResetButtonActionPerformed(ActionEvent e) {   //重置按钮的交互
        ResetValue(e);
    }

    private void ResetValue(ActionEvent e) {  //重置用户输入的内容
        UserName.setText(" ");
        Password.setText(" ");
    }

    private void LoginButtonActionPerformed(ActionEvent e) {//登录按钮的交互
        Login(e);
    }

    private void Login(ActionEvent e) {
        String passwd=Password.getText().toString(); //获取用户输入的内容
        String user = UserName.getText().toString();
        if(passwd.equals("")||user.equals(""))
        {
            JOptionPane.showMessageDialog(this,"用户名或密码不能为空");
        }
      else  if(passwd.equals("123")&&user.equals("root"))
        {
            JOptionPane.showMessageDialog(this,"登录成功!!!");
            this.dispose();
            new MainView().setVisible(true);
        }
        else JOptionPane.showMessageDialog(this,"用户名或密码错误");

    }

    private void initComponents() {
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
        label1 = new JLabel();
        label2 = new JLabel();
        label3 = new JLabel();
        UserName = new JTextField();
        Password = new JTextField();
        LoginButton = new JButton();
        ResetButton = new JButton();

        //======== this ========这里的内容应该是标题,但是程序一运行就会自动转换成编码
        setTitle("xxxxxx:xxxxxxx");
        setFont(new Font(Font.DIALOG, Font.BOLD, 12));
        Container contentPane = getContentPane();

        //---- label1 ----程序一运行汉字就会自动转换成编码
        label1.setText("\u804c\u5de5\u4fe1\u606f\u7ba1\u7406\u7cfb\u7edf\u767b\u5f55\u754c\u9762");
        label1.setHorizontalAlignment(SwingConstants.CENTER);
        label1.setFont(new Font("Microsoft YaHei UI", Font.BOLD, 12));

        //---- label2 ----
        label2.setText("UserName:");

        //---- label3 ----
        label3.setText("Password:");

        //---- LoginButton ----
        LoginButton.setText("Login");
        LoginButton.addActionListener(e -> LoginButtonActionPerformed(e));

        //---- ResetButton ----
        ResetButton.setText("Reset");
        ResetButton.addActionListener(e -> ResetButtonActionPerformed(e));

        GroupLayout contentPaneLayout = new GroupLayout(contentPane);
        contentPane.setLayout(contentPaneLayout);
        contentPaneLayout.setHorizontalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(contentPaneLayout.createSequentialGroup()
                    .addGap(141, 141, 141)
                    .addGroup(contentPaneLayout.createParallelGroup()
                        .addGroup(contentPaneLayout.createSequentialGroup()
                            .addComponent(label1, GroupLayout.PREFERRED_SIZE, 232, GroupLayout.PREFERRED_SIZE)
                            .addGap(0, 19, Short.MAX_VALUE))
                        .addGroup(contentPaneLayout.createSequentialGroup()
                            .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.TRAILING, false)
                                .addComponent(label2, GroupLayout.Alignment.LEADING)
                                .addComponent(label3, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(LoginButton, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addGap(18, 18, 18)
                            .addGroup(contentPaneLayout.createParallelGroup()
                                .addGroup(contentPaneLayout.createSequentialGroup()
                                    .addComponent(UserName, GroupLayout.PREFERRED_SIZE, 108, GroupLayout.PREFERRED_SIZE)
                                    .addGap(0, 0, Short.MAX_VALUE))
                                .addGroup(GroupLayout.Alignment.TRAILING, contentPaneLayout.createSequentialGroup()
                                    .addGap(0, 77, Short.MAX_VALUE)
                                    .addComponent(ResetButton))
                                .addComponent(Password))))
                    .addContainerGap(116, Short.MAX_VALUE))
        );
        contentPaneLayout.setVerticalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(contentPaneLayout.createSequentialGroup()
                    .addGap(24, 24, 24)
                    .addComponent(label1, GroupLayout.PREFERRED_SIZE, 139, GroupLayout.PREFERRED_SIZE)
                    .addGap(18, 18, 18)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label2)
                        .addComponent(UserName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                    .addGap(23, 23, 23)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label3)
                        .addComponent(Password, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 31, Short.MAX_VALUE)
                    .addGroup(contentPaneLayout.createParallelGroup()
                        .addComponent(ResetButton)
                        .addComponent(LoginButton, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGap(23, 23, 23))
        );
        pack();
        setLocationRelativeTo(getOwner());
        // JFormDesigner - End of component initialization  //GEN-END:initComponents
    }

    // JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
    private JLabel label1;
    private JLabel label2;
    private JLabel label3;
    private JTextField UserName;
    private JTextField Password;
    private JButton LoginButton;
    private JButton ResetButton;
    // JFormDesigner - End of variables declaration  //GEN-END:variables
}

(3)MainView主窗口

/*
 * Created by JFormDesigner on Sat Apr 03 11:12:05 CST 2021
 */

package view;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.GroupLayout;

/**
 * @author Brainrain
 */
public class MainView extends JFrame {
    public MainView() {
        initComponents();
    }

    private void AddEmployeeButtonActionPerformed(ActionEvent e) {
        new AddEmployeeView().setVisible(true);   //与添加员工按钮,进行交互
    }

    private void ShowEmployeeButtonActionPerformed(ActionEvent e) {  //与展示员工信息按钮进行交互
        new ShowEmployeeView().setVisible(true);
    }

    private void initComponents() {
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
        AddEmployeeButton = new JButton();
        label1 = new JLabel();
        ShowEmployeeButton = new JButton();

        //======== this ========
        setTitle("xxxxxx:xxxxxxx");
        Container contentPane = getContentPane();

        //---- AddEmployeeButton ----
        AddEmployeeButton.setText("\u6dfb\u52a0\u804c\u5de5\u4fe1\u606f");
        AddEmployeeButton.addActionListener(e -> AddEmployeeButtonActionPerformed(e));

        //---- label1 ----
        label1.setText("\u804c\u5de5\u7ba1\u7406\u7cfb\u7edf");
        label1.setHorizontalAlignment(SwingConstants.CENTER);
        label1.setFont(new Font("\u534e\u6587\u65b0\u9b4f", Font.PLAIN, 24));

        //---- ShowEmployeeButton ----
        ShowEmployeeButton.setText("\u6d4f\u89c8\u804c\u5de5\u4fe1\u606f");
        ShowEmployeeButton.addActionListener(e -> ShowEmployeeButtonActionPerformed(e));

        GroupLayout contentPaneLayout = new GroupLayout(contentPane);
        contentPane.setLayout(contentPaneLayout);
        contentPaneLayout.setHorizontalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(contentPaneLayout.createSequentialGroup()
                    .addGap(55, 55, 55)
                    .addComponent(AddEmployeeButton, GroupLayout.PREFERRED_SIZE, 135, GroupLayout.PREFERRED_SIZE)
                    .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 82, Short.MAX_VALUE)
                    .addComponent(ShowEmployeeButton, GroupLayout.PREFERRED_SIZE, 135, GroupLayout.PREFERRED_SIZE)
                    .addGap(76, 76, 76))
                .addGroup(contentPaneLayout.createSequentialGroup()
                    .addGap(155, 155, 155)
                    .addComponent(label1, GroupLayout.PREFERRED_SIZE, 156, GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(172, Short.MAX_VALUE))
        );
        contentPaneLayout.setVerticalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(contentPaneLayout.createSequentialGroup()
                    .addGap(78, 78, 78)
                    .addComponent(label1, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)
                    .addGap(34, 34, 34)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(AddEmployeeButton)
                        .addComponent(ShowEmployeeButton))
                    .addContainerGap(176, Short.MAX_VALUE))
        );
        pack();
        setLocationRelativeTo(getOwner());
        // JFormDesigner - End of component initialization  //GEN-END:initComponents
    }

    // JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
    private JButton AddEmployeeButton;
    private JLabel label1;
    private JButton ShowEmployeeButton;
    // JFormDesigner - End of variables declaration  //GEN-END:variables
}

(4)ShowEmployeeView职工信息展示窗口

/*
 * Created by JFormDesigner on Sat Apr 03 12:03:23 CST 2021
 */

package view;

import Controller.Count;
import Controller.EmptyException;
import Controller.ShowInfo;
import model.Employee;

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.GroupLayout;

/**
 * @author Brainrain
 */
public class ShowEmployeeView extends JFrame {
    public ShowEmployeeView() {
        initComponents();
    }

    private void ConfigActionPerformed(ActionEvent e) { //与修改按钮进行交互
        new UpdateView().setVisible(true);

    }

    private void DeleteActionPerformed(ActionEvent e) {
        new DeleteView().setVisible(true);
    }//与删除按钮进行交互

    private void ShowActionPerformed(ActionEvent e) {   //与显示全体员工按钮进行交互

        new ShowView().setVisible(true);
    }

    private void CountActionPerformed(ActionEvent e) {   //与统计人数按钮进行交互
        try {
            int num = Controller.Count.count();
            JOptionPane.showMessageDialog(this,"目前人数为"+num+"!!");
        } catch (EmptyException emptyException) {
            JOptionPane.showMessageDialog(this,"目前人数为0!!");
        }
    }

    private void AvgSalActionPerformed(ActionEvent e) { //与求平均值按钮进行交互
        try {
            double avg = Controller.AvgSal.avgsal();
            JOptionPane.showMessageDialog(this,"基本工资的平均工资为:"+avg);
        } catch (EmptyException emptyException) {
            JOptionPane.showMessageDialog(this,"目前人数为0!!无法计算平均工资");
        }
    }

    private void HighestSalEmpActionPerformed(ActionEvent e) {  //与最高工资员工按钮进行交互
        try {
            Employee emp  = Controller.HighestSal.high(); //得到最高工资员工的个人信息
            String string = "最高工资的员工信息如下\n工号:"+emp.getNo()+"\n姓名:"+emp.getName()+"\n出生年月:"+emp.getBirthDay()+"\n基本工资:"+emp.getSal()+
                    "\nEmail:"+emp.getEmail();
            JOptionPane.showMessageDialog(this,string);
        } catch (EmptyException emptyException) {
            JOptionPane.showMessageDialog(this,"目前人数为0!!无法计算平均工资");
        }
    }

    private void LowestSalEmpActionPerformed(ActionEvent e) { //与最低资员工按钮进行交互
        try {
            Employee emp  = Controller.LowestSal.low();//得到最低工资员工的个人信息
            String string = "最低工资的员工信息如下\n工号:"+emp.getNo()+"\n姓名:"+emp.getName()+"\n出生年月:"+emp.getBirthDay()+"\n基本工资:"+emp.getSal()+
                    "\nEmail:"+emp.getEmail();
            JOptionPane.showMessageDialog(this,string);
        } catch (EmptyException emptyException) {
            JOptionPane.showMessageDialog(this,"目前人数为0!!无法计算平均工资");
        }
    }


    private void initComponents() {
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
        menuBar1 = new JMenuBar();
        menu3 = new JMenu();
        Count = new JMenuItem();
        AvgSal = new JMenuItem();
        HighestSalEmp = new JMenuItem();
        LowestSalEmp = new JMenuItem();
        Config = new JButton();
        Delete = new JButton();
        Show = new JButton();

        //======== this ========
        setTitle("xxxxxx:xxxxxxx");
        Container contentPane = getContentPane();

        //======== menuBar1 ========
        {

            //======== menu3 ========
            {
                menu3.setText("\u7edf\u8ba1");

                //---- Count ----
                Count.setText("\u7edf\u8ba1\u804c\u5de5\u4eba\u6570");
                Count.addActionListener(e -> CountActionPerformed(e));
                menu3.add(Count);

                //---- AvgSal ----
                AvgSal.setText("\u57fa\u672c\u5de5\u8d44\u5e73\u5747\u503c");
                AvgSal.addActionListener(e -> AvgSalActionPerformed(e));
                menu3.add(AvgSal);

                //---- HighestSalEmp ----
                HighestSalEmp.setText("\u6700\u9ad8\u5de5\u8d44\u804c\u5de5");
                HighestSalEmp.addActionListener(e -> HighestSalEmpActionPerformed(e));
                menu3.add(HighestSalEmp);

                //---- LowestSalEmp ----
                LowestSalEmp.setText("\u6700\u4f4e\u5de5\u8d44\u804c\u5de5");
                LowestSalEmp.addActionListener(e -> LowestSalEmpActionPerformed(e));
                menu3.add(LowestSalEmp);
            }
            menuBar1.add(menu3);

            //---- Config ----
            Config.setText("\u4fee\u6539");
            Config.addActionListener(e -> ConfigActionPerformed(e));
            menuBar1.add(Config);

            //---- Delete ----
            Delete.setText("\u5220\u9664");
            Delete.addActionListener(e -> DeleteActionPerformed(e));
            menuBar1.add(Delete);

            //---- Show ----
            Show.setText("\u663e\u793a\u5168\u4f53\u5458\u5de5\u4fe1\u606f");
            Show.addActionListener(e -> ShowActionPerformed(e));
            menuBar1.add(Show);
        }
        setJMenuBar(menuBar1);

        GroupLayout contentPaneLayout = new GroupLayout(contentPane);
        contentPane.setLayout(contentPaneLayout);
        contentPaneLayout.setHorizontalGroup(
            contentPaneLayout.createParallelGroup()
                .addGap(0, 508, Short.MAX_VALUE)
        );
        contentPaneLayout.setVerticalGroup(
            contentPaneLayout.createParallelGroup()
                .addGap(0, 332, Short.MAX_VALUE)
        );
        pack();
        setLocationRelativeTo(getOwner());
        // JFormDesigner - End of component initialization  //GEN-END:initComponents
    }

    // JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
    private JMenuBar menuBar1;
    private JMenu menu3;
    private JMenuItem Count;
    private JMenuItem AvgSal;
    private JMenuItem HighestSalEmp;
    private JMenuItem LowestSalEmp;
    private JButton Config;
    private JButton Delete;
    private JButton Show;
    // JFormDesigner - End of variables declaration  //GEN-END:variables
}

(5)ShowView将职工信息制成表格输出:

/*
 * Created by JFormDesigner on Sun Apr 04 09:57:23 CST 2021
 */

package view;

import Controller.EmptyException;
import Controller.ShowInfo;
import model.Employee;

import java.awt.*;
import java.beans.*;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.*;
import javax.swing.GroupLayout;
import javax.swing.table.*;

/**
 * @author Brainrain
 */
public class ShowView extends JFrame {
    public ShowView() {
        initComponents();
        SetTable();
    }

    private void initComponents() {
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
        Message = new JScrollPane();
        table1 = new JTable();

        //======== this ========
        setTitle("xxxxxx:xxxxxxx");
        Container contentPane = getContentPane();

        //======== Message ========
        {

            //---- table1 ----
            table1.setModel(new 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, 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},
                    {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},
                },
                new String[] {
                    "\u5de5\u53f7", "\u59d3\u540d", "\u51fa\u751f\u65e5\u671f", "\u57fa\u672c\u5de5\u8d44", "Email"
                }
            ));
            Message.setViewportView(table1);
        }

        GroupLayout contentPaneLayout = new GroupLayout(contentPane);
        contentPane.setLayout(contentPaneLayout);
        contentPaneLayout.setHorizontalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(contentPaneLayout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(Message, GroupLayout.DEFAULT_SIZE, 501, Short.MAX_VALUE)
                    .addContainerGap())
        );
        contentPaneLayout.setVerticalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(contentPaneLayout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(Message, GroupLayout.DEFAULT_SIZE, 381, Short.MAX_VALUE)
                    .addContainerGap())
        );
        pack();
        setLocationRelativeTo(getOwner());
        // JFormDesigner - End of component initialization  //GEN-END:initComponents
        SetTable();
    }

    // JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
    private JScrollPane Message;
    private JTable table1;
    // JFormDesigner - End of variables declaration  //GEN-END:variables
    private void SetTable()   //这里在显示职工信息的时候,用了Jtable,因此在这个地方设置jtable的内容
    {
        DefaultTableModel dft = (DefaultTableModel) table1.getModel();
        dft.setRowCount(0);
        try {
            ArrayList<Employee>arrayList = ShowInfo.showinfo();
            for(Employee emp : arrayList)
            {
                Vector<Object> a = new Vector<>();
                a.add(emp.getNo());
                a.add(emp.getName());
                a.add(emp.getBirthDay());
                a.add(emp.getSal());
                a.add(emp.getEmail());
                dft.addRow(a);
            }
        } catch (EmptyException emptyException) {
           // JOptionPane.showMessageDialog(this,"该员工表为空");
        }
    }
}



(6)UpdateView更新职工信息窗口:

/*
 * Created by JFormDesigner on Sat Apr 03 13:51:35 CST 2021
 */

package view;

import Controller.*;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.GroupLayout;

/**
 * @author Brainrain
 */
public class UpdateView extends JFrame {
    public UpdateView() {
        initComponents();
    }

    private void UpdateButtonActionPerformed(ActionEvent e) {   //与更新员工按钮进行交互
        try {
            Update.update(EmployName.getText().toString(),EmployBirthday.getText().toString(),EmploySalary.getText().toString()
           ,EmployEmail.getText().toString(),EmpNO.getText().toString());
            JOptionPane.showMessageDialog(this,"修改成功");
        } catch (EmptyException emptyException) {
            JOptionPane.showMessageDialog(this,"该员工表为空,请插入后再修改");
        }catch (EmailErrorException exception) {
            JOptionPane.showMessageDialog(this,"您输入的邮箱格式有误,请重新输入,例如:1234567@qq.com");
        } catch (BirthdayErrorException birthdayErrorException) {
            JOptionPane.showMessageDialog(this,"您输入的出生日期格式有误,请重新输入,例如:2001-01-01");
        } catch (NumFromatException numFromatException) {
            JOptionPane.showMessageDialog(this,"您输入的数字有误,请重新输入,");
        } catch (NotFoundNoException notFoundNoException) {
            JOptionPane.showMessageDialog(this,"查无此人,请核对工号");
        }
    }

    private void initComponents() {
        // JFormDesigner - Component initialization - DO NOT MODIFY  //GEN-BEGIN:initComponents
        label1 = new JLabel();
        label2 = new JLabel();
        label3 = new JLabel();
        label5 = new JLabel();
        label6 = new JLabel();
        EmployBirthday = new JTextField();
        EmploySalary = new JTextField();
        EmployEmail = new JTextField();
        EmployName = new JTextField();
        UpdateButton = new JButton();
        label4 = new JLabel();
        EmpNO = new JTextField();

        //======== this ========
        setTitle("xxxxxx:xxxxxxx");
        Container contentPane = getContentPane();

        //---- label1 ----
        label1.setText("\u57fa\u672c\u5de5\u8d44:");

        //---- label2 ----
        label2.setText("email:");

        //---- label3 ----
        label3.setText("\u51fa\u751f\u5e74\u6708:");

        //---- label5 ----
        label5.setText("\u59d3\u540d:");

        //---- UpdateButton ----
        UpdateButton.setText("\u66f4\u65b0");
        UpdateButton.addActionListener(e -> UpdateButtonActionPerformed(e));

        //---- label4 ----
        label4.setText("\u5de5\u53f7");

        GroupLayout contentPaneLayout = new GroupLayout(contentPane);
        contentPane.setLayout(contentPaneLayout);
        contentPaneLayout.setHorizontalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(contentPaneLayout.createSequentialGroup()
                    .addGap(115, 115, 115)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
                        .addComponent(label5)
                        .addComponent(label3, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(label1, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(label2)
                        .addComponent(label4, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGap(60, 60, 60)
                    .addGroup(contentPaneLayout.createParallelGroup()
                        .addGroup(contentPaneLayout.createSequentialGroup()
                            .addComponent(UpdateButton)
                            .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGroup(GroupLayout.Alignment.TRAILING, contentPaneLayout.createSequentialGroup()
                            .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.TRAILING)
                                .addComponent(EmployBirthday)
                                .addComponent(EmploySalary, GroupLayout.Alignment.LEADING)
                                .addComponent(EmployEmail)
                                .addGroup(GroupLayout.Alignment.LEADING, contentPaneLayout.createSequentialGroup()
                                    .addComponent(EmployName, GroupLayout.PREFERRED_SIZE, 114, GroupLayout.PREFERRED_SIZE)
                                    .addGap(0, 0, Short.MAX_VALUE))
                                .addComponent(EmpNO))
                            .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(label6, GroupLayout.PREFERRED_SIZE, 49, GroupLayout.PREFERRED_SIZE)
                            .addGap(171, 171, 171))))
        );
        contentPaneLayout.setVerticalGroup(
            contentPaneLayout.createParallelGroup()
                .addGroup(GroupLayout.Alignment.TRAILING, contentPaneLayout.createSequentialGroup()
                    .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label5)
                        .addComponent(label6)
                        .addComponent(EmployName, GroupLayout.PREFERRED_SIZE, 18, GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label3, GroupLayout.PREFERRED_SIZE, 23, GroupLayout.PREFERRED_SIZE)
                        .addComponent(EmployBirthday, GroupLayout.PREFERRED_SIZE, 18, GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label1)
                        .addComponent(EmploySalary, GroupLayout.DEFAULT_SIZE, 0, Short.MAX_VALUE))
                    .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label2)
                        .addComponent(EmployEmail, GroupLayout.PREFERRED_SIZE, 20, GroupLayout.PREFERRED_SIZE))
                    .addGap(1, 1, 1)
                    .addGroup(contentPaneLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(label4)
                        .addComponent(EmpNO, GroupLayout.PREFERRED_SIZE, 17, GroupLayout.PREFERRED_SIZE))
                    .addGap(51, 51, 51)
                    .addComponent(UpdateButton)
                    .addGap(51, 51, 51))
        );
        pack();
        setLocationRelativeTo(getOwner());
        // JFormDesigner - End of component initialization  //GEN-END:initComponents
    }

    // JFormDesigner - Variables declaration - DO NOT MODIFY  //GEN-BEGIN:variables
    private JLabel label1;
    private JLabel label2;
    private JLabel label3;
    private JLabel label5;
    private JLabel label6;
    private JTextField EmployBirthday;
    private JTextField EmploySalary;
    private JTextField EmployEmail;
    private JTextField EmployName;
    private JButton UpdateButton;
    private JLabel label4;
    private JTextField EmpNO;
    // JFormDesigner - End of variables declaration  //GEN-END:variables
}

2.model(职工类,读数据,写数据)
(1)职工类:

package model;

import Controller.BirthdayErrorException;
import Controller.EmailErrorException;
import Controller.NameException;
import Controller.NumFromatException;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class Employee implements Serializable {

    private String No;   //员工工号
    private String Name; //员工姓名
    private String BirthDay;//员工出生日期
    private String Sal;     //员工工资
    private String Email;  //员工邮箱
    static int i=0; //员工入职的序号
    public Employee() {
    }

    public Employee(String name, String birthDay,String sal, String email) throws EmailErrorException, BirthdayErrorException, NumFromatException, NameException {

        if(name.isEmpty())  //检查名字是否为空
        {
            throw new NameException();
        }
        if(!check_email(email))  //检查邮箱格式
        {
            throw new EmailErrorException();
        }
        if(!check_birthday(birthDay))//检查出生日期格式
        {
            throw new BirthdayErrorException();
        }
        if(!check_sal(sal))//检查工资格式
        {
            throw new NumFromatException();
        }
        No=CreateNo();
        Name = name;
        BirthDay = birthDay;
        Sal = sal;
        Email=email;

    }

    public static boolean check_sal(String sal) {  //检查工资格式
        String format = "^[0-9]*$";
        return sal.matches(format);
    }

    public static boolean check_birthday(String birthDay) {//检查出生日期格式
            String format="^\\d{4}-\\d{1,2}-\\d{1,2}";
            return birthDay.matches(format);
    }

    public static boolean check_email(String email) {//检查邮箱格式
        String format = "[a-zA-Z0-9_]{1,}[@][a-z0-9]{2,3}[.][a-z]{2,3}";
        return email.matches(format);
    }

    private String CreateNo()   //根据日期,入职顺序创建工号
    {   ArrayList<Employee> arrayList = ReadData.Read();//读取数据文件
        if(arrayList!=null && arrayList.size()!=0)  /*如果此时数据文件里存在内容,为了确保员工编号不会重复,
                                                    从数据文件中读取最后一个员工的工号的后两位*/
        {
            String temp_no = arrayList.get(arrayList.size()-1).getNo();
            i = Integer.parseInt(temp_no.substring(temp_no.length()-2,temp_no.length()));
        }
        Date date = new Date();//生成当前日期
        i++;    //  计算员工编号最后两位
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMM");
        String o=null;
        if(i<10)  //为了确保工号格式,做一下判断如果是个位数,在个位数前加0
        {
            o="0"+ Employee.i;
        }
        else o=Employee.i+"";
        String no = simpleDateFormat.format(date)+o;
        return no;
    }

    public String getNo() {
        return No;
    }

    public void setNo(String no) {
        No = no;
    }

    public String getName() {
        return Name;
    }

    public void setName(String name) {
        Name = name;
    }

    public String getBirthDay() {
        return BirthDay;
    }

    public void setBirthDay(String birthDay) {
        BirthDay = birthDay;
    }

    public String getSal() {
        return Sal;
    }

    public void setSal(String sal) {
        Sal = sal;
    }

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }
    @Override
    public String toString() {
        return "Employee{" +
                "No='" + No + '\'' +
                ", Name='" + Name + '\'' +
                ", BirthDay='" + BirthDay + '\'' +
                ", Email='" + Email + '\'' +
                '}';
    }
}
//        if(arrayList!=null && arrayList.size()!=0)
//        {
//            for(Employee e : arrayList)
//            {
//                if(o.equals(e.getNo().substring(6,7)))
//                {
//                    i++;
//                    if(i<10)
//                    {
//                        o="0"+ Employee.i;
//                    }
//                    else o=Employee.i+"";
//                    break;
//                }
//            }
//        }

(2)读取数据:

package model;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;

public class ReadData {
    public static ArrayList<Employee> Read()   //文件反序列化
    {
        try {
            ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("Emps"));
            Object obj = objectInputStream.readObject();
            if(obj instanceof ArrayList)
            {
                ArrayList<Employee> obj1 = (ArrayList<Employee>) obj;
                return obj1;
            }
        } catch (ClassNotFoundException | IOException e) {
           // e.printStackTrace();
        }
        return null;
    }

}


(3)写入数据

package model;

import java.io.*;
import java.util.ArrayList;
import java.util.Stack;

public class Save  {
    public static ArrayList<Employee>Emps = new ArrayList<>();
    public Save() {}
    public Save(Employee e) {
        refresh(e);
    }
    public static void refresh(Employee Emp){   //当文件为空或不存在时,使用该种方式添加
        Emps.add(Emp);
        Serializable();
    }
    public static void delete_refresh(ArrayList<Employee>Emp)  //当文件存在时,使用这种方式添加
    {
        Emps=Emp;
        Serializable();
    }
    public static void Serializable()  //文件序列化过程
    {
        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("Emps"));
            objectOutputStream.writeObject(Emps);
            objectOutputStream.flush();
            objectOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

3.处理数据(各类功能)

(1)求平均值:

package Controller;

import model.Employee;
import model.ReadData;
import model.Save;

import java.util.ArrayList;

public class AvgSal {
    public static double avgsal() throws EmptyException {
        double sum=0;
        ArrayList<Employee> arrayList = ReadData.Read();   //读取数据文件,反序列化
        if(arrayList==null || arrayList.size()==0)  //如果数据文件为空或不存在抛出异常
        {
            throw new EmptyException();
        }
        for(Employee e: arrayList)   //计算平均值
        {
            sum+=Double.parseDouble(e.getSal());
        }
        return sum/arrayList.size();
    }
}

(2)记录员工人数:

package Controller;

import model.Employee;
import model.ReadData;
import model.Save;

import java.util.ArrayList;

public class Count {
    public static int count() throws EmptyException {
        ArrayList<Employee> arrayList = ReadData.Read(); //获取数据文件,反序列化
        if(arrayList==null || arrayList.size()==0)
        {
            throw new EmptyException();
        }
        return arrayList.size();  //返回arraylist的大小(人数)
    }

}

(3)删除员工

package Controller;
import model.Employee;
import model.ReadData;
import model.Save;
import java.util.ArrayList;
public class Delete {
    public static void delete(String No) throws EmptyException, NotFoundNoException {
        ArrayList<Employee> arrayList = ReadData.Read();  //读取数据文件,反序列化
        if(arrayList==null || arrayList.size()==0)
        {
            throw new EmptyException();
        }
        int flag=0;//flag的作用是,当删除的员工编号不存在时,及时抛出异常,
        for (Employee e : arrayList) {          //通过遍历数据文件,找到需要删除的员工的编号,进行删除
            if (e.getNo().equals(No)) {
                flag=1;
                arrayList.remove(e);
                Save.delete_refresh(arrayList);//删除数据后,及时修改本地文件
                return;
            }
        }
        if(flag==0)
        {
            throw new NotFoundNoException();
        }

    }
}

(4)得到最高工资的员工信息:

package Controller;

import model.Employee;
import model.ReadData;
import model.Save;

import java.util.ArrayList;

public class HighestSal {
    public  static  Employee high() throws EmptyException {
        double max=-1;
        ArrayList<Employee> arrayList = ReadData.Read(); //读取数据文件,反序列化
        if(arrayList==null || arrayList.size()==0)
        {
            throw new EmptyException();
        }
        Employee re=null;
        for(Employee e: arrayList)   //遍历数据找出最高工资的员工
        {
            if(max<Double.parseDouble(e.getSal()))
            {
                max = Double.parseDouble(e.getSal());
                re=e;
            }
        }
        return re;    //返回该员工的信息
    }


}

(5)得到最低工资的员工信息

package Controller;

import model.Employee;
import model.ReadData;
import model.Save;

import java.util.ArrayList;

public class LowestSal {
    public  static  Employee low() throws EmptyException {
        double min=Double.MAX_VALUE;
        ArrayList<Employee> arrayList = ReadData.Read();//读取数据文件,反序列化
        if(arrayList==null || arrayList.size()==0)
        {
            throw new EmptyException();
        }
        Employee re=null;
        for(Employee e: arrayList)//遍历数据找出最低工资的员工
        {
            if(min>Double.parseDouble(e.getSal()))
            {
                min = Double.parseDouble(e.getSal());
                re=e;
            }
        }
        return  re;  //返回员工信息
    }
}

(6)全体员工信息:

package Controller;

import model.Employee;
import model.ReadData;
import model.Save;

import java.util.ArrayList;

public class ShowInfo {
    public static ArrayList<Employee> showinfo() throws EmptyException {

        ArrayList<Employee> arrayList = ReadData.Read();//读取数据文件,反序列化
        if(arrayList==null || arrayList.size()==0)
        {
            throw new EmptyException();
        }
        return arrayList;  //将数据返回与图形化界面交互
    }
}

(7)更新员工信息:

package Controller;

import model.Employee;
import model.ReadData;
import model.Save;

import java.util.ArrayList;

import static model.Employee.*;

public class Update {
    public Update() {
    }
    //更新员工信息
    public static void update(String name,String birthday,String sal,String email,String No) throws NotFoundNoException, EmptyException, EmailErrorException, BirthdayErrorException, NumFromatException {

        int flag=0; //flag的作用还是用来标记输入的员工
        ArrayList<Employee> arrayList = ReadData.Read(); //读取数据文件,反序列化
        if(arrayList==null || arrayList.size()==0)  //数据为空或不存在时抛出异常
        {
            throw new EmptyException();
        }
        if(!email.isEmpty()&&!check_email(email))    //如果用户输入的邮箱不合法,则抛出异常
        {
            throw new EmailErrorException();
        }
        if(!birthday.isEmpty()&&!check_birthday(birthday))  //用户输入生日日期格式错误抛出异常
        {
            throw new BirthdayErrorException();
        }
        if(!sal.isEmpty()&&!check_sal(sal))   //如果用户输入的工资不是数字的话抛出异常
        {
            throw new NumFromatException();
        }
        Employee old_e = null;
        for(Employee e:arrayList)   //遍历数据
        {
            if(e.getNo().equals(No))
            {
                old_e=e; //记录旧的数据方便对数据进行更新
                if(!name.isEmpty())  //当名字非空时,修改名字,下免得if语句的功能都是这样,保证用户可以对单一的数据进行
                                     // 修改
                {
                    e.setName(name);
                }
                else if(!birthday.isEmpty())
                {
                    e.setBirthDay(birthday);
                }
                else if(!sal.isEmpty())
                {
                    e.setBirthDay(birthday);
                }
                arrayList.remove(old_e); //移除旧的数据
                arrayList.add(e); //添加修改后的数据
                Save.delete_refresh(arrayList);//对于本地文件进行更新操作
                return;
            }
        }
        if(flag==0)
        {
            throw new NotFoundNoException();
        }
    }
}

(8)添加新员工:

package Controller;

import model.Employee;
import model.ReadData;
import model.Save;

import java.util.ArrayList;

public class Write {
    Employee employee;
    public Write() {
    }

    public Write(Employee emp) throws EmpNullException {
        if(emp==null)    //如果用户输入的用户信息为空。抛出异常
        {
            throw new EmpNullException();
        }
        ArrayList<Employee> arrayList = ReadData.Read(); //读取数据
        if(arrayList==null || arrayList.size()==0)  /*如果添加的时候还没有员工数据,
                                                    这时候直接通过save来添加,无需
                                                  更新数据*/
        {
            new Save(emp);
        }
        else
        {
            arrayList.add(emp);      //添加新数据
            Save.delete_refresh(arrayList);//将旧的数据更新覆盖
        }
    }
}

以下是各类异常:

package Controller;

public class BirthdayErrorException extends Exception{
    public BirthdayErrorException (){}
    public BirthdayErrorException (String s){super(s);}
}

package Controller;

public class EmailErrorException extends Exception{
    public EmailErrorException(){}
    public EmailErrorException(String s)
    {super(s);}

}

package Controller;

public class EmpNullException extends Exception{
    public EmpNullException (){}
    public EmpNullException(String s){super(s);}
}

package Controller;

public class EmptyException extends Exception {
public EmptyException(){}
public EmptyException(String s)
        {super(s);}
}

package Controller;

public class NameException extends Exception{
    public NameException (){}
    public NameException(String s){super(s);}
}

package Controller;

public class NotFoundNoException extends Exception {
    public NotFoundNoException(){}
    public NotFoundNoException(String s)
    {super(s);}

}

package Controller;

public class NumFromatException extends Exception{
    public NumFromatException(){}
    public NumFromatException(String s){super(s);}
}

几张截图:

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

在这里插入图片描述

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值