Java+Mysql+学生管理系统
最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事。闲来无事,也就自己写了一个,不过功能实现的不是很多。
开发语言:java; 开发环境:Mysql, java; 开发工具:eclipse
开发此案例,首先得在电脑上有java开发环境和Mysql, java开发环境与Mysql的搭建,就不再叙述了,如果需要,请联系我最下面的联系方式:dingyelf@aliyun.com
此次系统比较简易:数据库中只有一个表:stu;功能:能够对学生增加、删除、修改。
开发步骤:
1.在数据库中建表:
1 create table stu( 2 stuId String, 3 stuName String, 4 stuSex String, 5 stuAge int, 6 stuJG String, 7 stuDept Sring 8 );
2.java 代码主要由四个类组成:
Test3包含主函数;StuModel用来刷新、呈现数据库;StuAddDiag用来实现增添读者功能;StuUpDiag是修改学生信息。具体代码如下:
Test3.java:
1 import javax.swing.*; 2 import java.util.*; 3 import java.awt.*; 4 import java.awt.event.*; 5 import java.sql.Connection; 6 import java.sql.Driver; 7 import java.sql.DriverManager; 8 import java.sql.PreparedStatement; 9 import java.sql.ResultSet; 10 import java.sql.Statement; 11 12 public class Test3 extends JFrame implements ActionListener { 13 //定义一些控件 14 JPanel jp1,jp2; 15 JLabel jl1,jl2; 16 JButton jb1,jb2,jb3,jb4; 17 JTable jt; 18 JScrollPane jsp; 19 JTextField jtf; 20 StuModel sm; 21 //定义连接数据库的变量 22 Statement stat = null; 23 PreparedStatement ps; 24 Connection ct = null; 25 ResultSet rs = null; 26 27 public static void main(String[] args){ 28 Test3 test3 = new Test3(); 29 } 30 //构造函数 31 public Test3(){ 32 jp1 = new JPanel(); 33 jtf = new JTextField(10); 34 jb1 = new JButton("查询"); 35 jb1.addActionListener(this); 36 jl1 = new JLabel("请输入名字:"); 37 38 jp1.add(jl1); 39 jp1.add(jtf); 40 jp1.add(jb1); 41 42 jb2 = new JButton("添加"); 43 jb2.addActionListener(this); 44 jb3 = new JButton("修改"); 45 jb3.addActionListener(this); 46 jb4 = new JButton("删除"); 47 jb4.addActionListener(this); 48 49 jp2 = new JPanel(); 50 jp2.add(jb2); 51 jp2.add(jb3); 52 jp2.add(jb4); 53 54 //创建模型对象 55 sm = new StuModel(); 56 57 58 //初始化 59 jt = new JTable(sm); 60 61 jsp = new JScrollPane(jt); 62 63 //将jsp放入到jframe中 64 this.add(jsp); 65 this.add(jp1,"North"); 66 this.add(jp2,"South"); 67 this.setSize(600, 400); 68 //this.setLocation(300, 200); 69 this.setDefaultCloseOperation(EXIT_ON_CLOSE); 70 this.setVisible(true); 71 73 } 75 public void actionPerformed(ActionEvent arg0) { 76 //判断是哪个按钮被点击 77 if(arg0.getSource() == jb1){ 78 System.out.println("用户希望被查询..."); 79 //因为把对表的数据封装到StuModel中,可以比较简单的完成查询 80 String name = this.jtf.getText().trim(); 81 //写一个sql语句 82 String sql = "select * from stu where stuName = \'"+name+"\' "; 83 //构建一个数据模型类,并更新 84 sm = new StuModel(sql); 85 //更新jtable 86 jt.setModel(sm); 87 88 } 89 90 //一、弹出添加界面 91 else if(arg0.getSource() == jb2){ 92 System.out.println("添加..."); 93 StuAddDiag sa = new StuAddDiag(this,"添加学生",true); 94 95 //重新再获得新的数据模型, 96 sm = new StuModel(); 97 jt.setModel(sm); 98 }else if(arg0.getSource() == jb4){ 99 //二、删除记录 100 //1.得到学生的ID 101 int rowNum = this.jt.getSelectedRow();//getSelectedRow会返回给用户点中的行 102 //如果该用户一行都没有选,就返回-1 103 if(rowNum == -1){ 104 //提示 105 JOptionPane.showMessageDialog(this, "请选中一行"); 106 return ; 107 } 108 //得到学术ID 109 String stuId = (String)sm.getValueAt(rowNum, 0); 110 System.out.println("Id: "+stuId); 111 112 //连接数据库,完成删除任务 113 try{ 114 //1.加载驱动 115 Class.forName("com.mysql.jdbc.Driver"); 116 //2.连接数据库 117 String url = "jdbc:mysql://localhost:3306/spdb1"; 118 String user = "root"; 119 String passwd = "lfdy"; 120 121 ct = DriverManager.getConnection(url, user, passwd); 122 System.out.println("连接成功"); 123 ps = ct.prepareStatement("delete from stu where stuId = ?"); 124 ps.setString(1,stuId); 125 ps.executeUpdate(); 126 127 }catch(Exception e){ 128 e.printStackTrace(); 129 }finally{ 130 try{ 131 if(rs!= null){ 132 rs.close(); 133 rs = null; 134 135 } 136 if(ps!= null){ 137 ps.close(); 138 ps = null; 139 } 140 if(ct != null){ 141 ct.close(); 142 ct = null; 143 } 144 } catch(Exception e){ 145 e.printStackTrace(); 146 } 147 } 148 sm = new StuModel(); 149 //更新jtable 150 jt.setModel(sm); 151 }else if(arg0.getSource() == jb3){ 152 System.out.println("11111"); 153 //三、用户希望修改 154 int rowNum = this.jt.getSelectedRow(); 155 if(rowNum == -1){ 156 //提示 157 JOptionPane.showMessageDialog(this, "请选择一行"); 158 return ; 159 } 160 //显示对话框 161 System.out.println( "12435"); 162 StuUpDiag su = new StuUpDiag(this, "修改学术", true, sm, rowNum); 163 sm = new StuModel(); 164 jt.setModel(sm); 165 } 166 } 167 }
StuModel.java:
1 /* 2 * 这是我的一个stu表的模型 3 * 可以把对学生表的操作全都封装到这个类 4 */ 5 package com.test2; 6 7 import java.sql.Connection; 8 import java.sql.DriverManager; 9 import java.sql.ResultSet; 10 import java.sql.Statement; 11 import java.util.Vector; 12 import javax.swing.table.*; 13 14 public class StuModel extends AbstractTableModel{ 15 16 //rowData存放行数据,columnNames存放列名 17 Vector rowData,columnNames; 18 19 //定义连接数据库的变量 20 Statement stat = null; 21 Connection ct = null; 22 ResultSet rs = null; 23 24 //初始化 25 public void init(String sql){ 26 if(sql.equals("")){ 27 sql = "select * from stu"; 28 } 29 //中间 30 //设置列名 31 columnNames = new Vector(); 32 columnNames.add("学号"); 33 columnNames.add("名字"); 34 columnNames.add("性别"); 35 columnNames.add("年龄"); 36 columnNames.add("籍贯"); 37 columnNames.add("门派"); 38 39 //rowData存放多行 40 rowData = new Vector(); 41 42 try{ 43 //1.加载驱动 44 Class.forName("com.mysql.jdbc.Driver"); 45 System.out.println("加载成功"); 46 //2.连接数据库 47 //定义几个常量 48 String url = "jdbc:mysql://localhost:3306/spdb1"; 49 String user = "root"; 50 String passwd = "lfdy"; 51 52 ct = DriverManager.getConnection(url,user,passwd); 53 stat = ct.createStatement();//创建stat对象 54 rs = stat.executeQuery(sql);//查询结果 55 56 while(rs.next()){ 57 Vector hang = new Vector(); 58 hang.add(rs.getString(1)); 59 hang.add(rs.getString(2)); 60 hang.add(rs.getString(3)); 61 hang.add(rs.getInt(4)); 62 hang.add(rs.getString(5)); 63 hang.add(rs.getString(6)); 64 //加入到rowData中 65 rowData.add(hang); 66 67 } 68 69 }catch(Exception e){ 70 e.printStackTrace(); 71 }finally{ 72 try{ 73 if(rs!=null){ 74 rs.close(); 75 rs = null; 76 } 77 if(stat != null){ 78 stat.close(); 79 stat = null; 80 } 81 if(ct != null){ 82 ct.close(); 83 ct = null; 84 } 85 }catch(Exception e){ 86 e.printStackTrace(); 87 } 88 } 89 } 90 91 //增加学生函数 92 public void addStu(String sql){ 93 //根据用户输入的sql语句,完成添加任务 94 95 96 97 } 98 99 //第二个构造函数,通过传递的sql语句来获得数据模型 100 public StuModel(String sql){ 101 this.init(sql); 102 } 103 104 //构造函数,用于初始化我的数据模型(表) 105 public StuModel(){ 106 this.init(""); 107 } 108 109 //得到共有多少行 110 public int getRowCount() { 111 // TODO Auto-generated method stub 112 return this.rowData.size(); 113 } 114 115 //得到共有多少列 116 public int getColumnCount() { 117 // TODO Auto-generated method stub 118 return this.columnNames.size(); 119 } 120 121 //得到某行某列的数据 122 public Object getValueAt(int row, int column) { 123 // TODO Auto-generated method stub 124 return ((Vector)(this.rowData.get(row))).get(column); 125 } 126 127 //得到属性名字 128 public String getColumnName(int column) { 129 // TODO Auto-generated method stub 130 return (String)this.columnNames.get(column); 131 } 132 }
StuAddDiag.java:
1 package com.test2; 2 3 import javax.swing.JDialog; 4 import javax.swing.*; 5 import java.awt.*; 6 import java.awt.event.ActionEvent; 7 import java.awt.event.ActionListener; 8 import java.sql.Statement; 9 import java.sql.Connection; 10 import java.sql.DriverManager; 11 import java.sql.ResultSet; 12 import java.sql.*; 13 14 public class StuAddDiag extends JDialog implements ActionListener { 15 //定义我需要的swing组件 16 JLabel jl1,jl2,jl3,jl4,jl5,jl6; 17 JTextField jf1,jf2,jf3,jf4,jf5,jf6; 18 JPanel jp1,jp2,jp3; 19 JButton jb1,jb2; 20 //owner代笔父窗口,title是窗口的名字,modal指定是模式窗口()或者非模式窗口 21 public StuAddDiag(Frame owner,String title, boolean modal){ 22 //调用父类方法 23 super(owner,title,modal); 24 25 jl1 = new JLabel("学号"); 26 jl2 = new JLabel("名字"); 27 jl3 = new JLabel("性别"); 28 jl4 = new JLabel("年龄"); 29 jl5 = new JLabel("籍贯"); 30 jl6 = new JLabel("门派"); 31 32 jf1 = new JTextField(10); 33 jf2 = new JTextField(10); 34 jf3 = new JTextField(10); 35 jf4 = new JTextField(10); 36 jf5 = new JTextField(10); 37 jf6 = new JTextField(10); 38 39 jb1 = new JButton("添加"); 40 jb1.addActionListener(this); 41 jb2 = new JButton("取消"); 42 43 jp1 = new JPanel(); 44 jp2 = new JPanel(); 45 jp3 = new JPanel(); 46 47 //设置布局 48 jp1.setLayout(new GridLayout(6,1)); 49 jp2.setLayout(new GridLayout(6,1)); 50 51 jp3.add(jb1); 52 jp3.add(jb2); 53 54 jp1.add(jl1); 55 jp1.add(jl2); 56 jp1.add(jl3); 57 jp1.add(jl4); 58 jp1.add(jl5); 59 jp1.add(jl6); 60 61 jp2.add(jf1); 62 jp2.add(jf2); 63 jp2.add(jf3); 64 jp2.add(jf4); 65 jp2.add(jf5); 66 jp2.add(jf6); 67 68 this.add(jp1, BorderLayout.WEST); 69 this.add(jp2, BorderLayout.CENTER); 70 this.add(jp3, BorderLayout.SOUTH); 71 72 this.setSize(300,200); 73 this.setVisible(true); 74 } 75 @Override 76 public void actionPerformed(ActionEvent e) { 77 // TODO Auto-generated method stub 78 if(e.getSource() == jb1){ 79 Connection ct = null; 80 PreparedStatement pstmt = null; 81 ResultSet rs = null; 82 83 try{ 84 //1.加载驱动 85 Class.forName("com.mysql.jdbc.Driver"); 86 System.out.println("加载成功"); 87 //2.连接数据库 88 //定义几个常量 89 String url = "jdbc:mysql://localhost:3306/spdb1"; 90 String user = "root"; 91 String passwd = "lfdy"; 92 ct = DriverManager.getConnection(url,user,passwd); 93 94 //与编译语句对象 95 96 String strsql = "insert into stu values(?,?,?,?,?,?)"; 97 pstmt = ct.prepareStatement(strsql); 98 99 //给对象赋值 100 pstmt.setString(1,jf1.getText()); 101 pstmt.setString(2,jf2.getText()); 102 pstmt.setString(3,jf3.getText()); 103 pstmt.setString(4,jf4.getText()); 104 pstmt.setString(5,jf5.getText()); 105 pstmt.setString(6,jf6.getText()); 106 107 pstmt.executeUpdate(); 108 109 this.dispose();//关闭学生对话框 110 111 }catch(Exception arg1){ 112 arg1.printStackTrace(); 113 }finally{ 114 try{ 115 if(rs!=null){ 116 rs.close(); 117 rs = null; 118 } 119 if(pstmt != null){ 120 pstmt.close(); 121 pstmt = null; 122 } 123 if(ct != null){ 124 ct.close(); 125 ct = null; 126 } 127 }catch(Exception arg2){ 128 arg2.printStackTrace(); 129 } 130 } 131 132 } 133 134 } 135 136 137 }
StuUpDiag.java:
package com.test2; /* * 修改学生 */ 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; JTextField jf1,jf2,jf3,jf4,jf5,jf6; 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("门派"); jf1 = new JTextField(10);jf1.setText((sm.getValueAt(rowNum, 0)).toString()); jf2 = new JTextField(10);jf2.setText((String)sm.getValueAt(rowNum, 1)); jf3 = new JTextField(10);jf3.setText(sm.getValueAt(rowNum, 2).toString()); jf4 = new JTextField(10);jf4.setText((sm.getValueAt(rowNum, 3)).toString()); jf5 = new JTextField(10);jf5.setText((String)sm.getValueAt(rowNum, 4)); jf6 = new JTextField(10);jf6.setText((String)sm.getValueAt(rowNum, 5)); jb1 = new JButton("修改"); jb1.addActionListener(this); jb2 = new JButton("取消"); jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); //设置布局 jp1.setLayout(new GridLayout(6,1)); jp2.setLayout(new GridLayout(6,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); jp2.add(jf1); jp2.add(jf2); jp2.add(jf3); jp2.add(jf4); jp2.add(jf5); jp2.add(jf6); this.add(jp1, BorderLayout.WEST); this.add(jp2, BorderLayout.CENTER); this.add(jp3, BorderLayout.SOUTH); 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.jdbc.Driver"); System.out.println("加载成功"); //2.连接数据库 //定义几个常量 String url = "jdbc:mysql://localhost:3306/spdb1"; String user = "root"; String passwd = "lfdy"; 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.executeUpdate(); 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(); } } } } }
开发与测试结果:
1.系统主界面:
2.按名字查询:
3.选中一行,删除:
4.选中一行修改:
5.点击添加按钮,进行添加:
后续此系统将继续完善,有疑问和技术交流的,可联系本人:dingyelf@aliyun.com