(OOP)图书管理系统(1.0)

(OOP)图书管理系统(1.0)

技术要求:使用封装、继承、多态、接口、异常判断等内容,一个具有增删改查的图书管理系统,系统使用者分为普通用户和管理员

  • 个人思路:
  1. 图书方面,因为要定义接口,所以将图书分为一个包,里面有接口类(Books),封装类(Book)、图书列表类(BookList)
  2. 有两个菜单、普通用户(OrdinaryMenu)、管理员用户(RootMenu),也生成一个包
  3. 使用者,普通用户(Ordinary)、管理员用户(Root),这里本来向用一个父类Person继承,然后使用多态,但是只有两个人,而且父类Person感觉什么东西可写,所以暂时就没有使用继承、多态
  4. 最后是一个测试类
  • 展示代码
  • 有打包好的,感兴趣的小伙伴可以下载参考 下载地址 提取码:9tfh

book包

//Book封装类
package bookSystem.book;
public class Book {
//    图书馆
    private String name; //书名
    private String author;//作者
    private String type;//风格
    private double price;//价格
    private boolean isBorrowed;//是否借阅
​
//    定义图书数组
    Book [] booksArr = new Book[100];
​
//    重写toString方法
    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + ''' +
                ", author='" + author + ''' +
                ", type='" + type + ''' +
                ", price=" + price +
                ", isBorrowed=" + isBorrowed +
                '}';
    }
//无参构造
    public Book() {}
//构造函数
    public Book(String name, String author, String type, double price, boolean isBorrowed) {
        this.name = name;
        this.author = author;
        this.type = type;
        this.price = price;
        this.isBorrowed = isBorrowed;
    }
​
//    get/set 方法
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public String getAuthor() {
        return author;
    }
​
    public void setAuthor(String author) {
        this.author = author;
    }
​
    public String getType() {
        return type;
    }
​
    public void setType(String type) {
        this.type = type;
    }
​
    public double getPrice() {
        return price;
    }
​
    public void setPrice(double price) {
        this.price = price;
    }
​
    public boolean isBorrowed() {
        return isBorrowed;
    }
​
    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }
}
​
//Books接口类
package bookSystem.book;
​
public interface Books {
//    书架的规范,各种图书功能,借书、还书、找书、增书、删出、显示书(实现接口)
    void lookForBook(); //查书
    void borrowBook(); //借书
    void returnBook(); //还书
    void addBook(); //增书
    void deleteBook(); //删书
    void showBook(); //显示书
}
​
//BookList图书类
package bookSystem.book;
​
import java.util.InputMismatchException;
import java.util.Scanner;
​
public class BookList extends Book implements Books {
    //   书架继承图书的基本信息,重写接口方法
    Scanner scanner = new Scanner(System.in);
    private boolean flag = true;
​
    {
//        初始化四本书
        Book b1 = new Book("西游记", "吴承恩", "小说", 12, false);
        Book b2 = new Book("水浒传", "施耐庵", "小说", 12, false);
        Book b3 = new Book("红楼梦", "曹雪芹", "小说", 12, false);
        Book b4 = new Book("三国演义", "罗贯中", "小说", 12, false);
        booksArr[0] = b1;
        booksArr[1] = b2;
        booksArr[2] = b3;
        booksArr[3] = b4;
    }
​
    public BookList() {
    }
​
    public BookList(String name, String author, String type, double price, boolean isBorrowed) {
        super(name, author, type, price, isBorrowed);
    }
​
    @Override
    public void lookForBook() {//找书
        System.out.println("请输入你要查找的书名:");
        String name = scanner.next();
        for (int i = 0; i < booksArr.length; i++) {
            if (name.equals(booksArr[i].getName())) {
                System.out.println("你要找的书如下:");
                System.out.println(booksArr[i]);
                flag = false;
                break;
            }
        }
        if (flag) {
            System.out.println("查无此书!");
        }
    }
​
    @Override
    public void borrowBook() {//借书
        System.out.println("请输入你要借的书名:");
        String name = scanner.next();
        for (int i = 0; i < booksArr.length; i++) {
            if (name.equals(booksArr[i].getName())) {
                System.out.println("借书成功!");
                booksArr[i].setBorrowed(true);
                flag = false;
                break;  //循环的作用
            }
        }
        if (flag) {
            System.out.println("查无此书!");
        }
    }
​
    @Override
    public void returnBook() { //还书
        System.out.println("请输入你要还的书名:");
        String name = scanner.next();
        for (int i = 0; i < booksArr.length; i++) {
            if (name.equals(booksArr[i].getName())) {
                System.out.println("还书成功!");
                booksArr[i].setBorrowed(false);
                flag = false;
                break;  //循环的作用
            }
        }
        if (flag) {
            System.out.println("查无此书!");
        }
    }
​
    @Override
    public void addBook() { //增加书
​
        System.out.println("请输入你要新增的图书的书名:");
        String name = scanner.next();
        System.out.println("请输入你要新增的图书的作者:");
        String author = scanner.next();
        System.out.println("请输入你要新增的图书的类型:");
        String type = scanner.next();
        System.out.println("请输入你要新增的图书的价格:");
        int price = 0;
        try {
            int p = scanner.nextInt();
            price = p;
        } catch (InputMismatchException e) {
            System.out.println("添加图书失败,请按要求输入价格为:数字!");
            return;
        }
//        int price = scanner.nextInt();
        for (int i = 0; i < booksArr.length; i++) {
            if (booksArr[i] == null) {
                Book b = new Book(name, author, type, price, false);
                booksArr[i] = b;
                System.out.println("新增图书成功!");
                break;
//                booksArr[i].setName(name);
//                booksArr[i].setAuthor(author);
//                booksArr[i].setType(type);
//                booksArr[i].setPrice(price);
//                booksArr[i].setBorrowed(false);
            }
        }
    }
​
    @Override
    public void deleteBook() {//删除书
        System.out.println("请输入你要删除的书名:");
        String name = scanner.next();
        for (int i = 0; i < booksArr.length; i++) {
            if (name.equals(booksArr[i].getName())) {
//                booksArr[i].setName(null);
//                booksArr[i].setAuthor(null);
//                booksArr[i].setType(null);
//                booksArr[i].setPrice(0.0);
                booksArr[i] = null;
                break;  //循环的作用
            }
        }
    }
​
    @Override
    public void showBook() {
        for (int i = 0; i < booksArr.length; i++) {
            if (booksArr[i] != null) {
                System.out.println(booksArr[i]);
            }
        }
    }
}

menu菜单包

//普通用户菜单 OrdinaryMenu
package bookSystem.menu;
​
​
import bookSystem.book.BookList;
​
import java.util.Scanner;
​
public class OrdinaryMenu {
//    普通用户菜单
    public void menu() {
        Scanner scanner = new Scanner(System.in);
        BookList bookList = new BookList();
        boolean flag = true;
        do {
            System.out.println("=======普通用户菜单=======");
            System.out.println("=======0.退出系统========");
            System.out.println("=======1.查找图书========");
            System.out.println("=======2.借阅图书========");
            System.out.println("=======3.归还图书========");
            System.out.println("请选择你的业务:");
            int n= scanner.nextInt();
            switch (n) {
                case 0:
                    System.out.println("欢迎再次光临");
                    flag = false;
                    break;
                case 1:
                    bookList.lookForBook();
                    break;
                case 2:
                    bookList.borrowBook();
                    break;
                case 3:
                    bookList.returnBook();
                    break;
                default:
                    System.out.println("请输入正确指令!");
                    break;
            }
        }while(flag);
    }
}
​
//管理员用户菜单 RootMenu
package bookSystem.menu;
​
​
import bookSystem.book.BookList;
​
import java.util.Scanner;
​
public class RootMenu {
//    管理员菜单
    public void menu() {
        Scanner scanner = new Scanner(System.in);
        BookList bookList = new BookList();
        boolean flag = true;
        do {
            System.out.println("========管理员菜单=======");
            System.out.println("=======0.退出系统========");
            System.out.println("=======1.查找图书========");
            System.out.println("=======2.新增图书========");
            System.out.println("=======3.删除图书========");
            System.out.println("=======4.显示图书========");
            System.out.println("请选择你的业务:");
            int n= scanner.nextInt();
            switch (n) {
                case 0:
                    System.out.println("欢迎再次光临");
                    flag = false;
                    break;
                case 1:
                    bookList.lookForBook();
                    break;
                case 2:
                    bookList.addBook();
                    break;
                case 3:
                    bookList.deleteBook();
                    break;
                case 4:
                    bookList.showBook();
                    break;
                default:
                    System.out.println("请输入正确指令!");
                    break;
            }
        }while(flag);
    }
}
​

用户包

//普通用户
package bookSystem.person;
​
import bookSystem.menu.OrdinaryMenu;
​
public class Ordinary {
    public void showInfo() {
        OrdinaryMenu ordinaryMenu = new OrdinaryMenu();
        ordinaryMenu.menu();
    }
}
​
//管理员
package bookSystem.person;
​
import bookSystem.menu.RootMenu;
​
public class Root {
    public void showInfo() {
        RootMenu rootMenu = new RootMenu();
        rootMenu.menu();
    }
}
​

测试类

package bookSystem;
​
import bookSystem.person.Ordinary;
import bookSystem.person.Root;
​
import java.util.InputMismatchException;
import java.util.Scanner;
​
public class Text {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的姓名:");
        String name = scanner.next();
        System.out.println("请选择你的身份:0-->管理员,1-->普通用户");
//          进行一个异常判断!
        try {
            int b = scanner.nextInt();
            if (b == 0) {
                System.out.println("\t\t管理员菜单");
                System.out.println("hello " + name + "欢迎来到图书馆!");
                Root p = new Root();
                p.showInfo();
            }
            if (b == 1) {
                System.out.println("\t\t普通员工菜单");
                System.out.println("hello " + name + "欢迎来到图书馆!");
                Ordinary p = new Ordinary();
                p.showInfo();
            }
        } catch (InputMismatchException e) {
            System.out.println("输入异常,请按要求输入数字!");
        }
    }
}
​

运行截图

 

总结

  1. 第一天,刚上完接口,开始写(OOP)图书管理系统,脑壳子都懵懵的,不知道如何下手,不太清楚接口到底是怎么使用,睡一觉起来,发现,哦豁,接口好像有那个意思了,规范继承的非抽象类的行为,是一个标准,什么东西需要标准呢! 大众使用的东西,普遍的东西都需要一个标准,接口类(interface)就是很好的东西,它规定凡是使用了接口类的子类,都需要重写接口类的方法,这可以弥补类继承的不足,一个类可以继承一个类,还可以使用多个接口,这个在book包里面有体现
  2. 遇到的问题:第一天下午写的时候主要是没有啥思路,感觉遇到个接口就无从下手,后面发现理解之后,接口还是很好的工具!问题在图书列表里面的删除图书功能
     for (int i = 0; i < booksArr.length; i++) {
            if (booksArr[i] == null) {
                Book b = new Book(name, author, type, price, false);
                booksArr[i] = b;
                System.out.println("新增图书成功!");
                break;
//                booksArr[i].setName(name);
//                booksArr[i].setAuthor(author);
//                booksArr[i].setType(type);
//                booksArr[i].setPrice(price);
//                booksArr[i].setBorrowed(false);
            }
        }

错误思路:用户输入书名、作者等信息,然后判断书本数组,后面只要为null的数组,就直接将用户输入的信息赋值过去,错误原因是,我用数组里面空的地址去赋值用户输入的信息,理所当然的报错(NULLPointException)空指针异常,后来发现,自己定义一个新的图书,然后将用户输入的信息放进去,在用开辟新的图书空间去指向为null的图书数组,问题就解决了!

- 代码量还是太少了,遇到的题型和问题也太少了,继续加油!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值