GUI+Mysql 仿照水果超市实现学生管理系统!
**当我们学习完到GUI界面和JDBC的时候,就可以实现一些简单的小程序的。
下面是一个仿照水果超市实现学生管理系统的介绍,由一个主类实现。**
首先,他的具体功能。
界面中包含有表格(用于显示全部学生信息)、文本输入框(输入学号、姓名等内容)、单选按钮(性别)、下拉列表框(可选专业、年级等内容)、对话框和相关功能按钮:
(1)程序开始运行时,除表格有内容(内容从数据库中读取),界面上的【添加】按钮生效,【修改】和【删除】按钮失效,其余控件(如文本框或单选按钮等)内容为空。
(2)当在文本框等控件输入信息后,按下【添加】按钮,判断所填信息是否完整,如是则将所填内容添加到数据库中,并更新表格内容。
(3)当双击表格中的任何一条记录时,该条记录的各项内容在表格下方对应的控件显示,此时【添加】按钮失效,【修改】和【删除】按钮生效。
(4)当按下【修改】按钮时,该条学生记录的信息进行更改,表格中的内容刷新,数据库中该条记录被修改,同时弹出“记录修改成功!”的提示对话框。
(5)当按下【删除】按钮时,则将该条学生记录的信息删除,表格中的内容更新,数据库中该条记录被删除,同时弹出“记录删除成功!”的提示对话框。
(6)有菜单栏实现,按使表格信息按不同关键字进行排序。
如下图
**废话不多说,下面是主界面代码。**
import java.awt.Font;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import java.awt.event.*;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Vector;
public class StudentFrame extends JFrame {
private static final long serialVersionUID = 1L;
private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost:3306/"数据库名"?serverTimezone=GMT&&useSSL=false";
private static final String USER = "";//用户名
private static final String PASS = "";//密码
private String MIDItem = "";
private String sqlE="select *from TStudent order by stuid;";
private String sql="SELECT *FROM tstudent";
private String sqlA = "insert into tstudent(stuid,stuname,stusex,stugrade,stuclass,stupro)values(?,?,?,?,?,?)";
String sqlD = "DELETE FROM tstudent WHERE stuid='";
private Connection conn = null;
private ResultSet res = null;
private Statement stat = null;
private PreparedStatement ps = null;
private JLabel tableLabel = new JLabel("学生列表");// 标签
private JScrollPane tablePane = new JScrollPane();
private TableModel datastu1;
private JTable table = new JTable(datastu1) { // 表格可选中,不可改
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int rowIndex, int ColIndex) {
return false;
}
};
// 提示标签
private JLabel stuid = new JLabel("学号");
private JLabel stuname = new JLabel("姓名");
private JLabel stusex = new JLabel("性别");
private JLabel stugrade = new JLabel("年级");
private JLabel stuclass = new JLabel("班级");
private JLabel stupro = new JLabel("专业");
// 文本框
private JTextField AddID = new JTextField(10);
private JTextField Addname = new JTextField(6);
private JTextField ChangeID = new JTextField(10);
private JTextField Changename = new JTextField(6);
private JTextField DeleteID = new JTextField(10);
// 单选框
private JPanel jpanel1 = new JPanel();
private JPanel jpanel2 = new JPanel();
private JRadioButton man1 = new JRadioButton("男");
private JRadioButton women1 = new JRadioButton("女");
private JRadioButton man2 = new JRadioButton("男");
private JRadioButton women2 = new JRadioButton("女");
private ButtonGroup Addsex = new ButtonGroup();
private ButtonGroup Changesex = new ButtonGroup();
// 组合框
private JComboBox<String> Addgrade = new JComboBox<String>();
private JComboBox<String> Addclass = new JComboBox<String>();
private JComboBox<String> Addpro = new JComboBox<String>();
private JComboBox<String> Changegrade = new JComboBox<String>();
private JComboBox<String> Changeclass = new JComboBox<String>();
private JComboBox<String> Changepro = new JComboBox<String>();
// 按钮
private JButton Add = new JButton("增加");
private JButton Change = new JButton("修改");
private JButton Delete = new JButton("删除");
//菜单
JMenuBar mainMenu = new JMenuBar();//创建菜单栏对象
JMenu RefreshMenu = new JMenu("刷新");// 创建菜单对象
JMenu HelpMenu = new JMenu("帮助");
JMenu ExitMenu = new JMenu("退出");
JMenuItem SortID=new JMenuItem("按学号");//创建子菜单对象
JMenuItem SortName=new JMenuItem("按名字");
JMenuItem SortSex=new JMenuItem("按性别");
JMenuItem SortGrade=new JMenuItem("按年级");
JMenuItem SortClass=new JMenuItem("按班级");
JMenuItem SortPro=new JMenuItem("按专业");
JMenuItem help=new JMenuItem("help");
JMenuItem About=new JMenuItem("关于");
public StudentFrame() {
super();
this.init();
this.addComponent();
this.addListener();
this.setJMenuBar(mainMenu);//加载
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
queryStuItem();
}
private void init() {
this.setTitle("学生管理页面");
this.setSize(600, 450);
GUITools.center(this);
this.setResizable(false);
}
// 组件加载
private void addComponent() {
/*
* 菜单
* */
mainMenu.add(RefreshMenu);
mainMenu.add(HelpMenu);
mainMenu.add(ExitMenu);
RefreshMenu.add(SortID);
RefreshMenu.add(SortName);
RefreshMenu.add(SortSex);
RefreshMenu.add(SortGrade);
RefreshMenu.add(SortClass);
RefreshMenu.add(SortPro);
HelpMenu.add(help);
HelpMenu.add(About);
/*
* 表格处理
*/
this.setLayout(null);
tableLabel.setBounds(265, 0, 70, 40);
this.add(tableLabel);
table.getTableHeader().setReorderingAllowed(false);// 列不能移动
table.getTableHeader().setResizingAllowed(false);// 行不能移动
// table.setEnabled(false);// 不可更改数据
tablePane.setBounds(30, 30, 530, 220);
tablePane.setViewportView(table);// 视口装入表格
this.add(tablePane);
/*
* 标签提示
*/
stuid.setBounds(20, 250, 70, 25);
stuname.setBounds(100, 250, 70, 25);
stusex.setBounds(180, 250, 70, 25);
stugrade.setBounds(260, 250, 70, 25);
stuclass.setBounds(340, 250, 70, 25);
stupro.setBounds(420, 250, 70, 25);
this.add(stuid);
this.add(stuname);
this.add(stusex);
this.add(stugrade);
this.add(stuclass);
this.add(stupro);
/*
* 文本框
*/
AddID.setBounds(10, 280, 60, 20);
Addname.setBounds(85, 280, 60, 20);
ChangeID.setBounds(10, 315, 60, 20);
Changename.setBounds(85, 315, 60, 20);
DeleteID.setBounds(10, 350, 60, 20);
this.add(AddID);
this.add(Addname);
this.add(ChangeID);
this.add(Changename);
this.add(DeleteID);
/*
* 单选框
*/
jpanel1.add(man1);
jpanel1.add(women1);
Addsex.add(man1);
Addsex.add(women1);
jpanel1.setBounds(155, 270, 90, 30);
this.add(jpanel1);
jpanel2.add(man2);
jpanel2.add(women2);
Changesex.add(man2);
Changesex.add(women2);
jpanel2.setBounds(155, 305, 90, 30);
this.add(jpanel2);
/*
* 组合框
*/
Addgrade.setBounds(250, 280, 60, 20);
Addgrade.addItem("年级");
Addgrade.addItem("2020");
Addgrade.addItem("2021");
Addclass.setBounds(320, 280, 60, 20);
Addclass.addItem("班级");
Addclass.addItem("1");
Addclass.addItem("2");
Addclass.addItem("3");
Addclass.addItem("4");
Addpro.setBounds(390, 280, 70, 20);
Addpro.addItem("专业");
Addpro.addItem("物联网");
Addpro.addItem("计算机科学");
Addpro.addItem("大数据分析");
Addpro.addItem("信息科学");
this.add(Addgrade);
this.add(Addclass);
this.add(Addpro);
Changegrade.setBounds(250, 315, 60, 20);
Changegrade.addItem("年级");
Changegrade.addItem("2020");
Changegrade.addItem("2021");
Changeclass.setBounds(320, 315, 60, 20);
Changeclass.addItem("班级");
Changeclass.addItem("1");
Changeclass.addItem("2");
Changeclass.addItem("3");
Changeclass.addItem("4");
Changepro.setBounds(390, 315, 70, 20);
Changepro.addItem("专业");
Changepro.addItem("物联网");
Changepro.addItem("计算机科学");
Changepro.addItem("大数据分析");
Changepro.addItem("信息科学");
this.add(Changegrade);
this.add(Changeclass);
this.add(Changepro);
/*
* 按钮增加
*/
Add.setBounds(480, 280, 60, 25);
Add.setFont(new Font("Sans-Serif", Font.BOLD, 13));
Change.setBounds(480, 315, 60, 25);
Change.setFont(new Font("Sans-Serif", Font.BOLD, 13));
Delete.setBounds(480, 350, 60, 25);
Delete.setFont(new Font("Sans-Serif", Font.BOLD, 13));
this.add(Add);
this.add(Change);
this.add(Delete);
}
// 监听器实现
private void addListener() {
Add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
System.out.println("add...........");
AddStuItem();
}
});
Change.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
System.out.println("change...........");
ChangeStuItem();
}
});
Delete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
System.out.println("delete...........");
DeleStuItem();
}
});
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 单选
table.addMouseListener(new MouseAdapter() { // 鼠标事件
public void mouseClicked(MouseEvent e) {
int selectedRow = table.getSelectedRow(); // 获得选中行索引
Object oa = datastu1.getValueAt(selectedRow, 0);
Object ob = datastu1.getValueAt(selectedRow, 1);
Object oc = datastu1.getValueAt(selectedRow, 2);
Object od = datastu1.getValueAt(selectedRow, 3);
Object oe = datastu1.getValueAt(selectedRow, 4);
Object of = datastu1.getValueAt(selectedRow, 5);
MIDItem = (String) oa; //鼠标事件获取到的内容加载到组件
ChangeID.setText(MIDItem);
DeleteID.setText(MIDItem);
String MnameItem = (String) ob;
Changename.setText(MnameItem);
if (oc.equals("男")) {
man2.setSelected(true);
} else {
women2.setSelected(true);
}
Changegrade.setSelectedItem(od);
Changeclass.setSelectedItem(oe);
Changepro.setSelectedItem(of);
System.out.println(oa);
System.out.println(ob);
System.out.println(oc);
System.out.println(od);
System.out.println(oe);
System.out.println(of);
Add.setEnabled(false); //add按钮不可用,chang,delete可以用
Change.setEnabled(true);
Delete.setEnabled(true);
}
});
SortID.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
sqlE=sql+" order by stuid;";
queryStuItem();
}
});
SortName.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
sqlE=sql+" order by stuname;";
queryStuItem();
}
});
SortSex.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
sqlE=sql+" order by stusex;";
queryStuItem();
}
});
SortGrade.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
sqlE=sql+" order by stugrade;";
queryStuItem();
}
});
SortClass.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
sqlE=sql+" order by stuclass;";
queryStuItem();
}
});
SortPro.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
sqlE=sql+" order by stupro;";
queryStuItem();
}
});
help.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
try {
Runtime.getRuntime().exec("explorer https://blog.csdn.net/guyexing");
} catch (IOException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
System.out.println("help");
}
});
About.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
JOptionPane.showMessageDialog(null,"Java学生管理器 计算机1班202041417104","关于管理器",1);
System.out.println("About");
}
});
ExitMenu.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.exit(0);
}
});
}
public void AddStuItem() {
String AddIDItem = AddID.getText();
System.out.println(AddIDItem);
String AddnameItem = Addname.getText();
System.out.println(AddnameItem);
String AddsexItem = "";// 获取选择的单选框文本
if (man1.isSelected()) {
AddsexItem = "男";
} else if (women1.isSelected()) {
AddsexItem = "女";
}
System.out.println(AddsexItem);
String AddgradeItem = (String) Addgrade.getSelectedItem();
System.out.println(AddgradeItem);
String AddclassItem = (String) Addclass.getSelectedItem();
System.out.println(AddclassItem);
String AddproItem = (String) Addpro.getSelectedItem();
System.out.println(AddproItem);
if (AddIDItem.equals("") || AddnameItem.equals("") || (!AddsexItem.equals("男") && !AddsexItem.equals("女"))
|| AddgradeItem.equals("年级") || AddclassItem.equals("班级") || AddproItem.equals("专业")) {
JOptionPane.showMessageDialog(null, "信息不完整请重新填写", "错误", 0);// 错误弹窗
} else {
try {
Class.forName(JDBC_DRIVER);
System.out.println("连接数据库.....");
boolean falg = true;
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stat = conn.createStatement();
res = stat.executeQuery(sql);
System.out.println("MYSQL连接成功");
try {
while(res.next()) {
if(res.getString(1).equals(AddIDItem)) {
falg = false;
break;
}
}
}catch(Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "数据库关闭失败", "错误", 0);// 弹窗
}
if (falg) {
ps = conn.prepareStatement(sqlA);
ps.setString(1, AddIDItem);
ps.setString(2, AddnameItem);
ps.setString(3, AddsexItem);
ps.setString(4, AddgradeItem);
ps.setString(5, AddclassItem);
ps.setString(6, AddproItem);
ps.executeUpdate();
queryStuItem();// 刷新
System.out.println("数据插入成功");
JOptionPane.showMessageDialog(null, "数据插入成功", "正确", 1);// 弹窗
try {
ps.close();
conn.close();
System.out.println("成功关闭");
} catch (Exception o) {
o.printStackTrace();
System.out.println("关闭失败");
JOptionPane.showMessageDialog(null, "数据库关闭失败", "错误", 0);// 弹窗
}
} else {
JOptionPane.showMessageDialog(null, "学号已存在", "错误", 0);// 弹窗
}
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
System.out.println("数据库连接失败");
JOptionPane.showMessageDialog(null, "数据库连接失败", "错误", 0);// 弹窗
}
}
clearT();
}
public void ChangeStuItem() {
String ChangeIDItem = ChangeID.getText();
System.out.println(ChangeIDItem);
String ChangenameItem = Changename.getText();
System.out.println(ChangenameItem);
String ChangesexItem = "";
if (man2.isSelected()) {
ChangesexItem = "男";
} else if (women2.isSelected()) {
ChangesexItem = "女";
}
System.out.println(ChangesexItem);// 输出选择的单选框文本
String ChangegradeItem = (String) Changegrade.getSelectedItem();
System.out.println(ChangegradeItem);
String ChangeclassItem = (String) Changeclass.getSelectedItem();
System.out.println(ChangeclassItem);
String ChangeproItem = (String) Changepro.getSelectedItem();
System.out.println(ChangeproItem);
queryStuItem();// 刷新
if (ChangeIDItem.equals("") || ChangenameItem.equals("")
|| (!ChangesexItem.equals("男") && !ChangesexItem.equals("女")) || ChangegradeItem.equals("年级")
|| ChangeclassItem.equals("班级") || ChangeproItem.equals("专业")) {
JOptionPane.showMessageDialog(null, "信息不完整请重新填写", "错误", 0);// 错误弹窗
} else {
try {
Class.forName(JDBC_DRIVER);
System.out.println("连接数据库....");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stat = conn.createStatement();
res = stat.executeQuery(sql);
System.out.println("MYSQL连接成功");
while (res.next()) {
if (res.getString(1).equals(MIDItem)) {
try {
String sqld = sqlD + MIDItem + "'";
stat = conn.createStatement();
stat.executeUpdate(sqld);
System.out.println("数据删除成功");
ps = conn.prepareStatement(sqlA);
ps.setString(1, ChangeIDItem);
ps.setString(2, ChangenameItem);
ps.setString(3, ChangesexItem);
ps.setString(4, ChangegradeItem);
ps.setString(5, ChangeclassItem);
ps.setString(6, ChangeproItem);
ps.executeUpdate();
System.out.println("数据修改成功");
queryStuItem(); // 更新
JOptionPane.showMessageDialog(null, "数据修改成功", "正确", 1);// 弹窗
} catch (Exception g) {
// TODO Auto-generated catch block
g.printStackTrace();
System.out.println("数据修改失败");
JOptionPane.showMessageDialog(null, "数据修改失败", "错误", 0);// 弹窗
}
try {
stat.close();
conn.close();
System.out.println("成功关闭");
} catch (Exception h) {
h.printStackTrace();
System.out.println("关闭失败");
JOptionPane.showMessageDialog(null, "数据库关闭失败", "错误", 0);// 弹窗
}
break;
}
}
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
JOptionPane.showMessageDialog(null, "数据库连接失败", "错误", 0);// 弹窗
}
}
// 内容重置
clearT();
}
public void DeleStuItem() {
String DeleteIDItem = DeleteID.getText();
System.out.println(DeleteIDItem);
queryStuItem();// 刷新
if (DeleteIDItem.equals("")) {
JOptionPane.showMessageDialog(null, "信息不完整请重新填写", "错误", 0);// 错误弹窗
} else {
boolean falg = true;
try {
Class.forName(JDBC_DRIVER);
System.out.println("连接数据库....");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stat = conn.createStatement();
res = stat.executeQuery(sql);
System.out.println("MYSQL连接成功");
while (res.next()) {
// change
if (res.getString(1).equals(DeleteIDItem)) {
try {
String sqld = sqlD+ DeleteIDItem + "'";
stat = conn.createStatement();
stat.executeUpdate(sqld);
falg = false;
System.out.println("数据删除成功");
queryStuItem();// 刷新
JOptionPane.showMessageDialog(null, "数据删除成功", "正确", 1);// 弹窗
} catch (Exception g) {
// TODO Auto-generated catch block
g.printStackTrace();
System.out.println("数据删除失败");
JOptionPane.showMessageDialog(null, "数据删除失败", "错误", 0);// 弹窗
}
try {
stat.close();
conn.close();
System.out.println("成功关闭");
} catch (Exception h) {
h.printStackTrace();
System.out.println("关闭失败");
JOptionPane.showMessageDialog(null, "数据库关闭失败", "错误", 0);// 弹窗
}
break;
}
}
if (falg) {
System.out.println("数据删除失败");
JOptionPane.showMessageDialog(null, "数据删除失败", "错误", 0);
}
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
JOptionPane.showMessageDialog(null, "数据库连接失败", "错误", 0);
}
}
clearT();
}
public void queryStuItem() {
// TODO Auto-generated method stub
Vector<String> TableName = new Vector<String>();
Vector<Vector<String>> TableData = new Vector<Vector<String>>();
TableName.add("学号");
TableName.add("姓名");
TableName.add("性别");
TableName.add("年级");
TableName.add("班级");
TableName.add("专业");
Add.setEnabled(true);
Change.setEnabled(false);
Delete.setEnabled(false);
try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(DB_URL, USER, PASS);
ps = conn.prepareStatement(sqlE);
res = ps.executeQuery();
while (res.next()) {
Vector<String> hang = new Vector<String>();
hang.add(res.getString(1));
hang.add(res.getString(2));
hang.add(res.getString(3));
hang.add(res.getString(4));
hang.add(res.getString(5));
hang.add(res.getString(6));
TableData.add(hang);
}
System.out.println("成功载入");
} catch (Exception q) {
q.printStackTrace();
System.out.println("载入失败");
JOptionPane.showMessageDialog(null, "数据库连接失败", "错误", 0);
} finally {
try {
res.close();
ps.close();
conn.close();
System.out.println("成功关闭");
} catch (Exception o) {
o.printStackTrace();
System.out.println("关闭失败");
JOptionPane.showMessageDialog(null, "数据库关闭失败", "错误", 0);
}
}
datastu1 = new DefaultTableModel(TableData, TableName);
table.setModel(datastu1);
}
public void clearT() {//信息重置方法
AddID.setText("");
Addname.setText("");
Addsex.clearSelection();
Addgrade.setSelectedIndex(0);
Addclass.setSelectedIndex(0);
Addpro.setSelectedIndex(0);
ChangeID.setText("");
Changename.setText("");
Changesex.clearSelection();
Changegrade.setSelectedIndex(0);
Changeclass.setSelectedIndex(0);
Changepro.setSelectedIndex(0);
DeleteID.setText("");
}
}
下面是一个工具类,其中静态方法center()是实现功能是主页面可以适应屏幕居中,个人感觉没啥用但是书本水果超市有这样一个方法就顺便实现了,不想用的可以把上面代码中的init()方法中的GUITools.center(this);删掉,就不用实现这个工具类。
import java.awt.Toolkit;
import javax.swing.JFrame;
import java.awt.Component;
public class GUITools {
static Toolkit kit=Toolkit.getDefaultToolkit();
public static void center(Component c) {
int x=(kit.getScreenSize().width-c.getWidth())/2;
int y=(kit.getScreenSize().height-c.getHeight())/2;
c.setLocation(x, y);
}
public static void setTitleImage(JFrame frame,String titleIconPath) {
frame.setIconImage(kit.createImage(titleIconPath));
}
}
当然这样程序也不能运行起来。你的数据库要有这样一个叫tstudent的表,而且用以下相同表头。嫌麻烦你也可以把主页面代码中的数据库命令代码修改一下。
下面是测试类。
public class text {
public static void main(String[] args) {
new StudentFrame();
}
}
最后,觉得不错收藏点赞吧。