Java - 图书管理里系统的优化(加入IO功能,实现数据保存本地,重启程序可载入数据)

本文介绍如何使用Java的IO技术优化图书管理系统,使数据存储在本地,程序重启后能继续载入。通过实现Serializable接口,添加load和store方法,确保数据持久化。然而,系统存在一些bug,如登陆成功后直接回车无法正常操作,期待解决方案。
摘要由CSDN通过智能技术生成

使用IO技术把图书管理系统进行优化,将数据存储在集合中,在程序被关闭以后,存储的数据就不会丢失,每次启动的时候读取文件中的内容,实现程序数据一直存在。
分析:
相较于之前的一篇实现集合存储图书数据,第一就是使得Book类实现可序列化接口(implements Serializable);第二是在Main类加入载入(load)和存储(store)方法,避免当文件不存在时进行读取发生的错误即可,详看代码:

1.登陆系统

LogIn

public class LogIn {
   
    Scanner input = new Scanner(System.in);
    //自定义账户名和密码,都设置为String类型
    private String count = "admin";
    private String password = "123";

    //生成equals和hashCode方法
    @Override
    public boolean equals(Object o) {
   
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        LogIn logIn = (LogIn) o;
        return Objects.equals(count, logIn.count) &&
                Objects.equals(password, logIn.password);
    }

    @Override
    public int hashCode() {
   
        return Objects.hash(count, password);
    }

    //生成无参构造方法
    public LogIn() {
   
    }

    //值定义log方法
    public void log(){
   
        while(true){
   
            System.out.println("请输入账户名:");
            //使用input.nextLine()接收数据不会出错
            String countIn = input.nextLine();
            System.out.println("请输入密码:");
            String passwordIn = input.nextLine();
            //调用equals方法判断是否登陆重成功,这一点我也有一点懵逼
            if(count.equals(countIn) && password.equals(passwordIn)){
   
                System.out.println("登陆成功!");
                break;
            }else{
   
                System.out.println("账户/密码错误,请重新操作");
            }
        }
    }
}

2.Book类

public class Book implements Serializable {
   
    //创建图书属性:书名booklist、书的价格price、出版的年publishYear、出版的月publishMonth
    private String booklist;
    private double pirce;
    private int publishMonth;
    private int publishYear;

    //生成构造方法、toString(),getter/setter方法
    public Book() {
   
    }

    @Override
    public String toString() {
   
        return "Book{" +
                "booklist='" + booklist + '\'' +
                ", pirce=" + pirce +
                ", publishMonth=" + publishMonth +
                ", publishYear=" + publishYear +
                '}';
    }

    public String getBooklist() {
   
        return booklist;
    }


    public void setBooklist(String booklist) {
   
        this.booklist = booklist;
    }

    public double getPirce() {
   
        return pirce;
    }

    public void setPirce(double pirce) {
   
        this.pirce = pirce;
    }

    public int getPublishMonth() {
   
        return publishMonth;
    }

    public void setPublishMonth(int publishMonth) {
   
        this.publishMonth = publishMonth;
    }

    public int getPublishYear() {
   
        return publishYear;
    }

    public void setPublishYear(int publishYear) {
   
        this.publishYear = publishYear;
    }
}

3.Librarin类

public class Librarin {
   
    Scanner input = new Scanner(System.in);
    //新增图书
    public void add(ArrayList<Book> arrayList){
   
        //创建Librarin,Book对象
        Librarin lib = new Librarin();
        Book book = new Book();
        Scanner input = new Scanner(System.in);

        //提示并且获取图书名称
        System.out.println("请输入图书名称:");
        String booklist = input.nextLine();

        //获取图书价格并且判断输入的价格是否合理
        System.out.println("请输入图书价格");
        String p = input.nextLine();
        //用于判断是否符合要求
        boolean x = true;
        double price = -1;
        try{
   
            price = Double.parseDouble(p);
        }catch (NumberFormatException e){
   
            System.out.println("价格输入有误,请重新操作");
            //不符合要求,x = false
            x = false;
        }if(price < 0){
   
            System.out.println("价格不能小于0,请重新操作");
            x = false;
        }
        if(x == true) {
   
            boolean ym = true;
            System.out.println("请输入图书出版的年份:");
            String y = input.nextLine();
            System.out.println("请输入图书出版的月份:");
            String m = input.nextLine();
            int year = -1;
            int mon = -1;
            try {
   
                year = Integer.parseInt(y);
                mon = Integer.parseInt(m);
            } catch (NumberFormatException e) {
   
                System.out.println("输入有误,请重新操作");
            }
            //判断输入的年月是否再合理范围
            if ((year>1000 && year<lib.getSystemYear()) && (mon>0 && mon<=12)) {
   
            }else if(year == lib.getSystemYear() && (mon>0 && mon<=12)){
   
                if(mon <= lib.getSystemMonth()){
   
                }
            }else{
   
                System.out.println("输入的年份/月份不合理请重新操作");
                ym = false;
            }
            if(ym == true){
   
                //以上全部操作合理以后把数据存入book
                book.setBooklist(booklist);
                book.setPirce(price);
                book.setPublishYear(year);
                book.setPublishMonth(mon);
                //把数据存入集合
                arrayList.add(book);
                System.out.println("该图书存储成功!"
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一. 简易后台管理系统功能: 1.1) 登录验证:登录时检测帐号密码是否正确及用户是否有效。否则给予提示并需要重新输入 1.2) 权限管理功能:登录后,根据当前角色获取该角色的权限,权限在左侧列表显示,点击左侧列表前往相应界面 1.3) 角色管理功能:可根据不同角色分配不同权限。 1.4) 日志记录功能:通过切面和注解的形式自动记录需要记录的操作 1.5) 前台:界面右侧的导航栏添加右键关闭当前、关闭其它、关闭所有tab的功能,提供收起、展开左侧导航列表功能,列表界面配合mybatis分页插件进行分页,提供便捷的增删改查和批量操作模版,提供简易的页面元素验证方式,提供form表单元素自动加载功能,提供图片上传及预览示例,提供前后台数据快速交互示例等 1.6) 后台:提供基本的Controller,service, mapper,使能够极快速得获取数据; 提供异常/错误页面处理;提供是否有效用户访问校验,未登录者需先登录;提供代码生成工具类,可一键生成所需的基本代码,生成的代码模版中增删改查功能直接可用。 二. 使用步骤 2.1).下载后解压。导入项目。 2.2).执行init中的sql。主要是要把系统用户建立起来。 2.3).运行项目,前台输入http://localhost:8080 可前往登录页。 2.4).帐号 admin 密码 123456 登录。 登录进去之后就自己玩啦。 2.5).上传资源的位置默认为当前项目同一级的路径,可以在uploadSetting.properties中设置 #原博客见: https://blog.csdn.net/HelloWorld_In_Java/article/details/83794696
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值