实验任务:
编程管理学生数据。要求: 1. 自选数据库管理系统创建数据库stu,按照下表的结构创建"student"表:
假设表中已有3个学生的数据:
2. 设计图形用户界面,通过事件处理实现学生数据管理功能。 3. 用恰当的方法处理可能出现的异常。 4. 将数据表stu及其数据操作封装成类,将数据操作功能封装成类的方法,通过该类,借助图形用户界面实现下面功能: (1)向表中增加记录并显示增加后的所有记录(新增记录的具体数据自定); (2)从表中删除id=1的记录,并显示删除后的所有记录; (3)修改表中记录:查询条件id=2,将name修改为:王杰,修改完毕显示所有记录; (4)查询表中id=3的记录并显示。 四、实验要求 1. 程序要添加适当的注释,程序的书写要采用缩进格式。 2. 程序要具备一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。 3. 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。 4. 提交源程序和实验报告。实验报告命名为:学号姓名实验n.doc,如541713460101白坤鹏-实验1.doc。所有源程序压缩为一个文件,按以下方式命名:学号姓名实验n.rar,如541713460101白坤鹏-实验1.rar。将541713460101白坤鹏-实验1.doc和541713460101白坤鹏-实验1.rar均上传到对应的文件夹中。 |
代码模块:
由于我是将每一个java类都分开写了,所以看起来很多,但里面有很多都可以复制粘贴。
当然可以写一起,不过看起来不好看,凑活着看吧,嘿嘿。
先看Student类(里面是封装的一些方法)
先声明一下,想要链接数据库的话,要有比如mysql-connector-j-8.0.33.jar这个jar包,
当然jar包的版本越新越好,下面是链接:
https://dev.mysql.com/downloads/connector/j/
package 实验三;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class Student {
private int id;
private String name;
private String sex;
private int age;
public Student() {
}
public Student(int id, String name, String sex, int age) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getSex() {
return sex;
}
public static List<Student> getAll() throws SQLException {
List<Student> students = new ArrayList<>();
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu", "root", "123456");
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM student");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("Name");
String sex = rs.getString("Sex");
int age = rs.getInt("Age");
Student student = new Student(id, name, sex, age);
students.add(student);
}
} finally {
if (conn != null) conn.close();
}
return students;
}
public static void add(Student student) throws SQLException {
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu", "root", "123456");
PreparedStatement stmt = conn.prepareStatement("INSERT INTO student VALUES (?, ?, ?, ?)");
stmt.setInt(1, student.getId());
stmt.setString(2, student.getName());
stmt.setString(3, student.getSex());
stmt.setInt(4, student.getAge());
stmt.executeUpdate();
} finally {
if (conn != null) conn.close();
}
}
public static void delete(int id) throws SQLException {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu", "root", "123456");
PreparedStatement stmt = conn.prepareStatement("DELETE FROM student WHERE id = ?");
stmt.setInt(1, id);
stmt.executeUpdate();
if (conn != null) conn.close();
}
public static void update(int id, String name,String sex,int age) throws SQLException {
Connection conn=null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu", "root", "123456");
PreparedStatement stmt = conn.prepareStatement("UPDATE student SET name = ?,sex = ?,age = ? WHERE id = ?");
stmt.setString(1, name);
stmt.setString(2, sex);
stmt.setInt(3, age);
stmt.setInt(4, id);
stmt.executeUpdate();
} finally {
if (conn != null) conn.close();
}
}
public static Student get(int id) throws SQLException {
Student student=null;
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu", "root", "123456");
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM student WHERE id = ?");
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
String name = rs.getString("Name");
String sex = rs.getString("Sex");
int age = rs.getInt("Age");
student = new Student(id, name, sex, age);
}
if (conn != null) conn.close();
return student;
}
}
GUI界面的代码:
package 实验三;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
public class userJFrame extends JFrame implements ActionListener {
//文本框
JLabel label=new JLabel("请输入想要执行的操作");
//按钮
JButton addButton=new JButton("添加");
JButton deleteButton=new JButton("删除");
JButton alterButton=new JButton("修改");
JButton findButton=new JButton("查询");
JButton shutButton=new JButton("关闭");
public userJFrame() {
//初始化界面
initJFrame();
//初始化内容
initView();
//使界面显示出来
this.setVisible(true);
}
private void initView() {
//添加文本框
label.setBounds(180,0,400,200);
label.setForeground(Color.red);
label.setFont(label.getFont().deriveFont(32f));
this.getContentPane().add(label);
//添加按钮
addButton.setBounds(280,180,150,50);
addButton.addActionListener(this);
this.getContentPane().add(addButton);
deleteButton.setBounds(280,240,150,50);
deleteButton.addActionListener(this);
this.getContentPane().add(deleteButton);
alterButton.setBounds(280,300,150,50);
alterButton.addActionListener(this);
this.getContentPane().add(alterButton);
findButton.setBounds(280,360,150,50);
findButton.addActionListener(this);
this.getContentPane().add(findButton);
shutButton.setBounds(280,420,150,50);
shutButton.addActionListener(this);
this.getContentPane().add(shutButton);
//添加背景图片
try {
URL url = new URL("https://image1.h128.com/upload/202102/28/thumb_720_auto_202102282154171163.jpg");
BufferedImage image = ImageIO.read(url);
JLabel background = new JLabel(new ImageIcon(image));
background.setBounds(0, 0, 720, 510);
this.getContentPane().add(background);
} catch (IOException e) {
e.printStackTrace();
}
}
private void initJFrame() {
//先设置标题
this.setTitle("学生信息管理系统");
//设置宽高
this.setSize(735,555);
//设置点击窗口“关闭”按钮时,关闭窗口
this.setDefaultCloseOperation(3);
//居中位置出现
this.setLocationRelativeTo(null);
//窗口布局方式
this.setLayout(null);//这里我选择默认自定义布局
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource()==addButton){
System.out.println("点击了添加");
//打开新的界面
//在该界面中进行各项操作
new addButtonView();
}else if(e.getSource()==deleteButton){
System.out.println("点击了删除");
//打开新的界面
//在该界面中进行各项操作
new deleteButtonView();
}else if(e.getSource()==alterButton){
System.out.println("点击了修改");
//打开新的界面
//在该界面中进行各项操作
new alterButtonView();
}else if(e.getSource()==findButton){
System.out.println("点击了查找");
//打开新的界面
//在该界面中进行各项操作
new findButtonView();
}else if(e.getSource()==shutButton){
System.out.println("点击了关闭");
System.exit(0);//直接关闭虚拟机即可
}
}
public static void main(String[] args) {
new userJFrame();//创建GUI图形化界面
}
}
添加界面:
package 实验三;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.List;
public class addButtonView extends JFrame implements ActionListener {
//标签
JLabel jLabel1 = new JLabel("请输入想要添加的信息");
JLabel jLabel2 = new JLabel("id(字段名):");
JLabel jLabel3 = new JLabel("name(姓名):");
JLabel jLabel4 = new JLabel("sex(姓别):");
JLabel jLabel5 = new JLabel("int(年龄):");
//文本框
JTextField jTextField1 = new JTextField();
JTextField jTextField2 = new JTextField();
JTextField jTextField3 = new JTextField();
JTextField jTextField4 = new JTextField();
//按钮
JButton jButton1 = new JButton("添加");
//文本区域
JTextArea displayArea= new JTextArea(5, 10);
JScrollPane scrollPane = new JScrollPane(displayArea);
public addButtonView() {
//初始化界面
initJFrame();
//初始化内容
initView();
//使界面显示出来
this.setVisible(true);
}
private void initView() {
//添加标签
//颜色
jLabel1.setForeground(Color.red);
//字号大小
jLabel1.setFont(jLabel1.getFont().deriveFont(16f));
JPanel panel1 = new JPanel(new GridLayout(1, 1));
panel1.add(jLabel1);
this.getContentPane().add(panel1,BorderLayout.NORTH);
//字号大小与添加文本框
JPanel panel2 = new JPanel(new GridLayout(9, 1,2,2));
jLabel2.setFont(jLabel2.getFont().deriveFont(14f));
jLabel3.setFont(jLabel3.getFont().deriveFont(14f));
jLabel4.setFont(jLabel4.getFont().deriveFont(14f));
jLabel5.setFont(jLabel5.getFont().deriveFont(14f));
panel2.add(jLabel2);panel2.add(jTextField1);
panel2.add(jLabel3);panel2.add(jTextField2);
panel2.add(jLabel4);panel2.add(jTextField3);
panel2.add(jLabel5);panel2.add(jTextField4);
this.getContentPane().add(panel2,BorderLayout.CENTER);
//添加按钮
jButton1.addActionListener(this);
panel2.add(jButton1);
this.getContentPane().add(panel2,BorderLayout.CENTER);
//添加文本区域
this.getContentPane().add(scrollPane,BorderLayout.SOUTH);
//让弹框展示出来
this.setVisible(true);
}
//界面
public void initJFrame() {
//设置标题
this.setTitle("查找");
//给界面设置大小
this.setSize(400,350);
//让界面置顶
this.setAlwaysOnTop(true);
//让界面居中
this.setLocationRelativeTo(null);
//界面不关闭永远无法操作下面的界面
//this.setModal(true);
//窗口布局方式
this.setLayout(new BorderLayout());
}
@Override
public void actionPerformed(ActionEvent e) {
try {
if(e.getSource()==jButton1){
System.out.println("点击了添加");
int id = Integer.parseInt(jTextField1.getText().trim());
String name = jTextField2.getText().trim();
String sex = jTextField3.getText().trim();
int age = Integer.parseInt(jTextField4.getText().trim());
Student student = new Student(id, name, sex, age);
Student.add(student);
displayAll();
}
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(this, "请输入正确的数字格式!", "错误", JOptionPane.ERROR_MESSAGE);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(this, "数据库操作有误!", "错误", JOptionPane.ERROR_MESSAGE);
}
}
private void displayAll() throws SQLException {
List<Student> students = Student.getAll();
displayArea.setText("");
for (Student student : students) {
displayArea.append("id: " + student.getId() + "\nname: " + student.getName() + "\nsex: " + student.getSex() + "\nage: " + student.getAge() + "\n\n");
}
}
}
删除界面:
package 实验三;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.List;
public class deleteButtonView extends JFrame implements ActionListener {
//标签
JLabel jLabel1 = new JLabel("请输入想要删除的字段名");
JLabel jLabel2 = new JLabel("id(字段名):");
//文本框
JTextField jTextField1 = new JTextField();
//按钮
JButton jButton1 = new JButton("删除");
//文本区域
JTextArea displayArea= new JTextArea(10, 20);
JScrollPane scrollPane = new JScrollPane(displayArea);
public deleteButtonView() {
//初始化界面
initJFrame();
//初始化内容
initView();
//使界面显示出来
this.setVisible(true);
}
private void initView() {
//添加标签
//颜色
jLabel1.setForeground(Color.red);
//字号大小
jLabel1.setFont(jLabel1.getFont().deriveFont(16f));
JPanel panel1 = new JPanel(new GridLayout(1, 1));
panel1.add(jLabel1);
this.getContentPane().add(panel1,BorderLayout.NORTH);
//字号大小
JPanel panel2 = new JPanel(new GridLayout(3, 1,2,2));
jLabel2.setFont(jLabel2.getFont().deriveFont(14f));
panel2.add(jLabel2);
panel2.add(jTextField1);
jButton1.addActionListener(this);
panel2.add(jButton1);
this.getContentPane().add(panel2,BorderLayout.CENTER);
//添加文本区域
this.getContentPane().add(scrollPane,BorderLayout.SOUTH);
//让弹框展示出来
this.setVisible(true);
}
//界面
public void initJFrame() {
//设置标题
this.setTitle("删除");
//给界面设置大小
this.setSize(400,350);
//让界面置顶
this.setAlwaysOnTop(true);
//让界面居中
this.setLocationRelativeTo(null);
//界面不关闭永远无法操作下面的界面
//this.setModal(true);
//窗口布局方式
this.setLayout(new BorderLayout());
}
@Override
public void actionPerformed(ActionEvent e) {
try {
if(e.getSource()==jButton1){
System.out.println("点击了删除");
int id = Integer.parseInt(jTextField1.getText().trim());
Student.delete(id);
displayAll();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
private void displayAll() throws SQLException {
List<Student> students = Student.getAll();
displayArea.setText("");
for (Student student : students) {
displayArea.append("id: " + student.getId() + "\nname: " + student.getName() + "\nsex: " + student.getSex() + "\nage: " + student.getAge() + "\n\n");
}
}
}
修改界面:
package 实验三;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.List;
public class alterButtonView extends JFrame implements ActionListener {
//标签
JLabel jLabel1 = new JLabel("请输入想要修改的字段名的信息");
JLabel jLabel2 = new JLabel("id(字段名):");
JLabel jLabel6 = new JLabel("请输入想要修改的信息");
JLabel jLabel3 = new JLabel("name(名字):");
JLabel jLabel4 = new JLabel("sex(姓别):");
JLabel jLabel5 = new JLabel("int(年龄):");
//文本框
JTextField jTextField1 = new JTextField();
JTextField jTextField2 = new JTextField();
JTextField jTextField3 = new JTextField();
JTextField jTextField4 = new JTextField();
//按钮
JButton jButton1 = new JButton("修改");
//文本区域
JTextArea displayArea= new JTextArea(5, 10);
JScrollPane scrollPane = new JScrollPane(displayArea);
public alterButtonView() {
//初始化界面
initJFrame();
//初始化内容
initView();
//使界面显示出来
this.setVisible(true);
}
private void initView() {
//添加标签
//颜色
jLabel1.setForeground(Color.red);
jLabel6.setForeground(Color.red);
//字号大小
jLabel1.setFont(jLabel1.getFont().deriveFont(16f));
JPanel panel1 = new JPanel(new GridLayout(1, 1));
panel1.add(jLabel1);
this.getContentPane().add(panel1,BorderLayout.NORTH);
//字号大小
JPanel panel2 = new JPanel(new GridLayout(10, 1,2,2));
jLabel2.setFont(jLabel2.getFont().deriveFont(14f));
jLabel3.setFont(jLabel3.getFont().deriveFont(14f));
jLabel4.setFont(jLabel4.getFont().deriveFont(14f));
jLabel5.setFont(jLabel5.getFont().deriveFont(14f));
panel2.add(jLabel2);panel2.add(jTextField1);panel2.add(jLabel6);
panel2.add(jLabel3);panel2.add(jTextField2);
panel2.add(jLabel4);panel2.add(jTextField3);
panel2.add(jLabel5);panel2.add(jTextField4);
//添加按钮
jButton1.addActionListener(this);
panel2.add(jButton1);
this.getContentPane().add(panel2,BorderLayout.CENTER);
//添加文本区域
this.getContentPane().add(scrollPane,BorderLayout.SOUTH);
//让弹框展示出来
this.setVisible(true);
}
//界面
public void initJFrame() {
//设置标题
this.setTitle("修改");
//给界面设置大小
this.setSize(400,350);
//让界面置顶
this.setAlwaysOnTop(true);
//让界面居中
this.setLocationRelativeTo(null);
//界面不关闭永远无法操作下面的界面
//this.setModal(true);
//窗口布局方式
this.setLayout(new BorderLayout());
}
@Override
public void actionPerformed(ActionEvent e) {
try {
if(e.getSource()==jButton1){
System.out.println("点击了修改");
int id = Integer.parseInt(jTextField1.getText().trim());
String name = jTextField2.getText().trim();
String sex = jTextField3.getText().trim();
int age = Integer.parseInt(jTextField4.getText().trim());
Student.update(id, name,sex,age);
displayAll();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
private void displayAll() throws SQLException {
List<Student> students = Student.getAll();
displayArea.setText("");
for (Student student : students) {
displayArea.append("id: " + student.getId() + "\nname: " + student.getName() + "\nsex: " + student.getSex() + "\nage: " + student.getAge() + "\n\n");
}
}
}
查找界面:
package 实验三;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.List;
public class findButtonView extends JFrame implements ActionListener {
//标签
JLabel jLabel1 = new JLabel("请输入想要查找的字段名");
JLabel jLabel2 = new JLabel("id(字段名):");
//文本框
JTextField jTextField1 = new JTextField();
//按钮
JButton jButton1 = new JButton("查询");
//文本区域
JTextArea displayArea= new JTextArea(10, 20);
JScrollPane scrollPane = new JScrollPane(displayArea);
public findButtonView() {
//初始化界面
initJFrame();
//初始化内容
initView();
}
private void initView() {
//添加标签
//颜色
jLabel1.setForeground(Color.red);
//字号大小
jLabel1.setFont(jLabel1.getFont().deriveFont(16f));
JPanel panel1 = new JPanel(new GridLayout(1, 1));
panel1.add(jLabel1);
this.getContentPane().add(panel1,BorderLayout.NORTH);
//字号大小
JPanel panel2 = new JPanel(new GridLayout(3, 1,2,2));
jLabel2.setFont(jLabel2.getFont().deriveFont(14f));
panel2.add(jLabel2);
panel2.add(jTextField1);
jButton1.addActionListener(this);
panel2.add(jButton1);
this.getContentPane().add(panel2,BorderLayout.CENTER);
//添加文本区域
this.getContentPane().add(scrollPane,BorderLayout.SOUTH);
//让弹框展示出来
this.setVisible(true);
}
//界面
public void initJFrame() {
//设置标题
this.setTitle("查找");
//给界面设置大小
this.setSize(400,350);
//让界面置顶
this.setAlwaysOnTop(true);
//让界面居中
this.setLocationRelativeTo(null);
//界面不关闭永远无法操作下面的界面
//this.setModal(true);
//窗口布局方式
this.setLayout(new BorderLayout());
}
@Override
public void actionPerformed(ActionEvent e) {
try {
if(e.getSource()==jButton1){
System.out.println("点击了查询");
int id = Integer.parseInt(jTextField1.getText().trim());
Student student = Student.get(id);
if (student != null) {
displayAll(id);
} else {
displayArea.setText("No such student.");
}
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
private void displayAll(int id) throws SQLException {
List<Student> students = Student.getAll();
displayArea.setText("");
for (Student student : students) {
if (id==student.getId()) {
displayArea.append("id: " + student.getId() + "\nname: " + student.getName() + "\nsex: " + student.getSex() + "\nage: " + student.getAge() + "\n\n");
}
}
}
}
运行结果截图:
添加截图:
删除截图:
修改截图:
查询截图:
代码挺多的,如果发现什么问题,评论区畅所欲言。
完成收工,good!
语文学起来很枯燥,但脱离了考试,他的美才慢慢彰显出来,文章来源:https://www.toymoban.com/news/detail-449374.html
最近又喜欢上了一句话:“少年没有乌托邦,心向远方自明朗”。
虽然“天不生无用之人,地不长无名之草”。但仍谨记“冰冻三尺,非一日之寒”。
执长剑纵马,执妙笔生花,我王某人在此邀请诸位与我共身!文章来源地址https://www.toymoban.com/news/detail-449374.html
到了这里,关于JAVA 实验三 数据库编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!