IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> JDBC图书管理系统-vectorJH -> 正文阅读

[开发测试]JDBC图书管理系统-vectorJH

JDBC图书管理系统-vectorJH


在这里插入图片描述

前言

银行管理系统传送门(开源)
本文讲述了我大一耗时1个月完成的图书管理系统.我深知还有许多bug.但我并不想在java-GUI上花费更多的时间.因此我将其开源.并希望有借鉴者.完善这个系统的功能.
在此之前我想和大家分享这样三句话:

路漫漫其修远兮,吾将上下而求索。
我们都知道,风雨之后,才能见彩虹。但我们都希望能直接坐在彩虹里,他人已经为你布置好绚丽的世界。其曲弥高,其和弥寡。
成功不必有我,而功力必不唐捐!

操作设备: window11 idea2021 druid-1.2.6.jar commons-dbutils-1.7.jar mysql-connector-java-8.0.22.jar

提示:以下是本篇文章正文内容,下面案例可供参考
先给各位看客们上图:

一、MVC分包模式

呆萌小新@渊洁

2.GUI界面

1.初入界面

在这里插入图片描述

2.主界面

呆萌小新@渊洁

3.登录界面

在这里插入图片描述

4. 注册界面

在这里插入图片描述

5.管理员信息界面

在这里插入图片描述

6.管理员添加图书界面

呆萌小新@渊洁

7.管理员删除图书界面

在这里插入图片描述

8.图书数据界面

呆萌小新@渊洁

9.数据库信息

呆萌小新@渊洁

视图就展示这里啦,先展示部分源码.最后将给出开源链接

1.druid-1.2.6.jar 配置文件

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&rewriteBatchedStatements=true
username=root
password=123456


initialSize=10
minIdle=1
maxActive=10
maxWait=10000
timeBetweenEvictionRunsMillis=6000
minEvictableIdleTimeMillis=300000
testWhileIdle=true
testOnBorrow=true
testOnReturn=true
poolPreparedStatements=true
maxPoolPreparedStatementPerConnectionSize=20
validationQuery=select 1
filters=stat

2.Reader实例对象

package com.vector.pojo;

/**
 * 读者基本信息
 */
public class Reader {
    private String ReaderId;
    private String ReaderPwd;
    private String ReaderTel;
    private String ReaderMountBook=null;
    private String Bookid=null;
    private String BookName=null;

    public Reader(String readerId, String readerPwd, String readerTel) {
        ReaderId = readerId;
        ReaderPwd = readerPwd;
        ReaderTel = readerTel;
    }

    public Reader(String readerId, String readerPwd, String readerTel, String readerMountBook, String bookid, String bookName) {
        ReaderId = readerId;
        ReaderPwd = readerPwd;
        ReaderTel = readerTel;
        ReaderMountBook = readerMountBook;
        Bookid = bookid;
        BookName = bookName;
    }

    @Override
    public String toString() {
        return "Reader{" +
                "ReaderId='" + ReaderId + '\'' +
                ", ReaderPwd='" + ReaderPwd + '\'' +
                ", ReaderTel='" + ReaderTel + '\'' +
                ", ReaderMountBook='" + ReaderMountBook + '\'' +
                ", Bookid='" + Bookid + '\'' +
                ", BookName='" + BookName + '\'' +
                '}';
    }

    public void setReaderId(String readerId) {
        ReaderId = readerId;
    }

    public void setReaderPwd(String readerPwd) {
        ReaderPwd = readerPwd;
    }

    public void setReaderTel(String readerTel) {
        ReaderTel = readerTel;
    }

    public void setReaderMountBook(String readerMountBook) {
        ReaderMountBook = readerMountBook;
    }

    public void setBookid(String bookid) {
        Bookid = bookid;
    }

    public void setBookName(String bookName) {
        BookName = bookName;
    }

    public String getReaderId() {
        return ReaderId;
    }

    public String getReaderPwd() {
        return ReaderPwd;
    }

    public String getReaderTel() {
        return ReaderTel;
    }

    public String getReaderMountBook() {
        return ReaderMountBook;
    }

    public String getBookid() {
        return Bookid;
    }

    public String getBookName() {
        return BookName;
    }

    public Reader() {
    }
}

3.管理员信息界面

package com.vector.view;

import com.vector.control.Utils;
import com.vector.control.ViewActionEvent;

import javax.swing.*;
import java.awt.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class AdminList extends JDialog implements ActionListener {
    JPanel jPanel1, jPanel2;//主面板
    JLabel label1, label2;//标签
    JTextField text1, text2, text3;
    Button button1, button2, button3, button4;

    public AdminList() {
        this.setTitle("用户个人信息");
        //设置窗口初始位置x,y,w,h
        this.setSize(550, 350);
        this.setLocationRelativeTo(null);
        //设置大小固定
        this.setResizable(false);
        middleCon();

        //设置可见性,一定要放置在最后!!(特别是全局属性)
        jPanel1.setVisible(true);
//        jPanel2.setVisible(true);
        this.setVisible(true);

    }

    public void middleCon() {
        jPanel1 = new JPanel();
        jPanel1.setLayout(null);
        //按钮布局
        button1 = new Button("确认");
        button1.setBounds(30, 280, 60, 30);
        button2 = new Button("取消");
        button2.setBounds(100, 280, 60, 30);
        button3 = new Button("添加图书");
        button3.setBounds(170, 280, 60, 30);
        button3.addActionListener(this);
        button4 = new Button("删除图书");
        button4.setBounds(250, 280, 60, 30);
        button4.addActionListener(this);
        //提示文本布局
        label1 = new JLabel("管理员账号ID: ");
        label1.setBounds(20, 80, 160, 30);
        text1 = new JTextField();
        text1.setBounds(100, 80, 160, 30);
        text1.setEditable(false);
        text1.setText(Utils.getAdministrator().getAdministratorId());
        label2 = new JLabel("管理员姓名:");
        label2.setBounds(20, 150, 160, 30);
        text2 = new JTextField();
        text2.setBounds(100, 140, 160, 30);
        text2.setEditable(false);
        text2.setText(Utils.getAdministrator().getAdministratorName());

        //监听取消
        ViewActionEvent.windowmsg(button2, this);

        ViewActionEvent.windowmsg(button1);
        jPanel1.add(button1);
        jPanel1.add(button2);
        jPanel1.add(button3);
        jPanel1.add(button4);
        jPanel1.add(label1);
        jPanel1.add(text1);
        jPanel1.add(label2);
        jPanel1.add(text2);
        this.add(jPanel1);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        switch (e.getActionCommand()) {
            case "添加图书":
                new addBooks();
                break;
            case "删除图书":
                new DeleBooks();
                break;
        }
    }

}

4 .删除数据界面

package com.vector.view;

import com.vector.control.ViewActionEvent;
import com.vector.dao.impl.BookDaoimpl;
import com.vector.pojo.Book;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import java.awt.*;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;

public class DeleBooks extends JDialog implements MouseListener {
    JPanel jPanel;
    Button button1, button2;
    JScrollPane js;
    JTable jTable;
    DefaultTableModel tableMode;

    public DeleBooks() {

        this.setTitle("删除图书");
        //设置窗口初始位置x,y,w,h
        this.setSize(550, 350);
        this.setLocationRelativeTo(null);
        //设置大小固定
        this.setResizable(false);
        DeleBooksView();
        jPanel.setVisible(true);
        this.add(jPanel);
        this.setVisible(true);

    }

    public void DeleBooksView() {
        jPanel = new JPanel();
        jPanel.setLayout(null);
        //按钮布局
        button1 = new Button("确认");
        button1.setBounds(40, 280, 60, 30);
        button1.addMouseListener(this);
        button2 = new Button("取消");
        button2.setBounds(110, 280, 70, 30);

        //监听取消
        ViewActionEvent.windowmsg(button2, this);
        js = new JScrollPane();
        js.setBounds(0, 10, 550, 200);
        Object[] clum = {"书籍名称", "编号", "数量/本", "价格/本", "书类", "所在位置"};
        Object[][] data = new Object[10][6];
        BookDaoimpl bookDaoimpl = new BookDaoimpl();
        List<Book> list = bookDaoimpl.findAll();
        for (int i = 0; i < list.size(); i++) {
            data[i][0] = list.get(i).getBookName();
            data[i][1] = list.get(i).getBookNum();
            data[i][2] = list.get(i).getBookMany();
            data[i][3] = list.get(i).getBookPrice();
            data[i][4] = list.get(i).getBookClass();
            data[i][5] = list.get(i).getBookPosition();
        }
        tableMode = new DefaultTableModel(data, clum);
        jTable = new JTable(tableMode);
        js.setViewportView(jTable);

        jPanel.add(js);
        jPanel.add(button1);
        jPanel.add(button2);
        this.add(jPanel);


    }


    @Override
    public void mouseClicked(MouseEvent e) {
        int selectRows = jTable.getSelectedRows().length; //  取得用户所选行的行数
        TableModel tableModel =  jTable.getModel();
        if (selectRows == 1) {
            int selectedRowIndex = jTable.getSelectedRow(); // 取得用户所选单行
            BookDaoimpl bookDaoimpl = new BookDaoimpl();
            System.out.println(tableModel.getValueAt((selectedRowIndex),1));
            bookDaoimpl.delete(Integer.parseInt((String) tableModel.getValueAt((selectedRowIndex),1)) );
            JOptionPane.showMessageDialog(null,"删除成功!");
            tableMode.removeRow(selectedRowIndex) ;
            tableMode.fireTableDataChanged();



        }
        else return;

    }

    @Override
    public void mousePressed(MouseEvent e) {

    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }
}

5.读者注册界面

package com.vector.view;

import com.vector.control.ViewActionEvent;
import com.vector.dao.impl.ReaderDaoimpl;
import com.vector.pojo.Reader;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class ReaderRegister extends JDialog implements ActionListener {
    JPanel jPanel1;//主面板
    JLabel label1, label2, label3;//图片标签
    Button button1, button2;
    JTextField text1, text3;
    JPasswordField text2;

    public ReaderRegister() {
        this.setTitle("用户注册界面");
        //设置窗口初始位置x,y,w,h
        this.setSize(550,350);
        this.setLocationRelativeTo(null);
        //设置大小固定
        this.setResizable(false);

        middleCon();

        //设置可见性,一定要放置在最后!!(特别是全局属性)
        jPanel1.setVisible(true);
        this.setVisible(true);
    }

    public void middleCon() {
        jPanel1 = new JPanel();
        jPanel1.setLayout(null);
        //按钮布局
        button1 = new Button("确认");
        button1.setBounds(200, 240, 50, 30);
        button2 = new Button("取消");
        button2.setBounds(280, 240, 50, 30);
        //提示文本布局
        label1 = new JLabel("账号(请输入身份证号!): ");
        label1.setBounds(80, 100, 140, 30);
        label2 = new JLabel("密码16位以内: ");
        label2.setBounds(80, 140, 140, 30);
        label3 = new JLabel("手机号: ");
        label3.setBounds(80, 180, 140, 30);
        //文本框布局
        text1 = new JTextField();
        text1.setBounds(230, 100, 130, 30);
        text2 = new JPasswordField(16);
        text2.setBounds(230, 140, 130, 30);
        text3 = new JTextField();
        text3.setBounds(230, 180, 130, 30);
        //监听按钮和文本内容
        button1.addActionListener(this);
        ViewActionEvent.windowmsg(button2, this);
        jPanel1.add(button1);
        jPanel1.add(button2);
        jPanel1.add(label1);
        jPanel1.add(label2);
        jPanel1.add(label3);
        jPanel1.add(text1);
        jPanel1.add(text2);
        jPanel1.add(text3);
        this.add(jPanel1);

    }

    /**
     * 用户注册文本内容监听
     *
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        if (text1.getText().equals("")||text1.getText().length()!=18){
            JOptionPane.showMessageDialog(null,"请输入18位身份证号!","提示",JOptionPane.WARNING_MESSAGE);
            return;
        }
        if(text2.getText().equals("")||text2.getText().length()>16){
            JOptionPane.showMessageDialog(null,"请输入16位以内密码!","提示",JOptionPane.WARNING_MESSAGE);
            return;
        }
        if (text3.getText().equals("")){
            JOptionPane.showMessageDialog(null,"请输入16位数字!","提示",JOptionPane.WARNING_MESSAGE);
            return;
        }
        if (e.getActionCommand().equals("确认")) {
            Reader reader = new Reader(text1.getText(), text2.getText(), text3.getText());
            ReaderDaoimpl ReaderDaoimpl = new ReaderDaoimpl();
            ReaderDaoimpl.add(reader);
            JOptionPane.showMessageDialog(null, "注册成功", "提示", JOptionPane.WARNING_MESSAGE);
        }
        this.dispose();
    }
}

6.图书增删改查代码

package com.vector.dao.impl;

import com.vector.dao.BookDao;
import com.vector.pojo.Book;
import com.vector.service.ConnectionDruid;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public class BookDaoimpl implements BookDao {
    private QueryRunner runner = null;//查询运行器

    public BookDaoimpl() {
        runner = new QueryRunner();
    }

    //方法:向数据库中添加一条记录
    @Override
    public void add(Book p) {
        Connection conn = null;
        try {
            conn = ConnectionDruid.getConnection();
            String sql = "insert into Book(BookName,BookNum,BookPosition,BookPrice,BookClass,BookMany)values(?,?,?,?,?,?)";
            runner.update(conn, sql, p.getBookName(), p.getBookNum(), p.getBookPosition(), p.getBookPrice(), p.getBookClass(), p.getBookMany());
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtils.closeQuietly(conn, null, null);
        }

    }

    //方法:根据id向数据库中修改某条记录
    @Override
    public void update(Book p) {
        Connection conn = null;
        try {
            conn = ConnectionDruid.getConnection();
            String sql = "update Book set BookName=?,BookNum=?,BookPosition=?,BookPrice=? BookClass=? BookMany=? where BookNum=?";
            runner.update(conn, sql, p.getBookName(), p.getBookNum(), p.getBookPosition(), p.getBookPrice(), p.getBookClass(), p.getBookMany());
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtils.closeQuietly(conn, null, null);
        }

    }

    //方法:根据id删除数据库中的某条记录
    @Override
    public void delete(int id) {
        Connection conn = null;
        try {
            conn = ConnectionDruid.getConnection();
            String sql = "delete from Book where BookNum=?";
            runner.update(conn, sql, id);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtils.closeQuietly(conn, null, null);
        }

    }


    //方法:BeanHander:是ResultSethandler接口的实现类,用于封装表中的一条记录.
    @Override
    public Book findById(int id) {
        Connection conn = null;
        try {
            conn = ConnectionDruid.getConnection();
            String sql = "select BookName,BookNum,BookPosition,BookPrice,BookClass,BookMany from Book where BookNum=?";
            Book book = runner.query(conn, sql, new BeanHandler<Book>(Book.class), id);
            return book;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtils.closeQuietly(conn, null, null);
        }
        return null;
    }

    //方法:使用BeanListHandler查询所有对象
    @Override
    public List<Book> findAll() {
        Connection conn = null;
        try {
            conn = ConnectionDruid.getConnection();
            String sql = "select * from Book";
            List<Book> persons = runner.query(conn, sql, new BeanListHandler<Book>(Book.class));
            return persons;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtils.closeQuietly(conn, null, null);
        }
        return null;
    }

    //方法:使用ScalarHandler查询一共有几条记录
    @Override
    public long personCount() {
        Connection conn = null;
        try {
            conn = ConnectionDruid.getConnection();
            String sql = "select count(BookNum) from Book";
            return runner.query(conn, sql, new ScalarHandler<Long>());
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            DbUtils.closeQuietly(conn, null, null);
        }
        return 0;
    }
}

以上就是部分代码展示.
在这里插入图片描述

该项目开源链接

JDBC图书管理系统

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:47:47  更:2021-07-24 11:47:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 20:08:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码