基于Java swing+MySQL实现学生信息管理系统:功能:1录入学生基本信息的功能; 2查询学生基本信息的功能; 3修改学生基本信息的功能 ;4删除学生基本信息的功能 ;5显示所有学生信息的功能;应付一般课设足矣,分享给大家。
通过百度网盘分享的文件:学生信息管理系统
链接:https://pan.baidu.com/s/1NgK0C4NAa4gyCaLdeW4GZA?pwd=bigo
提取码:bigo
复制这段内容打开「百度网盘APP 即可获取」
里面包括了所有代码源文件+mysql8.0.25驱动jar包+登录页面时的背景图345.jpg
1.开发环境:jdk11+win10+mysql 8+IDEA
记得将数据库与IDEA或者eclipse连接起来,并记得添加数据库驱动jar包
这两个分别是添加jar包和idea连接mysql大家可以做一下参考
IDEA导入mysql数据库驱动_跟着太阳.的博客-CSDN博客https://blog.csdn.net/qq_54705917/article/details/123484397?spm=1001.2014.3001.5502IDEA连接mysql数据库_跟着太阳.的博客-CSDN博客https://blog.csdn.net/qq_54705917/article/details/123484737?spm=1001.2014.3001.5502
2.数据库设计
代码:
库:create database student
表:create table stu(
stuId varchar(20),
stuName varchar(20),
stuSex varchar(20),
stuAge varchar(20),
stuJG varchar(20),
stuLX varchar(20),
stuBJ varchar(20)
);
3. 窗口及功能设计
(1).主函数
main.java
import javax.swing.*; public class main { public static void main(String[] args) { JFrame jf = new StuLogin(); } }
(2).登录界面(默认的账号密码都为:admin)
StuLogin.java
import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class StuLogin extends JFrame { private StuLogin self; private ImageIcon imageIcon; private Image image; private String userid;// 登陆用户名和密码 private String password; private JLabel unLabel = new JLabel("账号:");// 登陆面板控件 private JTextField unField = new JTextField(); private JLabel pwLabel = new JLabel("密码:"); private JPasswordField pwField = new JPasswordField(); private JButton dl = new JButton("登录"); private JButton d2 = new JButton("重置"); public StuLogin() { this.self = this; this.setSize(350, 300);// 设置登陆面板 设置窗口背景图 //先将contentPane设置成透明的 ((JPanel)getContentPane()).setOpaque(false); //再设置图片 imageIcon = new ImageIcon("345.jpg");//图标组件 image = imageIcon.getImage(); JLabel imgLabel = new JLabel(imageIcon); getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE)); imgLabel.setBounds(0,0,400,300); //背景图片的位置 this.setIconImage(image);//设置窗口图像 this.setLocation(600,300); this.setVisible(true); this.setResizable(false); this.setLayout(null); // this.getContentPane().setBackground(Color.BLACK);设置窗口背景色; //设置窗口名称 this.setTitle("学生信息管理系统"); unLabel.setSize(50, 30); unLabel.setLocation(60, 40); unLabel.setForeground(Color.red); unLabel.setFont(new Font("楷体",Font.BOLD,15)); unField.setSize(150, 35); unField.setLocation(110, 35); pwLabel.setSize(50, 30); pwLabel.setLocation(60, 100); pwLabel.setForeground(Color.red); pwLabel.setFont(new Font("楷体",Font.BOLD,15)); pwField.setSize(150, 35); pwField.setLocation(110, 100); dl.setSize(80, 35); dl.setLocation(65, 175); dl.setBackground(Color.red); d2.setSize(80, 35); d2.setLocation(185, 175); d2.setBackground(Color.red); dl.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { userid = unField.getText(); password = pwField.getText(); if(userid.equals("admin")&&password.equals("admin")) { self.setVisible(false); // JOptionPane.showMessageDialog(null, "登录成功", "登录情况",JOptionPane.PLAIN_MESSAGE); new StuManager(); } else { JOptionPane.showMessageDialog(null, "账号或密码错误!", "登录情况",JOptionPane.PLAIN_MESSAGE); } } }); d2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { unField.setText(""); pwField.setText(""); } }); this.add(unLabel); this.add(unField); this.add(pwLabel); this.add(pwField); this.add(dl); this.add(d2); } }
登录页面的背景图我会放到 上面分享的链接里
(3).管理员界面(删除功能在这里面)
StuManager.java
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; public class StuManager extends JFrame implements ActionListener { //定义一些控件 private Object[] types = {"-请选择查询方式-", "按学号号查询", "姓名查询", "性别查询","按年龄查询", "按籍贯查询","按班级查询"}; private JComboBox searchType = new JComboBox(types); //创建一个组合框用来选取查询不同的学生信息· JPanel jp1,jp2; JLabel jl1; JButton jb1,jb2,jb3,jb4; JTable jt; JScrollPane jsp; JTextField jtf1,jtf2; String strRS; StuModel sm; //定义连接数据库的变量 PreparedStatement ps; Connection ct = null; ResultSet rs = null; //构造函数 public StuManager(){ jp1 = new JPanel(); jp1.setBackground(Color.gray); jtf1 = new JTextField(15); jtf2 = new JTextField(); jtf2.setEditable(false); jb1 = new JButton("查询"); jb1.addActionListener(this); jl1 = new JLabel("总人数:"); jp1.add(searchType); jp1.add(jtf1); jp1.add(jb1); jp1.add(jl1); jp1.add(jtf2); jb2 = new JButton("添加"); jb2.setSize(100,500); jb2.addActionListener(this); jb3 = new JButton("修改"); jb3.addActionListener(this); jb4 = new JButton("删除"); jb4.addActionListener(this); jp2 = new JPanel(); jp2.add(jb2); jp2.add(jb3); jp2.add(jb4); jp2.setBackground(Color.gray); //创建模型对象 sm = new StuModel(); //初始化总人数 strRS=String.valueOf(sm.getRowCount()); jtf2.setText(strRS); //初始化表和滚动面板 jt = new JTable(sm); jsp = new JScrollPane(jt); //将jsp放入到jframe中 this.add(jsp); this.add(jp1,BorderLayout.PAGE_START); this.add(jp2,BorderLayout.PAGE_END); this.setTitle("学生信息管理系统"); // this.pack(); this.setSize(600, 400); this.setLocation(500, 200); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); } public void actionPerformed(ActionEvent arg0) { //判断是哪个按钮被点击 if(arg0.getSource() == jb1){ System.out.println("用户希望被查询..."); int index = searchType.getSelectedIndex(); String sql = new String(); if(index == 0){ sql = "select * from stu "; } else if(index == 1){ //因为把对表的数据封装到StuModel中,可以比较简单的完成查询 String Id =this.jtf1.getText().trim(); //写一个sql语句 sql = "select * from stu where stuId = '"+Id+"' "; } else if(index == 2){ String name =this.jtf1.getText().trim(); sql = "select * from stu where stuName = '"+name+"' "; } else if(index == 3){ String sex =this.jtf1.getText().trim(); sql = "select * from stu where stuSex = '"+sex+"' "; } else if(index == 4){ String age =this.jtf1.getText().trim(); sql = "select * from stu where stuAge = '"+age+"' "; } else if(index ==5){ String jg =this.jtf1.getText().trim(); sql = "select * from stu where stuJG= '"+jg+"' "; } else if(index ==6){ String bj =this.jtf1.getText().trim(); sql = "select * from stu where stuBJ= '"+bj+"' "; } //构建一个数据模型类,并更新 sm = new StuModel(sql); strRS=String.valueOf(sm.getRowCount()); jtf2.setText(strRS); //更新jtable jt.setModel(sm); } //一、弹出添加界面 else if(arg0.getSource() == jb2){ System.out.println("添加..."); StuAddDiag sa = new StuAddDiag(this,"添加学生",true); //重新再获得新的数据模型, sm = new StuModel(); strRS=String.valueOf(sm.getRowCount()); jtf2.setText(strRS); jt.setModel(sm); }else if(arg0.getSource() == jb4){ //二、删除记录 //1.得到学生的ID int rowNum = this.jt.getSelectedRow();//getSelectedRow会返回给用户点中的行 //如果该用户一行都没有选,就返回-1 if(rowNum == -1){ //提示 JOptionPane.showMessageDialog(this, "请选中一行"); return ; } //得到学术ID String stuId = (String)sm.getValueAt(rowNum, 0); //连接数据库,完成删除任务 try{ //1.加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //2.连接数据库 String url = "jdbc:mysql://localhost:3306/student"; String user = "root"; String passwd = "666666"; ct = DriverManager.getConnection(url, user, passwd); // System.out.println("连接成功"); ps = ct.prepareStatement("delete from stu where stuId = ?"); ps.setString(1,stuId); ps.executeUpdate(); JOptionPane.showMessageDialog(null, "删除成功", "删除情况",JOptionPane.PLAIN_MESSAGE); }catch(Exception e){ e.printStackTrace(); }finally{ try{ if(rs!= null){ rs.close(); rs = null; } if(ps!= null){ ps.close(); ps = null; } if(ct != null){ ct.close(); ct = null; } } catch(Exception e){ e.printStackTrace(); } } sm = new StuModel(); strRS=String.valueOf(sm.getRowCount()); jtf2.setText(strRS); //更新jtable jt.setModel(sm); }else if(arg0.getSource() == jb3){ // System.out.println("11111"); //三、用户希望修改 int rowNum = this.jt.getSelectedRow(); if(rowNum == -1){ //提示 JOptionPane.showMessageDialog(this, "请选择一行"); return ; } //显示对话框 // System.out.println( "12435"); StuUpDiag su = new StuUpDiag(this, "修改学生信息", true, sm, rowNum); sm = new StuModel(); jt.setModel(sm); } } }
(4).模型界面
StuModel.java
/* 用来刷新、呈现数据库 * 这是我的一个stu表的模型 * 可以把对学生表的操作全都封装到这个类 */ import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Vector; import javax.swing.table.*; public class StuModel extends AbstractTableModel{ //rowData存放行数据,columnNames存放列名 Vector rowData,columnNames;//Vector和ArrayList一样,底层也是一个Object类型的数组Object[]。; 构造一个空向量,使其内部数据数组的大小为10,其标准容量增量为零 //定义连接数据库的变量 Statement stat = null; Connection ct = null; ResultSet rs = null; //初始化 public void init(String sql){ if(sql.equals("")){ sql = "select * from stu"; } //中间 //设置列名 columnNames = new Vector();//这里是一维向量表示列; columnNames.add("学号"); columnNames.add("名字"); columnNames.add("性别"); columnNames.add("年龄"); columnNames.add("籍贯"); columnNames.add("联系方式"); columnNames.add("班级"); //rowData存放多行 rowData = new Vector(); try{ //1.加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("加载成功"); //2.连接数据库 //定义几个常量 String url = "jdbc:mysql://localhost:3306/student"; String user = "root"; String passwd = "666666";//这里你要填写你自己的数据库密码 ct = DriverManager.getConnection(url,user,passwd); stat = ct.createStatement();//创建stat对象 rs = stat.executeQuery(sql);//查询结果 while(rs.next()){ Vector hang = new Vector(); hang.add(rs.getString(1)); hang.add(rs.getString(2)); hang.add(rs.getString(3)); hang.add(rs.getString(4)); hang.add(rs.getString(5)); hang.add(rs.getString(6)); hang.add(rs.getString(7)); //加入到rowData中 rowData.add(hang);//这里是二维向量,表示行; } }catch(Exception e){ e.printStackTrace(); }finally{ try{ if(rs!=null){ rs.close(); rs = null; } if(stat != null){ stat.close(); stat = null; } if(ct != null){ ct.close(); ct = null; } }catch(Exception e){ e.printStackTrace(); } } } //第二个构造函数,通过传递的sql语句来获得数据模型 public StuModel(String sql){ this.init(sql); } //构造函数,用于初始化我的数据模型(表) public StuModel(){ this.init(""); } //得到共有多少行 public int getRowCount() { // TODO Auto-generated method stub return this.rowData.size(); } //得到共有多少列 public int getColumnCount() { // TODO Auto-generated method stub return this.columnNames.size(); } //得到某行某列的数据 public Object getValueAt(int row, int column) { // TODO Auto-generated method stub return ((Vector)(this.rowData.get(row))).get(column); } //得到属性名字 public String getColumnName(int column) { // TODO Auto-generated method stub return (String)this.columnNames.get(column); } }
(5).增加学生界面
StuAddDiag.java
import javax.swing.JDialog; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.*; //用来实现增添读者功能 public class StuAddDiag extends JDialog implements ActionListener { //定义我需要的swing组件 JLabel jl1,jl2,jl3,jl4,jl5,jl6,jl7; JTextField jf1,jf2,jf3,jf4,jf5,jf6,jf7; JPanel jp1,jp2,jp3; JButton jb1,jb2; //owner代笔父窗口,title是窗口的名字,modal指定是模式窗口()或者非模式窗口 public StuAddDiag(Frame owner, String title, boolean modal){ //调用父类方法 super(owner,title,modal); jl1 = new JLabel("学号"); jl2 = new JLabel("名字"); jl3 = new JLabel("性别"); jl4 = new JLabel("年龄"); jl5 = new JLabel("籍贯"); jl6 = new JLabel("联系方式"); jl7 = new JLabel("班级"); jf1 = new JTextField(30); jf2 = new JTextField(30); jf3 = new JTextField(30); jf4 = new JTextField(30); jf5 = new JTextField(30); jf6 = new JTextField(30); jf7 = new JTextField(30); jb1 = new JButton("添加"); jb1.addActionListener(this::actionPerformed); jb2 = new JButton("取消"); jb2.addActionListener(this::actionPerformed); jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); //设置布局 jp1.setLayout(new GridLayout(7,1)); jp2.setLayout(new GridLayout(7,1)); jp3.add(jb1); jp3.add(jb2); jp1.add(jl1); jp1.add(jl2); jp1.add(jl3); jp1.add(jl4); jp1.add(jl5); jp1.add(jl6); jp1.add(jl7); jp2.add(jf1); jp2.add(jf2); jp2.add(jf3); jp2.add(jf4); jp2.add(jf5); jp2.add(jf6); jp2.add(jf7); this.add(jp1, BorderLayout.WEST); this.add(jp2, BorderLayout.CENTER); this.add(jp3, BorderLayout.SOUTH); this.setLocation(600, 350); this.setSize(300,200); this.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource() == jb1){ Connection ct = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ //1.加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("加载成功"); //2.连接数据库 //定义几个常量 String url = "jdbc:mysql://localhost:3306/student"; String user = "root"; String passwd = "666666"; ct = DriverManager.getConnection(url,user,passwd); //与编译语句对象 String strsql = "insert into stu values(?,?,?,?,?,?,?)"; pstmt = ct.prepareStatement(strsql); //给对象赋值 pstmt.setString(1,jf1.getText()); pstmt.setString(2,jf2.getText()); pstmt.setString(3,jf3.getText()); pstmt.setString(4,jf4.getText()); pstmt.setString(5,jf5.getText()); pstmt.setString(6,jf6.getText()); pstmt.setString(7,jf7.getText()); pstmt.executeUpdate(); JOptionPane.showMessageDialog(null, "添加成功", "添加情况",-1); this.dispose();//关闭学生对话框 }catch(Exception arg1){ arg1.printStackTrace(); }finally{ try{ if(rs!=null){ rs.close(); rs = null; } if(pstmt != null){ pstmt.close(); pstmt = null; } if(ct != null){ ct.close(); ct = null; } }catch(Exception arg2){ arg2.printStackTrace(); } } }else{ this.dispose(); } } }
(6).修改学生界面
StuUpDiag.java
import javax.swing.JDialog; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.*; /* // * 是修改学生信息 */ public class StuUpDiag extends JDialog implements ActionListener { //定义我需要的swing组件 JLabel jl1,jl2,jl3,jl4,jl5,jl6,jl7; JTextField jf1,jf2,jf3,jf4,jf5,jf6,jf7; JPanel jp1,jp2,jp3; JButton jb1,jb2; //owner代笔父窗口,title是窗口的名字,modal指定是模式窗口()或者非模式窗口 public StuUpDiag(Frame owner, String title, boolean modal, StuModel sm, int rowNum){ //调用父类方法 super(owner,title,modal); jl1 = new JLabel("学号"); jl2 = new JLabel("名字"); jl3 = new JLabel("性别"); jl4 = new JLabel("年龄"); jl5 = new JLabel("籍贯"); jl6 = new JLabel("联系方式"); jl7 = new JLabel("班级"); jf1 = new JTextField(30); jf1.setText((sm.getValueAt(rowNum, 0)).toString()); jf2 = new JTextField(30); jf2.setText((String)sm.getValueAt(rowNum, 1)); jf3 = new JTextField(30); jf3.setText(sm.getValueAt(rowNum, 2).toString()); jf4 = new JTextField(30); jf4.setText((sm.getValueAt(rowNum, 3)).toString()); jf5 = new JTextField(30); jf5.setText((String)sm.getValueAt(rowNum, 4)); jf6 = new JTextField(30); jf6.setText((String)sm.getValueAt(rowNum, 5)); jf7 = new JTextField(30); jf7.setText((String)sm.getValueAt(rowNum, 6)); jb1 = new JButton("修改"); jb1.addActionListener(this::actionPerformed); jb2 = new JButton("取消"); jb2.addActionListener(this::actionPerformed); jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); //设置布局 jp1.setLayout(new GridLayout(7,1)); jp2.setLayout(new GridLayout(7,1)); jp3.add(jb1); jp3.add(jb2); jp1.add(jl1); jp1.add(jl2); jp1.add(jl3); jp1.add(jl4); jp1.add(jl5); jp1.add(jl6); jp1.add(jl7); jp2.add(jf1); jp2.add(jf2); jp2.add(jf3); jp2.add(jf4); jp2.add(jf5); jp2.add(jf6); jp2.add(jf7); this.add(jp1, BorderLayout.WEST); this.add(jp2, BorderLayout.CENTER); this.add(jp3, BorderLayout.SOUTH); this.setLocation(600, 350); this.setSize(300,200); this.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource() == jb1){ Connection ct = null; PreparedStatement pstmt = null; ResultSet rs = null; try{ //1.加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); System.out.println("加载成功"); //2.连接数据库 //定义几个常量 String url = "jdbc:mysql://localhost:3306/student"; String user = "root"; String passwd = "666666"; ct = DriverManager.getConnection(url,user,passwd); //与编译语句对象 String strsql = "update stu set stuName = '"+jf2.getText()+"',stuSex = '"+jf3.getText()+"',stuAge = '"+jf4.getText()+"',stuJG='"+jf5.getText()+"',stuLX='"+jf6.getText()+"',stuBJ='"+jf7.getText()+"' where stuId = '"+jf1.getText()+"'"; pstmt = ct.prepareStatement(strsql); pstmt.executeUpdate(); JOptionPane.showMessageDialog(null, "修改成功", "修改情况",JOptionPane.PLAIN_MESSAGE); this.dispose();//关闭学生对话框 }catch(Exception arg1){ arg1.printStackTrace(); }finally{ try{ if(rs!=null){ rs.close(); rs = null; } if(pstmt != null){ pstmt.close(); pstmt = null; } if(ct != null){ ct.close(); ct = null; } }catch(Exception arg2){ arg2.printStackTrace(); } } }else{ this.dispose();//关闭学生对话框 } } }