十一、I/O流

一、快递柜管理

一、任务要求
在这里插入图片描述

二、源码框架
在这里插入图片描述

三、源码

  1. javabean: package maintest.day11_4_4.mailbox.bean.Express.java
package maintest.day11_4_4.mailbox.bean;
import lombok.Getter;
import lombok.Setter;
import java.util.Objects;

@Getter@Setter
public class Express {
    private String number;
    private String company;
    private int code;

    public Express(String number, String company, int code) {
        this.number = number;
        this.company = company;
        this.code = code;
    }
    public Express() {
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Express express = (Express) o;
        return code == express.code ;
    }
    @Override
    public int hashCode() {
        return Objects.hash(number, company, code);
    }
    @Override
    public String toString() {
        return "Express{" +
                "number='" + number + '\'' +
                ", company='" + company + '\'' +
                ", code=" + code +
                '}';
    }
}

2.View: package maintest.day11_4_4.mailbox.view;

package maintest.day11_4_4.mailbox.view;


import maintest.day11_4_4.mailbox.bean.Express;
import maintest.day11_4_4.mailbox.dao.ExpressDao;

import java.util.Scanner;

/**
 * @author: LiLi
 * @className: View
 * @packageName: view
 * @description:  快递驿站的视图显示
 * @data: 2020-10-16 23:13
 **/
public class View {
    private static Scanner input=new Scanner(System.in);
    private int num;
    private String inputText;



    /**
     * @description: 欢迎
     * @param:
     * @return: void
     */
    public void welcome(){
        System.out.println("-----欢迎来到LiLi的快递e站-----");
    }
    /**
     * @description: 输入出错
     * @param:
     * @return: void
     */
    public void showFault(){
        System.out.println("输入有误,请重新输入!");
    }
    /**
     * @description: 结束
     * @param:
     * @return: void
     */
    public void bye(){
        System.out.println("--------感谢您的使用!希望您身体健康,生活愉快!bye~~---------");
    }
    public void success(int type){
        switch (type){
            case 1:
                System.out.println("添加成功!");break;
            case 2:
                System.out.println("删除成功!");break;
            case 3:
                System.out.println("更行快递成功!");break;
            case 4:
                System.out.println("操作成功");break;
                default:return;
        }
    }
    public void findFileFail(){
        System.out.println("找不到指定文件!");
    }
    public void readFileFail(){
        System.out.println("读取文件内容出错!");
    }
    public void writeFileFail(){
        System.out.println("文件写出失败!");
    }
    public void createFileFail(){
        System.out.println("文件创建失败!");
    }

    /**
     * @description: 提示 快递柜中已有对应快递
     * @param:
     * @return: void
     */
    public void expressExist(){
        System.out.println("快递柜中已有此快递哦!");
    }
    /**
     * @description: 提示 快递柜中没有对应快递
     * @param:
     * @return: void
     */
    public void expressNotExist(){
        System.out.println("抱歉!快递柜中无此快递~");
    }
    /**
     * @description: 输入需要删除的快递信息
     * @param:
     * @return: String 返回需要删除的快递单号
     */
    public String getNumber(){
        System.out.println("请输入要操作的快递单号:");
        String number=input.nextLine();
        return number;
    }
    /**
     * @description: 显示快递信息
     * @param:
     * @return: void
     */
    public void printExpress(Express e){
        System.out.println("快递单号:"+e.getNumber()+"\t快递公司:"+e.getCompany()+"\t取件码"+e.getCode());
    }


    /**
     * @description: 主菜单
     * @param:
     * @return: int 1:管理员 2:普通用户 0:退出登录
     */
    public int vmenu(){
        System.out.println("请选择身份:");
        System.out.println("1:管理员\t2:普通用户\t0:退出登录");

        //next nextLine区别:next不能读取空格;遇到空白符(空格 回车 tab等)结束;nextLine:读取回车键结束
        inputText=input.nextLine();
        try{
            //将字符串转换成数据
            num=Integer.parseInt(inputText);
            if(num<0||num>2){
                showFault();
                return vmenu();
            }
        }catch (NumberFormatException e){
            showFault();
            return vmenu();
        }
        return num;
    }
    /**
     * @description: 管理员界面
     * @param:
     * @return: int 1:快递录入	2:删除快递	3:修改快递	4:查看所有快递	0:返回首页	-1:退出
     */
    public int cmenu(){
        System.out.println("----欢迎来到管理员界面----");
        System.out.println("请选择操作");
        System.out.println("1:快递录入\t2:删除快递\t3:修改快递\t4:查看所有快递\t0:返回首页\t-1:退出");
        inputText=input.nextLine();
        try{
            num=Integer.parseInt(inputText);
            if(num<-1||num>4){
                showFault();
                return cmenu();
            }
        }catch (NumberFormatException e){
            showFault();
            return cmenu();
        }
        return num;
    }
    /**
     * @description: 用户界面
     * @param:
     * @return: int 1:取快递	0:返回主菜单	-1:退出
     */
    public int umenu(){
        System.out.println("----欢迎来到用户界面----");
        System.out.println("请选择操作");
        System.out.println("1:取快递\t0:返回主菜单\t-1:退出");
        inputText=input.nextLine();
        try{
            num=Integer.parseInt(inputText);
            if(num<-1||num>1){
                showFault();
                return umenu();
            }
        }catch (NumberFormatException e){
            showFault();
            return umenu();
        }
        return num;
    }

    /**
     * @description: 管理员操作:插入
     * @param:
     * @return: Express
     */
    public Express insert(){
        System.out.println("请输入快递单号:");
        String number=input.nextLine();
        System.out.println("请输入快递公司");
        String company=input.nextLine();
        Express e=new Express();
        e.setNumber(number);
        e.setCompany(company);
        return e;
    }

    /**
     * @description: 确认删除提示
     * @param:
     * @return: int 1:确认删除	0:取消删除
     */
    public int confirmedDelete(){
        System.out.println("确认删除?");
        System.out.println("1:确认删除\t0:取消删除");
        inputText=input.nextLine();
        try{
            num=Integer.parseInt(inputText);
            if(num<0||num>1){
                showFault();
                return confirmedDelete();
            }
        }catch (NumberFormatException e){
            showFault();
            return confirmedDelete();
        }
        return num;
    }
    /**
     * @description: 更新操作
     * @param:
     * @return: void
     */
    public void update(Express e){
        System.out.println("请输入新的快递单号");
        String number=input.nextLine();
        System.out.println("请输入新的快递公司");
        String company=input.nextLine();
        e.setNumber(number);
        e.setCompany(company);
    }

    public int inputCode(){
        System.out.println("请输入快递取货码");
        int code;
        try{
            code=input.nextInt();
            if(code<10000||code>99999){
                showFault();
                return inputCode();
            }
            input.nextLine();
        }catch (Exception e){
            showFault();
            return inputCode();
        }
        return code;
    }

    /**
     * @description: 显示邮柜中所有快递
     * @param:  Express[][]
     * @return: void
     */
    public void printAll(){
        for(int i=0;i<ExpressDao.delCab.getMailList().size();i++){
                    printExpress(ExpressDao.delCab.getMailList().get(i));
        }
    }
}

  1. Dao: package maintest.day11_4_4.mailbox.dao;
package maintest.day11_4_4.mailbox.dao;

import maintest.day11_4_4.mailbox.bean.Express;
import maintest.day11_4_4.mailbox.controller.Main;
import maintest.day11_4_4.mailbox.deliverycabinet.DeliveryCabinet;

import java.io.*;
import java.util.Iterator;
import java.util.Random;

import static maintest.day11_4_4.mailbox.controller.Main.v;

/**
 * @version: V1.0
 * @author: LiLi
 * @className:  ExpressDao
 * @packageName:  day08_3_6.dao
 * @description:  数组操作
 * @data: 2020-10-17 8:52
 **/
public class ExpressDao {
    private static final int DEL_CAPACITY=10;//快递柜初试容量
    public static DeliveryCabinet delCab=new DeliveryCabinet(DEL_CAPACITY);//新建一个快递柜
    private Random random=new Random();
    public static final String filePath="src\\maintest\\day11_4_4\\mailbox\\Express.txt";//文件相对存储路径

    /**
     * @description: 管理员操作:将文件中所有邮件信息读入集合中 用集合存储
     * @param:
     * @return: boolean  true:读取成功 false:读取失败
     */
    public boolean readExpressFromFile() {
        delCab.getMailList().clear();//清空集合
        try {
            File file = new File(filePath);
            if(!file.exists()){
                file.createNewFile();
            }
            InputStreamReader read = new InputStreamReader(new FileInputStream(file));
            BufferedReader bufferedReader = new BufferedReader(read);
            String lineTxt = null;
            while ((lineTxt = bufferedReader.readLine()) != null) {
                Express express=new Express();
                String[] s=lineTxt.split(" ");
                express.setNumber(s[0].toString());
                express.setCompany(s[1].toString());
                express.setCode(Integer.parseInt(s[2]));
                delCab.getMailList().add(express);
            }
            read.close();
            return true;
        } catch (Exception e) {
            v.readFileFail();
        }
        return false;
    }
    /**
     * @description: 管理员操作:判断快递柜中是否有对应单号的快递
     * @param: String
     * @return: Express    Express :快递柜中有对应快递 null:快递柜中无对应快递
     */
    public Express findByNumber(String number){
        for(int i=0;i<delCab.getMailList().size();i++){
            if(delCab.getMailList().get(i).getNumber().equals(number)){
                return delCab.getMailList().get(i);
            }
        }
        return null;
    }

    /**
     * @description: 管理员操作 将一件邮件信息存入文件
     * @param:Express
     * @return: void
     */
    public void addExpressToFile(Express e){
        try {
            File file = new File(filePath);
            if(!file.exists()){
                file.createNewFile();
            }
            OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file,true));//append:true
            BufferedWriter bufferedWriter = new BufferedWriter(write);
            String lineTxt = null;
            lineTxt=e.getNumber()+" "+e.getCompany()+" "+e.getCode();
            if(file.length()>0)//文件非空
                bufferedWriter.write("\r\n"+lineTxt);//换行
            else{   //文件为空
                bufferedWriter.write(lineTxt);//无需换行
            }
            bufferedWriter.flush();//刷新缓存 ****注意!!
            write.close();
        } catch (IOException e1) {
            v.writeFileFail();
        }
    }
    /**
     * @description: 管理员操作: 删除原文将 创建新文件 并排除所需删除文件后将剩余所有文件写入
     * @param:  Express
     * @return: void
     */
    public void writeExpressToFile(Express e,File file){
        try {
            OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file,true));
            BufferedWriter bufferedWriter = new BufferedWriter(write);
            String lineTxt = null;
            lineTxt=e.getNumber()+" "+e.getCompany()+" "+e.getCode();
            if(file.length()>0)//文件非空
                bufferedWriter.write("\r\n"+lineTxt);//换行
            else{   //文件为空
                bufferedWriter.write(lineTxt);//无需换行
            }
            bufferedWriter.flush();
            write.close();
        } catch (IOException e1) {
            v.writeFileFail();
        }
    }

    /**
     * @description: 管理员操作:像快递柜中添加快递
     * @param: Express
     * @return: void
     */
    public boolean add(Express e){
        if(!existEmpty())
            return false;
        //产生随机取件码
        int code=randomCode();
        e.setCode(code);
        delCab.getMailList().add(e);
        addExpressToFile(e);
        return true;
    }
    /**
     * @description: 产生[90000,99999]不重复的随机取件码
     * @param:
     * @return: int
     */
    public int randomCode(){
        while (true){
            int code= random.nextInt(90000)+10000;
            Express e=findByCode(code);
            if(e==null){
                return  code;
            }
        }
    }
    /**
     * @description: 判断邮件柜是否已满
     * @param:
     * @return: boolean
     */
    public boolean existEmpty(){
        return delCab.getMailList().size()<DEL_CAPACITY;
    }


    public File creatNewFile(){
        try{
            File file = new File(filePath);
            if(file.exists()){
                file.delete();
                file.createNewFile();
                return file;
            }
        }catch (Exception e){
            Main.v.createFileFail();
        }
        return null;
    }
    /**
     * @description: 管理员操作:删除快递柜中对应单号的快递
     * @param: Express
     * @return: void
     */
    public boolean delete(Express e)  {
        readExpressFromFile();
        delCab.getMailList().remove(e);
        File file=creatNewFile();
        try{
            Iterator<Express> it=delCab.getMailList().iterator();
            while(it.hasNext()){
                Express e1=(Express)it.next();
                writeExpressToFile(e1,file);
            }
            return  true;
        }catch (Exception e1){
            v.writeFileFail();
        }
        return false;
    }
    /**
     * @description: 管理员操作:在快递柜中寻找对应取件码的快递件
     * @param: int code
     * @return: Express    Express:找到对应取件码的快递  null:未找到对应的快递
     */
    public Express findByCode(int code){
        for(int i=0;i<delCab.getMailList().size();i++){
                if(delCab.getMailList().get(i)!=null&&delCab.getMailList().get(i).getCode()==code) {
                    return delCab.getMailList().get(i);
                }
        }
        return null;
    }
}

  1. Main: package maintest.day11_4_4.mailbox.controller.Main.java;
package maintest.day11_4_4.mailbox.controller;

import maintest.day11_4_4.mailbox.bean.Express;
import maintest.day11_4_4.mailbox.dao.ExpressDao;
import maintest.day11_4_4.mailbox.view.View;

import java.util.Scanner;

/**
 * @version: V1.0
 * @author: LiLi
 * @className:  Game
 * @packageName:  day08_3_6.controller
 * @description:
 * @data: 2020-10-17 7:20
 **/
public class Main {
    private static Scanner input=new Scanner(System.in);
    public static View v=new View();
    private static ExpressDao m=new ExpressDao();

    public static void main(String[] args) {
        v.welcome();
        while(true){
            int num=v.vmenu();
            switch (num){
                //管理员界面
                case 1:cController();break;
                //用户界面
                case 2:uController();break;
                //退出系统
                case 0:v.bye();return;
                default:return;
            }
        }
    }
    /**
     * @description: 管理员界面  1:快递录入	2:删除快递	3:修改快递	4:查看所有快递	0:返回首页	-1:退出
     * @param:
     * @return:
     */
    public static void cController(){
        int num=v.cmenu();
        switch (num){
            //快递录入
            case 1: {
                Express e1=v.insert();//快递信息录入提示
                if(!m.readExpressFromFile()){
                    break;
                }
                Express e2=m.findByNumber(e1.getNumber());//快递柜是否已有此快递
                if(e2==null){
                    if(m.add(e1)){//快递柜无此快递 添加
                        v.success(1);
                    }
                }else{
                    v.expressExist();//快递柜有此快递 提示
                }
            }break;
            //删除快递
            case 2:{
                String number=v.getNumber();//快递单号录入 提示
                if(!m.readExpressFromFile()){
                    break;
                }
                Express e1=m.findByNumber(number);//快递柜是否已有此快递
                if(e1==null){
                    v.expressNotExist();//快递柜无此快递 提示
                }else {
                    int type=v.confirmedDelete();//提示:确认删除?  1:确认删除  0:取消
                    if(type==1){
                        if(!m.delete(e1)) {//删除失败
                            break;
                        }
                        else{//删除成功
                            v.success(2);
                        }
                    }else {
                        return;
                    }
                }
            }break;
            //更新快递
            case 3: {
                String number = v.getNumber();//快递单号录入 提示
                if(!m.readExpressFromFile()){
                    break;
                }
                Express e1 = m.findByNumber(number);//快递柜是否已有此快递
                if (e1 == null) {
                    v.expressNotExist();//快递柜无此快递 提示
                } else {
                    Express e2=new Express();
                    v.update(e2);//更新快递信息录入 提示
                    if(!m.delete(e1)){//删除失败
                        break;
                    }
                    if(!m.add(e2)){//添加失败
                        break;
                    }
                    v.success(3);
                }
            }break;
            //查找所有快递
            case 4:{
                if(!m.readExpressFromFile()){//从文件中读取所有快递失败
                    break;
                }
                v.printAll();
            }break;
            //返回主界面
            case 0:return;
            //退出系统
            case -1:v.bye();System.exit(0);
        }
    }
    /**
     * @description: 管理员界面 1:取快递	0:返回主菜单	-1:退出
     * @param:
     * @return:
     */
    public static void uController(){
        int num=v.umenu();
        switch (num){
            //取件
            case 1: {
                int code = v.inputCode();//输入取件码
                if(!m.readExpressFromFile()){//从文件中读取所有快递失败
                    break;
                }
                Express e = m.findByCode(code);//找到对应快递
                if(!m.delete(e)){
                    //删除失败
                    break;
                }
                v.success(4);
                if (e == null) {
                    v.expressNotExist();//提示  没有对应快递
                } else {
                    v.printExpress(e);  //提示 显示快递信息

                }
            }break;
            //返回首页
            case 0:return;
            //退出系统
            case -1:v.bye();System.exit(0);break;
        }
    }
}

  1. DeliveryCabinet
package maintest.day11_4_4.mailbox.deliverycabinet;

import lombok.Getter;
import lombok.Setter;
import maintest.day11_4_4.mailbox.bean.Express;

import java.util.ArrayList;

@Getter@Setter
public class DeliveryCabinet {

    private int delCapacity;//快递柜容量
    private String delName;//快递柜名
    private ArrayList<Express> mailList=new ArrayList<>();//存储快递的数据结构

    public DeliveryCabinet(int delCapacity) {
        this.delCapacity=delCapacity;
    }

    public DeliveryCabinet(int delCapacity, String delName) {
        this.delCapacity=delCapacity;
        this.delName=delName;
    }
}

四、源码下载:

二、图书管理

一、任务要求

  • 管理员登陆
  • 图书管理
    2.1 图书新增
    2.2 图书修改
    2.3 图书删除
    2.4 根据图书名称模糊查找图书
    2.5 查看所有图书 (三种排序)
    - 价格从高到低排序
    - 价格从低到高排序
    - 新旧排序(出版日期排序)

二、源码框架
在这里插入图片描述
三、源码

  1. javabean :Administrator.java Book.jave
package maintest.day11_4_4.librarysystem.bean;

import lombok.Getter;
import lombok.Setter;

@Getter@Setter
public class Administrator {
    private String userName;
    private String password;

    public Administrator() {
    }

    public Administrator(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }
}

package maintest.day11_4_4.librarysystem.bean;

import lombok.Getter;
import lombok.Setter;

import java.util.Comparator;
import java.util.Date;
import java.util.Objects;

@Getter@Setter
public class Book {
    private String book_name;//书名
    private double price;//价格
    private Date publication_date;//出版日期

    public Book() {
    }

    public Book(String book_name, double price, Date publication_date) {
        this.book_name = book_name;
        this.price = price;
        this.publication_date = publication_date;
    }

    @Override
    public String toString() {
        return "Book{" +
                "book_name='" + book_name + '\'' +
                ", price=" + price +
                ", publication_date=" + publication_date +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Book book = (Book) o;
        return Double.compare(book.price, price) == 0 &&
                Objects.equals(book_name, book.book_name) &&
                Objects.equals(publication_date, book.publication_date);
    }

    @Override
    public int hashCode() {
        return Objects.hash(book_name, price, publication_date);
    }

    //按照书籍价格进行升序排序 价格相同依照姓名排序
    public static class BookCompareByPriceAsc implements Comparator {// 书籍自带的一个比较器
        public int compare(Object o1, Object o2) {
            Book s1 = (Book) o1;// 转型
            Book s2 = (Book) o2;// 转型
            int result = s1.getPrice()> s2.getPrice() ? 1 : (s1.getPrice() == s2.getPrice() ? 0 : -1);
            if (result == 0) {
                result = s1.getBook_name().compareTo(s2.getBook_name());
            }
            return result;
        }
    }
    //按照书籍价格进行降序排序 价格相同依照姓名排序
    public static class BookCompareByPriceDesc implements Comparator {// 老师自带的一个比较器
        public int compare(Object o1, Object o2) {
            Book s1 = (Book) o1;// 转型
            Book s2 = (Book) o2;// 转型
            int result = s1.getPrice()> s2.getPrice() ? -1 : (s1.getPrice() == s2.getPrice() ? 0 : 1);
            if (result == 0) {
                result = s1.getBook_name().compareTo(s2.getBook_name());
            }
            return result;
        }
    }
    //按照书籍出版日期进行排序
    public static class BookCompareByDate implements Comparator {// 老师自带的一个比较器
        public int compare(Object o1, Object o2) {
            Book s1 = (Book) o1;// 转型
            Book s2 = (Book) o2;// 转型
            int result = s1.getPublication_date().compareTo(s2.getPublication_date()) ;
            if (result == 0) {
                result = s1.getBook_name().compareTo(s2.getBook_name());
            }
            return result;
        }
    }

}

  1. controller: Main.java
package maintest.day11_4_4.librarysystem.controller;

import maintest.day11_4_4.librarysystem.bean.Administrator;
import maintest.day11_4_4.librarysystem.bean.Book;
import maintest.day11_4_4.librarysystem.dao.BookDao;
import maintest.day11_4_4.librarysystem.view.View;

/**
 * @version: V1.0
 * @author: LiLi
 * @className:  Library
 * @packageName:  day11_4_4.librarysystem.controller
 * @description:
 * @data: 2020-10-22 10:55
 **/
public class Main {
    public  static View v=new View();
    private static BookDao m=new BookDao();

    public static void main(String[] args) {
        v.welcome();
        Administrator admin=v.vlogin();//管理员登录
        if(!m.login(admin)){
            v.showFault(4);
        }

        while(true){
            int num=v.cmenu();//主菜单
            switch (num){
                //新增图书
                case 1:{
                    Book book=v.addBook();//图书信息录入提示
                    System.out.println(book.getPublication_date());
                    if(!m.readExpressFromFile()){
                        break;
                    }
                    if(m.add(book)){
                        v.success();
                    }else{
                        v.expressExist();//图书馆有此图书 提示
                    }
                }break;
                //修改图书
                case 2:{
                    String name=v.findByBookName();//找到要修改的旧书书名
                    if(!m.readExpressFromFile()){
                        break;
                    }
                    Book book1=m.findByBookName(name);//找到该书
                    Book book2=v.update();//获取新书对象
                    m.delete(book1);//删除旧书对象
                    m.add(book2);//加入新书

                }break;
                //删除图书
                case 3:{
                    String name=v.findDeleteBookName();//输入要删除的书名
                    if(!m.readExpressFromFile()){
                        break;
                    }
                    Book book=m.findByBookName(name);//找到要删除的图书
                    int chose=v.confirmedDelete();//确认删除
                    if(chose==1){
                        m.delete(book);//删除指定图书
                    }else {
                        break;
                    }

                }break;
                //模糊查询
                case 4:{
                    String book_name=v.findBook();//输入查询信息
                    if(!m.readExpressFromFile()){
                        break;
                    }
                    m.matchFindBooks(book_name);//根据查询信息进行模糊查询
                    v.printMatchBooks();//打印查询结果
                }break;
                //查看图书
                case 5:{
                    if(!m.readExpressFromFile()){
                        break;
                    }
                    num=v.showAllBooks();//输入以哪种方式进行打印
                    if(num==1){
                        v. showBookByPriceAsc();//价格从低到高排序
                    }else if(num==2){
                        v.showBookByPriceDesc();//价格从高到低排序
                    }else {
                        v.showBookByDate();//新旧排序(出版日期排序)
                    }
                }break;
                case -1:System.exit(0);//退出系统
                case 0:break; //返回主页面
                    default:break;
            }

        }
    }
}

  1. dao:BookDao.java
package maintest.day11_4_4.librarysystem.dao;

import maintest.day11_4_4.librarysystem.bean.Administrator;
import maintest.day11_4_4.librarysystem.bean.Book;
import maintest.day11_4_4.librarysystem.controller.Main;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * @version: V1.0
 * @author: LiLi
 * @className:  BookDao
 * @packageName:  day10_4_3.dao
 * @description:  集合操作
 * @data: 2020-10-20 0:49
 **/
public class BookDao {
    public static TreeSet<Book> bookList=new TreeSet<Book>(new Book.BookCompareByPriceAsc());
    public static List<Book> arrList=new ArrayList<Book>();
    private static final int  CAPACITY=100;//图书馆初始图书容量
    private static final ArrayList<Administrator> adminList=new ArrayList<>();
    public static final String filePath="src\\maintest\\day11_4_4\\librarysystem\\Library.txt";//文件相对存储路径

    static {
        adminList.add(new Administrator("admin","admin"));
    }
    public boolean login(Administrator admin){
        Iterator it=adminList.iterator();
        while(it.hasNext()){
            Administrator user=(Administrator)it.next();
            if(user.getUserName().equals(admin.getUserName())&&user.getPassword().equals(admin.getPassword()))
                return true;
        }
        return false;
    }
    /**
     * @description: 模糊查询
     * @param: String
     * @return: void
     */
    public void matchFindBooks(String name){
        Pattern pattern = Pattern.compile(name);
        Iterator<Book> it=bookList.iterator();
        while (it.hasNext()){
            Book book=(Book)it.next();
            Matcher matcher = pattern.matcher(book.getBook_name());
            if(matcher.find()){
                arrList.add(book);
            }
        }
    }


    /**
     * @description: 管理员操作:将文件中所有邮件信息读入集合中 用集合存储
     * @param:
     * @return: boolean  true:读取成功 false:读取失败
     */
    public boolean readExpressFromFile() {
        bookList.clear();//清空集合
        try {
            File file = new File(filePath);
            if(!file.exists()){
                file.createNewFile();
            }
            InputStreamReader read = new InputStreamReader(new FileInputStream(file));
            BufferedReader bufferedReader = new BufferedReader(read);
            String lineTxt = null;
            while ((lineTxt = bufferedReader.readLine()) != null) {
                Book book=new Book();
                String[] s=lineTxt.split(" ");
                book.setBook_name(s[0].toString());
                book.setPrice(Double.parseDouble(s[1]));
                SimpleDateFormat sdf =   new SimpleDateFormat( "yyyy-MM-dd" );
                book.setPublication_date(sdf.parse(s[2]));
                bookList.add(book);
            }
            read.close();
            System.out.println(bookList.size());
            return true;
        } catch (Exception e) {
            Main.v.readFileFail();
        }
        return false;
    }

    /**
     * @description: 管理员操作 将一件邮件信息存入文件
     * @param:Express
     * @return: void
     */
    public void addExpressToFile(Book b){
        try {
            File file = new File(filePath);
            if(!file.exists()){
                file.createNewFile();
            }
            OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file,true));//append:true
            BufferedWriter bufferedWriter = new BufferedWriter(write);
            String lineTxt = null;
            SimpleDateFormat sdf =   new SimpleDateFormat( "yyyy-MM-dd" );
            lineTxt=b.getBook_name()+" "+b.getPrice()+" "+sdf.format(b.getPublication_date());
            if(file.length()>0)//文件非空
                bufferedWriter.write("\r\n"+lineTxt);//换行
            else{   //文件为空
                bufferedWriter.write(lineTxt);//无需换行
            }
            bufferedWriter.flush();//刷新缓存 ****注意!!
            write.close();
        } catch (IOException e1) {
            Main.v.writeFileFail();
        }
    }
    public File creatNewFile(){
        try{
            File file = new File(filePath);
            if(file.exists()){
                file.delete();
                file.createNewFile();
                return file;
            }
        }catch (Exception e){
            Main.v.createFileFail();
        }
        return null;
    }
    /**
     * @description: 管理员操作: 删除原文将 创建新文件 并排除所需删除文件后将剩余所有文件写入
     * @param:  Express
     * @return: void
     */
    public void writeExpressToFile(Book b,File file){
        try {
            OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file,true));
            BufferedWriter bufferedWriter = new BufferedWriter(write);
            String lineTxt = null;
            SimpleDateFormat sdf =   new SimpleDateFormat( "yyyy-MM-dd" );
            lineTxt=b.getBook_name()+" "+b.getPrice()+" "+sdf.format(b.getPublication_date());
            if(file.length()>0)//文件非空
                bufferedWriter.write("\r\n"+lineTxt);//换行
            else{   //文件为空
                bufferedWriter.write(lineTxt);//无需换行
            }
            bufferedWriter.flush();
            write.close();
        } catch (IOException e1) {
            Main.v.writeFileFail();
        }
    }



    /**
     * @description: 图书馆容量是否已满
     * @param:
     * @return:boolean  true:已满 false:未满
     */
    public boolean existEmpty(){
        return bookList.size()<CAPACITY;
    }

    /**
     * @description: 添加图书
     * @param:
     * @return:boolean  true:添加成功 false:添加失败
     */
    public boolean add(Book book){
        if(!existEmpty())
            return false;
        bookList.add(book);
        addExpressToFile(book);
        System.out.println(bookList.size());
        return true;
    }

    /**
     * @description: 根据书名找图书
     * @param:String
     * @return:Book  成功:返回相应对象 失败:返回null
     */
    public Book findByBookName(String name){
        Iterator<Book> it=bookList.iterator();
        while (it.hasNext()){
            Book book=(Book)it.next();
            if(book.getBook_name().equals(name)){
                return book;
            }
        }
        return null;
    }

    /**
     * @description: 删除图书
     * @param:
     * @return:boolean
     */
    public void delete(Book book){
        bookList.remove(book);
        Iterator<Book> it=bookList.iterator();
        File file=creatNewFile();
        while(it.hasNext()){
            Book b=(Book)it.next();
            writeExpressToFile(b,file);
        }
        System.out.println("delete:"+bookList.size());
    }
}

  1. view :View.java
package maintest.day11_4_4.librarysystem.view;

import maintest.day11_4_4.librarysystem.bean.Administrator;
import maintest.day11_4_4.librarysystem.bean.Book;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

import static maintest.day11_4_4.librarysystem.dao.BookDao.arrList;
import static maintest.day11_4_4.librarysystem.dao.BookDao.bookList;

public class View {
    private Scanner input=new Scanner(System.in);
    private String inputText;
    private int num;

    //提示:欢迎使用
    public void welcome(){
        System.out.println("--------欢迎来到LiLi的图书管理系统-------");
    }
    //提示:书籍录入成功
    public void success(){
        System.out.println("书籍录入成功!");
    }
    //提示:录入失败
    public void expressExist(){
        System.out.println("录入失败,本书图书馆已有!");
    }
    public void findFileFail(){
        System.out.println("找不到指定文件!");
    }
    public void readFileFail(){
        System.out.println("读取文件内容出错!");
    }
    public void writeFileFail(){
        System.out.println("文件写出失败!");
    }
    public void createFileFail(){
        System.out.println("文件创建失败!");
    }

    /**
     * @description: 提示:输入要删除的书名
     * @param:
     * @return:String  返回书名
     */
    public String findDeleteBookName(){
        System.out.println("请输入要删除的图书书名:");
        String book_name;
        try{
            book_name=input.nextLine();
        }catch (Exception e){
            showFault(3);
            return findDeleteBookName();
        }
        return book_name;
    }

    /**
     * @description: 提示:输入查询所有图书的排列方式
     * @param:
     * @return:int  1:价格从低到高排序	2:价格从高到低排序	3:出版日期排序
     */
    public int showAllBooks(){
        System.out.println("请选择查询方式");
        System.out.println("1:价格从低到高排序\t2:价格从高到低排序\t3:出版日期排序");
        int num;
        try{
            num=input.nextInt();
            input.nextLine();
        }catch (Exception e){
            showFault(3);
            return showAllBooks();
        }
        return num;
    }

    /**
     * @description: 按价格从低到高打印所有图书
     */
    public void showBookByPriceAsc(){
        TreeSet<Book> ts = new TreeSet<Book>(new Book.BookCompareByPriceAsc());
        ts.addAll(bookList);
        Iterator<Book> it=ts.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
    /**
     * @description: 按价格从高到低打印所有图书
     */
    public void showBookByPriceDesc(){
        TreeSet<Book> ts = new TreeSet<Book>(new Book.BookCompareByPriceDesc());
        ts.addAll(bookList);
        Iterator<Book> it=ts.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
    /**
     * @description: 按日期打印所有图书
     */
    public void showBookByDate(){
        TreeSet<Book> ts = new TreeSet<Book>(new Book.BookCompareByDate());
        ts.addAll(bookList);
        Iterator<Book> it=ts.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }

    /**
     * @description: 管理员主界面
     * @return: int  1:添加图书	2:修改图书	3:删除图书	4:模糊查询	5:查看所有图书	0:返回首页	-1:退出
     */
    public int cmenu(){
        System.out.println("----欢迎来到管理员界面----");
        System.out.println("请选择操作");
        System.out.println("1:添加图书\t2:修改图书\t3:删除图书\t4:模糊查询\t5:查看所有图书\t0:返回首页\t-1:退出");
        inputText=input.nextLine();
        try{
            num=Integer.parseInt(inputText);
            if(num<-1||num>5){
                showFault(3);
                return cmenu();
            }
        }catch (NumberFormatException e){
            showFault(3);
            return cmenu();
        }
        return num;
    }

    //提示:管理员登录失败
    public void showFault(int type){
        switch (type){
            case 1:System.out.println("用户名或者密码输入错误,请重新登录!");break;
            case 2:
                System.out.println("日期格式有误,请重新输入!");break;
            case 3:
                System.out.println("输入有误,请重新输入!");break;
            case 4:
                System.out.println("用户名或者密码错误,登录失败");
                System.exit(0);
                default:break;
        }

    }

    //提示输入 :管理员登录
    public Administrator vlogin(){
        System.out.println("---管理员登录----");
        Administrator administrator=new Administrator();
        System.out.println("请输入用户名:");
        try{
            administrator.setUserName(input.nextLine());
            System.out.println("请输入密码:");
            administrator.setPassword(input.nextLine());
        }catch (Exception e){
            showFault(1);
            return vlogin();
        }
        return administrator;
    }


    //输入提示:输入需要添加的图书信息
    public Book addBook(){
        Book book=new Book();
        try{
            System.out.println("请输入书名:");
            book.setBook_name(input.nextLine());
            System.out.println("请输入图书价格:");
            book.setPrice(input.nextDouble());
            input.nextLine();
            System.out.println("请输入出版日期(2020-10-19):");
            String date=input.nextLine();
            SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
            book.setPublication_date(format.parse(date));

        } catch (ParseException e) {
            showFault(2);
            return addBook();
        }
        return book;
    }

    /**
     * @description: 输入要修改的旧书的书名
     */
    public String findByBookName(){
        System.out.println("请输入需要更新的旧书书名:");
        String book_name=null;
        try{
            book_name=input.nextLine();
        }catch (Exception e){
            showFault(3);
            return findByBookName();
        }
        return book_name;
    }
    //输入提示: 输入要更新的图书信息
    public Book update(){
        Book newBook=new Book();
        try{
            System.out.println("请输入新的书名:");
            newBook.setBook_name(input.nextLine());
            System.out.println("请输入新的图书价格:");
            newBook.setPrice(input.nextDouble());
            input.nextLine();
            System.out.println("请输入新的出版日期(2020-10-19):");
            String date=input.nextLine();
            SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
            newBook.setPublication_date(format.parse(date));
        } catch (ParseException e) {
            showFault(2);
            return addBook();
        }
        return newBook;
    }

    /**
     * @description: 提示:是否确认删除
     * @return :int 1:确认 0:取消
     */
    public int confirmedDelete(){
        System.out.println("确认删除?");
        System.out.println("1:确认删除\t0:取消删除");
        String inputText=input.nextLine();
        int num=-1;
        try{
            num=Integer.parseInt(inputText);
            if(num<0||num>1){
                showFault(3);
                return confirmedDelete();
            }
        }catch (NumberFormatException e){
            showFault(3);
            return confirmedDelete();
        }
        return num;
    }
    /**
     * @description: 提示:输入书记查询时的书名
     */
    public String findBook(){
        System.out.println("----图书查询-----");
        System.out.println("请输入书名信息:");
        String bookName;
        try {
            bookName = input.nextLine();
        }catch (Exception e){
            showFault(3);
            return findBook();
        }
        return bookName;
    }

    /**
     * @description: 打印模糊查询结果
     */
    public void printMatchBooks(){
        for(int i=0;i<arrList.size();i++){
            System.out.println(arrList.get(i));
        }
    }
}

四、源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值