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

news2024/11/15 10:53:54

搭建过程

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());
    }
    @Override
    public 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;
    }
    @Override
    public int update(book b) {
        jdbcTemplate.update("insert into book values (?,?,?,?,?)",b.getCount(), b.getBookname(),b.getAuthor(),b.getPrice(),b.getType());
        return 1;
    }
    @Override
    public int add(book b) {
        return 0;
    }
    @Override
    public int deleat() {
        System.out.println("请输入删除图书的名称:");
        String name =scanner.next();
        jdbcTemplate.update("delete from book where bookname=?;",name);
        return 1;
    }
    @Override
    public List<book> selectname(){
        System.out.println("请输入查询图书的名称:");
        String name =scanner.next();
        return jdbcTemplate.query("select  * from book where bookname=? ",new BeanPropertyRowMapper<book>(book.class),name);
    }
    @Override
    public 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;
    }

    @Override
    public 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,先自己检查问题!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2067712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【运维】docker搭建portainer

1.拉取镜像 并 启动容器 1.1 拉取镜像 docker pull 6053537/portainer-ce1.2 启动容器 docker run -d --restartalways --name"portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce2.访问地址 ip地址9000端口 密码&…

True XML cookbook

打开题目 看到登录口 随便输入admin&#xff0c;123456&#xff0c;然后抓包试一下 先按原来那道题的payload进行测试&#xff0c;payload和结果如下&#xff1a; <?xml version"1.0" ?> <!DOCTYPE llw [ <!ENTITY file SYSTEM "file:///flag&…

Linux驱动入门实验班——DAC模块驱动(附百问网视频链接)

目录 前言 一、 SPI数据结构 1.SPI设备驱动 2.SPI设备数据结构 二 、函数接口 1.spi_sync_transfer 2.spi_register_driver 三、DAC 1.数据格式 2.数据结构 四、源码 驱动 应用 课程链接 前言 在这里主要记录学习韦东山老师Linux驱动人入门实验班的笔记&#xff0…

计算机网络——HTTP与HTTPS协议

HTTP与HTTPS是应用层的协议。 目录 一、HTTP 二、HTTPS 三、HTTP与HTTPs对比 四、HTTP/1.0 HTT/1.1 HTTP/2有什么区别 五、HTTP常用请求方法&#xff1f;get/post区别&#xff1f; 六、HTTP的工作过程 七、HTTPS的工作过程 八、Cookie、Session、Token 一、HTTP 超…

【CAN总线测试】——CAN物理层测试

从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者&#xff0c;时光不负有心人。 目录 1.最小通讯电压测试 2.最大通讯电压测试 3.显性位/隐性位输出电压测试 4.信号跳变沿测试 5.地偏移 6.终端电阻 1.7. CANH/CANL短路 1.8. CANH /GND短路 …

Verilog刷题笔记58

题目&#xff1a; Exams/2014 q3c 解题&#xff1a; module top_module (input clk,input [2:0] y,input x,output Y0,output z );parameter s03d000,s13d001,s23d010,s33d011,s43d100;always(*)begincase(y)s0:Y0x;s1:Y0~x;s2:Y0x;s3:Y0~x;s4:Y0~x;endcaseendassign z(y3b01…

Kafka运行机制(二):消息确认,消息日志的存储和回收,生产者消息分区

前置知识 Kafka基本概念https://blog.csdn.net/dxh9231028/article/details/141270920?spm1001.2014.3001.5501Kafka运行机制&#xff08;一&#xff09;&#xff1a;Kafka集群启动&#xff0c;controller选举&#xff0c;生产消费流程https://blog.csdn.net/dxh9231028/arti…

Verilog刷题笔记57

题目: Exams/2014 q3bfsm Given the state-assigned table shown below, implement the finite-state machine. Reset should reset the FSM to state 000. 解题&#xff1a; module top_module (input clk,input reset, // Synchronous resetinput x,output z );parameter…

ESP32-IDF 在 Ubuntu 下的配置

目录 一、安装准备二、获取 ESP-IDF三、设置工具四、使用案例 参考资料&#xff1a;官方文档&#xff1a;Linux 和 macOS 平台工具链的标准设置。 一、安装准备 参照官方文档&#xff0c;首先下载编译 ESP-IDF 所需要的软件包&#xff1a; sudo apt-get install git wget fl…

如何使用ssm实现基于Java的共享客栈管理系统

TOC ssm058基于Java的共享客栈管理系统jsp 第1章 绪论 1.1 课题背景 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。所以各…

一篇快速搞懂 JavaSE 高级特性(代码块,注解,枚举,异常处理,多线程,集合框架,泛型,反射,IO ......)

JavaSE 高级 一、面向对象&#xff08;高级&#xff09;1、单例模式&#xff08;Singleton&#xff09;2、代码块1&#xff09;静态代码块2&#xff09;非静态代码块 3、关键字 final4、抽象类与抽象方法&#xff08;abstract&#xff09;5、模板方法设计模式&#xff08;Templ…

利用GPT绘制流程图(无需下载任何软件

目录 什么是Flowchart Fun&#xff1f;如何利用GPT绘制流程图&#xff1f;步骤1&#xff1a;确定流程图的目的和内容步骤2&#xff1a;训练GPT编写流程图的文本描述步骤3&#xff1a;转换文本格式为可视化的流程图步骤4&#xff1a;调整和优化 结论小结&#xff1a; 什么是Flow…

SpringBoot【重修之HTTP协议】

request 请求&#xff0c;response 响应&#xff01; HTTP-协议的解析&#xff1a; 客户端&#xff1a;浏览器已经会自动解析了 服务端&#xff1a;通过Web服务器来解析&#xff01;【Tomcat , Jetty , WebLogic , WebSphere 】 Tomcat的研究学习 SpringBoot Web快速入门…

AIxBoard部署BLIP模型进行图文问答

一、AIxBoard简介 AIxBoard&#xff08;X板&#xff09;是一款IA架构的人工智能嵌入式开发板&#xff0c;体积小巧功能强大&#xff0c;可让您在图像分类、目标检测、分割和语音处理等应用中并行运行多个神经网络。它是一款面向专业创客、开发者的功能强大的小型计算机&#xf…

[Linux CMD] 查看系统资源 (持续更新中)

概述 在Linux中&#xff0c;有许多命令和工具可用于查看系统的资源使用情况。以下是一些常用的方式&#xff1a; top&#xff1a;top命令是最常见的实时系统监视工具之一。它显示了当前运行的进程列表&#xff0c;以及每个进程的CPU、内存使用情况、nice值等信息。top命令还会…

【Linux】简易日志工具项目

有些鸟儿是不应该被关在笼子里的&#xff0c; 因为他们的羽毛太丰润了。 当他们飞走&#xff0c;你会由衷地庆贺他获得自由。 --- 肖申克的救赎》--- 从零开始构建简易日志系统 1 日志1.1 什么是日志1.2 日志的意义1.3 为什么要构建自己的日志工具 2 构建自己的日志工具2.1…

带有限制编辑的PDF文件怎么取消编辑限制

在日常工作和学习中&#xff0c;我们经常会遇到一些带有“限制编辑”的PDF文件。这些文件由于设置了密码保护&#xff0c;使得我们无法直接编辑、复制或打印其中的内容&#xff0c;给信息的处理和利用带来了诸多不便。然而&#xff0c;通过一些有效的方法和工具&#xff0c;我们…

C++—八股文总结(25秋招期间一直更新)

1、const 1.1 指针常量和常量指针 说说const int *a, int const *a, const int a, int *const a, const int *const a分别是什么&#xff0c;有什么特点。 const int *aint const *a; //可以通过 a 访问整数值&#xff0c;但不能通过 a 修改该整数的值&#xff0c;指针本身是…

【AI赋能游戏】《黑神话:悟空》专属黑悟空无限创意生成器!(整合包分享)

最近最火的话题&#xff0c;肯定就是《黑神话&#xff1a;悟空》了&#xff01;这游戏实在是忒火火火了。。。全网破圈霸屏&#xff0c;连官媒央视都给了无死角宣传&#xff01; 《黑神话&#xff1a;悟空》登顶Steam历史售卖榜&#xff0c;同时在线玩家冲到了最高**222**万人&…

8.22-docker的部署及其使用

docker 1.docker环境部署以及语法 [rootdocker ~]# cat << EOF | tee /etc/modules-load.d/k8s.conf> overlay> br_netfilter> EOFoverlaybr_netfilter[rootdocker ~]# modprobe overlay[rootdocker ~]# modprobe br_netfilter[rootdocker ~]# cat /etc/module…