32、Java——迷你图书管理器(对象+JDBC)
创始人
2024-04-01 06:49:09
0

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。

🍎个人主页:乐趣国学的博客

🍊个人信条:不迁怒,不贰过。小知识,大智慧。

💞当前专栏:Java案例分享专栏

✨特色专栏:国学周更-心性养成之路

🥭本文内容:Java——迷你图书管理器(对象+JDBC)

更多内容点击👇

                       Java——迷你图书管理器(对象+XML)

                       Java——迷你图书管理器(对象+IO流)

                       Java——迷你图书管理器(对象+集合)

                       Java——迷你图书管理器(对象+数组)

⛳️ 项目需求

为某图书馆开发一个迷你图书管理系统,实现图书的管理,包括如下功能:

        (1)新增图书

        (2)查看图书

        (3)删除图书

        (4)借出图书

        (5)归还图书

        (6)退出图书系统

⛳️ 覆盖知识

        程序基本概念、数据类型、流程控制、顺序、选择 、循环、跳转语句、变量、类、方法、数据库、JDBC等相关知识

⛳️ 开发思路 

(1)明确需求

(2)编码顺序

        1)、数据初始化

        2)、循环完成各种图书管理操作

        3)、菜单切换

(3)测试

⛳️ 开发步骤

❤️ 1、数据初始化

 (1)设计一个包含图书信息的类:Book类

 (2)设计一个数据库的工具类:DBUtils类

 (3)设计一个图书的增删改查操作的Dao层类:BookDaoImpl类

 (4)设计一个逻辑操作Service层类:BookServiceImpl类

 (5)设计一个图书管理系统测试类:MyBookSystem类

 (6)创建数据库和数据表

CREATE DATABASE IF NOT EXISTS `java221804`;
CREATE TABLE IF NOT EXISTS book(`name` VARCHAR(20),`state` INT,`date` INT,`count` INT
);

 (7)创建.properties文件,用来获取数据库初始化数据

❤️ 2、BookDaoImpl类中的部分重要方法

        增加图书的方法 

    public int insert(Book book) {// 获取连接connection = DBUtils.getConnection();String sql = "insert into book values(?,?,?,?);";try {preS = connection.prepareStatement(sql);preS.setString(1, book.getName());preS.setInt(2, book.getState());preS.setInt(3, book.getDate());preS.setInt(4, book.getCount());return preS.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return 0;}

        查询全部图书的方法

	public List selectAll() {List books=new ArrayList();// 获取连接connection = DBUtils.getConnection();String sql = "select * from book;";try {preS = connection.prepareStatement(sql);resultSet=preS.executeQuery();while(resultSet.next()){Book book=new Book(resultSet.getNString(1), resultSet.getInt(2), resultSet.getInt(3), resultSet.getInt(4));books.add(book);}return books;} catch (SQLException e) {e.printStackTrace();}return null;}

        欢迎使用迷你图书管理器方法

        新增图书方法

        查看图书方法

        删除图书方法

        借出图书方法

        归还图书方法

        退出图书方法

        欢迎首界面:

    //欢迎使用迷你图书管理器方法public static void useBookSystem() {// 输出欢迎菜单System.out.println("欢迎使用迷你图书管理器");System.out.println("-------------------------");System.out.println("1.新增图书");System.out.println("2.查看图书");System.out.println("3.删除图书");System.out.println("4.借出图书");System.out.println("5.归还图书");System.out.println("6.退出图书");System.out.println("-------------------------");}

⛳️ 全部代码展示 

❤️ 1、Book类

package cn.bdqn.demo01;import java.io.Serializable;@SuppressWarnings("serial")
public class Book implements Serializable {//定义属性private String name;private int state;private int date;private int count;//添加无参构造public Book() {super();}//添加有参构造public Book(String name, int state, int date, int count) {super();this.name = name;this.state = state;this.date = date;this.count = count;}//添加get/set方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getState() {return state;}public void setState(int state) {this.state = state;}public int getDate() {return date;}public void setDate(int date) {this.date = date;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}}

❤️ 2、DBUtils类

package cn.bdqn.demo01;import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;public class DBUtils {private static final Properties PROPERTIES =new Properties();static{InputStream is = DBUtils.class.getResourceAsStream("/db.properties");try {PROPERTIES.load(is);//1、注册驱动Class.forName(PROPERTIES.getProperty("driver"));} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}// 2、获取连接方法public static Connection getConnection(){Connection connection = null;//2、获取连接对象try {connection=DriverManager.getConnection(PROPERTIES.getProperty("url"), PROPERTIES.getProperty("username"), PROPERTIES.getProperty("password"));} catch (SQLException e) {e.printStackTrace();}return connection;}// 3、释放资源方法public static void closeAll(ResultSet resultSet, Statement statement,Connection connection) {try {if (resultSet != null) {resultSet.close();}if(statement!=null){statement.close();}if(connection!=null){connection.close();}} catch (SQLException e) {e.printStackTrace();}}
}

❤️ 3、 BookDaoImpl类

package cn.bdqn.demo01;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class BookDaoImpl {// 全局变量Connection connection = null;PreparedStatement preS = null;ResultSet resultSet=null;// 增public int insert(Book book) {// 获取连接connection = DBUtils.getConnection();String sql = "insert into book values(?,?,?,?);";try {preS = connection.prepareStatement(sql);preS.setString(1, book.getName());preS.setInt(2, book.getState());preS.setInt(3, book.getDate());preS.setInt(4, book.getCount());return preS.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return 0;}// 删public int delete(Book book) {// 获取连接connection = DBUtils.getConnection();String sql = "delete from book where name=?;";try {preS = connection.prepareStatement(sql);preS.setString(1, book.getName());return preS.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return 0;}// 改public int update(Book book) {// 获取连接connection = DBUtils.getConnection();String sql = "update book set state=?,date=?,count=? where name=?;";try {preS = connection.prepareStatement(sql);preS.setInt(1, book.getState());preS.setInt(2, book.getDate());preS.setInt(3, book.getCount());preS.setString(4, book.getName());return preS.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return 0;}// 查一条public Book select(String name) {// 获取连接connection = DBUtils.getConnection();String sql = "select * from book where name=?;";try {preS = connection.prepareStatement(sql);preS.setString(1, name);resultSet=preS.executeQuery();if(resultSet.next()){Book book=new Book(resultSet.getNString(1), resultSet.getInt(2), resultSet.getInt(3), resultSet.getInt(4));return book;}} catch (SQLException e) {e.printStackTrace();}return null;}// 查全部public List selectAll() {List books=new ArrayList();// 获取连接connection = DBUtils.getConnection();String sql = "select * from book;";try {preS = connection.prepareStatement(sql);resultSet=preS.executeQuery();while(resultSet.next()){Book book=new Book(resultSet.getNString(1), resultSet.getInt(2), resultSet.getInt(3), resultSet.getInt(4));books.add(book);}return books;} catch (SQLException e) {e.printStackTrace();}return null;}
}

❤️ 4、BookServiceImpl类

package cn.bdqn.demo01;import java.util.List;
import java.util.Scanner;public class BookServiceImpl {// 定义一个静态的Scannerstatic Scanner inputsc = new Scanner(System.in);// 是否退出系统,false代表退出系统static boolean flag = true;static int num = -1;static BookDaoImpl bookDaoImpl = new BookDaoImpl();// 数据初始化static {// 初始化数据并添加到数据库中Book book1 = new Book("罗马假日", 1, 1, 15);Book book2 = new Book("白雪公主", 0, 0, 12);Book book3 = new Book("葫芦兄弟", 0, 0, 30);// 判断数据库是否存在,不存在,添加初始化图书if (bookDaoImpl.select(book1.getName()) == null) {bookDaoImpl.insert(book1);}if (bookDaoImpl.select(book2.getName()) == null) {bookDaoImpl.insert(book2);}if (bookDaoImpl.select(book3.getName()) == null) {bookDaoImpl.insert(book3);}}// 欢迎使用迷你图书管理器方法public static void useBookSystem() {// 输出欢迎菜单System.out.println("欢迎使用迷你图书管理器");System.out.println("-------------------------");System.out.println("1.新增图书");System.out.println("2.查看图书");System.out.println("3.删除图书");System.out.println("4.借出图书");System.out.println("5.归还图书");System.out.println("6.退出图书");System.out.println("-------------------------");}// 新增图书方法public static void addBook() {System.out.println("-->新增图书\n");System.out.println("请输入图书名称:");String bookName = inputsc.next();Book book = new Book(bookName, 0, 0, 0);// 向数据库添加图书int num = bookDaoImpl.insert(book);System.out.println();if (num != 0) {System.out.println("新增《" + bookName + "》成功!");} else {System.out.println("新增《" + bookName + "》失败!");}System.out.println("*****************************************");}// 查看图书方法public static void lookBook() {System.out.println("-->查看图书\n");System.out.println("序号\t状态\t名称\t借出日期\t借出次数");// 获取数据库全部图书List books = bookDaoImpl.selectAll();for (int i = 0; i < books.size(); i++) {String BookState = (books.get(i).getState() == 0) ? "可借阅" : "已借出";String dateStr = (books.get(i).getDate() == 0) ? "" : (books.get(i).getDate() + "日");System.out.println((i + 1) + "\t" + BookState + "\t"+ books.get(i).getName() + "\t" + dateStr + "\t"+ books.get(i).getCount() + "次");}System.out.println("*****************************************");}// 删除图书方法public static void delBook() {System.out.println("-->删除图书\n");System.out.println("请输入要删除图书的名称:");String deleteBook = inputsc.next();// 从数据库中查找此图书Book delBook = bookDaoImpl.select(deleteBook);boolean flag3 = false;// 删除的图书存在、状态处于可借阅状态if (delBook.getName() != null && deleteBook.equals(delBook.getName())&& delBook.getState() == 0) {flag3 = true;int num = bookDaoImpl.delete(delBook);if (num != 0) {System.out.println("图书删除成功!");} else {System.out.println("图书删除失败!");}} else if (delBook.getName() != null&& deleteBook.equals(delBook.getName())&& delBook.getState() == 1) {flag3 = true;System.out.println("该图书已被借出,目前无法删除!");}if (!flag3) {System.out.println("没有找到匹配信息!");}System.out.println("*****************************************");}// 借出图书方法public static void lendBook() {System.out.println("-->借出图书\n");System.out.print("请输入图书名称:");String want = inputsc.next(); // 要借出的图书名称// 从数据库中查找此图书Book wantBook = bookDaoImpl.select(want);if (wantBook == null) {System.out.println("没有找到匹配信息!");} else {if (want.equals(wantBook.getName()) && wantBook.getState() == 0) { // 找到匹配可借wantBook.setState(1); // 将此图书置于借出状态System.out.print("请输入借出日期:");int inputscData = inputsc.nextInt();wantBook.setDate(inputscData);while (wantBook.getDate() < 1 || wantBook.getDate() > 31) { // 当输入借出的日期不满足1-31时System.out.println("必须输入大于等于1且小于等于31的数字,请重新输入:");inputscData = inputsc.nextInt();wantBook.setDate(inputscData);}wantBook.setCount(wantBook.getCount() + 1);// 更新书本最新信息int num = bookDaoImpl.update(wantBook);if (num != 0) {System.out.println("借出《" + want + "》成功!");} else {System.out.println("借出《" + want + "》失败!");}} else if (want.equals(wantBook.getName())&& wantBook.getState() == 1) { // 找到匹配已被借出System.out.println("《" + want + "》已被借出!");}}System.out.println("*****************************************");}// 归还图书方法public static void returnBook() {System.out.println("-->归还图书\n");int charge = 0; // 租金System.out.print("请输入归还图书名称:");String back = inputsc.next();// 从数据库中查找此图书Book backBook = bookDaoImpl.select(back);if (backBook == null) {System.out.println("没有找到匹配信息!");} else {if (back.equals(backBook.getName())&& backBook.getDate() == 1) {// 找到匹配backBook.setDate(0); // 将借阅状态修改为可借阅System.out.print("请输入归还日期:");int redate = inputsc.nextInt();while (redate < backBook.getDate() || redate > 31) { //// 归还日期不能小于借出日期,也不能大于31if (redate < backBook.getDate()) {System.out.println("归还日期不能小于借出日期,请重新输入:");} else {System.out.println("一个月只有31天,请重新输入:");}redate = inputsc.nextInt();}charge = redate - backBook.getDate();// 更新书本最新信息int num = bookDaoImpl.update(backBook);if (num != 0) {System.out.println("\n归还《" + back + "》成功!");System.out.println("借出日期为:" + (backBook.getDate()+1) + "日");System.out.println("归还日期为:" + redate + "日");System.out.println("应付租金(元):" + charge);backBook.setDate(0);} else {System.out.println("借出《" + back + "》失败!");}} else if (back.equals(backBook.getName())&& backBook.getState() == 0) {// 找到匹配但没有借出System.out.println("该图书没有被借出!无法进行归还操作。");}}System.out.println("*****************************************");}// 操作public static void runTest() {// 循环操作do {// 定义一个BookMethod操作类,将操作方法定义在BookMethod类中,然后调用// 欢迎菜单方法BookServiceImpl.useBookSystem();System.out.println("请选择:");int choose = inputsc.nextInt();switch (choose) {case 1:// 新增图书BookServiceImpl.addBook();break;case 2:// 查看图书BookServiceImpl.lookBook();break;case 3:// 删除图书BookServiceImpl.delBook();break;case 4:// 借出图书BookServiceImpl.lendBook();break;case 5:// 归还图书BookServiceImpl.returnBook();break;case 6:// 退出图书flag = false;break;default:flag = false;break;}if (flag) {System.out.println("输入0返回:");num = inputsc.nextInt();} else {break;}} while (num == 0);System.out.println("谢谢使用!");}
}

❤️ 5、MyBookSystem类 

package cn.bdqn.demo01;/*** 图书管理系统类MyBookMgr* * @author Administrator**/
public class MyBookSystem {public static void main(String[] args) {BookServiceImpl.runTest();}
}

       码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识,请关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

相关内容

热门资讯

Adobe 因使用 SlimP... AIPress.com.cn报道 12月29日消息,作为全球创意软件巨头,Adobe 正面临其首起重...
伟星新材:竞争优势明显 保持积... 12月28日,伟星新材(002372)发布公告,伟星新材(002372)于2025年12月25日召开...
健全数据制度 释放乘数效应——... 来源:经济日报 党的二十届四中全会审议通过的《中共中央关于制定国民经济和社会发展第十五个五年规划的建...
海关出口退税律师张严锋:套用其... 2018年3月2日,B稽查局对A公司涉税事项进行检查。经检查,B稽查局认为A公司涉嫌通过套用他人出口...
哈尔滨权威刑事律师服务推荐:谷... 在哈尔滨,当人们遭遇刑事法律问题时,往往会困惑于刑事律师服务哪家权威刑事律师推荐哪些刑事辩护律师哪个...
原创 《... 2025年12月26日,《晋中市平遥牛肉保护和发展条例》新闻发布会在晋中举行。该条例经山西省人大常委...
权威非法吸收公共存款律师推荐:... 在处理非法吸收公共存款这类复杂刑事案件时,选择一位经验丰富、靠谱且性价比高的律师至关重要。今天,我们...
政策领航聚英才 智农创新兴龙江 □刘凌灼 本报记者 姜斌 刘畅 在广袤的北大荒黑土地上,一片农业科技创新的“新沃土”正破土而出。这里...
上海海关商品归类律师张严锋:自... 自动衬环成型绕圆机如何归类 2023年01月01日至2024年05月30日期间,A公司以一般贸易方...
原创 男... 男子举报自己无证驾驶:进去待两天 朋友们,我最近看到一个很火的帖子,真的让我很感动!“男子自首承认无...