Java学习Day34:图书管理小项目

2024-08-23 22:44

本文主要是介绍Java学习Day34:图书管理小项目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

搭建过程

1.根据需求设计数据库

  • 概念设计:使用ER图等工具设计数据库概念模型,明确实体、属性、关系。
  • 逻辑设计:将概念模型转换为数据库表结构,确定主键、外键、索引等。
  • 物理设计:根据数据库管理系统的特性进行物理存储设计,如文件组织、存储分配等(通常由数据库管理系统自动处理)。
  • 编写SQL脚本:创建数据库、表、视图、存储过程等。

=========================================================================

=========================================================================

2.后端导入德鲁伊的proprities文件

=========================================================================

3.书写德鲁伊工具类简化后去datasouse

=========================================================================

public class druidUtils {private static DataSource dataSource;static {Properties properties =new Properties();try {properties.load(druidUtils.class.getClassLoader().getResourceAsStream("JDBC_durid/druid.properties"));dataSource= DruidDataSourceFactory.createDataSource(properties);} catch (IOException e) {throw new RuntimeException(e);} catch (Exception e) {throw new RuntimeException(e);}}private druidUtils(){}//私有构造,防止外部实例化此类public static Connection getConnection() throws SQLException {//获取链接模块return dataSource.getConnection();}public static void close(Connection  con, PreparedStatement pst){if (con!=null){try {con.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (pst!=null){try {pst.close();} catch (SQLException e) {throw new RuntimeException(e);}}}public static  DataSource getDataSource(){return dataSource;}public static void close(Connection  con, PreparedStatement pst, ResultSet rst) {close(con,pst);if (rst!=null){try {rst.close();} catch (SQLException e) {throw new RuntimeException(e);}}}
}

=========================================================================

4.BaseDao接口设计

=========================================================================

package JDBC_durid;import java.util.List;public interface bookBaseDao {public int select();//显示图书public int update(book b);//更新操作public int add(book b);//新增public int deleat();//删除public List<book> selectname();public int brow();//借书public int huan();//归还书
}

5.设计与数据库中存储对象相同的类

=========================================================================

 

6.设计BaseDao接口实现类

=========================================================================

public class bookBaseDaoImp implements bookBaseDao {static Scanner scanner =new Scanner(System.in);JdbcTemplate jdbcTemplate =null;public bookBaseDaoImp(){jdbcTemplate=new JdbcTemplate(druidUtils.getDataSource());}@Overridepublic int select() {List<book> arr= jdbcTemplate.query("select count, bookname,author,price,type from book",new BeanPropertyRowMapper<book>(book.class));for (book b:arr) {if (b.getCount()>0){System.out.println("book{bookname = " + b.getBookname() + ", author = " + b.getAuthor() + ", price = " + b.getPrice() + ", type = " + b.getType()+"   还剩"+b.getCount()+"本书 }");}else if (b.getCount()==0){System.out.println("book{bookname = " + b.getBookname() + ", author = " + b.getAuthor() + ", price = " + b.getPrice() + ", type = " + b.getType()+"   已借阅! }");}}return 0;}@Overridepublic int update(book b) {jdbcTemplate.update("insert into book values (?,?,?,?,?)",b.getCount(), b.getBookname(),b.getAuthor(),b.getPrice(),b.getType());return 1;}@Overridepublic int add(book b) {return 0;}@Overridepublic int deleat() {System.out.println("请输入删除图书的名称:");String name =scanner.next();jdbcTemplate.update("delete from book where bookname=?;",name);return 1;}@Overridepublic List<book> selectname(){System.out.println("请输入查询图书的名称:");String name =scanner.next();return jdbcTemplate.query("select  * from book where bookname=? ",new BeanPropertyRowMapper<book>(book.class),name);}@Overridepublic int brow() {String s =scanner.next();List<book> arr= jdbcTemplate.query("select * from book where bookname=?",new BeanPropertyRowMapper<book>(book.class),s);int count =arr.get(0).getCount();if (count==0){return 0;}else if (arr.get(0).getCount()>0){System.out.println("已借阅!");jdbcTemplate.update("update book set count = ? where bookname = ?",count-1,s);}return --count;}@Overridepublic int huan() {String s =scanner.next();List<book> arr= jdbcTemplate.query("select * from book where bookname=?",new BeanPropertyRowMapper<book>(book.class),s);book b = arr.get(0);int a = jdbcTemplate.update("update book set count = ? where bookname = ?",b.getCount()+1,s);return b.getCount()+1;}
}

7.设计前端交互

=========================================================================

public class choise {static Scanner scanner =new Scanner(System.in);static bookBaseDaoImp bookImpDao=null;static {bookImpDao= new bookBaseDaoImp();}public static void main(String[] args) {System.out.println("请输入选择你的你的姓名:");String user =scanner.next();System.out.println("请输入选择你的身份:1-》管理员 , 2-》普通用户");int num =scanner.nextInt();if (num==2){while (true){if (usersystem(user)) break;}} else if (num==1) {while (true){if (managerSystem(user)) break;}}}private static boolean usersystem(String user) {System.out.println("hello ,用户:"+ user +"欢迎来到图书小练习系统");System.out.println("=====用户菜单=====");System.out.println("1.查找图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("0.退出系统");System.out.println("=====用户菜单=====");System.out.println("请输入你的操作:");int choise1= scanner.nextInt();if (choise1==1){List<book> arr=  bookImpDao.selectname();System.out.println(arr.get(0));}if (choise1==2){System.out.println("请输入借阅图书的名称:");int a = bookImpDao.brow();System.out.println("此书还剩"+a+"本!");}if (choise1==3){System.out.println("请输入归还图书的名称:");System.out.println("已归还,书库中还剩"+bookImpDao.huan()+"本!");}if (choise1==0){return true;}return false;}private static boolean managerSystem(String user) {System.out.println("hello ,管理员:"+ user +"欢迎来到图书小练习系统");System.out.println("=====管理员菜单=====");System.out.println("1.查找图书");System.out.println("2.新增图书");System.out.println("3.删除图书");System.out.println("4.显示图书");System.out.println("0.退出系统");System.out.println("=====管理员菜单=====");System.out.println("请输入你的操作:");int choise1= scanner.nextInt();if (choise1==1){List<book> arr=  bookImpDao.selectname();System.out.println(arr.get(0));}if (choise1==2){book book1=new book();System.out.println("请输入新增图书的数量:");int count = scanner.nextInt();book1.setCount(count);System.out.println("请输入新增图书的名称:");String name =scanner.next();book1.setBookname(name);System.out.println("请输入新增图书的作者:");String auther =scanner.next();book1.setAuthor(auther);System.out.println("请输入新增图书的价格:");int price = scanner.nextInt();book1.setPrice(price);System.out.println("请输入新增图书的种类:");String type =scanner.next();book1.setType(type);int a = bookImpDao.update(book1);System.out.println(a);}if (choise1==3){bookImpDao.deleat();}if (choise1==4){System.out.println("显示图书");bookImpDao.select();}if (choise1==0){return true;}return false;}
}

总结:

1.需求分析一定要尽可能全面,不然后续的修改麻烦;

2.清晰的三层架构可以使我们有条理的连接数据库;

3.对于错误的分析尽可能少依赖AI,先自己检查问题!

这篇关于Java学习Day34:图书管理小项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100710

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏