图书管理系统,需要连接数据库,这里用的是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();
}
}
}