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());
    }
    @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,先自己检查问题!

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值