实现内容:
设计开发一个学生成绩管理系统
(1)根据实现的功能,划分出合理的对象类,明确各个对象类之间的关系。为
各个对象类设计正确的域和方法,为每个方法设计合理的方法体。同时,为对象类及内部的域和方法运用正确的修饰符。
功能要求:
(1)录入成绩 (2) 查询成绩
(3) 成绩排序 (4) 修改成绩
(5) 删除成绩 (6) 将数据保存在数据库表中
该课程设计涉及MySQL数据库,建表操作,java操作SQL语句(JDBC数据库操作)以及JavaSwing与事件处理。
源程序(仅做参考):
//**学生类**
public class Student {
String id; // 学号
String name; // 姓名
float math; //数学成绩
float physics; //物理成绩
float english; //英语成绩
public Student() {
}
public Student(String id, String name, float math, float physics, float english) {
//定义带参的构造函数
super(); //调用父类的无参的构造函数
this.id = id;
this.name = name;
this.math = math;
this.physics = physics;
this.english = english;
}
//定义一个方法设置个变量的值
public void set(String id,String name,float math,float physics,float english) {
this.id = id;
this.name = name;
this.math = math;
this.physics = physics;
this.english = english;
}
public String getId() {
//定义一个方法获取学号
return id;
}
public String getName() {
//定义一个方法获取姓名
return name;
}
public float getMath() {
//定义一个方法获取数学成绩
return math;
}
public float getPhysics() {
//定义一个方法获取物理成绩
return physics;
}
public float getEnglish() {
//定义一个方法获取英语成绩
return english;
}
//重写toString方法 使其输出指定的格式
@Override
public String toString() {
// TODO Auto-generated method stub
return "[ 学号: "+id+" 姓名: "+name+" 数学成绩: "+math+" 物理成绩: "+physics+" 英语成绩: "+english+"]";
}
}
//测试类
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
class mySwing {
JFrame frame; //定义一个窗口
JTabbedPane tabbedPane; //定义一个选项卡窗格
public void init() {
//定义一个方法来对选项卡窗格进行操作
tabbedPane = new JTabbedPane(); //实例化选项卡窗格
tabbedPane.add("录入成绩",new addPanel().panel); //向选项卡窗格中添加”录入成绩“窗格
tabbedPane.add("查询成绩",new checkPanel().panel2); //向选项卡窗格中添加”查询成绩“窗格
tabbedPane.add("排序成绩",new sortPanel().panel3); //向选项卡窗格中添加”排序成绩“窗格
tabbedPane.add("修改成绩",new modifyPanel().panel4); //向选项卡窗格中添加”修改成绩“窗格
tabbedPane.add("删除记录",new deletePanel().panel5); //向选项卡窗格中添加”删除记录“窗格
}
//先创建一个窗口
public mySwing() {
//创建一个无参的构造方法由于初始化窗体
frame = new JFrame("XXX学校学生成绩管理系统"); //实例化窗口
init(); //调用init方法
frame.add(tabbedPane,BorderLayout.NORTH); //向窗口中添加选项卡窗格
frame.setVisible(true); //设置窗口可见
frame.setSize(500, 580); //设置窗口的大小
frame.setLocationRelativeTo(null); //设置窗口的位置为桌面中心
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置单击窗口的关闭按钮后程序自动停止运行
}
}
public class myText {
public static void main(String[] args) {
new mySwing(); //通过匿名对象调用
}
}
//添加数据实现
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class addPanel{
MyDBUtil dbUtil = new MyDBUtil(); //创建自己写的数据库对象
JPanel panel; //定义一个面板引用
//录入成绩 窗口组件设置
JPanel p1,p2,p3,p4; //定义4个面板引用
Box boxH1,boxH2; //创建两个行式盒。
Box box1,box2,box3,box4; //创建四个列式盒
JButton button; //定义一个按钮
JTextField textField1,textField2,textField3,textField4,textField5; //定义五个单行文本框
JTextArea area; //定义一个多行文本框
//录入成绩窗口
public addPanel() {
//创建无参的构造函数
boxH1 = Box.createHorizontalBox(); //实例化行式盒 boxH1
boxH2 = Box.createHorizontalBox(); //实例化行式盒 boxH2
box1 = Box.createVerticalBox(); //实例化列式盒 box1
box1.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box1.add(new JLabel("学号")); //向列式盒中添加 "学号" 标签
box1.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box1.add(new JLabel("数学成绩")); //向列式盒中添加 "数学成绩" 标签
box1.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box1.add(new JLabel("英语成绩")); //向列式盒中添加 "英语成绩" 标签
boxH1.add(box1); //向行式盒中添加列式盒box1
boxH1.add(Box.createHorizontalStrut(55)); //在行式盒中设置一个不可见的长为55的水平Strut对象
box2 = Box.createVerticalBox();//实例化列式盒 box2
textField1 = new JTextField(12); //实例化单行文本框
textField2 = new JTextField(12);//实例化单行文本框
textField3 = new JTextField(12);//实例化单行文本框
box2.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box2.add(textField1); //向列式盒中添加单行文本框
box2.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box2.add(textField2); //向列式盒中添加单行文本框
box2.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box2.add(textField3); //向列式盒中添加单行文本框
boxH1.add(box2); //向行式盒中添加列式盒box2
box3 = Box.createVerticalBox(); //实例化列式盒 box3
box3.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box3.add(new JLabel("姓名")); //向列式盒中添加 "姓名" 标签
box3.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box3.add(new JLabel("物理成绩")); //向列式盒中添加 "物理成绩" 标签
boxH2.add(box3); //向行式盒中添加列式盒box3
boxH2.add(Box.createHorizontalStrut(55)); //在行式盒中设置一个不可见的长为55的水平Strut对象
box4 = Box.createVerticalBox();//实例化列式盒 box3
box4.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
textField4 = new JTextField(12); //实例化单行文本框
textField5 = new JTextField(12); //实例化单行文本框
box4.add(textField4);//向列式盒中添加单行文本框
box4.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box4.add(textField5);//向列式盒中添加单行文本框
boxH2.add(box4); //向行式盒中添加列式盒box4
button =new JButton("录入"); //实例化按钮对象
button.addActionListener(new ActionListener() {
//事件处理 , 给按钮添加监视器
@Override
public void actionPerformed(ActionEvent e) {
//实例化Student类对象并传值
try {
Student student = new Student(textField1.getText(), textField4.getText(), Float.parseFloat(textField2.getText()), Float.parseFloat(textField5.getText()), Float.parseFloat(textField3.getText()));
dbUtil.add(student); //调用MyDBUtil类中的add方法,并把student作为值传入
area.setText("你输入的信息添加成功!!"+"\r\n"+"你可以通过查询成绩来查看相关信息!!"); //添加成功后设置area中的信息提示
//执行上面的方法后将文本框中的值清除
textField1.setText("");
textField2.setText("");
textField3.setText("");
textField4.setText("");
textField5.setText("");
} catch (NumberFormatException e1) {
// TODO Auto-generated catch block
area.setText("温馨提示!!"+"\r\n"+"添加成绩失败,请重新进行操作!!");//添加失败后设置area中的信息提示
textField1.setText("");
textField2.setText("");
textField3.setText("");
textField4.setText("");
textField5.setText("");
}
}
});
p3 = new JPanel(); //实例化面板对象
p3.setLayout(new FlowLayout(FlowLayout.CENTER,5,100)); //设置p3面板的布局为FlowLayout布局,并设置水平和垂直间距
p3.add(button); //将按钮添加到p3面板中
p1 = new JPanel(); //实例化面板对象
p1.add(boxH1); //向p1面板里添加boxH1
p2 = new JPanel(); //实例化面板对象
p2.add(boxH2); //向p2面板中添加boxH2对象
p4 = new JPanel(); //实例化面板对象
area = new JTextArea("请在下面输入你想存入的相关的信息!!!",3,30); //实例化多行文本框并做初值的设定
p4.add(area); //向p4面板中添加area
panel = new JPanel(); //实例化面板对象
panel.setLayout(new BorderLayout()); //设置panel面板的布局为BorderLayout布局
panel.add(p1,BorderLayout.WEST); //向panel面板的西边添加p1面板
panel.add(p2); //向panel面板中添加p2面板
panel.add(p3,BorderLayout.SOUTH); //向panel面板的南面添加p3面板
panel.add(p4,BorderLayout.NORTH); //向panel面板的北面添加p4面板
}
}
//查询数据实现
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class checkPanel implements ActionListener{
JTable table; //定义一个表格引用
Object name[]={
"学号","姓名","数学成绩","物理成绩","英语成绩"}; //定义一个姓名数组
Object a[][]; //定义一个a数组
ResultSet rs=null;
MyDBUtil dbUtil = new MyDBUtil(); //创建一个MyDBUtil对象
LinkedList <Student>list=null; //定义一个LinkedList集合对象
JPanel panel2; //定义一个面板
JButton button1; //定义一个按钮
//查询成绩窗口设置
public void setList(){
//定义一个方法获取数据并将数据存入集合中
rs= dbUtil.checkAll(); //调用MyDBUtil类中的checkAll方法。
list=new LinkedList<Student>(); //实例化集合对象
if(rs!=null){
try {
while(rs.next()){
//通过循环将数据存入集合中
list.add(new Student(rs.getString(1),rs.getString(2),rs.getFloat(3),rs.getFloat(4),rs.getFloat(5)));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void setTable() {
//定义一个方法设置表格
setList(); //调用setlist方法
a=new Object[list.size()][name.length]; //实例化数组a,并设置其行和列的大小
for(int i=0;i<list.size();i++){
//通过循环向数组中存入数据以放入表格中
Student s=list.get(i); //拿到集合的第i个位置的元素并传给Student对象
//通过Student对象的get方法获取相应的值
a[i][0]=s.getId();
a[i][1]=s.getName();
a[i][2]=s.getMath();
a[i][3]=s.getPhysics();
a[i][4]=s.getEnglish();
}
panel2.removeAll(); //使其面板刷新
button1 = new JButton("刷新"); //实例化按钮对象
button1.addActionListener(this); //给按钮添加监视器
table=new JTable(a, name); //实例化表格
panel2.add(button1,BorderLayout.SOUTH); //向面板中添加按钮
panel2.add(new JScrollPane(table),BorderLayout.NORTH); //向面板中添加表格
}
public checkPanel() {
//定义一个无参的构造函数
panel2 = new JPanel(); //实例化面板对象
panel2.setLayout(new BorderLayout()); //设置面板的布局为BorderLayout()布局。
setTable(); //调用setTable方法
}
@Override
public void actionPerformed(ActionEvent e) {
//添加事件
setTable(); //调用上面的setTable方法
}
}
// 排序实现
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class sortPanel implements ActionListener {
JTable table; //定义一个表格引用
Object name[]={
"学号","姓名","数学成绩","物理成绩","英语成绩"}; //定义一个姓名数组
Object aa[][]; //定义一个aa数组
ResultSet rs=null;
MyDBUtil dbUtil = new MyDBUtil(); //创建一个MyDBUtil对象
LinkedList <Student>list=null; //定义一个LinkedList集合对象
JPanel panel3,p1,p2; //定义三个面板
JTextField field; //定义一个单行文本框
JTextArea area; //定义一个多行文本框
JButton b1,b2; //定义两个按钮
public void setList(){
//定义一个方法获取数据并将数据存入集合中
rs= dbUtil.checkAll(); //调用MyDBUtil类中的checkAll方法。
list=new LinkedList<Student>(); //实例化集合对象
if(rs!=null){
try {
while(rs.next()){
//通过循环向集合中添加元素
list.add(new Student(rs.getString(1),rs.getString(2),rs.getFloat(3),rs.getFloat(4),rs.getFloat(5)));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void setList1(String grade,String sort){
//定义一个方法获取数据并将数据存入集合中 , 并设定指定的参数
rs= dbUtil.checkAll(grade,sort); //调用MyDBUtil中的带参数的checkAll方法
list=new LinkedList<Student>(); //实例化集合对象
if(rs!=null){
try {
while(rs.next()){
//通过循环向集合中添加元素
list.add(new Student(rs.getString(1),rs.getString(2),rs.getFloat(3),rs.getFloat(4),rs.getFloat(5)));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void setTable() {
//定义一个方法设置表格
setList(); //初始情况下先调用setList方法
aa=new Object[list.size()][name.length]; //实例化数组aa,并设置其行和列的大小
for(int i=0;i<list.size();i++){
//通过循环向数组中存入数据以放入表格中
Student s=list.get(i); //拿到集合的第i个位置的元素并传给Student对象
//通过Student对象的get方法获取相应的值
aa[i][0]=s.getId();
aa[i][1]=s.getName();
aa[i][2]=s.getMath();
aa[i][3]=s.getPhysics();
aa[i][4]=s.getEnglish();
}
panel3.removeAll(); //使其面板刷新
b1 = new JButton("升序"); //实例化按钮对象
b1.addActionListener(this); //给按钮添加监视器
b2 = new JButton("降序"); //实例化按钮对象
b2.addActionListener(this); //给按钮添加监视器
area = new JTextArea("请按表格输入你想排序的信息。如: 数学成绩!!",2,15); //实例化多行文本框
field = new JTextField(16); //实例化单行文本框
p1 = new JPanel(); //实例化面板对象
p1.add(field); //向面板中添加文本框
p1.add(b1); //向面板中添加按钮
p1.add(b2); //向面板中添加按钮
p2 = new JPanel(); //实例化面板对象
p2.setLayout(new BorderLayout()); //设置面板的布局为BorderLayout布局
p2.add(p1,BorderLayout.SOUTH); //向p2面板中添加p1面板
p2.add(area); //向p2面板中添加area
table=new JTable(aa, name); //实例化表格
panel3.add(p2); //向panel3面板中添加p1面板
panel3.add(new JScrollPane(table),BorderLayout.NORTH); //向panel3面板中添加表格
}
public sortPanel() {
panel3 = new JPanel(); //实例化面板对象
panel3.setLayout(new BorderLayout()); //设置面板的布局为BorderLayout布局
setTable(); //调用setTable方法。
}
@Override
public void actionPerformed(ActionEvent e) {
//添加事件
//通过条件语句判断输入的信息是否符合要求
if("学号".equals(field.getText())||"姓名".equals(field.getText())||"数学成绩".equals(field.getText())||"物理成绩".equals(field.getText())||"英语成绩".equals(field.getText())) {
if ("升序".equals(e.getActionCommand())) {
//判断字符是否相等
setList1(field.getText(),"asc"); //条件成立的情况下设置参
aa=new Object[list.size()][name.length]; //实例化数组aa,并设置其行和列的大小
for(int i=0;i<list.size();i++){
//通过循环向数组中存入数据以放入表格中
Student s=list.get(i); //拿到集合的第i个位置的元素并传给Student对象
//通过Student对象的get方法获取相应的值
aa[i][0]=s.getId();
aa[i][1]=s.getName();
aa[i][2]=s.getMath();
aa[i][3]=s.getPhysics();
aa[i][4]=s.getEnglish();
}
panel3.removeAll(); //使其面板刷新
b1 = new JButton("升序"); //实例化按钮对象
b1.addActionListener(this); //给按钮添加监视器
b2 = new JButton("降序"); //实例化按钮对象
b2.addActionListener(this); //给按钮添加监视器
area = new JTextArea(field.getText()+"的升序如表格所示!!",2,15); //实例化多行文本框
field = new JTextField(16); //实例化单行文本框
p1 = new JPanel(); //实例化面板对象
p1.add(field); //向面板中添加文本框
p1.add(b1); //向面板中添加按钮
p1.add(b2); //向面板中添加按钮
p2 = new JPanel(); //实例化面板对象
p2.setLayout(new BorderLayout()); //设置面板的布局为BorderLayout布局
p2.add(p1,BorderLayout.SOUTH); //向p2面板中添加p1面板
p2.add(area); //向p2面板中添加area
table=new JTable(aa, name); //实例化表格
panel3.add(p2); //向panel3面板中添加p1面板
panel3.add(new JScrollPane(table),BorderLayout.NORTH); //向panel3面板中添加表格
}
if ("降序".equals(e.getActionCommand())) {
//判断获取的字符是否相等
setList1(field.getText(),"desc"); //条件成立的情况下设置参数
aa=new Object[list.size()][name.length]; //实例化数组aa,并设置其行和列的大小
for(int i=0;i<list.size();i++){
//通过循环向数组中存入数据以放入表格中
Student s=list.get(i); //拿到集合的第i个位置的元素并传给Student对象
//通过Student对象的get方法获取相应的值
aa[i][0]=s.getId();
aa[i][1]=s.getName();
aa[i][2]=s.getMath();
aa[i][3]=s.getPhysics();
aa[i][4]=s.getEnglish();
}
panel3.removeAll(); //使其面板刷新
b1 = new JButton("升序"); //实例化按钮对象
b1.addActionListener(this); //给按钮添加监视器
b2 = new JButton("降序"); //实例化按钮对象
b2.addActionListener(this); //给按钮添加监视器
area = new JTextArea(field.getText()+"的降序如表格所示!!",2,15); //实例化多行文本框
field = new JTextField(16); //实例化单行文本框
p1 = new JPanel(); //实例化面板对象
p1.add(field); //向面板中添加文本框
p1.add(b1); //向面板中添加按钮
p1.add(b2); //向面板中添加按钮
p2 = new JPanel(); //实例化面板对象
p2.setLayout(new BorderLayout()); //设置面板的布局为BorderLayout布局
p2.add(p1,BorderLayout.SOUTH); //向p2面板中添加p1面板
p2.add(area); //向p2面板中添加area
table=new JTable(aa, name); //实例化表格
panel3.add(p2); //向panel3面板中添加p1面板
panel3.add(new JScrollPane(table),BorderLayout.NORTH); //向panel3面板中添加表格
}
}else {
setList(); //初始情况下先调用setList方法
aa=new Object[list.size()][name.length]; //实例化数组aa,并设置其行和列的大小
for(int i=0;i<list.size();i++){
//通过循环向数组中存入数据以放入表格中
Student s=list.get(i); //拿到集合的第i个位置的元素并传给Student对象
//通过Student对象的get方法获取相应的值
aa[i][0]=s.getId();
aa[i][1]=s.getName();
aa[i][2]=s.getMath();
aa[i][3]=s.getPhysics();
aa[i][4]=s.getEnglish();
}
panel3.removeAll(); //使其面板刷新
b1 = new JButton("升序"); //实例化按钮对象
b1.addActionListener(this); //给按钮添加监视器
b2 = new JButton("降序"); //实例化按钮对象
b2.addActionListener(this); //给按钮添加监视器
area = new JTextArea("温馨提示!!"+"\r\n"+"你输入的信息有误,请按表格输入你想排序的信息!!",2,15); //实例化多行文本框
field = new JTextField(16); //实例化单行文本框
p1 = new JPanel(); //实例化面板对象
p1.add(field); //向面板中添加文本框
p1.add(b1); //向面板中添加按钮
p1.add(b2); //向面板中添加按钮
p2 = new JPanel(); //实例化面板对象
p2.setLayout(new BorderLayout()); //设置面板的布局为BorderLayout布局
p2.add(p1,BorderLayout.SOUTH); //向p2面板中添加p1面板
p2.add(area); //向p2面板中添加area
table=new JTable(aa, name); //实例化表格
panel3.add(p2); //向panel3面板中添加p1面板
panel3.add(new JScrollPane(table),BorderLayout.NORTH); //向panel3面板中添加表格
}
}
}
// 修改数据实现
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class modifyPanel {
MyDBUtil dbUtil = new MyDBUtil(); //创建MyDBUtil类的对象
JPanel panel4; //创建一个面板
//修改成绩窗口组件设置
JPanel p1,p2,p3,p4; //定义四个面板
Box boxH1,boxH2; //定义两个行式盒
Box box1,box2,box3,box4; //定义四个列式盒
JButton button1; //定义一个按钮
JTextField t1,t2,t3,t4,t5,t6; //定义六个单号文本框
JTextArea area;
public modifyPanel() {
//定义一个无参的构造函数
//实例化行式盒
boxH1 = Box.createHorizontalBox();
boxH2 = Box.createHorizontalBox();
box1 = Box.createVerticalBox(); //实例化列式盒
box1.add(Box.createVerticalStrut(50)); //向列式盒中添加不可见的垂直Strut对象
box1.add(new JLabel("学号")); //向列式盒中添加 “学号” 标签
box1.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box1.add(new JLabel("数学成绩")); //向列式盒中添加 “数学成绩” 标签
box1.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box1.add(new JLabel("英语成绩")); //向列式盒中添加 “英语成绩” 标签
boxH1.add(box1); //向行式盒boxH1中添加列式盒box1
boxH1.add(Box.createHorizontalStrut(50)); //在行式盒boxH1中设置一个水平为50的不可见的Strut对象。
box2 = Box.createVerticalBox(); //实例化列式盒
box2.add(Box.createVerticalStrut(50)); //向列式盒中添加不可见的垂直Strut对象
//实例化单行文本框
t1 = new JTextField(12);
t2 = new JTextField(12);
t3 = new JTextField(12);
//向列式盒中添加单行文本框
box2.add(t1);
box2.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box2.add(t2);
box2.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box2.add(t3);
boxH1.add(box2); //向行式盒中添加列式盒
box3 = Box.createVerticalBox(); //实例化列式盒
box3.add(Box.createVerticalStrut(50)); //向列式盒中添加不可见的垂直Strut对象
box3.add(new JLabel("姓名")); //向列式盒中添加 “姓名” 标签
box3.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box3.add(new JLabel("物理成绩")); //向列式盒中添加 “物理成绩” 标签
boxH2.add(box3); //向行式盒中添加列式盒
boxH2.add(Box.createHorizontalStrut(70)); //在行式盒boxH2中设置一个水平为50的不可见的Strut对象
box4 = Box.createVerticalBox(); //实例化列式盒
box4.add(Box.createVerticalStrut(50)); //向列式盒中添加不可见的垂直Strut对象
//实例化单行文本框
t4 = new JTextField(12);
t5 = new JTextField(12);
//向列式盒中添加单行文本框
box4.add(t4);
box4.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
box4.add(t5);
boxH2.add(box4); //向行式盒中添加列式盒
p2 = new JPanel(); //实例化面板对象
p2.add(boxH1); //向p2面板中添加行式盒boxH1
p3 = new JPanel(); //实例化面板对象
p3.add(boxH2); //向p3面板中添加行式盒boxH2
t6 = new JTextField(10); //实例化一个单行文本框
button1 = new JButton("修改"); //实例化一个按钮对象
button1.addActionListener(new ActionListener() {
//给按钮添加监视器处理事件
@Override
public void actionPerformed(ActionEvent e) {
try {
//异常情况处理
if(t1.getText().equals(t6.getText())) {
//通过条件判断语句判断输入的信息是否符合要求
//获取到文本框中的内容传给Student类
Student student = new Student(t1.getText(), t4.getText(), Float.parseFloat(t2.getText()), Float.parseFloat(t5.getText()), Float.parseFloat(t3.getText()));
dbUtil.modify(student); //调用MyDBUtil类中的modify类
area.setText("成绩信息修改成功,你可以通过查询成绩来查看相关信息!!!"); //给多行文本框设值
//运行之后设置文本框的值为空
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
t5.setText("");
t6.setText("");
}else {
area.setText("温馨提示!!"+"\r\n"+"由于两处学号信息不一致,无法进行修改.."+"\r\n"+"请重新输入你想修改的信息!!"); //给多行文本框设值
//运行之后设置文本框的值为空
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
t5.setText("");
t6.setText("");
}
} catch (NumberFormatException e1) {
//异常情况处理
// TODO Auto-generated catch block
area.setText("温馨提示!!"+"\r\n"+"输入的成绩不符合要求,修改失败,请重新进行操作!!");//修改失败后设置area中的信息提示
//运行之后设置文本框的值为空
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
t5.setText("");
t6.setText("");
}
}
});
p4 = new JPanel(); //实例化面板对象
p4.add(new JLabel("输入学号: ")); //向p4面板中添加标签
p4.add(t6); //向p4面板中添加t6文本框
p4.add(button1); //向p4面板添加按钮
area = new JTextArea("请按标签信息输入你想修改的信息!!",5,30); //实例化多行文本框
p1 = new JPanel(); //实例化面板
p1.add(area); //向面板中添加area
panel4 = new JPanel(); //实例化面板对象
panel4.setLayout(new BorderLayout()); //设置panel4面板的布局为BorderLayout布局
panel4.add(p2,BorderLayout.WEST); //向panel4面板中添加p2面板并放在panel4的西面。
panel4.add(p3); //向panel4面板中添加p3面板
panel4.add(p4,BorderLayout.SOUTH); //向panel4面板中添加p4面板并放在panel4的南面。
panel4.add(p1,BorderLayout.NORTH); //向panel4面板中添加p1面板并放在panel4的北面。
}
}
// 删除数据实现
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class deletePanel {
MyDBUtil dbUtil = new MyDBUtil(); //创建MyDBUtil类的对象
JPanel panel5; //定义一个面板对象
JPanel p1,p2,p3,p4; //定义四个面板对象
Box boxH1,boxH2; //定义两个行式盒
Box boxV1,boxV2,boxV3,boxV4; //定义四个列式盒
JButton button1; //定义一个按钮
JTextField te1,te2,te3,te4,te5,te6; //定义六个单行文本框
JTextArea area; //定义一个多行文本框
public deletePanel() {
//定义一个无参的构造函数
//实例化行式盒
boxH1 = Box.createHorizontalBox();
boxH2 = Box.createHorizontalBox();
boxV1 = Box.createVerticalBox(); //实例化列式盒
boxV1.add(Box.createVerticalStrut(50)); //向列式盒中添加不可见的垂直Strut对象
boxV1.add(new JLabel("学号")); //向列式盒中添加 “学号” 标签
boxV1.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
boxV1.add(new JLabel("数学成绩")); //向列式盒中添加 “数学成绩” 标签
boxV1.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
boxV1.add(new JLabel("英语成绩")); //向列式盒中添加 “英语成绩” 标签
boxH1.add(boxV1); //向行式盒boxH1中添加列式盒boxV1
boxH1.add(Box.createHorizontalStrut(50)); //在行式盒boxH1中设置一个水平为50的不可见的Strut对象。
boxV2 = Box.createVerticalBox(); //实例化列式盒
boxV2.add(Box.createVerticalStrut(50)); //向列式盒中添加不可见的垂直Strut对象
//实例化单行文本框
te1 = new JTextField(12);
te2 = new JTextField(12);
te3 = new JTextField(12);
//向列式盒中添加单行文本框
boxV2.add(te1);
boxV2.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
boxV2.add(te2);
boxV2.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
boxV2.add(te3);
boxH1.add(boxV2); //向行式盒中添加列式盒
boxV3 = Box.createVerticalBox(); //实例化列式盒
boxV3.add(Box.createVerticalStrut(50)); //向列式盒中添加不可见的垂直Strut对象
boxV3.add(new JLabel("姓名")); //向列式盒中添加 “姓名” 标签
boxV3.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
boxV3.add(new JLabel("物理成绩")); //向列式盒中添加 “物理成绩” 标签
boxH2.add(boxV3); //向行式盒中添加列式盒
boxH2.add(Box.createHorizontalStrut(70)); //在行式盒boxH2中设置一个水平为50的不可见的Strut对象
boxV4 = Box.createVerticalBox(); //实例化列式盒
boxV4.add(Box.createVerticalStrut(50)); //向列式盒中添加不可见的垂直Strut对象
//实例化单行文本框
te4 = new JTextField(12);
te5 = new JTextField(12);
//向列式盒中添加单行文本框
boxV4.add(te4);
boxV4.add(Box.createVerticalStrut(35)); //向列式盒中添加不可见的垂直Strut对象
boxV4.add(te5);
boxH2.add(boxV4); //向行式盒中添加列式盒
p1 = new JPanel(); //实例化面板对象
p1.add(boxH1); //向p1面板中添加行式盒boxH1
p2 = new JPanel(); //实例化面板对象
p2.add(boxH2); //向p2面板中添加行式盒boxH2
te6 = new JTextField(10); //实例化一个单行文本框
button1 = new JButton("删除"); //实例化一个按钮对象
button1.addActionListener(new ActionListener() {
//给按钮添加监视器处理事件
@Override
public void actionPerformed(ActionEvent e) {
try {
//异常处理
if(te1.getText().equals(te6.getText())) {
//通过条件判断语句判断输入的信息是否符合要求
//获取到文本框中的内容传给Student类
Student student = new Student();
student.set(te1.getText(), te4.getText(), Float.parseFloat(te2.getText()), Float.parseFloat(te5.getText()), Float.parseFloat(te3.getText()));
dbUtil.delete(student); //调用MyDBUtil类中的modify类
area.setText("成绩信息删除成功,你可以通过查询成绩来查看相关信息!!!"); //给多行文本框设值
//运行之后设置文本框的值为空
te1.setText("");
te2.setText("");
te3.setText("");
te4.setText("");
te5.setText("");
te6.setText("");
}else {
area.setText("温馨提示!!"+"\r\n"+"由于两处学号信息不一致,无法进行删除.."+"\r\n"+"请重新输入你想删除的信息!!"); //给多行文本框设值
//运行之后设置文本框的值为空
te1.setText("");
te2.setText("");
te3.setText("");
te4.setText("");
te5.setText("");
te6.setText("");
}
}catch (NumberFormatException e1) {
// TODO Auto-generated catch block
area.setText("温馨提示!!"+"\r\n"+"输入的成绩不符合要求,删除失败,请重新进行操作!!!"); //删除失败后设置area中的信息提示
//运行之后设置文本框的值为空
te1.setText("");
te2.setText("");
te3.setText("");
te4.setText("");
te5.setText("");
te6.setText("");
}
}
});
p3 = new JPanel(); //实例化面板对象
p3.add(new JLabel("输入学号: ")); //向p3面板中添加标签
p3.add(te6); //向p3面板中添加t6文本框
p3.add(button1); //向p3面板添加按钮
area = new JTextArea("请按标签信息输入你想删除的信息!!",5,30); //实例化多行文本框
p4 = new JPanel(); //实例化面板
p4.add(area); //向面板中添加area
panel5 = new JPanel(); //实例化面板对象
panel5.setLayout(new BorderLayout()); //设置panel5面板的布局为BorderLayout布局
panel5.add(p1,BorderLayout.WEST); //向panel5面板中添加p1面板并放在panel5的西面
panel5.add(p2); //向panel5面板中添加p2面板
panel5.add(p3,BorderLayout.SOUTH); //向panel5面板中添加p3面板并放在panel5的南面。
panel5.add(p4,BorderLayout.NORTH); //向panel5面板中添加p4面板并放在panel5的北面。
}
}
// 数据库操作实现
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MyDBUtil {
//先单独写一个方法,获取连接
public Connection getCon() {
Connection con=null; //定义一个连接数据库的变量
try {
//在java文件中加载驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
//连接数据库
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?user=root&password=root&useSSL=true&serverTimezone=GMT%2B8");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con; //返回连接
}
//查询所有记录
public ResultSet checkAll() {
Connection con = getCon(); //获取上面的连接
Statement statement=null;
ResultSet rs=null;
try {
if (con!=null) {
//建立查询语句
statement = con.createStatement();
//使用查询语句获取结果
rs=statement.executeQuery("select * from student");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
//查询所有记录并按某一成绩进行排序(升序或降序)
public ResultSet checkAll(String grade,String sort) {
Connection con = getCon(); //获取上面的连接
Statement statement=null;
ResultSet rs=null;
try {
if (con!=null) {
//建立查询语句
statement = con.createStatement();
//使用查询语句获取结果
rs=statement.executeQuery("select * from student order by "+grade+" "+sort+"");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
//添加记录
public void add(Student stu) {
//单独定义一个方法向数据库中添加数据。
Connection con = getCon(); //拿到连接
PreparedStatement pst = null; //创建预处理对象
try {
if (con!=null) {
pst=con.prepareStatement("insert into student values(?,?,?,?,?)"); //使用预处理语句提高效率
pst.setString(1, stu.getId()); //给第一个问号处设值
pst.setString(2,stu.getName()); //给第二个问号处设值
pst.setDouble(3, stu.getMath()); //给第三个问号处设值
pst.setDouble(4, stu.getPhysics()); //给第四个问号处设值
pst.setDouble(5, stu.getEnglish()); //给第五个问号处设值
pst.executeUpdate(); //由于使用了预处理语句,执行时就不用传入执行语句。
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//关闭资源 原则: 先打开的后关闭,后打开的先关闭。 异常最好各处理各的。
if (pst!=null) {
try {
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (con!=null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//删除记录
public void delete(Student stu) {
Connection con = getCon(); //拿到连接
PreparedStatement pst = null; //定义预处理变量
try {
if (con!=null) {
String sql = "delete from student where 学号 = ?"; //设置查询语句
pst = con.prepareStatement(sql); //使用预处理语句
pst.setString(1, stu.getId()); //给问号设置值
pst.execute(); //执行查询语句
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (pst!=null) {
try {
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (con!=null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//修改记录
public void modify(Student stu) {
Connection con = getCon(); //拿到连接
PreparedStatement pst = null; //预处理语句
try {
if (con!=null) {
String sql = "update student set 姓名=?,数学成绩=?,物理成绩=?,英语成绩=? where 学号=?"; //设置查询语句
pst = con.prepareStatement(sql); //建立查询语句的时候就把sql语句传递进去。
pst.setString(1, stu.getName()); //给第一处问号设值
pst.setFloat(2, stu.getMath()); //给第二处问号设值
pst.setFloat(3, stu.getPhysics()); //给第三处问号设值
pst.setFloat(4, stu.getEnglish()); //给第四处问号设值
pst.setString(5, stu.getId()); //给第五处问号设值
pst.execute(); //执行的时候就不传入sql语句了。
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(pst!=null) {
try {
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con!=null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
本代码完全由个人实现: (仅做参考)