Java+Mysql学生管理系统源码
程序员文章站
2024-03-12 17:56:26
最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事。闲来无事,也就自己写了一个,不过功能实现的不是很多。
开发语言:java;...
最近正在学java和数据库,想起以前写的学生管理系统,都是从网上下载,敷衍了事。闲来无事,也就自己写了一个,不过功能实现的不是很多。
开发语言:java; 开发环境:mysql, java; 开发工具:eclipse
开发此案例,首先得在电脑上有java开发环境和mysql, java开发环境与mysql的搭建,就不再叙述了,如果需要,请联系我最下面的联系方式:
此次系统比较简易:数据库中只有一个表:stu;功能:能够对学生增加、删除、修改。
开发步骤:
1.在数据库中建表:
create table stu( stuid string, stuname string, stusex string, stuage int, stujg string, studept sring );
2.java 代码主要由四个类组成:
test3包含主函数;stumodel用来刷新、呈现数据库;stuadddiag用来实现增添读者功能;stuupdiag是修改学生信息。具体代码如下:
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; //定义连接数据库的变量 statement stat = null; preparedstatement ps; connection ct = null; resultset rs = null; public static void main(string[] args){ test3 test3 = new test3(); } //构造函数 public test3(){ jp1 = new jpanel(); jtf = new jtextfield(10); jb1 = new jbutton("查询"); jb1.addactionlistener(this); jl1 = new jlabel("请输入名字:"); 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); //创建模型对象 sm = new stumodel(); //初始化 jt = new jtable(sm); jsp = new jscrollpane(jt); //将jsp放入到jframe中 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) { //判断是哪个按钮被点击 if(arg0.getsource() == jb1){ system.out.println("用户希望被查询..."); //因为把对表的数据封装到stumodel中,可以比较简单的完成查询 string name = this.jtf.gettext().trim(); //写一个sql语句 string sql = "select * from stu where stuname = '"+name+"' "; //构建一个数据模型类,并更新 sm = new stumodel(sql); //更新jtable jt.setmodel(sm); } //一、弹出添加界面 else if(arg0.getsource() == jb2){ system.out.println("添加..."); stuadddiag sa = new stuadddiag(this,"添加学生",true); //重新再获得新的数据模型, sm = new stumodel(); 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); system.out.println("id: "+stuid); //连接数据库,完成删除任务 try{ //1.加载驱动 class.forname("com.mysql.jdbc.driver"); //2.连接数据库 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, "请选择一行"); return ; } //显示对话框 system.out.println( "12435"); stuupdiag su = new stuupdiag(this, "修改学术", true, sm, rownum); sm = new stumodel(); jt.setmodel(sm); } } }
stumodel.java:
/* * 这是我的一个stu表的模型 * 可以把对学生表的操作全都封装到这个类 */ 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存放行数据,columnnames存放列名 vector rowdata,columnnames; //定义连接数据库的变量 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("门派"); //rowdata存放多行 rowdata = new vector(); 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); 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.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(); } } } //增加学生函数 public void addstu(string sql){ //根据用户输入的sql语句,完成添加任务 } //第二个构造函数,通过传递的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); } }
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){ //调用父类方法 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); 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(); //设置布局 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(); } } } } }
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
关于管理系统的更多内容请点击《管理系统专题》进行学习
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Java 单例模式的实现资料整理