第三篇 javase实现图书馆管理系统

文章转载,自己研究了一天,最终加上自己的分析,分享给大家

我觉得还是思维很重要

废话不多说,贴上 大家仔细看噢!


package com.sms3;
/*
 * 此类是运行类
 * 此段代码布局窗体组件,并且给一次窗体的(各个)按钮增添了事件监听器
 * 点击"添加"立即关联到 StuAddDialog这个类,二次窗体组件。
 */
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class StudentManage extends JFrame implements ActionListener
{
  /**
   * @param args
   */
  public static void main(String[] args)
  {
    // TODO Auto-generated method stub
    new StudentManage();
  }

  //========面板控件
  private JLabel queryLab = null;
  private JTextField queryTxt = null;
  private JButton queryBtn = null;
  private JButton allBtn = null;
  private JTable resultTb = null;
  private JScrollPane jsp = null;
  private JButton addBtn = null;
  private JButton deleteBtn = null;
  private JButton updateBtn = null;
  private JPanel top = null;
  private JPanel bottom = null;
  //========
  private StuModel sm = null;
 
  //构造函数
  public StudentManage()
  {
    /***************************初始化面板控件***********************/
    //========查询栏
    queryLab = new JLabel("请输入姓名:");
    queryTxt = new JTextField(10);
    queryBtn = new JButton("查询");
    allBtn = new JButton("全部");
    //......添加查询栏监听
    queryBtn.addActionListener(this);
    queryBtn.setActionCommand("query");
    allBtn.addActionListener(this);
    allBtn.setActionCommand("all");
    //========增删改栏
    addBtn = new JButton("添加");
    deleteBtn = new JButton("删除");
    updateBtn = new JButton("修改");
    //......添加增删改栏监听
    addBtn.addActionListener(this);
    addBtn.setActionCommand("add");
    deleteBtn.addActionListener(this);
    deleteBtn.setActionCommand("delete");
    updateBtn.addActionListener(this);
    updateBtn.setActionCommand("update");
    //========创建窗口整体布局
    //......顶层查询栏
    top = new JPanel();
    top.add(queryLab);
    top.add(queryTxt);
    top.add(queryBtn);
    top.add(allBtn);
    //......底层增删改栏
    bottom = new JPanel();
    bottom.add(addBtn);
    bottom.add(deleteBtn);
    bottom.add(updateBtn);
    //......中间层显示栏
    sm = new StuModel();
    String sql = "select * from stu";
    sm.queryStu(sql, null);
    resultTb = new JTable(sm);
    jsp = new JScrollPane(resultTb);
    //......构建整体布局
    this.add(top,BorderLayout.NORTH);
    this.add(jsp,BorderLayout.CENTER);
    this.add(bottom,BorderLayout.SOUTH);
    //========设置窗口属性
    this.setSize(400, 300);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    this.setResizable(false);
  }
 
  //监听
  @Override
  public void actionPerformed(ActionEvent e)
  {
    // TODO Auto-generated method stub
    if(e.getActionCommand().equals("query")) {
      /*********************查询***********************/
      //========获取输入学生的姓名
      String name = queryTxt.getText().trim();//方法trim()整理,排序
      if(name.length() != 0) {
        //========姓名输入有效时,执行查询
        //......定义参数
        String sql = "select * from stu where stuName=?";
        String []paras = {name};
        //......更新模型
        jtableUpdate(sql, paras);
      } else {
        //========姓名为空时,设置提醒
        JOptionPane.showMessageDialog(this, "姓名输入不能为空");
      }
    } else if(e.getActionCommand().equals("add")) {
      /*********************添加***********************/
      new StuAddDialog(this, "添加学生信息", true);
      String sql = "select * from stu";
      jtableUpdate(sql, null);
    } else if(e.getActionCommand().equals("all")) {
      /*********************全部显示***********************/
      String sql = "select * from stu";
      jtableUpdate(sql, null);
    } else if(e.getActionCommand().equals("delete")) {
      /*********************删除***********************/
      //========获取选择行号
      int rowNum = this.resultTb.getSelectedRow();
      if(rowNum == -1) {
        JOptionPane.showMessageDialog(this, "请选择一行");
        return ;
      }
      //========获取学生ID号
      String stuId = (String)sm.getValueAt(rowNum, 0);
      //========删除学生
      String sql = "delete from stu where stuId=?";
      String []paras = {stuId};
      StuModel tmp = new StuModel();
      tmp.cudStu(sql, paras);
      //========更新模型
      sql = "select * from stu";
      jtableUpdate(sql, null);
    } else if(e.getActionCommand().equals("update")) {
      /*********************修改***********************/
      //========获取选择行号
      int rowNum = this.resultTb.getSelectedRow();
      if(rowNum == -1) {
        JOptionPane.showMessageDialog(this, "请选择一行");
        return ;
      }
      new StuUpdateDialog(this, "修改学生信息", true, sm, rowNum);
      String sql = "select * from stu";
      jtableUpdate(sql, null);
    }
  }
 
  //========更新JTable内数据
  public void jtableUpdate(String sql, String[] paras)
  {
    //......创建模型
    sm = new StuModel();
    sm.queryStu(sql, paras);
    //......更新显示
    resultTb.setModel(sm);
  }

}


package com.sms3;
/*
 * 此类主要是和sql server实现交互连接
 * 并且分别写了两个方法,一个查询,一个修改(数据库表--col列名)
 */
import java.sql.*;

public class SqlHelper {
    // ========数据库
    private Connection ct = null;
    private PreparedStatement ps = null;
    private ResultSet rs = null;
    private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";

    /*
     *private String url ="jdbc:sqlserver://localhost:1433;database=studentMan";
     *private String user= "sa";
     *private String passwd = "sql";
     */
    // ========查询
    public ResultSet queryExecute(String sql, String[] paras) {
        try {
            // ========1、加载驱动
            Class.forName(driver);
            // ========2、连接
            ct = DriverManager.getConnection(
                    "jdbc:sqlserver://localhost:1433;database=studentMan",
                    "sa", "sql");
            // ========3、创建PreparedStatement
            ps = ct.prepareStatement(sql);
            // ========4、给问号赋值
            if (paras != null) {
                for (int i = 0; i < paras.length; i++) {
                    ps.setString(i + 1, paras[i]);
                }
            }
            // ========5、执行
            rs = ps.executeQuery();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            // this.close();
        }
        // ========返回值
        return rs;
    }

    // ========增删改
    public boolean cudExecute(String sql, String[] paras) {
        boolean b = true;
        try {
            // ========1、加载驱动
            Class.forName(driver);
            // ========2、连接
            ct = DriverManager.getConnection(
                    "jdbc:sqlserver://localhost:1433;database=studentMan",
                    "sa", "sql");
            // ========3、创建PreparedStatement
            ps = ct.prepareStatement(sql);
            // ========4、给问号赋值
            for (int i = 0; i < paras.length; i++) {
                ps.setString(i + 1, paras[i]);
            }
            // ========5、执行
            if (ps.executeUpdate() != 1)
                b = false;
        } catch (Exception e) {
            // TODO: handle exception
            b = false;
            e.printStackTrace();
        } finally {
            this.close();
        }
        // ========返回值
        return b;
    }

    // ========关闭资源
    public void close() {
        try {
            if (rs != null)
                rs.close();
            if (ps != null)
                ps.close();
            if (ct != null)
                ct.close();
        } catch (Exception e2) {
            // TODO: handle exception
            e2.printStackTrace();
        }
    }

}



package com.sms3;
/*
 * 此代码主要是二次窗体组件
 * 实现了向数据库添加信息的界面,并抛出异常
 *
 */
import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class StuAddDialog extends JDialog implements ActionListener{
  //=========面板控件
  //......左侧标题栏
  private JLabel idLab,nameLab,sexLab,ageLab,jgLab,deptLab;
  //......右侧信息选择填写栏
  private JTextField idTxt,nameTxt,sexTxt,ageTxt,jgTxt,deptTxt;
  //......添加和取消按钮
  private JButton addBtn,cancelBtn;
  //......布局控件
  private JPanel left,center,bottom;
 
  //构造函数
  public StuAddDialog(Frame owner, String title, boolean modal)
  {
    //========重写父类方法
    super(owner, title, modal);
    //========左侧标签栏
    idLab = new JLabel("学号: ");
    nameLab = new JLabel("姓名: ");
    sexLab = new JLabel("性别: ");
    ageLab = new JLabel("年龄: ");
    jgLab = new JLabel("籍贯: ");
    deptLab = new JLabel("系别: ");
    //========右侧信息填写栏
    idTxt = new JTextField();
    nameTxt = new JTextField();
    sexTxt = new JTextField();
    ageTxt = new JTextField();
    jgTxt = new JTextField();
    deptTxt = new JTextField();
    //========添加和取消按钮
    addBtn = new JButton("添加");
    cancelBtn = new JButton("取消");
    //......添加监听
    addBtn.addActionListener(this);
    addBtn.setActionCommand("add");
    cancelBtn.addActionListener(this);
    cancelBtn.setActionCommand("cancel");
    //========创建布局
    //......创建左边栏
    left = new JPanel();
    left.setLayout(new GridLayout(6, 1));
    left.add(idLab);  left.add(nameLab);
    left.add(sexLab); left.add(ageLab);
    left.add(jgLab);  left.add(deptLab);
    //......创建右边栏
    center = new JPanel();
    center.setLayout(new GridLayout(6, 1));
    center.add(idTxt);  center.add(nameTxt);
    center.add(sexTxt); center.add(ageTxt);
    center.add(jgTxt);  center.add(deptTxt);
    //========底层添加和取消按钮
    bottom = new JPanel();
    bottom.add(addBtn);
    bottom.add(cancelBtn);
    //========整体布局
    this.add(left,BorderLayout.WEST);
    this.add(center,BorderLayout.CENTER);
    this.add(bottom,BorderLayout.SOUTH);
    //========设置窗口属性
    
    this.setSize(300, 250);
    this.setResizable(false);
    this.setVisible(true);
  }

  @Override
  public void actionPerformed(ActionEvent e)
  {
    // TODO Auto-generated method stub
    if(e.getActionCommand().equals("add")) {
      /***********************添加学生信息**************************/
      StuModel tmp = new StuModel();
      String sql = "insert into stu values(?,?,?,?,?,?)";
      String []paras = {idTxt.getText(),nameTxt.getText(),sexTxt.getText(),
              ageTxt.getText(),jgTxt.getText(),deptTxt.getText()};
      if(!tmp.cudStu(sql, paras))
        JOptionPane.showMessageDialog(this, "添加学生信息失败");
      //========关闭窗口
      this.dispose();
    } else if(e.getActionCommand().equals("cancel")) {
      //========关闭窗口
      this.dispose();
    }
  }
}


package com.sms3;
/*
 * 此段代码是二次窗体组件
 * 1,监听输入的动作
 * 2.如果数据添加成功  立即跳转一次窗体组件,显示添加内容
 */
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;

public class StuModel extends AbstractTableModel{//model模拟
  private Vector columnNames;//Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。
  private Vector rowDates;
  //
  public StuModel()//构造函数
  {
    String sql = "select * from stu";
    String []paras = {};
    
  }
 
  //========增删改学生
  public boolean cudStu(String sql, String []paras)
  {
    return new SqlHelper().cudExecute(sql, paras);
  }
 
  //========查询学生
  public void queryStu(String sql, String []paras)
  {
    SqlHelper sqlHelper = null;
    //========初始化JTable信息
    columnNames = new Vector();
    rowDates = new Vector();
    columnNames.add("学号"); columnNames.add("名字");
    columnNames.add("性别"); columnNames.add("年龄");
    columnNames.add("籍贯"); columnNames.add("系别");
    
    try {
      sqlHelper = new SqlHelper();
      ResultSet rs = sqlHelper.queryExecute(sql, paras);
      while(rs.next()) {
        Vector row = new Vector();
        row.add(rs.getString(1));
        row.add(rs.getString(2));
        row.add(rs.getString(3));
        row.add(rs.getString(4));
        row.add(rs.getString(5));
        row.add(rs.getString(6));
        rowDates.add(row);
      }
    } catch (Exception e) {
      // TODO: handle exception
    } finally {
      sqlHelper.close();
    }
    
  }

  @Override
  public int getColumnCount() {
    // TODO Auto-generated method stub
    return this.columnNames.size();
  }

  @Override
  public int getRowCount() {
    // TODO Auto-generated method stub
    return this.rowDates.size();
  }

  @Override
  public Object getValueAt(int row, int col) {
    // TODO Auto-generated method stub
    if(!rowDates.isEmpty())
      return ((Vector)this.rowDates.get(row)).get(col);
    else
      return null;
  }

 
  @Override
  public String getColumnName(int column) {
    // TODO Auto-generated method stub
    return (String)this.columnNames.get(column);
  }

 
}




package com.sms3;
/*
 * 此段代码是"修改"按钮所触发的事件 窗体组件
 * 具体到二次窗体组件的布局
 * 最后使用判断句,如果修改成功成功跳转,如果失败跳出"修改学生信息失败"的字样。
 */

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;

public class StuUpdateDialog extends JDialog implements ActionListener{
  //=========面板控件
  //......左侧标题栏
  private JLabel idLab,nameLab,sexLab,ageLab,jgLab,deptLab;
  //......右侧信息选择填写栏
  private JTextField idTxt,nameTxt,sexTxt,ageTxt,jgTxt,deptTxt;
  //......添加和取消按钮
  private JButton addBtn,cancelBtn;
  //......布局控件
  private JPanel left,center,bottom;
 
  //构造函数
  public StuUpdateDialog(Frame owner, String title, boolean modal, StuModel sm, int rowNum)
  {
    //========重写父类方法
    super(owner, title, modal);
    //========左侧标签栏
    idLab = new JLabel("学号: ");
    nameLab = new JLabel("姓名: ");
    sexLab = new JLabel("性别: ");
    ageLab = new JLabel("年龄: ");
    jgLab = new JLabel("籍贯: ");
    deptLab = new JLabel("系别: ");
    //========右侧信息填写栏
    idTxt = new JTextField();    
    idTxt.setText((String)sm.getValueAt(rowNum, 0));
    idTxt.setEditable(false);
    nameTxt = new JTextField();
    nameTxt.setText((String)sm.getValueAt(rowNum, 1));
    sexTxt = new JTextField();
    sexTxt.setText((String)sm.getValueAt(rowNum, 2));
    ageTxt = new JTextField();
    ageTxt.setText((String)sm.getValueAt(rowNum, 3));
    jgTxt = new JTextField();
    jgTxt.setText((String)sm.getValueAt(rowNum, 4));
    deptTxt = new JTextField();
    deptTxt.setText((String)sm.getValueAt(rowNum, 5));
    //========添加和取消按钮
    addBtn = new JButton("修改");
    cancelBtn = new JButton("取消");
    //......添加监听
    addBtn.addActionListener(this);
    addBtn.setActionCommand("update");
    cancelBtn.addActionListener(this);
    cancelBtn.setActionCommand("cancel");
    //========创建布局
    //......创建左边栏
    left = new JPanel();
    left.setLayout(new GridLayout(6, 1));
    left.add(idLab);  left.add(nameLab);
    left.add(sexLab); left.add(ageLab);
    left.add(jgLab);  left.add(deptLab);
    //......创建右边栏
    center = new JPanel();
    center.setLayout(new GridLayout(6, 1));
    center.add(idTxt);  center.add(nameTxt);
    center.add(sexTxt); center.add(ageTxt);
    center.add(jgTxt);  center.add(deptTxt);
    //========底层添加和取消按钮
    bottom = new JPanel();
    bottom.add(addBtn);
    bottom.add(cancelBtn);
    //========整体布局
    this.add(left,BorderLayout.WEST);
    this.add(center,BorderLayout.CENTER);
    this.add(bottom,BorderLayout.SOUTH);
    //========设置窗口属性
    
    this.setSize(300, 250);
    this.setResizable(false);
    this.setVisible(true);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    if(e.getActionCommand().equals("update")) {
    /***********************修改学生信息**************************/
      StuModel tmp = new StuModel();
      String sql = "update stu set stuName=?,stuSex=?,stuAge=?,stuJg=?,stuDept=? where stuId=?";
      String []paras = {nameTxt.getText(),sexTxt.getText(),ageTxt.getText(),
              jgTxt.getText(),deptTxt.getText(),idTxt.getText()};
      if(!tmp.cudStu(sql, paras))
        JOptionPane.showMessageDialog(this, "修改学生信息失败");
      //========关闭窗口
      this.dispose();
    } else if(e.getActionCommand().equals("cancel")) {
      //========关闭窗口
      this.dispose();
    }
  }
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值