Java+Mysql學(xué)生管理系統(tǒng)源碼
最近正在學(xué)java和數(shù)據(jù)庫(kù),想起以前寫的學(xué)生管理系統(tǒng),都是從網(wǎng)上下載,敷衍了事。閑來(lái)無(wú)事,也就自己寫了一個(gè),不過(guò)功能實(shí)現(xiàn)的不是很多。
開發(fā)語(yǔ)言:java; 開發(fā)環(huán)境:Mysql, java; 開發(fā)工具:eclipse
開發(fā)此案例,首先得在電腦上有java開發(fā)環(huán)境和Mysql, java開發(fā)環(huán)境與Mysql的搭建,就不再敘述了,如果需要,請(qǐng)聯(lián)系我最下面的聯(lián)系方式:dingyelf@aliyun.com
此次系統(tǒng)比較簡(jiǎn)易:數(shù)據(jù)庫(kù)中只有一個(gè)表:stu;功能:能夠?qū)W(xué)生增加、刪除、修改。
開發(fā)步驟:
1.在數(shù)據(jù)庫(kù)中建表:
create table stu( stuId String, stuName String, stuSex String, stuAge int, stuJG String, stuDept Sring );
2.java 代碼主要由四個(gè)類組成:
Test3包含主函數(shù);StuModel用來(lái)刷新、呈現(xiàn)數(shù)據(jù)庫(kù);StuAddDiag用來(lái)實(shí)現(xiàn)增添讀者功能;StuUpDiag是修改學(xué)生信息。具體代碼如下:
Test3.java:
import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; public class Test3 extends JFrame implements ActionListener { //定義一些控件 JPanel jp1,jp2; JLabel jl1,jl2; JButton jb1,jb2,jb3,jb4; JTable jt; JScrollPane jsp; JTextField jtf; StuModel sm; //定義連接數(shù)據(jù)庫(kù)的變量 Statement stat = null; PreparedStatement ps; Connection ct = null; ResultSet rs = null; public static void main(String[] args){ Test3 test3 = new Test3(); } //構(gòu)造函數(shù) public Test3(){ jp1 = new JPanel(); jtf = new JTextField(10); jb1 = new JButton("查詢"); jb1.addActionListener(this); jl1 = new JLabel("請(qǐng)輸入名字:"); jp1.add(jl1); jp1.add(jtf); jp1.add(jb1); jb2 = new JButton("添加"); 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); //創(chuàng)建模型對(duì)象 sm = new StuModel(); //初始化 jt = new JTable(sm); jsp = new JScrollPane(jt); //將jsp放入到j(luò)frame中 this.add(jsp); this.add(jp1,"North"); this.add(jp2,"South"); this.setSize(600, 400); //this.setLocation(300, 200); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); } public void actionPerformed(ActionEvent arg0) { //判斷是哪個(gè)按鈕被點(diǎn)擊 if(arg0.getSource() == jb1){ System.out.println("用戶希望被查詢..."); //因?yàn)榘褜?duì)表的數(shù)據(jù)封裝到StuModel中,可以比較簡(jiǎn)單的完成查詢 String name = this.jtf.getText().trim(); //寫一個(gè)sql語(yǔ)句 String sql = "select * from stu where stuName = '"+name+"' "; //構(gòu)建一個(gè)數(shù)據(jù)模型類,并更新 sm = new StuModel(sql); //更新jtable jt.setModel(sm); } //一、彈出添加界面 else if(arg0.getSource() == jb2){ System.out.println("添加..."); StuAddDiag sa = new StuAddDiag(this,"添加學(xué)生",true); //重新再獲得新的數(shù)據(jù)模型, sm = new StuModel(); jt.setModel(sm); }else if(arg0.getSource() == jb4){ //二、刪除記錄 //1.得到學(xué)生的ID int rowNum = this.jt.getSelectedRow();//getSelectedRow會(huì)返回給用戶點(diǎn)中的行 //如果該用戶一行都沒有選,就返回-1 if(rowNum == -1){ //提示 JOptionPane.showMessageDialog(this, "請(qǐng)選中一行"); return ; } //得到學(xué)術(shù)ID String stuId = (String)sm.getValueAt(rowNum, 0); System.out.println("Id: "+stuId); //連接數(shù)據(jù)庫(kù),完成刪除任務(wù) try{ //1.加載驅(qū)動(dòng) Class.forName("com.mysql.jdbc.Driver"); //2.連接數(shù)據(jù)庫(kù) String url = "jdbc:mysql://localhost:3306/spdb1"; String user = "root"; String passwd = "lfdy"; ct = DriverManager.getConnection(url, user, passwd); System.out.println("連接成功"); ps = ct.prepareStatement("delete from stu where stuId = ?"); ps.setString(1,stuId); ps.executeUpdate(); }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(); //更新jtable jt.setModel(sm); }else if(arg0.getSource() == jb3){ System.out.println("11111"); //三、用戶希望修改 int rowNum = this.jt.getSelectedRow(); if(rowNum == -1){ //提示 JOptionPane.showMessageDialog(this, "請(qǐng)選擇一行"); return ; } //顯示對(duì)話框 System.out.println( "12435"); StuUpDiag su = new StuUpDiag(this, "修改學(xué)術(shù)", true, sm, rowNum); sm = new StuModel(); jt.setModel(sm); } } }
StuModel.java:
/* * 這是我的一個(gè)stu表的模型 * 可以把對(duì)學(xué)生表的操作全都封裝到這個(gè)類 */ package com.test2; 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存放行數(shù)據(jù),columnNames存放列名 Vector rowData,columnNames; //定義連接數(shù)據(jù)庫(kù)的變量 Statement stat = null; Connection ct = null; ResultSet rs = null; //初始化 public void init(String sql){ if(sql.equals("")){ sql = "select * from stu"; } //中間 //設(shè)置列名 columnNames = new Vector(); columnNames.add("學(xué)號(hào)"); columnNames.add("名字"); columnNames.add("性別"); columnNames.add("年齡"); columnNames.add("籍貫"); columnNames.add("門派"); //rowData存放多行 rowData = new Vector(); try{ //1.加載驅(qū)動(dòng) Class.forName("com.mysql.jdbc.Driver"); System.out.println("加載成功"); //2.連接數(shù)據(jù)庫(kù) //定義幾個(gè)常量 String url = "jdbc:mysql://localhost:3306/spdb1"; String user = "root"; String passwd = "lfdy"; ct = DriverManager.getConnection(url,user,passwd); stat = ct.createStatement();//創(chuàng)建stat對(duì)象 rs = stat.executeQuery(sql);//查詢結(jié)果 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.getInt(4)); hang.add(rs.getString(5)); hang.add(rs.getString(6)); //加入到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(); } } } //增加學(xué)生函數(shù) public void addStu(String sql){ //根據(jù)用戶輸入的sql語(yǔ)句,完成添加任務(wù) } //第二個(gè)構(gòu)造函數(shù),通過(guò)傳遞的sql語(yǔ)句來(lái)獲得數(shù)據(jù)模型 public StuModel(String sql){ this.init(sql); } //構(gòu)造函數(shù),用于初始化我的數(shù)據(jù)模型(表) 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(); } //得到某行某列的數(shù)據(jù) 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); } }
StuAddDiag.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 StuAddDiag 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 StuAddDiag(Frame owner,String title, boolean modal){ //調(diào)用父類方法 super(owner,title,modal); jl1 = new JLabel("學(xué)號(hào)"); jl2 = new JLabel("名字"); jl3 = new JLabel("性別"); jl4 = new JLabel("年齡"); jl5 = new JLabel("籍貫"); jl6 = new JLabel("門派"); jf1 = new JTextField(10); jf2 = new JTextField(10); jf3 = new JTextField(10); jf4 = new JTextField(10); jf5 = new JTextField(10); jf6 = new JTextField(10); jb1 = new JButton("添加"); jb1.addActionListener(this); jb2 = new JButton("取消"); jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); //設(shè)置布局 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.加載驅(qū)動(dòng) Class.forName("com.mysql.jdbc.Driver"); System.out.println("加載成功"); //2.連接數(shù)據(jù)庫(kù) //定義幾個(gè)常量 String url = "jdbc:mysql://localhost:3306/spdb1"; String user = "root"; String passwd = "lfdy"; ct = DriverManager.getConnection(url,user,passwd); //與編譯語(yǔ)句對(duì)象 String strsql = "insert into stu values(?,?,?,?,?,?)"; pstmt = ct.prepareStatement(strsql); //給對(duì)象賦值 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();//關(guān)閉學(xué)生對(duì)話框 }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(); } } } } }
StuUpDiag.java:
package com.test2; /* * 修改學(xué)生 */ 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){ //調(diào)用父類方法 super(owner,title,modal); jl1 = new JLabel("學(xué)號(hào)"); 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(); //設(shè)置布局 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.加載驅(qū)動(dòng) Class.forName("com.mysql.jdbc.Driver"); System.out.println("加載成功"); //2.連接數(shù)據(jù)庫(kù) //定義幾個(gè)常量 String url = "jdbc:mysql://localhost:3306/spdb1"; String user = "root"; String passwd = "lfdy"; ct = DriverManager.getConnection(url,user,passwd); //與編譯語(yǔ)句對(duì)象 String strsql = "insert into stu values(?,?,?,?,?,?)"; pstmt = ct.prepareStatement(strsql); //給對(duì)象賦值 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();//關(guān)閉學(xué)生對(duì)話框 }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(); } } } } }
開發(fā)與測(cè)試結(jié)果:
1.系統(tǒng)主界面:
2.按名字查詢:
3.選中一行,刪除:
4.選中一行修改:
5.點(diǎn)擊添加按鈕,進(jìn)行添加:
后續(xù)此系統(tǒng)將繼續(xù)完善,有疑問(wèn)和技術(shù)交流的,可聯(lián)系本人:dingyelf@aliyun.com
關(guān)于管理系統(tǒng)的更多內(nèi)容請(qǐng)點(diǎn)擊《管理系統(tǒng)專題》進(jìn)行學(xué)習(xí)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- javaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
- Java+MySQL實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)源碼
- java學(xué)生管理系統(tǒng)界面簡(jiǎn)單實(shí)現(xiàn)(全)
- java學(xué)生信息管理系統(tǒng)源代碼
- Java GUI實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
- java實(shí)現(xiàn)簡(jiǎn)單的學(xué)生信息管理系統(tǒng)代碼實(shí)例
- java(swing)+ mysql實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)源碼
- Java基于MySQL實(shí)現(xiàn)學(xué)生管理系統(tǒng)
- 簡(jiǎn)單實(shí)現(xiàn)Java版學(xué)生管理系統(tǒng)
- Java實(shí)現(xiàn)簡(jiǎn)易學(xué)生管理系統(tǒng)
相關(guān)文章
SpringBoot+Elasticsearch實(shí)現(xiàn)數(shù)據(jù)搜索的方法詳解
Elasticsearch是一個(gè)基于Lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful?web接口。本文將利用SpringBoot整合Elasticsearch實(shí)現(xiàn)海量級(jí)數(shù)據(jù)搜索,需要的可以參考一下2022-05-05Spring單元測(cè)試類ApplicationTests錯(cuò)誤的解決
這篇文章主要介紹了Spring單元測(cè)試類ApplicationTests錯(cuò)誤的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Spring定時(shí)服務(wù)QuartZ原理及代碼案例
這篇文章主要介紹了Spring定時(shí)服務(wù)QuartZ原理及代碼案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11java工廠實(shí)例BeanFactoryPostProcessor和BeanPostProcessor區(qū)別分析
這篇文章主要為大家介紹了BeanFactoryPostProcessor和BeanPostProcessor區(qū)別示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07深入解析Apache Kafka實(shí)時(shí)流處理平臺(tái)
這篇文章主要為大家介紹了Apache Kafka實(shí)時(shí)流處理平臺(tái)深入解析,從基本概念到實(shí)戰(zhàn)操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Mybatis?mysql模糊查詢方式(CONCAT多個(gè)字段)及bug
這篇文章主要介紹了Mybatis?mysql模糊查詢方式(CONCAT多個(gè)字段)及bug,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01