客户端:
1.Client类
2.添加部门信息(录入)DeptAddManager类
package com.zbdx.ui; import com.zbdx.client.Client; import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; /** * @Author: 王小甜 * @Description: * @Date Created in 2024-03-17 16:46 * @Modified By:添加部门信息 */ public class DeptAddManager extends JFrame { //准备显示文字 JLabel showMsg=new JLabel("部门信息添加"); JLabel dNum=new JLabel("部门编号:"); JLabel dName=new JLabel("部门名称:"); JLabel dDate=new JLabel("成立日期:"); JLabel dLoc=new JLabel("部门位置:"); //准备文本编辑框 JTextField dNumField=new JTextField(); JTextField dNameField=new JTextField(); JTextField dDateField=new JTextField(); JTextField dLocField=new JTextField(); //准备按钮 JButton centerBtn=new JButton("添加"); JButton clearBtn=new JButton("清空"); public DeptAddManager(DefaultTableModel dtm) { setTitle("部门信息添加"); Container con = getContentPane();//取得父容器 setLayout(null);//为了使用setBound(参数...)方法 Font font = new Font("新宋体", Font.PLAIN, 14); showMsg.setBounds(150, 20, 160, 30); showMsg.setFont(new Font("新宋体", Font.PLAIN, 20)); con.add(showMsg); dNum.setBounds(40, 85, 70, 20); dNum.setFont(font); con.add(dNum); dNumField.setBounds(110, 85, 80, 20); con.add(dNumField); dName.setBounds(210, 85, 70, 20); dName.setFont(font); con.add(dName); dNameField.setBounds(280, 85, 80, 20); con.add(dNameField); dDate.setBounds(40, 140, 70, 20); dDate.setFont(font); con.add(dDate); dDateField.setBounds(110, 140, 80, 20); con.add(dDateField); dLoc.setBounds(210, 140, 70, 20); dLoc.setFont(font); con.add(dLoc); dLocField.setBounds(280, 140, 80, 20); con.add(dLocField); centerBtn.setBounds(40, 200, 70, 24); centerBtn.setFont(font); con.add(centerBtn); clearBtn.setBounds(300, 200, 70, 24); clearBtn.setFont(font); con.add(clearBtn); Toolkit toolkit = Toolkit.getDefaultToolkit(); int w = toolkit.getScreenSize().width;//得到屏幕的宽度 int h = toolkit.getScreenSize().height;//屏幕的高度 setBounds(w / 2 - 205, h / 2 - 140, 410, 280);//设置窗体的宽度和高度,坐标 setVisible(true); //给添加按钮设置点击事件 centerBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //获取文本输入框中的数据 String deptNo = dNumField.getText().trim(); String deptName = dNameField.getText().trim(); String deptDate = dDateField.getText().trim(); String deptLoc = dLocField.getText().trim(); //将上面获取的内容传递给服务端 //从服务端获取部门的数据渲染到表格中 String data = Client.getServerData("addDept%"+deptNo+"%"+deptName+"%"+deptDate+"%"+deptLoc); if(Integer.parseInt(data) > 0){//添加成功 JOptionPane.showMessageDialog(null,"添加成功!"); //当前的窗口消失 setVisible(false); //将上面填写的数据添加到列表 Vector<String> vector = new Vector<>(); vector.add(deptNo); vector.add(deptName); vector.add(deptDate); vector.add(deptLoc); dtm.addRow(vector); }else{//添加失败 JOptionPane.showMessageDialog(null,"添加失败!"); } } }); //给清空按钮设置点击事件 clearBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { dDateField.setText(""); dLocField.setText(""); dNameField.setText(""); dNumField.setText(""); } }); } }
3.表格DeptManager类
package com.zbdx.ui; import com.zbdx.client.Client; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Vector; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; /** * @Author: 王小甜 * @Description: * @Date Created in 2024-03-17 21:07 * @Modified By: */ public class DeptManager extends JPanel{ private static final long serialVersionUID = 1L; //添加信息 private JLabel showMsg=new JLabel("部门基本信息查询"); private JLabel empnoLab=new JLabel("部门编号:"); private JLabel enameLab=new JLabel("部门名称:"); //两个输入框 private JTextField deptField=new JTextField();//填写部门编号 private JTextField deptNameField=new JTextField();//填写部门名称 //查询按钮 private JButton searchBtn=new JButton("查询"); //表格 private JTable table=null; //执行表格列名称 private String[] colsName={"部门编号","部门名称","部门成立时间","部门位置"}; private DefaultTableModel dtm=null;//主要是用来封装数据的 //定义两个属性用于传参 private JTable jTable=null; private DefaultTableModel model=null; public DeptManager() { this.setLayout(null); //实例化其他内容 Font f=new Font("宋体", Font.PLAIN,14); empnoLab.setBounds(20,80,300,20); empnoLab.setFont(f); add(empnoLab); enameLab.setBounds(20,120,300,20); enameLab.setFont(f); add(enameLab); //添加文本输入框 deptField.setBounds(100,80,80,20); deptField.setFont(f); add(deptField); deptNameField.setBounds(100,120,80,20); deptNameField.setFont(f); add(deptNameField); //添加按钮 searchBtn.setBounds(100,160,80,20); searchBtn.setFont(new Font("新宋体",Font.PLAIN,14)); add(searchBtn); //添加提示 showMsg.setBounds(360,20,300,26); showMsg.setFont(new Font("新宋体",Font.PLAIN,24)); add(showMsg); //添加Table dtm=new DefaultTableModel(){//可以消除内容双击获取焦点 @Override public boolean isCellEditable(int row, int column) { return false;//内容不可编辑 } }; table=new JTable(dtm); //让JTable中的内容文字居中显示 DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); renderer.setHorizontalAlignment(JLabel.CENTER); table.setDefaultRenderer(Object.class,renderer); JScrollPane pane=new JScrollPane(); pane.getViewport().add(table); dtm.setColumnCount(6); dtm.setColumnIdentifiers(colsName); pane.setBounds(200,60,480,350); add(pane); //给要传值的内容赋值 this.jTable=table; this.model=dtm; //给内容添加边框 deptField.setBorder(BorderFactory.createLineBorder(Color.BLACK)); deptNameField.setBorder(BorderFactory.createLineBorder(Color.BLACK)); searchBtn.setBorder(BorderFactory.createLineBorder(Color.BLACK)); pane.setBorder(BorderFactory.createLineBorder(Color.BLACK)); //从服务端获取部门的数据渲染到表格中 String data = Client.getServerData("getAllDepts"); //将上面的字符串拆分为单个数据 String[] item = data.split("%"); //将数据库中的每行数据的对应字段封装到表格中 for(int i = 0;i<item.length;i++){ Vector<String> vr = new Vector<>(); String[] itemData = item[i].split(","); for (int j = 0; j < itemData.length; j++) { vr.add(itemData[j]); } dtm.addRow(vr); } //给表格中的数据添加事件 table.addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent e) {//弹起鼠标执行此方法 } @Override public void mousePressed(MouseEvent e) {//按下鼠标执行的方法 } @Override public void mouseExited(MouseEvent e) {//失去焦点的时候执行此方法 } @Override public void mouseEntered(MouseEvent e) {//获取焦点则执行此方法 } @Override public void mouseClicked(MouseEvent e) {//完成点击执行此方法 new DeptUpdateManager(); } }); //给查询按钮设置点击事件 searchBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //获取查询的条件 String deptNo = deptField.getText().trim(); String deptName = deptNameField.getText().trim(); System.out.println("要查询部门信息-->"+deptNo+"-->"+deptName); //从服务端获取部门的数据渲染到表格中 String data = Client.getServerData("getAllDepts%"+deptNo+"%"+deptName); //将上面的字符串拆分为单个数据 String[] item = data.split("%"); //清空之前列表的数据 dtm.setRowCount(0); //将数据库中的每行数据的对应字段封装到表格中 for(int i = 0;i<item.length;i++){ String[] itemData = item[i].split(","); dtm.addRow(itemData); } } }); } public JTable getjTable() { return jTable; } public DefaultTableModel getModel() { return model; } }
4.部门信息管理界面DeptUpdateManager类
package com.zbdx.ui; import javax.swing.*; import java.awt.*; /** * @Author: 王小甜 * @Description: * @Date Created in 2024-03-17 21:07 * @Modified By: */ public class DeptUpdateManager extends JFrame { //准备显示文字 JLabel showMsg=new JLabel("部门信息管理"); JLabel dNum=new JLabel("部门编号:"); JLabel dName=new JLabel("部门名称:"); JLabel dDate=new JLabel("成立日期:"); JLabel dLoc=new JLabel("部门位置:"); //准备文本编辑框 JTextField dNumField=new JTextField(); JTextField dNameField=new JTextField(); JTextField dDateField=new JTextField(); JTextField dLocField=new JTextField(); //准备按钮 JButton centerBtn=new JButton("更新"); JButton delBtn=new JButton("删除"); JButton clearBtn=new JButton("清空"); public DeptUpdateManager() { setTitle("部门信息管理"); Container con = getContentPane();//取得父容器 setLayout(null);//为了使用setBound(参数...)方法 Font font = new Font("新宋体", Font.PLAIN, 14); showMsg.setBounds(150, 20, 160, 30); showMsg.setFont(new Font("新宋体", Font.PLAIN, 20)); con.add(showMsg); dNum.setBounds(40, 85, 70, 20); dNum.setFont(font); con.add(dNum); dNumField.setBounds(110, 85, 80, 20); // dNumField.setEditable(false);//当前输入框不能编辑了 con.add(dNumField); dName.setBounds(210, 85, 70, 20); dName.setFont(font); con.add(dName); dNameField.setBounds(280, 85, 80, 20); con.add(dNameField); dDate.setBounds(40, 140, 70, 20); dDate.setFont(font); con.add(dDate); dDateField.setBounds(110, 140, 80, 20); con.add(dDateField); dLoc.setBounds(210, 140, 70, 20); dLoc.setFont(font); con.add(dLoc); dLocField.setBounds(280, 140, 80, 20); con.add(dLocField); centerBtn.setBounds(40, 200, 70, 24); centerBtn.setFont(font); con.add(centerBtn); clearBtn.setBounds(270, 200, 70, 24); clearBtn.setFont(font); con.add(clearBtn); delBtn.setBounds(154, 200, 70, 24); delBtn.setFont(font); con.add(delBtn); //初始化数据 Toolkit toolkit = Toolkit.getDefaultToolkit(); int w = toolkit.getScreenSize().width;//得到屏幕的宽度 int h = toolkit.getScreenSize().height;//屏幕的高度 setBounds(w / 2 - 205, h / 2 - 140, 410, 280);//设置窗体的宽度和高度,坐标 setVisible(true); } public static void main(String[] args) { new DeptUpdateManager(); } }
运行截图:
5.员工基本信息查询EmpManager类
package com.zbdx.ui; import com.zbdx.client.Client; import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.Vector; public class EmpManager extends JPanel{ private static final long serialVersionUID = 1L; //添加信息 private JLabel showMsg=new JLabel("员工基本信息查询"); private JLabel empnoLab=new JLabel("员工编号:"); private JLabel enameLab=new JLabel("员工姓名:"); //两个输入框 private JTextField empnoField=new JTextField();//同来填写员工编号的 private JTextField enameField=new JTextField();//同来填写员工姓名的 //查询按钮 private JButton searchBtn=new JButton("查询"); //表格 private JTable table=null; //执行表格列名称 private String[] colsName={"员工编号","员工名称","工作岗位","薪资","部门编号","雇佣日期"}; private DefaultTableModel dtm=null;//主要是用来封装数据的 //定义两个属性用于传参 private JTable jTable=null; private DefaultTableModel model=null; public EmpManager() { this.setLayout(null); //实例化其他内容 Font f=new Font("宋体", Font.PLAIN,14); empnoLab.setBounds(20,80,300,20); empnoLab.setFont(f); add(empnoLab); enameLab.setBounds(20,120,300,20); enameLab.setFont(f); add(enameLab); //添加文本输入框 empnoField.setBounds(100,80,80,20); empnoField.setFont(f); add(empnoField); enameField.setBounds(100,120,80,20); enameField.setFont(f); add(enameField); //添加按钮 searchBtn.setBounds(100,160,80,20); searchBtn.setFont(new Font("新宋体",Font.PLAIN,14)); add(searchBtn); //添加提示 showMsg.setBounds(360,20,300,26); showMsg.setFont(new Font("新宋体",Font.PLAIN,24)); add(showMsg); //添加Table dtm=new DefaultTableModel(){//可以消除内容双击获取焦点 @Override public boolean isCellEditable(int row, int column) { return false;//内容不可编辑 } }; table=new JTable(dtm); //让JTable中的内容文字居中显示 DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); renderer.setHorizontalAlignment(JLabel.CENTER); table.setDefaultRenderer(Object.class,renderer); JScrollPane pane=new JScrollPane(); pane.getViewport().add(table); dtm.setColumnCount(6); dtm.setColumnIdentifiers(colsName); pane.setBounds(200,60,480,350); add(pane); //给要传值的内容赋值 this.jTable=table; this.model=dtm; //给内容添加边框 empnoField.setBorder(BorderFactory.createLineBorder(Color.BLACK)); enameField.setBorder(BorderFactory.createLineBorder(Color.BLACK)); searchBtn.setBorder(BorderFactory.createLineBorder(Color.BLACK)); pane.setBorder(BorderFactory.createLineBorder(Color.BLACK)); //从服务端获取部门的数据渲染到表格中 String data = Client.getServerData("getAllEmps"); //将上面的字符串拆分为单个数据 String[] item = data.split("%"); //将数据库中的每行数据的对应字段封装到表格中 for(int i = 0;i<item.length;i++){ String[] itemData = item[i].split(","); dtm.addRow(itemData); } //给表格中的数据添加事件 table.addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent e) {//弹起鼠标执行此方法 } @Override public void mousePressed(MouseEvent e) {//按下鼠标执行的方法 } @Override public void mouseExited(MouseEvent e) {//失去焦点的时候执行此方法 } @Override public void mouseEntered(MouseEvent e) {//获取焦点则执行此方法 } @Override public void mouseClicked(MouseEvent e) {//完成点击执行此方法 new EmpUpdateManager(); } }); //给查询按钮设置点击事件 searchBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //获取查询的条件 String empNo = empnoField.getText().trim(); String eName = enameField.getText().trim(); //从服务端获取部门的数据渲染到表格中 String data = Client.getServerData("getAllEmps%"+empNo+"%"+eName); //将上面的字符串拆分为单个数据 String[] item = data.split("%"); //清空之前列表的数据 dtm.setRowCount(0); //将数据库中的每行数据的对应字段封装到表格中 for(int i = 0;i<item.length;i++){ String[] itemData = item[i].split(","); dtm.addRow(itemData); } } }); } public JTable getjTable() { return jTable; } public DefaultTableModel getModel() { return model; } }
6.员工信息管理EmpUpdateManager类
package com.zbdx.ui; import javax.swing.*; import java.awt.*; /** * @Author: 王小甜 * @Description: * @Date Created in 2024-03-17 21:09 * @Modified By: */ public class EmpUpdateManager extends JFrame { //准备显示文字 JLabel showMsg=new JLabel("员工信息管理"); JLabel eNum=new JLabel("员工编号:"); JLabel eName=new JLabel("员工姓名:"); JLabel eDate=new JLabel("入职日期:"); JLabel eSal=new JLabel("员工薪资:"); JLabel eJob=new JLabel("职 位:"); JLabel deptno=new JLabel("部门编号:"); //准备文本编辑框 JTextField eNumField=new JTextField(); JTextField eNameField=new JTextField(); JTextField eDateField=new JTextField(); JTextField eSalField=new JTextField(); JTextField eJobField=new JTextField(); JTextField deptnoField=new JTextField(); //准备按钮 JButton centerBtn=new JButton("提交"); JButton clearBtn=new JButton("清空"); JButton delBtn=new JButton("删除"); public EmpUpdateManager() { setTitle("部门信息管理"); Container con=getContentPane();//取得父容器 setLayout(null);//为了使用setBound(参数...)方法 Font font=new Font("新宋体",Font.PLAIN,14); showMsg.setBounds(150,20,160,30); showMsg.setFont(new Font("新宋体",Font.PLAIN,20)); con.add(showMsg); eNum.setBounds(40,85,70,20); eNum.setFont(font); con.add(eNum); eNumField.setBounds(110,85,60,20); con.add(eNumField); eName.setBounds(210,85,70,20); eName.setFont(font); con.add(eName); eNameField.setBounds(280,85,60,20); con.add(eNameField); deptno.setBounds(40,140,70,20); deptno.setFont(font); con.add(deptno); deptnoField.setBounds(110,140,60,20); con.add(deptnoField); eDate.setBounds(210,140,70,20); eDate.setFont(font); con.add(eDate); eDateField.setBounds(280,140,60,20); con.add(eDateField); eSal.setBounds(40,195,70,20); eSal.setFont(font); con.add(eSal); eSalField.setBounds(110,195,60,20); con.add(eSalField); eJob.setBounds(210,195,70,20); eJob.setFont(font); con.add(eJob); eJobField.setBounds(280,195,60,20); con.add(eJobField); centerBtn.setBounds(40,260,70,24); centerBtn.setFont(font); con.add(centerBtn); clearBtn.setBounds(270,260,70,24); clearBtn.setFont(font); con.add(clearBtn); delBtn.setBounds(154,260,70,24); delBtn.setFont(font); con.add(delBtn); Toolkit toolkit=Toolkit.getDefaultToolkit(); int w=toolkit.getScreenSize().width;//得到屏幕的宽度 int h=toolkit.getScreenSize().height;//屏幕的高度 setBounds(w/2-205,h/2-170,410,340);//设置窗体的宽度和高度,坐标 setVisible(true); } }
7.员工管理系统的登陆界面Login类
package com.zbdx.ui; import com.zbdx.client.Client; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Login extends JFrame{//窗体的子类 //单行文本框 密码输入框 private JTextField userNameField = new JTextField(); private JPasswordField passwordField = new JPasswordField(); //两个按钮 重置 登录 private JButton loginBtn = new JButton("登录"); private JButton resetBtn = new JButton("重置"); //文本显示组件 title 用户名: 密码: private JLabel userNameText = new JLabel("用户名:"); private JLabel passwordText = new JLabel("密码:"); private JLabel titleText = new JLabel("员工管理系统"); //无参构造 public Login() { //创建窗体对象 setTitle("登录"); //设置字体 Font font = new Font("新宋体",Font.PLAIN,12); //获取当前窗体的容器 Container container = getContentPane(); //设置布局管理器 container.setLayout(null); //设置上面定义好的组件的显示位置 //系统名称 titleText.setBounds(105,10,110,20); titleText.setFont(new Font("新宋体",Font.PLAIN,16)); //用户名字体显示 userNameText.setBounds(45,40,55,20); userNameText.setFont(font); //用户名输入 userNameField.setBounds(95,40,120,20); userNameField.setFont(font); //密码文字显示 passwordText.setBounds(45,70,55,20); passwordText.setFont(font); //密码输入 passwordField.setBounds(95,70,120,20); passwordField.setFont(font); //重置 登录 按钮 loginBtn.setBounds(90,110,60,20); loginBtn.setFont(font); resetBtn.setBounds(155,110,60,20); resetBtn.setFont(font); //向容器中添加title文本 container.add(titleText); container.add(userNameText); container.add(passwordText); container.add(userNameField); container.add(passwordField); container.add(loginBtn); container.add(resetBtn); //获取屏幕的大小 Toolkit toolkit = Toolkit.getDefaultToolkit(); int width = toolkit.getScreenSize().width; int height = toolkit.getScreenSize().height; //设置窗体的显示位置大小 setBounds((width-300)/2,(height-180)/2,300,180); //显示窗体 setVisible(true); //给相应的组件设置事件处理 loginBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String userName = userNameField.getText().trim();//获取用户名输入的内容并去掉空格 String password = passwordField.getText().trim();//获取密码输入的内容并去掉空格 //判断用户名和密码是否为空 if("".equals(userName)){ JOptionPane.showMessageDialog(null,"用户名不能为空..."); }else if("".equals(password)){ System.out.println("密码不能为空"); JOptionPane.showMessageDialog(null,"密码不能为空..."); }else{ //将是用户名和密码发送给服务端进行相关的验证 boolean result = Boolean.parseBoolean(Client.getServerData("login%"+userName+"%"+password)); //判断是否登录成功 if(result){ //登录成功进行页面的跳转--弹出主页面 new Main(); //让登录界面隐藏 setVisible(false); }else{ JOptionPane.showMessageDialog(null,"用户名或者密码错误..."); } } } }); resetBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //清空用户名和密码的输入框 userNameField.setText(""); passwordField.setText(""); } }); } public static void main(String[] args) { new Login(); } }
运行截图:
8.主方法Main类
package com.zbdx.ui; import javax.swing.*; import javax.swing.table.DefaultTableModel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Main extends JFrame{//窗体的子类 private CardLayout cardLayout = null; private JTable table = null; //定义两个参数用于传参 private JTable jTable = null; private DefaultTableModel model = null; //无参构造 public Main() { //创建窗体对象 setTitle("基本信息查询"); //设置字体 Font font = new Font("新宋体",Font.PLAIN,12); //获取当前窗体的容器 Container container = getContentPane(); //设置布局管理器 卡片布局 cardLayout = new CardLayout(); container.setLayout(cardLayout); //添加菜单 addMenu(); //添加功能页面 DeptManager deptManager = new DeptManager(); model =deptManager.getModel(); container.add("dept",deptManager); container.add("emp",new EmpManager()); //获取屏幕的大小 Toolkit toolkit = Toolkit.getDefaultToolkit(); int width = toolkit.getScreenSize().width; int height = toolkit.getScreenSize().height; //设置窗体的显示位置大小 setBounds((width-700)/2,(height-480)/2,700,480); //显示窗体 setVisible(true); } //给主界面添加菜单 public void addMenu(){ Font font=new Font("新宋体",Font.PLAIN,12);//指定文字的 JMenuBar jMenuBar=new JMenuBar();//用来添加菜单的 //实例化菜单 //第一个菜单及其子菜单 JMenu first=new JMenu("系统管理"); first.setFont(font); //添加子菜单 JMenuItem password=new JMenuItem("修改密码"); password.setFont(font); JMenuItem exit=new JMenuItem("退出程序"); exit.setFont(font); password.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //弹出一个新的窗口 } }); exit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0);//退出程序 } }); first.add(password); first.add(exit); //第二个菜单及其子菜单 JMenu second=new JMenu("增加信息"); second.setFont(font); //添加子菜单 JMenuItem empM=new JMenuItem("增加员工信息"); empM.setFont(font); JMenuItem deptM=new JMenuItem("增加部门信息"); deptM.setFont(font); empM.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("增加员工信息"); } }); deptM.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new DeptAddManager(model); } }); second.add(empM); second.add(deptM); //第三个菜单及其子菜单 JMenu third=new JMenu("信息查询"); third.setFont(font); //添加子菜单 JMenuItem deptS=new JMenuItem("部门信息查询"); deptS.setFont(font); JMenuItem empS=new JMenuItem("员工信息查询"); empS.setFont(font); third.add(deptS); third.add(empS); deptS.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //显示部门信息列表 cardLayout.show(getContentPane(),"dept"); } }); empS.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //显示员工信息列表 cardLayout.show(getContentPane(),"emp"); } }); //第四个菜单及其子菜单 JMenu forth=new JMenu("帮组"); forth.setFont(font); //第五个菜单及其子菜单 JMenu fifth=new JMenu("关于"); fifth.setFont(font); //将菜单放入JMenuBar李 jMenuBar.add(first); jMenuBar.add(second); jMenuBar.add(third); jMenuBar.add(forth); jMenuBar.add(fifth); setJMenuBar(jMenuBar);//将菜单添加到左上方 } public static void main(String[] args) { new Main(); } }
运行截图:
服务端:
1.DeptDao类
package com.zbdx.dao; import com.zbdx.util.DBUtils; import javax.swing.table.DefaultTableModel; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Vector; //持久层代码编写 public class DeptDao { //查询全部部门信息 public static String getAllDepts(String content){ //给客户端返回的字符串 String data = ""; try { //获取数据库连接对象 Connection connection = DBUtils.getConnection(); //编写sql语句 String sql = ""; String[] item = content.split("%"); if(item.length == 2){//根据闭门编号查询数据 sql = "select * from dept where deptno like '%"+item[1]+"%'"; }else if(item.length == 3){ sql = "select * from dept where deptno like '%"+item[1]+"%' and dname like '%"+item[2]+"%'"; }else{ sql = "select * from dept"; } //获取sql语句的对象 PreparedStatement pst = connection.prepareStatement(sql); //执行sql语句 ResultSet resultSet = pst.executeQuery();//查询的结果集 //从结果集中获取数据 while(resultSet.next()){ data += resultSet.getString("deptno")+","+resultSet.getString("dname")+","+resultSet.getString("ddate") +","+resultSet.getString("dloc")+"%"; } System.out.println(data); //释放自愿 DBUtils.close(connection,pst,resultSet); } catch (SQLException ex) { ex.printStackTrace(); } return data; } //查询全部部门信息 public static int addDept(String content){ //给客户端返回的结果 int result = 0; try { //获取数据库连接对象 Connection connection = DBUtils.getConnection(); String[] item = content.split("%"); //编写sql语句 String sql = "insert into dept values(?,?,?,?)"; //获取sql语句的对象 PreparedStatement pst = connection.prepareStatement(sql); //设置参数内容 pst.setInt(1,Integer.parseInt(item[1])); pst.setString(2,item[2]); pst.setString(3,item[3]); pst.setString(4,item[4]); //执行sql语句 result = pst.executeUpdate();//执行添加操作 //释放自愿 DBUtils.close(connection,pst,null); } catch (SQLException ex) { ex.printStackTrace(); } return result; } }
2.EmpDao类
3.ManagerDao类
4.Server类
package com.zbdx.server; import com.zbdx.dao.DeptDao; import com.zbdx.dao.EmpDao; import com.zbdx.dao.ManagerDao; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws IOException { //实例化服务端的对象 ServerSocket server = new ServerSocket(7777); //接收多个客户端的连接请求 boolean flag = true; while(flag){ System.out.println("服务端已经启动,等待客户端的连接:"); //等待客户端的连接 Socket client = server.accept(); System.out.println("有客户端连接了服务端-->"+client); //获取客户端的对象的输入输出流对象 PrintStream printStream = new PrintStream(client.getOutputStream()); BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));//获取字节输入流对应的缓冲流对象 //一直保持和客户端的通信 //处理业务(接收客户端发送的数据) String data = reader.readLine();//读取客户端发送过来的数据 System.out.println("客户端发送的数据为--->"+data); //根据客户端发送过来的数据做出数据库的相关执行操作 String[] content = data.split("%");//拆分客户端发送过来的字符串 String tag = content[0];//获取第一个字符串---用来判断呀执行的操作 //定义字符串给客户端输出 String result = ""; if("login".equals(tag)){//执行登录操作 result = String.valueOf(ManagerDao.login(content[1],content[2])); }else if("getAllDepts".equals(tag)){ result = DeptDao.getAllDepts(data);//获取所有部门的信息 }else if("addDept".equals(tag)){ result = DeptDao.addDept(data)+"";//获取所有员工的信息 }else if("getAllEmps".equals(tag)){ result = EmpDao.getAllEmps(data);//获取所有员工的信息 } printStream.println(result);//将查询结果返回给客户端 //释放资源 printStream.close(); reader.close(); client.close(); } } }
运行截图:
5.DBUtils类
package com.zbdx.util; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; //封装连接与关闭的工具类 public class DBUtils { private static String url = ""; private static String username = ""; private static String password = ""; //静态代码块 只执行一次 static { InputStream inputStream = DBUtils.class.getClassLoader().getResourceAsStream("com/zbdx/util/jdbc.properties"); Properties properties = new Properties(); try { properties.load(inputStream); url = properties.getProperty("url"); username = properties.getProperty("username"); password = properties.getProperty("password"); try { Class.forName("java.sql.Driver"); // Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } System.out.println(); } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url,username,password); } public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){ //6.释放资源 Connection,PreparedStatement,ResultSet,释放时需从后往前 先创建的最后释放 //如果connection,preparedStatement,resultSet对象为 null 触发JVM GC(垃圾回收机制) 过一会自动回收 if (resultSet != null) { try { //释放 resultSet.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (preparedStatement != null) { try { preparedStatement.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if (resultSet != null) { try { resultSet.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } public static void main(String[] args) throws SQLException { System.out.println( DBUtils.getConnection()); } }