Java+Mysql+学生管理系统

本文介绍了一个简易的学生管理系统,采用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

 

转载于:https://www.cnblogs.com/lfdy/p/5619450.html

压缩包含使用说明,windows端在文件资源管理器中 点击create.bat支持一键建表,其他系统可以使用 createtables.sql里面的sql语句进行数据库 欢迎使用学生信息管理系统(管理员端) 本系统支持添加,删除,修改等实用功能 方便您更好的管理学生数据 【I】管理员端 一,选择数据库 通过右上角的数据库菜单栏可以选择当前操 作的数据库 二,添加教师,学生,教师,学生成绩(管理员) 1)通过管理员窗口的左侧按钮可以按需添加 学生,教师,管理员,学生成绩等信息 2)通过下方按钮“添加行”来新建空行,然 后手动输入数据,再点击“保存”按钮将表 单上传到数据库。 (注意:如果格式不正确,比如通过该方法上传 的数据可能会发生错误,所以方法2只适合管 理员使用) 3)支持批量添加行(注意:如果有一行错误,所 有操作将被回滚) 4)为学生添加老师,进入选择学生数据库,在 某一个学生行单击右键,选择“添加老师”,即 可为该id的学生添加老师 5)为学生添加课程,进入学生数据可以,在某一 学生行单击右键,选择“修改成绩”,可以进入 成绩修改窗口(管理员端),输入学生id, 为学生添加任意课程,也可为课程添加或修改删除 成绩 三,删除 在表格中使用鼠标选中一些数据行,然后点击 左侧“删除”按钮,即可删除表单中的数据 四,修改 双击表格,输入数据,按回车保存,然后点击 右下角“保存修改”按钮,将表单上传到数据 库中。(注意:因为学生成绩信息是以二进制 形式储存,所以请不要直接在表格中修改) 五,排序 在表格某一列点击排序按钮,对当前选择的表单 按该列进行排序,右上角排序选择框可以决定排 序的方向是升序还是逆序。 【II】教师端 1)教师基本信息 教师信息将显示在表格左侧 2)查看学生列表 单击“我的学生”,表格中将显示该教师的所有 学生 3)在表格中右击某一个学生,将进入成绩修改窗 口(教师端),支持为当前学生添加或修改当前 教师所教科目的学生成绩 4)查看成绩表 单击“成绩表”,表格中显示该教师所有学生的 成绩信息。 【III】学生端 1)学生基本信息 学生信息将显示在表格左侧 2)查看成绩 单击“学业成绩”,表格中将显示学生所有成绩 3)查看老师 单击“我的老师”,表格中将显示学生所有老师 的基本信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值