首页 > 编程语言 >Java 实战小项目:图书管理系统

Java 实战小项目:图书管理系统

时间:2024-12-14 10:28:56浏览次数:7  
标签:实战 Java String 管理系统 title stmt book new public

       在这篇博客中,我们将构建一个简单的图书管理系统。这个系统将包含图书的增、删、改、查(CRUD)功能,旨在帮助大家通过一个小项目来巩固 Java 基础知识,并实践常见的开发技术。

       这个项目会使用 Java SE 来实现,使用 Swing 作为图形用户界面(GUI),以及 MySQL 数据库来存储图书信息。通过本项目,你将了解如何进行数据库操作、构建简单的 GUI、管理用户输入、以及处理常见的异常。


项目目标

  1. 图书管理功能:提供基本的图书信息管理,包括增加、删除、修改、查询等操作。
  2. 数据库操作:使用 JDBC 连接数据库进行数据存取。
  3. 图形界面:使用 Java Swing 设计用户界面,展示和操作图书信息。

技术栈

  • 后端:Java SE、JDBC
  • 数据库:MySQL
  • 界面:Swing

1. 创建 MySQL 数据库

1.1 创建数据库与表

       首先,在 MySQL 中创建一个数据库和表来存储图书信息。

CREATE DATABASE book_management;

USE book_management;

CREATE TABLE books (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    author VARCHAR(255) NOT NULL,
    year INT NOT NULL,
    price DECIMAL(10, 2) NOT NULL
);

       books 表包含了图书的 id(自动递增),title(书名),author(作者),year(出版年份)和 price(价格)。


2. 项目结构

       创建一个 Java 项目,文件结构如下:

book-management/
├── src/
│   ├── Book.java           // 图书实体类
│   ├── BookDAO.java        // 图书数据访问类
│   ├── BookManager.java    // 图书管理逻辑类
│   ├── BookManagerGUI.java // 图书管理界面
│   └── Main.java           // 启动类
├── lib/
│   └── mysql-connector-java-x.x.x.jar // MySQL JDBC 驱动
├── README.md
└── pom.xml (如果使用 Maven)

3. 数据库操作

       我们使用 JDBC 连接 MySQL,进行图书的增、删、改、查操作。首先需要在项目中引入 MySQL 的 JDBC 驱动包。

3.1 添加 JDBC 驱动

       下载并导入 MySQL JDBC 驱动(mysql-connector-java-x.x.x.jar),如果使用 Maven,可以在 pom.xml 中添加如下依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

3.2 创建 Book 实体类

public class Book {
    private int id;
    private String title;
    private String author;
    private int year;
    private double price;

    public Book(String title, String author, int year, double price) {
        this.title = title;
        this.author = author;
        this.year = year;
        this.price = price;
    }

    // Getters and Setters

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

3.3 创建 BookDAO

       BookDAO 类将负责与数据库的交互,执行具体的增、删、改、查操作。

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class BookDAO {
    private static final String URL = "jdbc:mysql://localhost:3306/book_management";
    private static final String USER = "root";
    private static final String PASSWORD = "password";  // 请替换为自己的密码

    private Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }

    public void addBook(Book book) {
        String query = "INSERT INTO books (title, author, year, price) VALUES (?, ?, ?, ?)";
        try (Connection conn = getConnection();
             PreparedStatement stmt = conn.prepareStatement(query)) {
            stmt.setString(1, book.getTitle());
            stmt.setString(2, book.getAuthor());
            stmt.setInt(3, book.getYear());
            stmt.setDouble(4, book.getPrice());
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public List<Book> getAllBooks() {
        List<Book> books = new ArrayList<>();
        String query = "SELECT * FROM books";
        try (Connection conn = getConnection();
             PreparedStatement stmt = conn.prepareStatement(query);
             ResultSet rs = stmt.executeQuery()) {
            while (rs.next()) {
                Book book = new Book(rs.getString("title"), rs.getString("author"), rs.getInt("year"), rs.getDouble("price"));
                book.setId(rs.getInt("id"));
                books.add(book);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return books;
    }

    public void updateBook(Book book) {
        String query = "UPDATE books SET title = ?, author = ?, year = ?, price = ? WHERE id = ?";
        try (Connection conn = getConnection();
             PreparedStatement stmt = conn.prepareStatement(query)) {
            stmt.setString(1, book.getTitle());
            stmt.setString(2, book.getAuthor());
            stmt.setInt(3, book.getYear());
            stmt.setDouble(4, book.getPrice());
            stmt.setInt(5, book.getId());
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void deleteBook(int id) {
        String query = "DELETE FROM books WHERE id = ?";
        try (Connection conn = getConnection();
             PreparedStatement stmt = conn.prepareStatement(query)) {
            stmt.setInt(1, id);
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

4. 图形用户界面(GUI)

       我们使用 Java Swing 来实现简单的图形用户界面,展示图书列表,并提供增、删、改功能。

4.1 创建 BookManagerGUI

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

public class BookManagerGUI {
    private JFrame frame;
    private JTextField titleField, authorField, yearField, priceField;
    private JTable bookTable;
    private BookDAO bookDAO;

    public BookManagerGUI() {
        bookDAO = new BookDAO();
        frame = new JFrame("图书管理系统");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 400);
        frame.setLayout(new BorderLayout());

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(5, 2));

        panel.add(new JLabel("书名:"));
        titleField = new JTextField();
        panel.add(titleField);

        panel.add(new JLabel("作者:"));
        authorField = new JTextField();
        panel.add(authorField);

        panel.add(new JLabel("出版年份:"));
        yearField = new JTextField();
        panel.add(yearField);

        panel.add(new JLabel("价格:"));
        priceField = new JTextField();
        panel.add(priceField);

        JButton addButton = new JButton("添加书籍");
        panel.add(addButton);
        JButton updateButton = new JButton("更新书籍");
        panel.add(updateButton);

        frame.add(panel, BorderLayout.NORTH);

        bookTable = new JTable();
        JScrollPane scrollPane = new JScrollPane(bookTable);
        frame.add(scrollPane, BorderLayout.CENTER);

        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String title = titleField.getText();
                String author = authorField.getText();
                int year = Integer.parseInt(yearField.getText());
                double price = Double.parseDouble(priceField.getText());
                Book book = new Book(title, author, year, price);
                bookDAO.addBook(book);
                refreshTable();
            }
        });

        updateButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int selectedRow = bookTable.getSelectedRow();
                if (selectedRow >= 0) {
                    int id = (int) bookTable.getValueAt(selectedRow, 0);
                    String title = titleField.getText();
                    String author = authorField.getText();
                    int year = Integer.parseInt(yearField.getText());
                    double price = Double.parseDouble(priceField.getText());
                    Book book = new Book(title, author, year, price);
                    book.setId(id);
                    bookDAO.updateBook(book);
                    refreshTable();
                }
            }
        });

        refreshTable();
        frame.setVisible(true);
    }

    private void refreshTable() {
        List<Book> books = bookDAO.getAllBooks();
        String[] columnNames = {"ID", "书名", "作者", "出版年份", "价格"};
        Object[][] data = new Object[books.size()][5];

        for (int i = 0; i < books.size(); i++) {
            data[i][0] = books.get(i).getId();
            data[i][1] = books.get(i).getTitle();
            data[i][2] = books.get(i).getAuthor();
            data[i][3] = books.get(i).getYear();
            data[i][4] = books.get(i).getPrice();
        }

        bookTable.setModel(new javax.swing.table.DefaultTableModel(data, columnNames));
    }

    public static void main(String[] args) {
        new BookManagerGUI();
    }
}

5. 总结

       通过本项目,我们实现了一个简单的图书管理系统,涵盖了图书的增、删、改、查(CRUD)功能。

       项目使用了 Java 的 JDBC 技术与 MySQL 数据库进行数据操作,同时使用 Swing 实现了图形用户界面。这些技能在实际开发中都非常实用,尤其是对于初学者来说,通过实践这些基础功能,可以大大提高你对 Java 编程的理解和运用能力。

       你可以在此基础上进行扩展,比如:

  • 优化界面,使其更美观并支持更多操作。
  • 实现搜索功能,根据书名、作者等信息进行查询。
  • 增加错误处理与数据验证,提升系统的稳定性与可靠性。

      希望这篇文章对你有所帮助。

标签:实战,Java,String,管理系统,title,stmt,book,new,public
From: https://blog.csdn.net/byby0325_/article/details/144467030

相关文章

  • java学习,数组排序
    Java数组进行排序,可以使用多种方法。常用的方法,包括使用内置的Arrays.sort() 方法和手动实现一些基本排序算法。Arrays.sort()方法Java提供了内置的Arrays.sort()方法,可以非常方便地对数组进行排序importjava.util.Arrays; publicclassArraySortExample{ ......
  • Java学习,数组元素查找
    Java查找数组元素,通常涉及遍历数组并比较每个元素与目标值。基本方法,包括线性搜索和二分搜索。线性搜索线性搜索是最简单的搜索算法,逐个检查数组中每个元素,直到找到目标值或遍历完整个数组publicclassLinearSearchExample{  publicstaticvoidmain(String[]args)......
  • JavaScript学习路线图
    ‌JavaScript(通常简称为JS)是与HTML和CSS一起构成万维网核心技术的编程语言之一。它使我们能够为网页添加交互性,例如,您可能在不同网站上看到过滑块、警告框、点击交互、弹出窗口等——所有这些都是使用JavaScript构建的。除了用于浏览器环境外,它还用于其他非浏览器环境,如Node.js......
  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
    摘要随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采SSM技术和mysql数据库来完成对系统的设计。整个开发过程首先对医药销售管理系统进行需求分析......
  • 心理健康教育系统|Java|SSM|VUE| 前后端分离
                 【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetomcat......
  • 超市积分系统系统|Java|SSM|JSP|
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetom......
  • 停车场系统|Java|SSM|JSP|
                 【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetomcat......
  • 解释下JavaScript并发模型
    JavaScript的并发模型在前端开发中扮演着至关重要的角色,它使得JavaScript能够在单线程环境中高效地处理异步任务,从而提供流畅的用户体验。以下是对JavaScript并发模型的详细解释:一、并发与并行的区别并发:指的是多个任务同时进行调度,但不一定在同一时刻执行。在JavaScript中,这主......
  • 书店仓库系统|Java|SSM|JSP|
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetom......
  • 鸿蒙NEXT实战教程—实现音乐歌词同步滚动
    之前写过一个音乐播放器项目,今天再给它完善一下,加一个歌词同步滚动。没错,这就是幽蓝君被女大欺骗做的项目,往事不堪回首,一把辛酸泪。幽蓝君的原则是,宁愿免费分享,也不卖给坏人。先看效果图:  要做歌词同步滚动,我们首先需要的文件资源就是音乐文件和与之匹配的歌词文件。现在......