图书借阅管理系统

创建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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值