学生管理系统

本文介绍了一个使用Java Swing开发的学生信息管理系统,该系统实现了增删改查等功能,并通过JTable展示学生数据。系统包括主界面、数据库操作类、模型类、添加功能类及更新类等模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、主界面
package com.meng;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.*;

import java.awt.event.*;

public class StuMan extends JFrame implements ActionListener {

/**
 * 1、与mysql数据库交互实现信息展示功能。 2、增加增删改查按钮。3、实现监听(查询功能)。
 */

Vector rowData, columnNames, row;

JScrollPane jsp = null;

JTable jt = null;

JPanel jp1, jp2;
JLabel jl1;
JTextField jtf1;
JButton jb1, jb2, jb3, jb4;

Model sm = null;

// 定义连接数据库所需元素
Connection conn = null;
Statement stat = null;
ResultSet rs = null;

// String url = “jdbc:mysql://127.0.0.1:3306/stu”;
// String username = “root”;
// String password = “”;

public static void main(String[] args) {
    // TODO 自动生成的方法存根

    StuMan stu5 = new StuMan();
}

public StuMan() {

    columnNames = new Vector();

    // 设置列名
    columnNames.add("学号");
    columnNames.add("姓名");
    columnNames.add("年龄");

    // 初始化按钮,设置按钮名称
    jb1 = new JButton("查询");
    jb2 = new JButton("添加");
    jb3 = new JButton("修改");
    jb4 = new JButton("删除");

    // 初始化标签
    jl1 = new JLabel("请输入要查询的姓名:");

    // 初始化文本域
    jtf1 = new JTextField(5);

    // 讲jb1,jtf1,jb1放入jp1中,放入之前要newjp
    jp1 = new JPanel();
    jp1.add(jl1);
    jp1.add(jtf1);
    jp1.add(jb1);

    // 讲jb2,jb3,jb4放入jp2中,放入之前要newjp
    jp2 = new JPanel();
    jp2.add(jb2);
    jp2.add(jb3);
    jp2.add(jb4);

    // 初始化columnsName。

// columnsName = new Vector();
// columnsName.add(“学号”);
// columnsName.add(“姓名”);
// columnsName.add(“年龄”);

    rowData = new Vector();
    SqlHelper sh = new SqlHelper();

    ResultSet rs=sh.query("select * from stuInfo", null);

    try {
        while(rs.next()){

            row = new Vector();
            row.add(rs.getInt(1));
            row.add(rs.getString(2));
            row.add(rs.getInt(3));

            rowData.add(row);
        }
    } catch (SQLException e) {
        // TODO 自动生成的 catch块
        e.printStackTrace();
    } 

    // //初始化JTable
    jt = new JTable(rowData, columnNames);
    // 初始化JSrollPane。
    jsp = new JScrollPane(jt);

    // 讲JScrollPane放入JFrame中
    this.add(jsp);

    // 讲jp1,jp2放入JFrame中
    this.add(jp1, BorderLayout.NORTH);
    this.add(jp2, BorderLayout.SOUTH);

    // 添加监听事件
    // jb1.setActionCommand("查询");
    jb1.addActionListener(this);
    jb2.setActionCommand("添加");
    jb2.addActionListener(this);
    jb3.setActionCommand("修改");
    jb3.addActionListener(this);
    jb4.setActionCommand("删除");
    jb4.addActionListener(this);

    this.setTitle("学生管理系统V1.0");
    this.setSize(300, 400);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public void updateSModel() {
    sm = new Model();
    sm.queryStu("select * from stuInfo", null);
    //jt.setModel(sm);
}

@Override
public void actionPerformed(ActionEvent e) {
    // TODO 自动生成的方法存根
    // if (e.getActionCommand().equals("查询")) {
    // System.out.println("查询按钮被按下!");
    //
    // } 或者下面一种方式:
    if (e.getSource() == jb1) {
        System.out.println("查询按钮被按下!");



        // 执行查询操作
        String sql = "";
        // 1、获取文本框中的姓名值
        String s = jtf1.getText().trim();
        String[] name = {s};

//
//
// 2、判断匹配
if (s.length() != 0) {
sql = “select * from stuInfo where stuName=?”;
//System.out.println(“Test”);

        } else {
            sql = "select * from stuInfo";
            name=null;
        }

// sm = new Stu5Model();
// //sm.queryStu(sql, name);
// sm.queryStu(“select * from stuInfo”, name);

        System.out.print("aa");
        //jt.setModel(sm);
        SqlHelper sh1 = new SqlHelper();
        rs = sh1.query(sql, name);
        try {
            while(rs.next()){

                row = new Vector();
                row.add(rs.getInt(1));
                row.add(rs.getString(2));
                row.add(rs.getInt(3));

                rowData.add(row);
            }


        } catch (SQLException ee) {
            // TODO 自动生成的 catch块
            ee.printStackTrace();
        } 
        jt=new JTable(rowData,columnNames);
        jsp.add(jt);
        this.add(jsp);
        jtf1.setText("");

    }
    if (e.getSource()==jb2) {
        System.out.println("添加按钮被按下!");
        boolean flag = false;
        //确定是否添加新的学生
        int i = JOptionPane.showConfirmDialog(this, "是否添加学生?","",JOptionPane.YES_NO_OPTION);

        if(i!=JOptionPane.NO_OPTION){
            flag=true;
        }
        while(flag){
            StuAdd sa = new StuAdd(this, "添加新学生", true);

            //更新数据模型
            this.updateSModel();


        }
    }
    if (e.getActionCommand().equals("修改")) {
        System.out.println("修改按钮被按下!");

        if(jt.getSelectedRow()==-1){
            JOptionPane.showMessageDialog(this, "请先选择一行数据");
            return;
        }else {
            int i = jt.getSelectedRow();
            sm=new Model();
            sm.queryStu("select * from stuinfo", null);
            StuUpdate su = new StuUpdate(this, "修改学生信息", true, sm, i);

        }

    }
    if (e.getActionCommand().equals("删除")) {
        System.out.println("删除按钮被按下!");
        if(jt.getSelectedRow()==-1){
            JOptionPane.showMessageDialog(this, "请先选择一行数据");
            return;
        } else {
            int selectId = jt.getSelectedRow();
            String[] stuId = {jt.getValueAt(selectId, 0).toString()};
            String sql = "delete from stuInfo where stuNo=?";

            sm=new Model();
            sm.updateStu(sql, stuId);

            this.updateSModel();

        }
    }
}

}
2、数据库操作类 SqlHelper
/*
* 数据库操作模型
*/
package com.meng;

import java.sql.*;

public class SqlHelper {

public static final String DRIVER = "com.mysql.jdbc.Driver";//Driver,D必须大写!
public static final String URL = "jdbc:mysql://127.0.0.1:3306/stu";
public static final String USERNAME = "root";
public static final String PASSWORD = "";

// 定义连接数据库的元素(组件)
Connection conn;
PreparedStatement ps;
ResultSet rs;

// 构造函数
public SqlHelper() {

    // 连接数据库
    try {
        Class.forName(DRIVER);
        conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
    } catch (Exception e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
    }

}

// 对数据库进行增删改操作。
public boolean upSql(String sql, String[] args) {
    boolean b = true;

    try {
        ps = conn.prepareStatement(sql);
        for (int i = 0; i < args.length; i++) {
            ps.setString(i + 1, args[i]);

        }
        ps.executeUpdate();
    } catch (SQLException e) {
        // TODO 自动生成的 catch块
        e.printStackTrace();
    }

    return b;
}

// 对数据库进行查询操作。
public ResultSet query(String sql, String[] args) {

    try {
        ps = conn.prepareStatement(sql);
        if (args == null) {
            rs = ps.executeQuery();

        } else {
            for (int i = 0; i < args.length; i++) {

                ps.setString(i + 1, args[i]);
                rs = ps.executeQuery();

            }
        }
    } catch (SQLException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
    }

    return rs;
}

// 关闭资源

public void close() {

    try {
        if (rs != null)
            rs.close();
        if (ps != null)
            ps.close();
        if (conn != null)
            conn.close();
    } catch (SQLException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
    }

}

}
3、模式model类
package com.meng;

import java.util.Vector;
import java.sql.*;

import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

public class Model implements TableModel {

/**
 * @Model
 */

Vector rowData, columnsName, row;
SqlHelper sh;
ResultSet rs;

/*
 * 查询数据
 */
public void queryStu(String sql, String[] args) {
    // 初始化columnsName。

// columnsName = new Vector();
// columnsName.add(“学号”);
// columnsName.add(“姓名”);
// columnsName.add(“年龄”);

    rowData = new Vector();
    sh = new SqlHelper();

    rs=sh.query(sql, args);

    try {
        while(rs.next()){

            row = new Vector();
            row.add(rs.getInt(1));
            row.add(rs.getString(2));
            row.add(rs.getInt(3));

            rowData.add(row);
        }
    } catch (SQLException e) {
        // TODO 自动生成的 catch块
        e.printStackTrace();
    } 
    sh.close();

}

/*
 * 增删改操作
 */
public boolean updateStu(String sql,String[] args){
    boolean b = false;

    sh=new SqlHelper();
    b=sh.upSql(sql, args);

    return b;
}

//得到共有多少列

// public int getColumnCount(){
// return this.columnsName.size();
// }

//得到共有多少行
public int getRowCount(){
    return this.rowData.size();
}

//得到某行某列的值
public Object getValueAt(int rowIndex,int columnIndex){
    //return this.rowData.get(rowIndex);
    return ((Vector) this.rowData.get(rowIndex)).get(columnIndex);

}
public String getColumnName(int index) {
    // TODO Auto-generated method stub
    return this.columnsName.get(index).toString();
}

@Override
public void addTableModelListener(TableModelListener arg0) {
    // TODO 自动生成的方法存根

}

@Override
public Class<?> getColumnClass(int arg0) {
    // TODO 自动生成的方法存根
    return null;
}

@Override
public boolean isCellEditable(int arg0, int arg1) {
    // TODO 自动生成的方法存根
    return false;
}

@Override
public void removeTableModelListener(TableModelListener arg0) {
    // TODO 自动生成的方法存根

}

@Override
public void setValueAt(Object arg0, int arg1, int arg2) {
    // TODO 自动生成的方法存根

}

@Override
public int getColumnCount() {
    // TODO 自动生成的方法存根
    return this.columnsName.size();
}

}
4、添加功能 StuAdd
package com.meng;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class StuAdd extends JDialog implements ActionListener {

JPanel jp1, jp2, jp3;
JLabel jlNo, jlName, jlAge;
JTextField jtfNo, jtfName, jtfAge;
JButton jbsave, jbcancel;

Model sm = null;

// public static void main(String[] args) {
//
// JFrame owner = null;
// Stu5Add sm5 = new Stu5Add(owner, “hehe”, true);
//
// }

// 构造函数
public StuAdd(JFrame owner, String title, boolean model) {

    super(owner, "title", true);

    // 创建组件
    jp1 = new JPanel(new GridLayout(5, 1));
    jp2 = new JPanel(new GridLayout(5, 1));
    jp3 = new JPanel(new GridLayout(5, 1));

    jlNo = new JLabel("学号", JLabel.CENTER);
    jlName = new JLabel("姓名", JLabel.CENTER);
    jlAge = new JLabel("年龄", JLabel.CENTER);

    jtfNo = new JTextField(15);
    jtfName = new JTextField(15);
    jtfAge = new JTextField(15);

    jbsave = new JButton("保存");
    jbcancel = new JButton("取消");

    jp1.add(jlNo, BorderLayout.NORTH);
    jp1.add(jlName, BorderLayout.CENTER);
    jp1.add(jlAge, BorderLayout.SOUTH);

    jp2.add(jtfNo);
    jp2.add(jtfName);
    jp2.add(jtfAge);

    jp3.add(jbsave, BorderLayout.WEST);
    jp3.add(jbcancel, BorderLayout.EAST);

    this.add(jp1, BorderLayout.WEST);
    this.add(jp2, BorderLayout.EAST);
    this.add(jp3, BorderLayout.SOUTH);

    jbcancel.addActionListener(this);
    jbsave.addActionListener(this);

    this.setSize(400, 300);
    this.setLocation(100, 300);
    this.setVisible(true);
    // this.dispose();


}

@Override
public void actionPerformed(ActionEvent e) {
    // TODO 自动生成的方法存根
    if (e.getSource() == jbsave) {
        String[] values = { jtfNo.getText().trim(),
                jtfName.getText().trim(), jtfAge.getText().trim() };
        String sql = "insert into stuinfo values(?,?,?)";
        sm = new Model();
        System.out.println("保存按钮被按下!");
        System.out.println(values[1]);

        sm.updateStu("insert into stuinfo values(?,?,?)", values);
        this.dispose();
    }
    if (e.getSource() == jbcancel) {
        System.out.print("取消按钮被按下!");
        this.dispose();
        //this.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);

// this.addWindowListener(new WindowAdapter() {
// public void windowClosing(WindowEvent e) {
// dispose();
// System.out.print(“qqq!”);
// }
// });
}
}
}
5、更新类(删除、修改) update
package com.meng;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class StuUpdate extends JDialog implements ActionListener {

JPanel jp1, jp2, jp3;
JLabel jlNo, jlName, jlAge;
JTextField jtfNo, jtfName, jtfAge;
JButton jbsave, jbcancel;

Model sm = null;

// public static void main(String[] args) {
//
// JFrame owner = null;
// Stu5Up sm5 = new Stu5Up(owner, "hehe",sm,1);
//
// }

// 构造函数
public StuUpdate(JFrame owner, String title, boolean model, Model sm,
        int idValue) {

    super(owner, title, model);

    // 创建组件
    jp1 = new JPanel(new GridLayout(5, 1));
    jp2 = new JPanel(new GridLayout(5, 1));
    jp3 = new JPanel(new GridLayout(5, 1));

    jlNo = new JLabel("学号", JLabel.CENTER);
    jlName = new JLabel("姓名", JLabel.CENTER);
    jlAge = new JLabel("年龄", JLabel.CENTER);

    jtfNo = new JTextField(15);
    jtfNo.setText(sm.getValueAt(idValue, 0).toString());
    jtfNo.setEditable(false);

    jtfName = new JTextField(15);
    jtfName.setText(sm.getValueAt(idValue, 1).toString());
    // jtfName.setEditable(false);

    jtfAge = new JTextField(15);
    jtfAge.setText(sm.getValueAt(idValue, 2).toString());
    // jtfAge.setEditable(false);

    jbsave = new JButton("保存");
    jbcancel = new JButton("取消");

    jp1.add(jlNo, BorderLayout.NORTH);
    jp1.add(jlName, BorderLayout.CENTER);
    jp1.add(jlAge, BorderLayout.SOUTH);

    jp2.add(jtfNo);
    jp2.add(jtfName);
    jp2.add(jtfAge);

    jp3.add(jbsave, BorderLayout.WEST);
    jp3.add(jbcancel, BorderLayout.EAST);

    this.add(jp1, BorderLayout.WEST);
    this.add(jp2, BorderLayout.EAST);
    this.add(jp3, BorderLayout.SOUTH);

    jbcancel.addActionListener(this);
    jbsave.addActionListener(this);

    this.setSize(400, 300);
    this.setLocation(100, 300);
    this.setVisible(true);
    // this.dispose();

}

@Override
public void actionPerformed(ActionEvent e) {
    // TODO 自动生成的方法存根
    if (e.getSource() == jbsave) {
        String[] values = { jtfName.getText().trim(),
                jtfAge.getText().trim(), jtfNo.getText().trim() };
        String sql = "update stuinfo set stuName=?,stuAge=? where stuNo=?";
        sm = new Model();
        System.out.println("保存按钮被按下!");
        System.out.println(values[1]);

        sm.updateStu(sql, values);
        this.dispose();
    }
    if (e.getSource() == jbcancel) {
        System.out.print("取消按钮被按下!");
        this.dispose();
        // this.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
        // this.addWindowListener(new WindowAdapter() {
        // public void windowClosing(WindowEvent e) {
        // dispose();
        // System.out.print("qqq!");
        // }
        // });
    }
}

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值