创建lib目录导入dom4j包,添加成库
一、pojo包下
1.图书类实现序列化
package com.xu.liberary.pojo;
import com.xu.liberary.util.DateUtil;
import java.io.Serializable;
import java.util.Date;
public class Book implements Serializable {
private String isbn; //书号
private String title;//书名
private String author;//作者
private Integer price;//价格
private BookType type;//书的类型
private Date stime;//借阅时间
private Date etime;//归还时间
//生成get和set
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
public BookType getType() {
return type;
}
public void setType(BookType type) {
this.type = type;
}
public Date getStime() {
return stime;
}
public void setStime(Date stime) {
this.stime = stime;
}
public Date getEtime() {
return etime;
}
public void setEtime(Date etime) {
this.etime = etime;
}
//生成toString
@Override
public String toString() {
return "图书{" +
"书号:'" + isbn + '\'' +
",书名:'" + title + '\'' +
", 作者:'" + author + '\'' +
", 价格:" + price +
", 图书类型:" + type +
", 借阅时间:" +( stime==null ? "未借阅": DateUtil.dateToString(stime)) +
", 归还时间:" +( etime==null ? "未归还": DateUtil.dateToString(etime))+
'}';
}
}
2.图书类型枚举
package com.xu.liberary.pojo;
public enum BookType {
文学,军事,哲学
}
3.图书借阅卡类实现序列化
package com.xu.liberary.pojo;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class BookCard implements Serializable {
private String card;//卡号
private String opentime;//开卡时间
private User user;//用户
//创建一个list集合
private List<Book> books=new ArrayList<>(10);
//创建一个方法根据系统时间生成卡号
private String createCard(){
//创建格式化对象
SimpleDateFormat sdf=new SimpleDateFormat("HHmmss");
//返回格式化时间字符串
return sdf.format(new Date());
}
//生成get和set
public String getCard() {
return card;
}
public void setCard(String card) {
this.card = card;
}
public String getOpentime() {
return opentime;
}
public void setOpentime(String opentime) {
this.opentime = opentime;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
//生成默认构造
public BookCard() {
this.card=this.createCard();
}
@Override
public String toString() {
return "图书卡{" +
"卡号:'" + card + '\'' +
", 开卡时间:" + opentime +
", 用户:" + user +
", 借阅图书:" + books +
'}';
}
}
4.用户类实现序列化
package com.xu.liberary.pojo;
import java.io.Serializable;
public class User implements Serializable {
private String name;//用户名
private String id;//身份证号
private String mobile;//电话号码
//生成get和set
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public User() {
}
public User(String name, String id, String mobile) {
this.name = name;
this.id = id;
this.mobile = mobile;
}
@Override
public String toString() {
return "用户{" +
"姓名:'" + name + '\'' +
", 身份证号:'" + id + '\'' +
", 手机号码:'" + mobile + '\'' +
'}';
}
}
二、service包下
1.创建系统方法接口
package com.xu.liberary.service;
import com.xu.liberary.pojo.Book;
import com.xu.liberary.pojo.BookCard;
import java.util.*;
public interface IBookManager {
//登录读取
ResourceBundle RB=ResourceBundle.getBundle("logon");
//创建扫描仪
Scanner in=new Scanner(System.in);
//创建一个图书集合
Map<String, Book> BOOK_MAP=new HashMap<>();
//创建读者借阅卡集合
List<BookCard> CARDS=new ArrayList<>(10);
//创建实现方法
//登录
boolean login(String username,String password);
//1.浏览所有图书
void findBooks();
//2.根据书号查询图书
Book findBookByIsbn(String isbn);
//3.注册开卡
void openCard();
//4.借阅
void borrow(String card,Book book);
//5.查询所有借阅卡
void showBorrow();
//6.归还
void revoke(String card,String isbn);
}
2.创建接口实现类实现接口
package com.xu.liberary.service;
import com.xu.liberary.pojo.Book;
import com.xu.liberary.pojo.BookCard;
import com.xu.liberary.pojo.BookType;
import com.xu.liberary.pojo.User;
import com.xu.liberary.util.DateUtil;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.*;
public class BookManger implements IBookManager{
@Override
public boolean login(String username, String password) {
String uname=RB.getString("username");
String pasword= RB.getString("password");
if (username.equalsIgnoreCase(uname) && password.equalsIgnoreCase(pasword)){
return true;
}
return false;
}
//静态块读取xml文件到集合中
static {
SAXReader sax=new SAXReader();
try {
Document document = sax.read("book.xml");
//获取根
Element root = document.getRootElement();
//创建一个空的对象
Book book=null;
//获取第一级集合
List elements = root.elements();
for(Iterator<Element> it=elements.iterator();it.hasNext();){
Element element = it.next();
//获取第二级集合
List list = element.elements();
//给上方创建的空对象赋值
book=new Book();
for(Iterator<Element> iter=list.iterator();iter.hasNext();){
Element next = iter.next();
switch (next.getName()){
case "isbn": book.setIsbn(next.getTextTrim());break;
case "title": book.setTitle(next.getTextTrim());break;
case "author": book.setAuthor(next.getTextTrim());break;
case "price": book.setPrice(Integer.parseInt(next.getTextTrim()));break;
case "type": book.setType(Enum.valueOf(BookType.class,next.getTextTrim()));break;
}
}
//添加到集合中
BOOK_MAP.put(book.getIsbn(),book);
}
} catch (DocumentException e) {
throw new RuntimeException(e);
}
}
@Override
public void findBooks() {
if(BOOK_MAP.isEmpty()){
System.out.println("读取数据失败,没有数据!");
}else{
for(Book book:BOOK_MAP.values()){
System.out.println(book);
}
}
}
@Override
public Book findBookByIsbn(String isbn) {
for (Book book:BOOK_MAP.values()){
if (book.getIsbn().equalsIgnoreCase(isbn)){
System.out.println(book);
}
}
return BOOK_MAP.get(isbn);
}
@Override
public void openCard() {
System.out.println("请输入姓名:");
String name=in.next();
System.out.println("请输入身份证号码:");
String id=in.next();
System.out.println("请输入手机号:");
String phone=in.next();
if(phone.length()!=11){
System.out.println("请输入正确的手机号!");
}
//创建用户对象
User user=new User(name,id,phone);
//创建卡
BookCard card=new BookCard();
card.setUser(user);
card.setOpentime(DateUtil.dateToString(new Date()));
//存放到当前集合中
CARDS.add(card);
System.out.println("开卡成功!");
}
@Override
public void borrow(String card, Book book) {
//根据卡号从集合中获取卡号
BookCard card1=null;
for (BookCard c:CARDS){
if(c.getCard().equalsIgnoreCase(card)){
card1=c;
break;
}
}
if (card1!=null){
//一个借阅卡最多可以借阅两本书
if(card1.getBooks().size()>=2){
System.out.println("对不起,"+card1.getCard()+"借阅卡已达到借阅上线!");
}else{
//设置借阅时间
book.setStime(new Date());
//设置归还时间
//自动设置借阅期限
Calendar calendar=Calendar.getInstance(Locale.CHINESE);
calendar.add(Calendar.DATE,30);
Date etime=calendar.getTime();
book.setEtime(etime);
//放到卡的借阅图书集合中
card1.getBooks().add(book);
System.out.println("借阅成功!");
}
}else{
System.out.println("对不起,卡号未找到!");
}
}
@Override
public void showBorrow() {
if(!CARDS.isEmpty()){
for (BookCard card:CARDS){
System.out.println(card);
}
}else{
System.out.println("暂时没有借阅卡!");
}
}
@Override
public void revoke(String card, String isbn) {
//找到借阅卡
BookCard temp=null;
for(BookCard b:CARDS){
if(b.getCard().equalsIgnoreCase(card)){
temp=b;
break;
}
}
if(temp!=null){
if(temp.getBooks().size()>0){
//根据isbn找到图书
Book book=null;
for(int i=0;i<temp.getBooks().size();i++){
book=temp.getBooks().get(i);
if(book.getIsbn().equalsIgnoreCase(isbn)){
temp.getBooks().remove(book);
book.setStime(null);
book.setEtime(null);
System.out.println("归还成功!");
break;
}
}
}else{
System.out.println("该卡没有借阅图书!");
}
}else{
System.out.println("卡号未找到!");
}
}
}
三、util包下
创建日期工具类
package com.xu.liberary.util;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtil {
private static final SimpleDateFormat SDF=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
public static String dateToString(Date date){
return SDF.format(date);
}
}
四、view包
图书借阅系统测试类
package com.xu.liberary.view;
import com.xu.liberary.pojo.Book;
import com.xu.liberary.service.BookManger;
import com.xu.liberary.service.IBookManager;
import java.util.Scanner;
public class BookView {
public static void main(String[] args) {
//创建扫描仪
Scanner in=new Scanner(System.in);
int m=0;
IBookManager ibm=new BookManger();
System.out.println("请输入用户名:");
String user=in.next();
System.out.println("请输入密码:");
String pword=in.next();
if(ibm.login(user, pword)==true) {
do {
System.out.println("图书借阅系统");
System.out.println("1.浏览图书 2.查找图书 3.开卡 4.借阅 5.归还 6.查看借阅记录 7.退出");
m=in.nextInt();
switch(m){
case 1://浏览图书
ibm.findBooks();
break;
case 2://查找图书
System.out.println("请输入要查找的书号");
String isbn=in.next();
ibm.findBookByIsbn(isbn);
break;
case 3://开卡
ibm.openCard();
break;
case 4://借阅
System.out.println("请输入要借阅的图书书号:");
isbn=in.next();
Book book=ibm.findBookByIsbn(isbn);
if(book!=null){
System.out.println("请输入要借阅图书的卡号:");
String card=in.next();
ibm.borrow(card,book);
}
break;
case 5://归还
System.out.println("请输入借阅卡号:");
String card=in.next();
System.out.println("请输入要归还图书的书号:");
isbn=in.next();
ibm.revoke(card,isbn);
break;
case 6://查看借阅记录
ibm.showBorrow();
break;
case 7://退出
System.out.println("确认退出吗?");
String ans=in.next();
if (ans.equalsIgnoreCase("y")){
System.out.println("谢谢,再见,欢迎下次光临!");
System.exit(0);
}else{
System.out.println("请继续操作!");
}
break;
}
} while (m <= 7);
}else{
System.out.println("账号密码错误,请重新输入!");
}
}
}
五、项目下xml文件
<?xml version="1.0" encoding="UTF-8"?>
<BOOK>
<book>
<isbn>001</isbn>
<title>三国演义</title>
<author>罗贯中</author>
<price>88</price>
<type>文学</type>
<status>0</status>
</book>
<book>
<isbn>002</isbn>
<title>红楼梦</title>
<author>曹雪芹</author>
<price>99</price>
<type>文学</type>
<status>0</status>
</book>
<book>
<isbn>003</isbn>
<title>水浒传</title>
<author>施耐庵</author>
<price>108</price>
<type>文学</type>
<status>0</status>
</book>
<book>
<isbn>004</isbn>
<title>西游记</title>
<author>吴承恩</author>
<price>100</price>
<type>文学</type>
<status>0</status>
</book>
</BOOK>
六、src包下propertise文件
username=admin
password=1234