Bootstrap

Java课程设计——学生信息管理系统

一.项目简介
二.项目构架图
三.团队成员任务简介
四.代码和git链接
五.项目运行图片
 

一.项目简介:

实现一个功能简单的学生信息管理系统,该系统具有按照账户名密码登录功能,登录后,可以添加,删除,修改、查询学生信息。

二.项目构架图:

三.团队成员任务简介

队长:侯悦涵
负责:java swing用户界面登录服务,实现用户界面与内部信息对接,团队博客和git的书写。

队员:刘玉倩
负责:实现与用户GUI界面的信息对接,负责增删改查的功能实现。

队员:张嘉鹭
负责:连接数据库,导出相应的表格,实现内部数据的管理。

四.代码

1、Main.java类

package 学生信息管理系统;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Main{
    public static void main (String []args){
 
        AFrame f = new AFrame("学生信息管理系统");
        //展示主类,也就是程序入口
    }
}
class AFrame extends JFrame{
    JButton b1;
    JButton b2;
    JTextField t1; 
    JTextField t2;
 
    public AFrame(String title){
        super(title);
      //调用父类JFrame的构造函数,将指定的title作为窗口的标题。
        this.setLayout(null);
      //设置布局管理器为null,即使用自定义的布局方式。
        Panel p = new Panel(); 
        
        b1 =new JButton("登陆");
      //创建一个按钮对象b1,按钮上显示文本为"登陆"。
        b2 =new JButton("取消");
      //创建一个按钮对象b2,按钮上显示文本为"取消"。
    
        t1 =new JTextField(25);
      //创建一个文本框对象t1,宽度为25个字符。
        t1.setFont(new Font("宋体",Font.BOLD,25));
      //创建一个密码框对象t2,宽度为25个字符。
 
        t2 =new JPasswordField(25);
      //创建一个密码框对象t2,宽度为25个字符。
        t2.setFont(new Font("宋体",Font.BOLD,25));
      //设置密码框的字体为宋体,加粗,大小为25。
 
        JLabel nameLabel = new JLabel("用户名");
        //创建一个标签对象nameLabel,显示文本为"用户名"。
        nameLabel.setFont(new Font("宋体",Font.BOLD,25));
      //设置标签的字体为宋体,加粗,大小为25。
        nameLabel.setHorizontalAlignment(JTextField.CENTER);
      //设置标签的文本居中对齐。
        JLabel pwdLabel = new JLabel("密码");
      //创建一个标签对象pwdLabel,显示文本为"密码"。
        pwdLabel.setFont(new Font("宋体",Font.BOLD,25));
      //设置标签的字体为宋体,加粗,大小为25。
        pwdLabel.setHorizontalAlignment(JTextField.CENTER);
       //设置标签的文本居中对齐
        //所谓居中对齐实质就是用户名和密码居中对齐
 
        this.setBounds(300,300,1000,500);
        //设置窗口的位置和大小,横坐标和纵坐标均为300,窗口的长为1000,宽为500。
        this.add(nameLabel);
      //将nameLabel标签添加到窗口中。
        this.add(t1);
      //将t1文本框添加到窗口中。
        this.add(pwdLabel);
      //将pwdLabel标签添加到窗口中。
        this.add(t2);
      //将t2密码框添加到窗口中。
        this.add(b1);
      //将b1按钮添加到窗口中。
        this.add(b2);
      //将b2按钮添加到窗口中。
 
        nameLabel.setBounds(100,100,200,50);
      //设置nameLabel标签在窗口中的位置和大小,参数依次为左上角的横坐标、纵坐标、宽度和高度。
        //用户名
        pwdLabel.setBounds(100,200,200,50);
      //设置pwdLabel标签在窗口中的位置和大小,参数依次为左上角的横坐标、纵坐标、宽度和高度。
        //密码
        t1.setBounds(600,100,200,50);
      //设置t1文本框在窗口中的位置和大小,参数依次为左上角的横坐标、纵坐标、宽度和高度。
        //用户名输入文本框
        t2.setBounds(600,200,200,50);
      //设置t2密码框在窗口中的位置和大小,参数依次为左上角的横坐标、纵坐标、宽度和高度。
        //密码输入文本框
        b1.setBounds(100,300,200,50);
        //设置b1按钮在窗口中的位置和大小,参数依次为左上角的横坐标、纵坐标、宽度和高度。
        //b1按钮是登录按钮
        b2.setBounds(600,300,200,50);
      //设置b2按钮在窗口中的位置和大小,参数依次为左上角的横坐标、纵坐标、宽度和高度。
        //b2按钮是取消按钮
 
        b1.addActionListener (new ResponseButton());
        //为b1按钮添加一个点击事件的监听器,使用ResponseButton类实现。
 
        b2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                JOptionPane.showMessageDialog(null,"单击确定退出");
                System.exit(0);
            }
        });
      //为b2按钮添加一个点击事件的监听器,使用匿名内部类实现,点击按钮时弹出一个对话框提示确认退出,
        // 并调用System.exit(0)退出程序。
 
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      //设置窗口的默认关闭操作为退出程序。
        this.setVisible(true);
      //设置窗口可见。
 
        getRootPane().setDefaultButton(b1);
      //设置窗口的默认按钮为b1按钮,即按下回车键时触发b1按钮的点击事件。
        b1.addKeyListener (new KeyAdapter(){
 
			public void keyPressed(KeyEvent e){
                if(e.getKeyCode() == KeyEvent.VK_ENTER)
				{
                    AFrame2 f1 = new AFrame2("学生信息管理系统-123456");
                
				}else{
                    System.out.print(t1.getText());
                    JOptionPane.showMessageDialog(null, "账号或者密码错误", "Error.mxy",JOptionPane.ERROR_MESSAGE); 
            
                }
            }
        });
        //为b1按钮添加一个键盘事件的监听器,使用匿名内部类实现。如果按下回车键,则创建一个AFrame2对象表示学生信息管理系统的主界面;
        // 否则,打印t1文本框中的文本并显示错误消息提示框。
 
    }
    
  //下面这段代码便是用于登录验证
    public class ResponseButton  implements ActionListener{
        public void actionPerformed(ActionEvent e){
                String str ="123";
              //用户名文本
                String m = "123";
              //密码文本
                if(t1.getText().equals(str)&&t2.getText().equals(m) ){
                	//使用t1.getText()获取t1文本框中的内容,使用t2.getText()获取t2文本框中的内容。
                    // 也就是读取用户输入的用户名和密码
 
                    AFrame2 f1 = new AFrame2("学生信息管理系统-123456");
 
                }else{
                    System.out.print(t1.getText());
                    JOptionPane.showMessageDialog(null, "账号或者密码错误", "Error.mxy",JOptionPane.ERROR_MESSAGE); 
            
                }
        }
    }
 
    class AFrame2 extends JFrame{
        JButton b3;
        JButton b4;
        JButton b5;
        JButton b6;
        public AFrame2(String title){
            super(title);
          //调用父类JFrame的构造函数,将指定的title作为窗口的标题。
            b3 =new JButton("录入");
          //创建一个按钮对象b3,按钮上显示文本为"录入"。
            b4 =new JButton("查询");
          //创建一个按钮对象b4,按钮上显示文本为"查询"。
            b5 =new JButton("修改");
          //创建一个按钮对象b5,按钮上显示文本为"修改"。
            b6 =new JButton("删除");
          //创建一个按钮对象b6,按钮上显示文本为"删除"。
    
            this.add(b3);
          //将b3按钮添加到窗口中。
            this.add(b4);
          //将b4按钮添加到窗口中。
            this.add(b5);
          //将b5按钮添加到窗口中。
            this.add(b6);
          //将b6按钮添加到窗口中。
    
            b3.setBounds(100,80,160,100);
          //设置b3按钮在窗口中的位置和大小,参数依次为左上角的横坐标、纵坐标、宽度和高度。
            b4.setBounds(100,290,160,100);
          //设置b4按钮在窗口中的位置和大小,参数依次为左上角的横坐标、纵坐标、宽度和高度。
            b5.setBounds(300,80,160,100);
          //设置b5按钮在窗口中的位置和大小,参数依次为左上角的横坐标、纵坐标、宽度和高度。
            b6.setBounds(300,290,160,100);
          //设置b6按钮在窗口中的位置和大小,参数依次为左上角的横坐标、纵坐标、宽度和高度。
 
            b3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                AFrame3 f2 = new AFrame3("学生信息管理系统-录入");
            }
        });
          //为 b3 按钮添加一个动作监听器(ActionListener),并实现其 actionPerformed 方法。
            // 当按钮被点击时,会创建一个新的 AFrame3 对象,窗口标题为 "学生信息管理系统-录入"。
            b4.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                AFrame4 f3 = new AFrame4("学生信息管理系统-查询");
            }
        });
            //为 b4 按钮添加一个动作监听器,实现其 actionPerformed 方法。
            // 当按钮被点击时,会创建一个新的 AFrame4 对象,窗口标题为 "学生信息管理系统-查询"。
            b5.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                AFrame5 f4 = new AFrame5("学生信息管理系统-修改");
                
            }
        });
          //为 b5 按钮添加一个动作监听器,实现其 actionPerformed 方法。
            // 当按钮被点击时,会创建一个新的 AFrame5 对象,窗口标题为 "学生信息管理系统-修改"。
            b6.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                AFrame6 f4 = new AFrame6("学生信息管理系统-删除");
                
            }
        });
          //为 b6 按钮添加一个动作监听器,实现其 actionPerformed 方法。
            // 当按钮被点击时,会创建一个新的 AFrame6 对象,窗口标题为 "学生信息管理系统-删除"。
            this.setLayout(null);
          //使用绝对布局
            this.setBounds(300,300,600,500);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
    }
    
    //上述代码主要是用来设计四个按钮的坐标、大小等内容
    //接下来开始分别设计四个按钮的内容以及映射了
    //核心思想便是在该类中先使用变量将输入文本框中的数据保存下来
    //同时作为参数调用数据库模块的插入方法
    //将其保存到数据库中
    
    class AFrame3 extends JFrame{
        JTextField t3;
        JTextField t4;
        JTextField t5;
        JTextField t6;
        JTextField t7;
        JLabel nameLabel2;
        JLabel studentnumber;
        JLabel major;
        JLabel age;
        JLabel sex;
        JButton b7;
        JButton b8;
        JLabel l1;
        public AFrame3(String title){
            super(title);
          //构造函数AFrame3接收一个字符串参数title,表示窗口的标题。
            this.setLayout(null);
            //绝对布局
 
            l1 = new JLabel("录入系统");
            l1.setForeground(Color.gray);
            l1.setFont(new Font("宋体",Font.BOLD,20));
            l1.setHorizontalAlignment(JTextField.CENTER);
            nameLabel2 =new JLabel("姓名:");
            nameLabel2.setFont(new Font("宋体",Font.BOLD,25));
            nameLabel2.setHorizontalAlignment(JTextField.CENTER);
            major =new JLabel("专业:");
            major.setFont(new Font("宋体",Font.BOLD,25));
            major.setHorizontalAlignment(JTextField.CENTER);
            age =new JLabel("年龄:");
            age.setFont(new Font("宋体",Font.BOLD,25));
            age.setHorizontalAlignment(JTextField.CENTER);
            sex =new JLabel("性别:");
            sex.setFont(new Font("宋体",Font.BOLD,25));
            sex.setHorizontalAlignment(JTextField.CENTER);
            studentnumber = new JLabel("学号:");
            studentnumber.setFont(new Font("宋体",Font.BOLD,25));
            studentnumber.setHorizontalAlignment(JTextField.CENTER);
          //上述代码用来设置文本框对应左边文字大小
 
            t3 =new JTextField(25);
            t3.setFont(new Font("宋体",Font.BOLD,25));
            t4 =new JTextField(25);
            t4.setFont(new Font("宋体",Font.BOLD,25));
            t5 =new JTextField(25);
            t5.setFont(new Font("宋体",Font.BOLD,25));
            t6 =new JTextField(25);
            t6.setFont(new Font("宋体",Font.BOLD,25));
            t7 =new JTextField(25);
            t7.setFont(new Font("宋体",Font.BOLD,25));
          //上述代码用来设置文本框内文字大小
 
            b7 = new JButton("录入");
            b8 = new JButton("取消");
 
            b8.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    JOptionPane.showMessageDialog(null,"单击确定退出");
                    System.exit(0);
                }
            });
          //为按钮b8添加动作监听器,当按钮被点击时触发actionPerformed方法。
    
            this.add(t3);
            this.add(t4);
            this.add(t5);
            this.add(t6);
            this.add(t7);
            this.add(nameLabel2);
            this.add(major);
            this.add(age);
            this.add(sex);
            this.add(studentnumber);
            this.add(l1);
            this.add(b8);
            this.add(b7);
          //添加录入模块的各个部分
 
    
            t3.setBounds(180,40,180,50);
            t4.setBounds(180,100,180,50);
            t5.setBounds(180,160,180,50);
            t6.setBounds(180,220,180,50);
            t7.setBounds(180,280,180,50);
            nameLabel2.setBounds(0,40,180,50);
            age.setBounds(0,100,180,50);
            sex.setBounds(0,160,180,50);
            studentnumber.setBounds(0,220,180,50);
            major.setBounds(0,280,180,50);
            l1.setBounds(0,0,360,40);
            b7.setBounds(50,360,100,50);
            b8.setBounds(220,360,100,50);
          //为录入模块设置大小
            
            
            this.setBounds(900,300,400,500);
          //设置单击录入后呈现的模块的大小
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//xiugai
            this.setVisible(true);
        }
    }
    
    //查询模块
    class AFrame4 extends JFrame{
        JButton b9;
        JButton b10;
        JTextField t8;
        JLabel l2;
        JLabel l3;
        public AFrame4(String title){
            super(title);
            b9 = new JButton("查询");
            b10 = new JButton("取消");
            t8 = new JTextField(25);//输入学号的文本框
            t8.setFont(new Font("宋体",Font.BOLD,25));
            l2 = new JLabel("输入学号:");
            l2.setFont(new Font("宋体",Font.BOLD,25));//输入学号的标签的大小
            l2.setHorizontalAlignment(JTextField.CENTER);
            l3 = new JLabel("查询系统");
            l3.setForeground(Color.gray);
            l3.setFont(new Font("宋体",Font.BOLD,20));
            l3.setHorizontalAlignment(JTextField.CENTER);
    
            this.add(b9);
            this.add(b10);
            this.add(t8);
            this.add(l2);
            this.add(l3);
    
            b9.setBounds(50,300,100,50);
            b10.setBounds(200,300,100,50);
            t8.setBounds(180,160,180,50);
            l2.setBounds(0,160,180,50);
            l3.setBounds(0,0,360,40);
          //设置查询界面各个内容的位置和大小
 
            b10.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    JOptionPane.showMessageDialog(null,"单击确定退出");
                    System.exit(0);
                }
            });
    
            this.setLayout(null);
            this.setBounds(900,300,400,500);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
        }
    }
    class AFrame5 extends AFrame4{
        public AFrame5(String title){
            super(title);
            l3.setText("修改系统");
        }       
    }
    class AFrame6 extends AFrame4{
        public AFrame6(String title){
            super(title);
            l3.setText("删除系统");
        }
    }
}

 2、Student.java类

package 学生信息管理系统;
class User{
	private String userId;
	private String password;
	public String getUserId(){
		return userId;
	}
	public void setUserId(String userId){
		this.userId=userId;
	}
	public String getPassword(){
		return password;
	}
	public void setPassword(String password){
		this.password=password;
	}
}
public class Student extends User{
 private String id;
 private String name;
 private String sex;
 private String age;
 private String phone;
 private String qq;
 private String major;
 public String getId(){
	 return id;
 }
 public void setId(String id){
	 this.id=id;
 }
 public String getName(){
	 return name;
 }
 public void setName(String name){
	 this.name=name;
 }
 public String getSex(){
	 return sex;
 }
 public void setSex(String sex){
	 this.sex=sex;
 }
 public String getAge(){
	 return age;
 }
 public void setAge(String age){
	 this.age=age;
 }
 public String getPhone(){
	 return phone;
 }
 public void setPhone(String phone){
	 this.phone=phone;
 }
 public String getQq(){
	 return qq;
 }
 public void setQq(String qq){
	 this.qq=qq;
 }
 public String getMajor(){
	 return major;
 }
 public void setMajor(String major){
	 this.major=major;
 }
}

 3、ConnectSQLServer类

package 学生信息管理系统;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.swing.JOptionPane;
 // 本程序未连接数据库
 class DatebaseConnection {
	//数据库连接成功
	public final String DBDRIVER="net.sourceforge.jtds.jdbc.Driver";
	//数据库连接的URL
	public  final String DBURL="jdbc:jtds:sqlserver://127.0.0.1:3606/Competition";
	//数据库登录名
	public final String DBUSER="root";
	//数据库登录密码
	public final String DBPASS="123456";
	private Connection conn=null;
	public DatebaseConnection(){
		try{
			//加载数据库驱动
			Class.forName(DBDRIVER);
			//获取数据库连接
			conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		}catch(SQLException e){
			JOptionPane.showMessageDialog(null,"数据库连接失败","异常",JOptionPane.ERROR_MESSAGE );
			System.exit(0);
		}catch(ClassNotFoundException e){
			JOptionPane.showMessageDialog(null, "驱动加载失败","异常",JOptionPane.ERROR_MESSAGE );
			System.exit(0);
		}
	}
	public Connection getConnection(){
		return this.conn;
	}
	public void close(){
		//关闭数据库连接
		if(this.conn!=null){
			try{
				this.conn.close();
			}catch(SQLException e){}
		}
	}
 }
	public class ConnectSQLServer{
	public static void main(String[] args) {
		try{
			Connection con=new DatebaseConnection().getConnection();
			if(con!=null){
				JOptionPane.showMessageDialog(null,"数据库连接成功","祝贺",JOptionPane.INFORMATION_MESSAGE );
				System.exit(0);
			}else{
				JOptionPane.showMessageDialog(null, "数据库连接失败","错误",JOptionPane.ERROR_MESSAGE );
				System.exit(0);
			}
			con.close();
		}catch(SQLException e){
			e.printStackTrace();  
			}

	}
	}

 4、LoginGUI类

​
package 学生信息管理系统;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class LoginGUI{
	private JFrame jf;
	//水平box
	private Box center=Box.createVerticalBox();
	//学号的JPanel
	private JPanel idPanel=new JPanel();
	//密码的JPanel
	private JPanel passwordPanel=new JPanel();
	private JLabel lUserId=new JLabel("用户名");
	private JTextField tUserId=new JTextField(15);
	private JLabel lPassword=new JLabel("密   码");
	private JPasswordField tPassword=new JPasswordField(15);
	//按钮的JPanel
	private JPanel buttonPanel=new JPanel();
	private JButton bLogin=new JButton("登录");
	private JButton bCancel=new JButton("取消");
	//设置运行时窗口的大小
	Dimension faceSize=new Dimension(350,150);
	//获得屏幕的大小
	Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
	public void init(){
		jf=new JFrame("学生信息管理系统");
		//设置JFrame的名称
		jf.setTitle("登录");
		//将lUserId,tUserId放在idPanel中,idPanel默认水平放置
		idPanel.add(lUserId);
		idPanel.add(tUserId);
		passwordPanel.add(lPassword);
		passwordPanel.add(tPassword);
		center.add(idPanel);
		center.add(passwordPanel);
		buttonPanel.add(bLogin);
		buttonPanel.add(bCancel);
		//登录按钮的监听器
		bLogin.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				String userId=tUserId.getText();
				String password=String.valueOf(tPassword.getPassword());
				//开启接受数据的线程
				if(userId.trim().equals("")||userId==null||password.trim().equals("")||password==null){
					JOptionPane.showMessageDialog(jf,"用户名或密码不能为空!","提示",JOptionPane.WARNING_MESSAGE);
				}else{
					if(userId.equals("0")&&password.equals("0")){//真正的账号密码
						new StudentManageView().init();
					}else{
						loginFailure();
					}
				}
			}
			
		});
		//取消按钮的监听器
		bCancel.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				System.exit(0);
			}
		});
		center.add(buttonPanel);
		jf.add(center);
		jf.pack();
		//设置JFame运行时的大小
		jf.setSize(faceSize);
		//设置JFame运行时的位置
		jf.setLocation((int)(screenSize.width-faceSize.getWidth())/2,(int)(screenSize.height-faceSize.getHeight())/2);
		//设置JFrame不可最大化
		jf.setResizable(false);
		//设置JFrame单机X时结束程序
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置JFrame可见
		jf.setVisible(true);
	}
	public void loginFailure(){
		JOptionPane.showMessageDialog(jf, "用户名或密码输入不正确!","提示",JOptionPane.WARNING_MESSAGE);
	}
	public static void main(String args[])throws Exception{
		new LoginGUI().init();
	}
}
class MyJTable extends JTable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -3083638370004874364L;
	public MyJTable(TableModel dm){
		super(dm);
	}
	//设置表格不可编辑
	public boolean isCellEditable(int rowIndex,int columnIndex){
		return false;
	}
}
class StudentService{
	private Student[] students=new Student[50];
	//添加学生信息
	public void insert(Student s){
		for(int i=0;i<students.length;i++){
			if(students[i]==null){
				students[i]=s;
				System.out.println("添加成功!");
				break;
			}
		}
	}
	//删除学生信息
	public int delete(String userId){
		int flag=0;
		for(int i=0;i<students.length;i++){
			if(students[i]!=null){
				if(students[i].getUserId().equals(userId)){
					students[i]=null;
					System.out.print("删除成功!");
					flag=1;
					break;
				}
			}
		}
		return flag;
	}
	//修改学生信息
	public void update(Student s){
		String userId=s.getUserId();
		for(int i=0;i<students.length;i++){
			if(students[i]!=null){
				if(students[i].getUserId().equals(userId)){
					students[i].setId(s.getId());
					students[i].setName(s.getName());
					students[i].setSex(s.getSex());
					students[i].setAge(s.getAge());
					students[i].setPhone(s.getPhone());
					students[i].setQq(s.getQq());
					students[i].setMajor(s.getMajor());
				}
			}
		}
	}
	//按学号查询
	public Student selectById(String userId){
		for(Student s:students){
			if(s!=null){
				if(s.getUserId().equals(userId)){
					return s;
				}
			}
		}
		return null;
	}
	//查询所有学生信息
	public Student[] selectAll(){
		return students;
	}
}
  class StudentManageView {
	//按学号查询
	private JPanel pSelect=new JPanel();
	private JLabel lSelect=new JLabel("学号");
	private JTextField tSelect=new JTextField(15);
	private JButton bSelect=new JButton("查询");
	//查询结果放在一个JTable
	private MyJTable table;
	private DefaultTableModel tableModel;
	private JScrollPane tableScrollPane;
	private Object[] tableTitle={"学号","姓名","性别","年龄","手机号","QQ","专业"};
	private Object[][]tableData={new Object[]{""}};
	//对学生信息进行管理的添加、删除、修改按钮
	private JPanel buttonPanel=new JPanel();
	private JButton insert=new JButton("添加");
	private JButton delete=new JButton("删除");
	private JButton update=new JButton("修改");
	//单机添加、修改时弹出的对话框
	private JDialog dialog=new JDialog(jf,"学生管理");
	private Box box=Box.createVerticalBox();
	private JPanel pId=new JPanel(new FlowLayout(FlowLayout.LEFT));
	private JPanel pName=new JPanel(new FlowLayout(FlowLayout.LEFT));
	private JPanel pSex=new JPanel(new FlowLayout(FlowLayout.LEFT));
	private JPanel pAge=new JPanel(new FlowLayout(FlowLayout.LEFT));
	private JPanel pPhone=new JPanel(new FlowLayout(FlowLayout.LEFT));
	private JPanel pQq=new JPanel(new FlowLayout(FlowLayout.LEFT));
	private JPanel pMajor=new JPanel(new FlowLayout(FlowLayout.LEFT));
	private JLabel lId=new JLabel("学 号");
	private JLabel lName=new JLabel("姓 名");
	private JLabel lSex=new JLabel("性 别");
	private JLabel lAge=new JLabel("年 龄");
	private JLabel lPhone=new JLabel("手 机");
	private JLabel lQq=new JLabel("Q Q");
	private JLabel lMajor=new JLabel("专 业"); 
	private JTextField tId=new JTextField(15);
	private JTextField tName=new JTextField(15);
	private ButtonGroup bSex=new ButtonGroup();
	private JRadioButton boy=new JRadioButton("男");
	private JRadioButton girl=new JRadioButton("女");
	private JTextField tAge=new JTextField(15);
	private JTextField tPhone=new JTextField(15);
	private JTextField tQq=new JTextField(15);
	private JTextField tMajor=new JTextField(15);
	private JPanel pButton=new JPanel();
	private JButton confirm=new JButton("确认");
	private JButton cancel=new JButton("取消");
	private StudentService service=new StudentService();
	//用于标记是添加还是修改
	private String id;
	void init(){
		pSelect.add(lSelect);
		pSelect.add(tSelect);
		pSelect.add(bSelect);
		//查询按钮的监听器
		bSelect.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				String userId=tSelect.getText().trim();
				if(userId.equals("")){
					Student[] student=service.selectAll();
					clearTable();
					for(Student s:student){
						insertTable(s);
					}
				}else{
					Student s=service.selectById(userId);
					if(s!=null){
						clearTable();
						insertTable(s);
					}else{
						selectFailure();
					}
				}
			}
		
	});
		//table
		tableModel=new DefaultTableModel(tableData,tableTitle);
		table=new MyJTable(tableModel);
		tableScrollPane=new JScrollPane(table,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED  );
		//button
		buttonPanel.add(insert);
		buttonPanel.add(delete);
		buttonPanel.add(update);
		//添加按钮的监听器
		insert.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				//如果是添加,则将id=null;
				id=null;
				tId.setText("");
				tId.setEditable(true);
				tName.setText("");
				bSex.clearSelection();
				tAge.setText("");
				tPhone.setText("");
				tQq.setText("");
				tMajor.setText("");
				dialog.setVisible(true);
				
			}
		});
		//删除按钮的监听器
		delete.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				//获得选择删除的行号数组
				int[] selected=table.getSelectedRows();
				//如果selected的长度为0,说明没有选择要删除的
				if(selected.length==0){
					JOptionPane.showMessageDialog(jf, "请选择要删除的信息!","提示",JOptionPane.WARNING_MESSAGE );
				}else{
					//提示是否要进行删除
					int flag=JOptionPane.showConfirmDialog(jf, "确认删除吗?","提示",JOptionPane.WARNING_MESSAGE );
					//如果选择是,则进行删除
					if(flag==JOptionPane.OK_OPTION ){
						for(int i=selected.length-1;i>=0;i--){
							service.delete((String)tableModel.getValueAt(selected[i], 0));
							tableModel.removeRow(selected[i]);
						}
					}
				}
			}
		});
		//修改按钮的监听器
		 update.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
		    int row=table.getSelectedRow();
		    //如果要进行修改,就将id=要修改的学号
		    id=String.valueOf(table.getValueAt(row, 0));
		    //设置tId的内容
		    tId.setText(id);
		    //设置tId不可修改
		    tId.setEditable(false);
		    tName.setText(String.valueOf(table.getValueAt(row, 1)));
		    String sex=(String) table.getValueAt(row, 2);
		    //如果性别是"男",则将单选框中的男选中,否则选中女
		    if(sex.equals("男")){
		    	bSex.setSelected(boy.getModel(),true);
		    }else{
		    	bSex.setSelected(girl.getModel(),true);
		    }
		    tAge.setText(String.valueOf(table.getValueAt(row, 3)));
		    tPhone.setText(String.valueOf(table.getValueAt(row, 4)));
		    tQq.setText(String.valueOf(table.getValueAt(row, 5)));
		    tMajor.setText(String.valueOf(table.getValueAt(row, 6)));
		    //设置dialog可见
		    dialog.setVisible(true);
		    }
});
		jf.setLayout(new BorderLayout());
		//设置pSelect在jf的北面
		jf.add(pSelect,BorderLayout.NORTH);
		//设置pSelect在jf的中心
		jf.add(tableScrollPane,BorderLayout.CENTER );
		//设置pSelelct在jf的南面
		jf.add(buttonPanel,BorderLayout.SOUTH);
		jf.pack();
		jf.setSize(faceSize);
		jf.setLocation((int)(screenSize.width-faceSize.getWidth())/2,(int)(screenSize.height-faceSize.getHeight())/2);
		jf.setResizable(false);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setVisible(true);
		pId.add(lId);
		pId.add(tId);
		pName.add(lName);
		pName.add(tName);
		pSex.add(lSex);
		bSex.add(boy);
		bSex.add(girl);
		pSex.add(boy);
		pSex.add(girl);
		pAge.add(lAge);
		pAge.add(tAge);
		pPhone.add(lPhone);
		pPhone.add(tPhone);
		pQq.add(lQq);
		pQq.add(tQq);
		pMajor.add(lMajor);
		pMajor.add(tMajor);
		pButton.add(confirm);
		pButton.add(cancel);
		//确定按钮的监听器
		confirm.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
			Student student=new Student();
			student.setUserId(tId.getText());
			student.setPassword(tId.getText());
			student.setId(tId.getText());
			student.setName(tName.getText());
			String sex=null;
			if(boy.isSelected()){
				sex="男";
			}
			if(girl.isSelected()){
				sex="女";
			}
			student.setSex(sex);
			student.setAge(tAge.getText());
			student.setPhone(tPhone.getText());
			student.setQq(tQq.getText());
			student.setMajor(tMajor.getText());
			if(id!=null){
				service.update(student);
			}else{
				service.insert(student);
			}
			dialog.dispose();
			}
		});
		//取消按钮的监听器
		cancel.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				dialog.dispose();
			}
		});
		
		box.add(pId);
		box.add(pName);
		box.add(pPhone);
		box.add(pSex);
		box.add(pAge);
		box.add(pPhone);
		box.add(pQq);
		box.add(pMajor);
		box.add(pButton);
		box.add(pButton);
		dialog.add(box);
		dialog.setBounds((int)(screenSize.width-280)/2,(int)(screenSize.height-300)/2,280,350);
	}
		public void insertTable(Student student){
			if(student!=null){
				String[]newCell=new String[7];
				newCell[0]=student.getId();
				newCell[1]=student.getName();
				newCell[2]=student.getSex();
				newCell[3]=student.getAge();
				newCell[4]=student.getPhone();
				newCell[5]=student.getQq();
				newCell[6]=student.getMajor();
				tableModel.addRow(newCell);
			}
		}
		public void clearTable(){
			int rows=tableModel.getRowCount();
			for(int i=rows-1;i>=0;i++){
				tableModel.removeRow(i);
			}
		}
		public void selectFailure(){
			JOptionPane.showMessageDialog(jf,"不存在该学号的学生!","提示",JOptionPane.WARNING_MESSAGE );
		}
}

​

 团队git链接:学生信息管理系统: Java课程设计——学生信息管理系统 (gitee.com)

五.项目运行图片

1.登录

(1)程序设计的任务是先设计出一个登录窗口,输入用户名和密码。

 如果输入错误,会像如图所示输出“用户名或密码输入不正确”的对话框。

 

代码为了方便调试,用户名和密码全是0,程序入口是LoginGUI类。

(2)如果正确,则成功登录,进入学生信息管理界面,如图所示:

2.添加

 (1)点击“添加”按钮,进入学生信息添加界面: 

 

(2)点击“确认”按钮,即可保存学生信息。再添加一个学生的信息,输入完信息后,点击确认按钮添加成功,如下图所示: 

3.查询

(1)在学生管理界面的学生信息列表中点击“查询”按钮,即可显示已经添加的学生信息记录。第一次点查询是查询学号为空的学生,自然是不存在,第二次查点询则显示所有的学生。这是将全查和查询单个学生的功能放到一起。

 

 (2)也可以在“查询”的文本框内输入学号,然后点击“查询”按钮,会跳出所对应的学生记录,如图所示:

 4.修改

 (1)选择侯悦涵这条记录,再点击“修改”按钮,弹出对话框,这里可以修改除了学号之外的其他学生信息,修改完成后点击确认按钮即可。

 

 

 (2)再次点击“查询”按钮刷新窗口数据,显示出修改后的信息,如下图所示:

 5.删除

(1)在学生信息管理系统界面选中某一学生记录,单击“删除”按钮,弹出删除确认界面。如果确认删除,单击“确定”按钮,否则单击“取消”按钮。

 

 (2)我们点击确定按钮,这条学生数据就被删除了。

 6.退出

点击右上角的X,将关闭所有程序窗口。

;