一.项目简介
二.项目构架图
三.团队成员任务简介
四.代码和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,将关闭所有程序窗口。