新手小白学习Java第十一天笔记

图书管理系统,需要连接数据库,这里用的是mysql数据库

用户登录功能并没有做

如下图,是创建的包中的类和接口

BookDao接口

package com.jr.date730.book.dao;

import com.jr.date730.book.pojo.Book;

import java.util.ArrayList;
import java.util.TreeSet;

public interface BookDao {
    /*
    insertBook添加图书信息
    Book:要存储的图书对象
    return:方法返回值是int类型:0---添加失败  >0表示添加成功
     */
    int insertBook(Book book);

    /*
    queryBooks根据条件查询图书信息:
    如果book为null---全查:再逐一判断属性值的个数
    return:返回的是符合条件的所有图书信息对象
     */
    ArrayList<Book> selectBooks(Book book);


    /*
    根据图书编号,删除图书对象
    bid
    return:方法返回值是int类型:0--删除失败,>0删除成功
     */
    int deleteByBid(String bid);

    /*
    修改图书信息,为业务层的借出和归还提供底层操作
    book
    返回值:int类型:0--修改失败,>0修改成功
     */
    int updateBook(Book book);

    /*
    用于实现图书排行榜功能
    返回值是TreeSet<Book>排序后的图书集合
     */
    TreeSet<Book> orderBooks();

    /*
    根据图书编号查询图书对象
    id
    返回值:null---说明没查到;不为空,说明查到了
     */
    Book selectBookByid(String id);

}

UserDao接口

package com.jr.date730.book.dao;

import com.jr.date730.book.pojo.User;

public interface UserDao {
    /*
    注册用户底层方法
    user
    返回值:int类型:0---注册失败,>0注册成功
     */
    int insertUser(User user);

    /*
    登录用户的底层方法
    user
    返回值:User :null---登录失败;否则登录成功
     */
    User queryByUser(User user);
}

BookDao实现类BookDaoImpl

package com.jr.date730.book.dao.Impl;

import com.jr.date730.book.dao.BookDao;
import com.jr.date730.book.pojo.Book;
import com.jr.date730.book.util.DBHelper;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.TreeSet;

public class BookDaoImpl implements BookDao {

    private DBHelper db = new DBHelper();

    @Override
    public int insertBook(Book book) {
        //3,编写sql命令:
        String sql = "insert into book values(?,?,1,null,0)";
        return db.updateTable(sql, book.getbId(), book.getbName());
    }

    @Override
    public ArrayList<Book> selectBooks(Book book) {
        ArrayList list = new ArrayList();
        StringBuilder str = new StringBuilder("select * from book where 1 = 1 ");
        if (book != null && book.getbId() != null) {
            str.append("and bid =?");
            list.add(book.getbId());
        }
        if (book != null && book.getbName() != null) {
            str.append("and bName =?");
            list.add(book.getbName());
        }
        return db.queryBooks(str.toString(), list.toArray());
    }

    @Override
    public int deleteByBid(String bid) {
        String sql = "delete from book where bid=?";
        return db.updateTable(sql, bid);
    }

    @Override
    public int updateBook(Book book) {
        String sql;
        if(book.getStatus()==null) {// 此时图书要执行借出操作
            sql = "update book set status=0,lendDate=?,lendCount=lendCount+1 where bid=?";
            return db.updateTable(sql, book.getLendDate(), book.getbId());
        }else { //此时图书要执行归还操作
            sql = "update book set status=1,lendDate='' where bid=?";
            return db.updateTable(sql, book.getbId());
        }
    }

    @Override
    public TreeSet<Book> orderBooks() {
        String sql = "select * from book";
        ArrayList<Book> list = db.queryBooks(sql);
        TreeSet<Book> set = new TreeSet<>();
        Iterator<Book> iterator = list.iterator();
        while (iterator.hasNext()) {
            Book book = iterator.next();
            set.add(book);
        }
        return set;
    }

    @Override
    public Book selectBookByid(String id) {
        //3,编写sql命令:
        String sql = "select * from book where bid=?";
        ArrayList<Book> books = db.queryBooks(sql, id);
        if (books.size() >= 1) {
            return books.get(0);
        }
        return null;
    }

}

UserDao接口实现类UserDaoImpl

package com.jr.date730.book.dao.Impl;

import com.jr.date730.book.dao.UserDao;
import com.jr.date730.book.pojo.User;

public class UserDaoImpl implements UserDao {
    @Override
    public int insertUser(User user) {
        return 0;
    }

    @Override
    public User queryByUser(User user) {
        return null;
    }
}

Book实体类

package com.jr.date730.book.pojo;

public class Book implements Comparable<Book>{
    /*
    图书编号
    图书名称
    图书状态   假:未借出   真:已借出
    图书的借出时间
    图书的借出次数
     */
    private String bId;
    private String bName;
    private Integer status;
    private String lendDate;
    private Integer lendCount;

    public Book(){
    }

    public Book(String bId, String bName, Integer status, String lendDate, Integer lendCount) {
        this.bId = bId;
        this.bName = bName;
        this.status = status;
        this.lendDate = lendDate;
        this.lendCount = lendCount;
    }

    public String getbId() {
        return bId;
    }

    public void setbId(String bId) {
        this.bId = bId;
    }

    public String getbName() {
        return bName;
    }

    public void setbName(String bName) {
        this.bName = bName;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getLendDate() {
        return lendDate;
    }

    public void setLendDate(String lendDate) {
        this.lendDate = lendDate;
    }

    public Integer getLendCount() {
        return lendCount;
    }

    public void setLendCount(Integer lendCount) {
        this.lendCount = lendCount;
    }

    @Override
    public String toString() {
        return "Book{" +
                "bId='" + bId + '\'' +
                ", bName='" + bName + '\'' +
                ", status=" + status +
                ", lendDate='" + lendDate + '\'' +
                ", lendCount=" + lendCount +
                '}';
    }

    @Override
    public int compareTo(Book o) {
        if(this.lendCount>o.getLendCount()){
            return 1;
        }else if(this.lendCount<o.getLendCount()){
            return -1;
        }else {
            return this.bId.compareTo(o.getbId());
        }
        //return this.lendCount.compareTo(o.lendCount);
    }
}

User实体类

package com.jr.date730.book.pojo;

public class User {
    private String uId;
    private String uName;
    private String passWord;
    private Integer level;

    public User(String uId, String uName, String passWord, Integer level) {
        this.uId = uId;
        this.uName = uName;
        this.passWord = passWord;
        this.level = level;
    }

    public User() {
    }

    public String getuId() {
        return uId;
    }

    public void setuId(String uId) {
        this.uId = uId;
    }

    public String getuName() {
        return uName;
    }

    public void setuName(String uName) {
        this.uName = uName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public Integer getLevel() {
        return level;
    }

    public void setLevel(Integer level) {
        this.level = level;
    }

    @Override
    public String toString() {
        return "User{" +
                "uId='" + uId + '\'' +
                ", uName='" + uName + '\'' +
                ", passWord='" + passWord + '\'' +
                ", level=" + level +
                '}';
    }
}

BookService接口

package com.jr.date730.book.service;

import com.jr.date730.book.pojo.Book;

import java.util.ArrayList;
import java.util.TreeSet;

public interface BookService {
    /*
    新增图书功能
    book 要添加的图书对象
    返回值:true添加成功  false添加失败
     */
    boolean addBook();

    /*
    queryBooks();无条件的全查
    返回值:所有图书数据的集合
     */
    //ArrayList<Book> queryBooks();

    /*
    queryBooks(Book book);按条件查询
    返回值:符合条件的图书数据的集合
     */
    ArrayList<Book> queryBooks();

    /*
    removeByBid(String bid);根据图书编号,删除图书信息
    返回值:true删除成功  false删除失败
     */
    boolean removeByBid();

    /*
    lendBook(Book book);借出图书
    book
    返回值:true借出成功  false借出失败
     */
    boolean lendBook();

    /*
     returnBook(Book book);归还图书
     book
     返回值:int=0 归还失败  否则归还成功
      */
    int returnBook();

    /*
    rankingList();实现排行榜功能
    return
    返回值:具有排序,去重功能的treeSet集合
     */
    TreeSet<Book> rankingList();

}

BookService接口的实现类BookServiceImpl

package com.jr.date730.book.service.impl;

import com.jr.date730.book.dao.BookDao;
import com.jr.date730.book.dao.Impl.BookDaoImpl;
import com.jr.date730.book.pojo.Book;
import com.jr.date730.book.service.BookService;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class BookServiceImpl implements BookService {

    private BookDao bookDao = new BookDaoImpl();
    Scanner input = new Scanner(System.in);

    @Override
    public boolean addBook() {
        Book boo = new Book();
        System.out.println("--->新增图书");
        System.out.println("请输入新增的图书名称:");
        String nameBook = input.next();

        boo.setbId(UUID.randomUUID().toString().substring(24));
        boo.setbName(nameBook);
        int i = bookDao.insertBook(boo);
        return i == 0 ? false : true;
    }

    /* @Override
     public ArrayList<Book> queryBooks() {
         return bookDao.selectBooks(null);
     }
 */
    @Override
    public ArrayList<Book> queryBooks() {
        Book book = null;
        System.out.println("--->按条件查询图书");
        System.out.println("请输入图书名(n代表不按此条件查询):");
        String name = input.next();
        if (!"n".equals(name)) {
            if (book == null) {
                book = new Book();
            }
            book.setbName(name);
        }
        System.out.println("请输入图书编号(n代表不按此条件查询):");
        String bid = input.next();
        if (!"n".equals(bid)) {
            if (book == null) {
                book = new Book();
            }
            book.setbId(bid);
        }
        return bookDao.selectBooks(book);
    }

    @Override
    public boolean removeByBid() {
        System.out.println("--->删除图书");
        System.out.println("请输入图书编号:");
        String bid = input.next();
        int i = bookDao.deleteByBid(bid);
        return i == 0 ? false : true;
    }

    @Override
    public boolean lendBook() {
        Book book = new Book();
        System.out.println("--->租借图书");
        System.out.println("请输入要租借的图书编号:");
        String bid = input.next();
        book.setbId(bid);
        System.out.println("请输入借出图书的时间(yyyy-MM-dd):");
        book.setLendDate(input.next());
        int i = bookDao.updateBook(book);
        return i == 0 ? false : true;
    }

    @Override
    public int returnBook() {
        System.out.println("--->归还图书");
        System.out.println("请输入图书的编号:");
        String id = input.next();
        Book book = bookDao.selectBookByid(id);
        System.out.println("请输入归还日期(年-月-日):");
        String returndt = input.next();
        int money = getmoney(book.getLendDate(), returndt);
        int i = bookDao.updateBook(book);
        return i == 0 ? 0 : money;
    }

    @Override
    public TreeSet<Book> rankingList() {
        return bookDao.orderBooks();
    }

    //计算租金
    public int getmoney(String jzdt1,String ghdt2) {
        //把字符串类型---SimpleDateFormat---》时间类型---整数型
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date parse1 = sdf.parse(jzdt1);
            //System.out.println(sdf.format(parse1.getTime())+"还是时间类型");
            //System.out.println(parse1);
            long time1 = parse1.getTime();

            Date parse2 = sdf.parse(ghdt2);
            long time2 = parse2.getTime(); //获得当前时间 距离时间起点 毫秒数

            return (int) ((time2 - time1) / (1000 * 60 * 60 * 24));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }
}

Test类

package com.jr.date730.book.test;

import com.jr.date730.book.pojo.Book;
import com.jr.date730.book.service.BookService;
import com.jr.date730.book.service.impl.BookServiceImpl;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.TreeSet;

public class BookTest {
    Scanner input = new Scanner(System.in);
    private BookService bookService = new BookServiceImpl();

    public static void main(String[] args) {
        new BookTest().menu();
    }

    public void menu() {
        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("7.退\t出");
        System.out.println("请选择你需要的功能:");
        int num = input.nextInt();
        if (num == 1) {
            System.out.println(bookService.addBook() ? "添加成功" : "添加失败");
        } else if (num == 2) {
            ArrayList<Book> books = bookService.queryBooks();
            System.out.println("图书编号\t\t\t\t图书名字\t\t\t状态\t借出日期\t\t借出次数");
            for (Book b : books) {
                System.out.println(b.getbId() + "\t\t" + b.getbName() + "\t\t\t" + b.getStatus() + "\t\t" + b.getLendDate() + "\t\t" + b.getLendCount());
            }
        } else if (num == 3) {
            System.out.println( bookService.removeByBid()?"删除成功":"删除失败");
        } else if (num == 4) {
            System.out.println( bookService.lendBook()?"借出成功":"借出失败");
        } else if (num == 5) {
            int i = bookService.returnBook();//i是归还功能中应该给的租金钱数
            System.out.println("归还成功!需缴纳租金" + i + "元");
        } else if (num == 6) {
            TreeSet<Book> books = bookService.rankingList();
            System.out.println("图书名字\t借出次数");
            for (Book book:books) {
                System.out.println(book.getbName()+"\t"+book.getLendCount());
            }
        } else if (num == 7) {
            System.out.println("谢谢使用!");
            System.exit(1);
        }
        getret();
    }

    private void getret() {
        System.out.println("继续使用:0");
        int m = input.nextInt();
        if (m == 0) {
            menu();
        }
    }
}

工具类

package com.jr.date730.book.util;

import com.jr.date730.book.pojo.Book;
import java.sql.*;
import java.util.ArrayList;

public class DBHelper {
    //提取步骤1+2
    public Connection getCon() {
        Connection con = null;
        try {
            //1,手动加载数据库驱动类:
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2,获得连接对象
            String url = "jdbc:mysql://127.0.0.1:3306/book?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
            String username = "root";
            String password = "123456";
            con = DriverManager.getConnection(url, username, password);
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return con;
    }

    //【增删改功能】提取3+4+5,其中3以参数方式传入
    public int updateTable(String sql, Object... objs) {
        Connection con = null;
        PreparedStatement ps = null;
        int count = 0;
        try {
            //1+2功能
            con = getCon();
            //获得执行对象
            ps = con.prepareStatement(sql);
            for (int i = 0; i < objs.length; i++) {
                ps.setObject(i + 1, objs[i]);
            }
            //5,执行sql,获得结果
            count = ps.executeUpdate();//获得数据库里面更改的元素个数
            //6,忽略
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //7,关闭
            closeAll(con, ps, null);
        }
        return count;
    }

    //查询功能 3以参数形式传入
    public ArrayList<Book> queryBooks(String sql, Object... objs){
        ArrayList<Book> list=new ArrayList<>();
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs=null;
        try {
            //1+2功能
            con = getCon();
            //获得执行对象
            ps = con.prepareStatement(sql);
            for (int i = 0; i < objs.length; i++) {
                ps.setObject(i + 1, objs[i]);
            }
            //5,执行sql,获得结果
            rs=ps.executeQuery();//执行数据库命令
            //6,处理结果
            while (rs.next()){
                Book book=new Book();
                book.setbId(rs.getString(1));
                book.setbName(rs.getString(2));
                book.setStatus(rs.getInt(3));
                book.setLendDate(rs.getString(4));
                book.setLendCount(rs.getInt(5));
                list.add(book);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //7,关闭
            closeAll(con, ps, rs);
        }
        return list;
    }


    //提取步骤7
    public void closeAll(Connection con, PreparedStatement ps, ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值