JAVA 实验三 数据库编程

实验任务:

编程管理学生数据。要求:

1. 自选数据库管理系统创建数据库stu,按照下表的结构创建"student"表:

字段名

Java数据类型

宽度

SQL数据类型

id

int

10

int

Name

String

20

Char(20)

Sex

String

2

Char(2)

Age

Int

3

Integer

假设表中已有3个学生的数据:

id

Name

Sex

Age

1

张小明

18

2

李雷

19

3

韩梅梅

18

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!

语文学起来很枯燥,但脱离了考试,他的美才慢慢彰显出来,

最近又喜欢上了一句话:“少年没有乌托邦,心向远方自明朗”。

虽然“天不生无用之人,地不长无名之草”。但仍谨记“冰冻三尺,非一日之寒”。

执长剑纵马,执妙笔生花,我王某人在此邀请诸位与我共身!

  • 16
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惊骇世俗王某人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值