0


32、Java——迷你图书管理器(对象+JDBC)

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

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

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

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

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

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

更多内容点击👇

  1. Java——迷你图书管理器(对象+XML
  2. Java——迷你图书管理器(对象+IO流)
  3. Java——迷你图书管理器(对象+集合)
  4. Java——迷你图书管理器(对象+数组)

⛳️ 项目需求

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

  1. 1)新增图书
  2. 2)查看图书
  3. 3)删除图书
  4. 4)借出图书
  5. 5)归还图书
  6. 6)退出图书系统

⛳️ 覆盖知识

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

⛳️ 开发思路

(1)明确需求

(2)编码顺序

  1. 1)、数据初始化
  2. 2)、循环完成各种图书管理操作
  3. 3)、菜单切换

(3)测试

⛳️ 开发步骤

❤️ 1、数据初始化

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

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

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

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

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

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

  1. CREATE DATABASE IF NOT EXISTS `java221804`;
  2. CREATE TABLE IF NOT EXISTS book(
  3. `name` VARCHAR(20),
  4. `state` INT,
  5. `date` INT,
  6. `count` INT
  7. );

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

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

  1. 增加图书的方法
  1. public int insert(Book book) {
  2. // 获取连接
  3. connection = DBUtils.getConnection();
  4. String sql = "insert into book values(?,?,?,?);";
  5. try {
  6. preS = connection.prepareStatement(sql);
  7. preS.setString(1, book.getName());
  8. preS.setInt(2, book.getState());
  9. preS.setInt(3, book.getDate());
  10. preS.setInt(4, book.getCount());
  11. return preS.executeUpdate();
  12. } catch (SQLException e) {
  13. e.printStackTrace();
  14. }
  15. return 0;
  16. }
  1. 查询全部图书的方法
  1. public List<Book> selectAll() {
  2. List<Book> books=new ArrayList<Book>();
  3. // 获取连接
  4. connection = DBUtils.getConnection();
  5. String sql = "select * from book;";
  6. try {
  7. preS = connection.prepareStatement(sql);
  8. resultSet=preS.executeQuery();
  9. while(resultSet.next()){
  10. Book book=new Book(resultSet.getNString(1), resultSet.getInt(2), resultSet.getInt(3), resultSet.getInt(4));
  11. books.add(book);
  12. }
  13. return books;
  14. } catch (SQLException e) {
  15. e.printStackTrace();
  16. }
  17. return null;
  18. }
  1. 欢迎使用迷你图书管理器方法
  2. 新增图书方法
  3. 查看图书方法
  4. 删除图书方法
  5. 借出图书方法
  6. 归还图书方法
  7. 退出图书方法
  8. 欢迎首界面:
  1. //欢迎使用迷你图书管理器方法
  2. public static void useBookSystem() {
  3. // 输出欢迎菜单
  4. System.out.println("欢迎使用迷你图书管理器");
  5. System.out.println("-------------------------");
  6. System.out.println("1.新增图书");
  7. System.out.println("2.查看图书");
  8. System.out.println("3.删除图书");
  9. System.out.println("4.借出图书");
  10. System.out.println("5.归还图书");
  11. System.out.println("6.退出图书");
  12. System.out.println("-------------------------");
  13. }

⛳️ 全部代码展示

❤️ 1、Book类

  1. package cn.bdqn.demo01;
  2. import java.io.Serializable;
  3. @SuppressWarnings("serial")
  4. public class Book implements Serializable {
  5. //定义属性
  6. private String name;
  7. private int state;
  8. private int date;
  9. private int count;
  10. //添加无参构造
  11. public Book() {
  12. super();
  13. }
  14. //添加有参构造
  15. public Book(String name, int state, int date, int count) {
  16. super();
  17. this.name = name;
  18. this.state = state;
  19. this.date = date;
  20. this.count = count;
  21. }
  22. //添加get/set方法
  23. public String getName() {
  24. return name;
  25. }
  26. public void setName(String name) {
  27. this.name = name;
  28. }
  29. public int getState() {
  30. return state;
  31. }
  32. public void setState(int state) {
  33. this.state = state;
  34. }
  35. public int getDate() {
  36. return date;
  37. }
  38. public void setDate(int date) {
  39. this.date = date;
  40. }
  41. public int getCount() {
  42. return count;
  43. }
  44. public void setCount(int count) {
  45. this.count = count;
  46. }
  47. }

❤️ 2、DBUtils类

  1. package cn.bdqn.demo01;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.sql.Connection;
  5. import java.sql.DriverManager;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. import java.sql.Statement;
  9. import java.util.Properties;
  10. public class DBUtils {
  11. private static final Properties PROPERTIES =new Properties();
  12. static{
  13. InputStream is = DBUtils.class.getResourceAsStream("/db.properties");
  14. try {
  15. PROPERTIES.load(is);
  16. //1、注册驱动
  17. Class.forName(PROPERTIES.getProperty("driver"));
  18. } catch (IOException e) {
  19. e.printStackTrace();
  20. } catch (ClassNotFoundException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. // 2、获取连接方法
  25. public static Connection getConnection(){
  26. Connection connection = null;
  27. //2、获取连接对象
  28. try {
  29. connection=DriverManager.getConnection(PROPERTIES.getProperty("url"), PROPERTIES.getProperty("username"), PROPERTIES.getProperty("password"));
  30. } catch (SQLException e) {
  31. e.printStackTrace();
  32. }
  33. return connection;
  34. }
  35. // 3、释放资源方法
  36. public static void closeAll(ResultSet resultSet, Statement statement,
  37. Connection connection) {
  38. try {
  39. if (resultSet != null) {
  40. resultSet.close();
  41. }
  42. if(statement!=null){
  43. statement.close();
  44. }
  45. if(connection!=null){
  46. connection.close();
  47. }
  48. } catch (SQLException e) {
  49. e.printStackTrace();
  50. }
  51. }
  52. }

❤️ 3、 BookDaoImpl类

  1. package cn.bdqn.demo01;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. public class BookDaoImpl {
  9. // 全局变量
  10. Connection connection = null;
  11. PreparedStatement preS = null;
  12. ResultSet resultSet=null;
  13. // 增
  14. public int insert(Book book) {
  15. // 获取连接
  16. connection = DBUtils.getConnection();
  17. String sql = "insert into book values(?,?,?,?);";
  18. try {
  19. preS = connection.prepareStatement(sql);
  20. preS.setString(1, book.getName());
  21. preS.setInt(2, book.getState());
  22. preS.setInt(3, book.getDate());
  23. preS.setInt(4, book.getCount());
  24. return preS.executeUpdate();
  25. } catch (SQLException e) {
  26. e.printStackTrace();
  27. }
  28. return 0;
  29. }
  30. // 删
  31. public int delete(Book book) {
  32. // 获取连接
  33. connection = DBUtils.getConnection();
  34. String sql = "delete from book where name=?;";
  35. try {
  36. preS = connection.prepareStatement(sql);
  37. preS.setString(1, book.getName());
  38. return preS.executeUpdate();
  39. } catch (SQLException e) {
  40. e.printStackTrace();
  41. }
  42. return 0;
  43. }
  44. // 改
  45. public int update(Book book) {
  46. // 获取连接
  47. connection = DBUtils.getConnection();
  48. String sql = "update book set state=?,date=?,count=? where name=?;";
  49. try {
  50. preS = connection.prepareStatement(sql);
  51. preS.setInt(1, book.getState());
  52. preS.setInt(2, book.getDate());
  53. preS.setInt(3, book.getCount());
  54. preS.setString(4, book.getName());
  55. return preS.executeUpdate();
  56. } catch (SQLException e) {
  57. e.printStackTrace();
  58. }
  59. return 0;
  60. }
  61. // 查一条
  62. public Book select(String name) {
  63. // 获取连接
  64. connection = DBUtils.getConnection();
  65. String sql = "select * from book where name=?;";
  66. try {
  67. preS = connection.prepareStatement(sql);
  68. preS.setString(1, name);
  69. resultSet=preS.executeQuery();
  70. if(resultSet.next()){
  71. Book book=new Book(resultSet.getNString(1), resultSet.getInt(2), resultSet.getInt(3), resultSet.getInt(4));
  72. return book;
  73. }
  74. } catch (SQLException e) {
  75. e.printStackTrace();
  76. }
  77. return null;
  78. }
  79. // 查全部
  80. public List<Book> selectAll() {
  81. List<Book> books=new ArrayList<Book>();
  82. // 获取连接
  83. connection = DBUtils.getConnection();
  84. String sql = "select * from book;";
  85. try {
  86. preS = connection.prepareStatement(sql);
  87. resultSet=preS.executeQuery();
  88. while(resultSet.next()){
  89. Book book=new Book(resultSet.getNString(1), resultSet.getInt(2), resultSet.getInt(3), resultSet.getInt(4));
  90. books.add(book);
  91. }
  92. return books;
  93. } catch (SQLException e) {
  94. e.printStackTrace();
  95. }
  96. return null;
  97. }
  98. }

❤️ 4、BookServiceImpl类

  1. package cn.bdqn.demo01;
  2. import java.util.List;
  3. import java.util.Scanner;
  4. public class BookServiceImpl {
  5. // 定义一个静态的Scanner
  6. static Scanner inputsc = new Scanner(System.in);
  7. // 是否退出系统,false代表退出系统
  8. static boolean flag = true;
  9. static int num = -1;
  10. static BookDaoImpl bookDaoImpl = new BookDaoImpl();
  11. // 数据初始化
  12. static {
  13. // 初始化数据并添加到数据库中
  14. Book book1 = new Book("罗马假日", 1, 1, 15);
  15. Book book2 = new Book("白雪公主", 0, 0, 12);
  16. Book book3 = new Book("葫芦兄弟", 0, 0, 30);
  17. // 判断数据库是否存在,不存在,添加初始化图书
  18. if (bookDaoImpl.select(book1.getName()) == null) {
  19. bookDaoImpl.insert(book1);
  20. }
  21. if (bookDaoImpl.select(book2.getName()) == null) {
  22. bookDaoImpl.insert(book2);
  23. }
  24. if (bookDaoImpl.select(book3.getName()) == null) {
  25. bookDaoImpl.insert(book3);
  26. }
  27. }
  28. // 欢迎使用迷你图书管理器方法
  29. public static void useBookSystem() {
  30. // 输出欢迎菜单
  31. System.out.println("欢迎使用迷你图书管理器");
  32. System.out.println("-------------------------");
  33. System.out.println("1.新增图书");
  34. System.out.println("2.查看图书");
  35. System.out.println("3.删除图书");
  36. System.out.println("4.借出图书");
  37. System.out.println("5.归还图书");
  38. System.out.println("6.退出图书");
  39. System.out.println("-------------------------");
  40. }
  41. // 新增图书方法
  42. public static void addBook() {
  43. System.out.println("-->新增图书\n");
  44. System.out.println("请输入图书名称:");
  45. String bookName = inputsc.next();
  46. Book book = new Book(bookName, 0, 0, 0);
  47. // 向数据库添加图书
  48. int num = bookDaoImpl.insert(book);
  49. System.out.println();
  50. if (num != 0) {
  51. System.out.println("新增《" + bookName + "》成功!");
  52. } else {
  53. System.out.println("新增《" + bookName + "》失败!");
  54. }
  55. System.out.println("*****************************************");
  56. }
  57. // 查看图书方法
  58. public static void lookBook() {
  59. System.out.println("-->查看图书\n");
  60. System.out.println("序号\t状态\t名称\t借出日期\t借出次数");
  61. // 获取数据库全部图书
  62. List<Book> books = bookDaoImpl.selectAll();
  63. for (int i = 0; i < books.size(); i++) {
  64. String BookState = (books.get(i).getState() == 0) ? "可借阅" : "已借出";
  65. String dateStr = (books.get(i).getDate() == 0) ? "" : (books.get(i)
  66. .getDate() + "日");
  67. System.out.println((i + 1) + "\t" + BookState + "\t"
  68. + books.get(i).getName() + "\t" + dateStr + "\t"
  69. + books.get(i).getCount() + "次");
  70. }
  71. System.out.println("*****************************************");
  72. }
  73. // 删除图书方法
  74. public static void delBook() {
  75. System.out.println("-->删除图书\n");
  76. System.out.println("请输入要删除图书的名称:");
  77. String deleteBook = inputsc.next();
  78. // 从数据库中查找此图书
  79. Book delBook = bookDaoImpl.select(deleteBook);
  80. boolean flag3 = false;
  81. // 删除的图书存在、状态处于可借阅状态
  82. if (delBook.getName() != null && deleteBook.equals(delBook.getName())
  83. && delBook.getState() == 0) {
  84. flag3 = true;
  85. int num = bookDaoImpl.delete(delBook);
  86. if (num != 0) {
  87. System.out.println("图书删除成功!");
  88. } else {
  89. System.out.println("图书删除失败!");
  90. }
  91. } else if (delBook.getName() != null
  92. && deleteBook.equals(delBook.getName())
  93. && delBook.getState() == 1) {
  94. flag3 = true;
  95. System.out.println("该图书已被借出,目前无法删除!");
  96. }
  97. if (!flag3) {
  98. System.out.println("没有找到匹配信息!");
  99. }
  100. System.out.println("*****************************************");
  101. }
  102. // 借出图书方法
  103. public static void lendBook() {
  104. System.out.println("-->借出图书\n");
  105. System.out.print("请输入图书名称:");
  106. String want = inputsc.next(); // 要借出的图书名称
  107. // 从数据库中查找此图书
  108. Book wantBook = bookDaoImpl.select(want);
  109. if (wantBook == null) {
  110. System.out.println("没有找到匹配信息!");
  111. } else {
  112. if (want.equals(wantBook.getName()) && wantBook.getState() == 0) { // 找到匹配可借
  113. wantBook.setState(1); // 将此图书置于借出状态
  114. System.out.print("请输入借出日期:");
  115. int inputscData = inputsc.nextInt();
  116. wantBook.setDate(inputscData);
  117. while (wantBook.getDate() < 1 || wantBook.getDate() > 31) { // 当输入借出的日期不满足1-31时
  118. System.out.println("必须输入大于等于1且小于等于31的数字,请重新输入:");
  119. inputscData = inputsc.nextInt();
  120. wantBook.setDate(inputscData);
  121. }
  122. wantBook.setCount(wantBook.getCount() + 1);
  123. // 更新书本最新信息
  124. int num = bookDaoImpl.update(wantBook);
  125. if (num != 0) {
  126. System.out.println("借出《" + want + "》成功!");
  127. } else {
  128. System.out.println("借出《" + want + "》失败!");
  129. }
  130. } else if (want.equals(wantBook.getName())
  131. && wantBook.getState() == 1) { // 找到匹配已被借出
  132. System.out.println("《" + want + "》已被借出!");
  133. }
  134. }
  135. System.out.println("*****************************************");
  136. }
  137. // 归还图书方法
  138. public static void returnBook() {
  139. System.out.println("-->归还图书\n");
  140. int charge = 0; // 租金
  141. System.out.print("请输入归还图书名称:");
  142. String back = inputsc.next();
  143. // 从数据库中查找此图书
  144. Book backBook = bookDaoImpl.select(back);
  145. if (backBook == null) {
  146. System.out.println("没有找到匹配信息!");
  147. } else {
  148. if (back.equals(backBook.getName())
  149. && backBook.getDate() == 1) {// 找到匹配
  150. backBook.setDate(0); // 将借阅状态修改为可借阅
  151. System.out.print("请输入归还日期:");
  152. int redate = inputsc.nextInt();
  153. while (redate < backBook.getDate() || redate > 31) { //
  154. // 归还日期不能小于借出日期,也不能大于31
  155. if (redate < backBook.getDate()) {
  156. System.out.println("归还日期不能小于借出日期,请重新输入:");
  157. } else {
  158. System.out.println("一个月只有31天,请重新输入:");
  159. }
  160. redate = inputsc.nextInt();
  161. }
  162. charge = redate - backBook.getDate();
  163. // 更新书本最新信息
  164. int num = bookDaoImpl.update(backBook);
  165. if (num != 0) {
  166. System.out.println("\n归还《" + back + "》成功!");
  167. System.out.println("借出日期为:" + (backBook.getDate()+1) + "日");
  168. System.out.println("归还日期为:" + redate + "日");
  169. System.out.println("应付租金(元):" + charge);
  170. backBook.setDate(0);
  171. } else {
  172. System.out.println("借出《" + back + "》失败!");
  173. }
  174. } else if (back.equals(backBook.getName())
  175. && backBook.getState() == 0) {// 找到匹配但没有借出
  176. System.out.println("该图书没有被借出!无法进行归还操作。");
  177. }
  178. }
  179. System.out.println("*****************************************");
  180. }
  181. // 操作
  182. public static void runTest() {
  183. // 循环操作
  184. do {
  185. // 定义一个BookMethod操作类,将操作方法定义在BookMethod类中,然后调用
  186. // 欢迎菜单方法
  187. BookServiceImpl.useBookSystem();
  188. System.out.println("请选择:");
  189. int choose = inputsc.nextInt();
  190. switch (choose) {
  191. case 1:
  192. // 新增图书
  193. BookServiceImpl.addBook();
  194. break;
  195. case 2:
  196. // 查看图书
  197. BookServiceImpl.lookBook();
  198. break;
  199. case 3:
  200. // 删除图书
  201. BookServiceImpl.delBook();
  202. break;
  203. case 4:
  204. // 借出图书
  205. BookServiceImpl.lendBook();
  206. break;
  207. case 5:
  208. // 归还图书
  209. BookServiceImpl.returnBook();
  210. break;
  211. case 6:
  212. // 退出图书
  213. flag = false;
  214. break;
  215. default:
  216. flag = false;
  217. break;
  218. }
  219. if (flag) {
  220. System.out.println("输入0返回:");
  221. num = inputsc.nextInt();
  222. } else {
  223. break;
  224. }
  225. } while (num == 0);
  226. System.out.println("谢谢使用!");
  227. }
  228. }

❤️ 5、MyBookSystem类

  1. package cn.bdqn.demo01;
  2. /**
  3. * 图书管理系统类MyBookMgr
  4. *
  5. * @author Administrator
  6. *
  7. */
  8. public class MyBookSystem {
  9. public static void main(String[] args) {
  10. BookServiceImpl.runTest();
  11. }
  12. }

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

标签: java jvm servlet

本文转载自: https://blog.csdn.net/hh867308122/article/details/127575320
版权归原作者 乐趣国学 所有, 如有侵权,请联系我们删除。

“32、Java&mdash;&mdash;迷你图书管理器(对象+JDBC)”的评论:

还没有评论