[java篇]图书管理系统,是你的期末大作业吗?

Posted 小周同学ヾ(❀╹◡╹)ノ゙❀~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[java篇]图书管理系统,是你的期末大作业吗?相关的知识,希望对你有一定的参考价值。


前言:博主在之前的文章中分别介绍了,包,封装,继承和多态,总感觉哪里好像没有学透,所以今天特意复习了一下,用一个图书管理系统,把之前学过的东西全部运用进去。
前期文章: [java篇]包,继承和组合]
[java篇]多态,抽象类和接口

图书管理系统框架一览图

整体思想:

我们在敲代码之前先构思一下,即然要实现图书系统,那么就要有,而图书馆里又不只有一本书,所以我们要出创建一个书架,存放所有的书。
当我们说到用户了,用户分为图书管理员和普通用户,而这两个用户又隶属于一个父类user类,因为我们在调用功能的时候普通用户和管理员有着相同的功能。
功能:我们创建一个功能接口,让每个具体功能都实现功能接口中的抽象方法
Main类:创建登录方法,通过个人选择。去选择普通用户菜单,还是管理员菜单,然后通过菜单返回要具体实现的功能,调用Operation包下的某个功能类

  • 创建一个书类:里面的属性包括:书名作者书的类型价格此书有没有被借出
  • 创建一个书架:里面包含所有的书,还有一些具体方法
  • 在User包下,创建两个类,分别是customer类,和Librarian类,都继承user类。分别在两个子类中实现各自的菜单。

Book包

Book类

在Book类中,实现封装书的属性,依次为 书名作者书的特性价格此书是否被借出

package Book;
public class Book {
    //创建书的属性
    //包括 书名 作者 种类 价格 是否借出
    private String name;
    private String author;
    private String type;
    private int price;
    private boolean isLent;
    //实现书的构造方法
    public Book(String name, String author, String type, int price) {
        this.name = name;
        this.author = author;
        this.type = type;
        this.price = price;
    }
    //实现setter 和 getter 方法 以便在其他类中调用书的属性

    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 int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public boolean isLent() {
        return isLent;
    }

    public void setLent(boolean lent) {
        isLent = lent;
    }
    //重写toString()方法

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\\'' +
                ", author='" + author + '\\'' +
                ", type='" + type + '\\'' +
                ", price=" + price +
                ","+((isLent == false) ? "未借出" :"已借出") +
                '}';
    }
}

BookList类

实现书架,在这里创建一个Book数组,存放全部的书,和一些方法的实现

 public class BookList {
    //实现书架
    //其实在整个图书管理系统中,都是对书架的操作
    public Book []books = new Book[10];//先初始化书的书目为10本,其实我们在这里还可以实现扩容
    private int useSize;
    public BookList(){
        this.books[0] = new Book("水浒传","施耐庵","小说",45);
        this.books[1] = new Book("三国演义","罗贯中","小说",40);
        this.books[2] = new Book("西游记","吴承恩","小说",39);
        this.books[3] = new Book("红楼梦","曹雪芹","小说",50);
        this.useSize = 4; //现在具体书被初始化的有4本
    }

    public int getUseSize() { //获得书的书目
        return useSize;
    }

    public void setUseSize(int useSize) { //设置书的书目
        this.useSize = useSize;
    }
    public Book getPos(int size){ //得到对应下标的某本书
        return books[size];
    }
    public void setBook(Book book,int size){ //设置在某个下标有某本书
         books[size] = book;
    }
    public Book getBook(int size){ //得到对应下标的某本书
        return books[size];
    }
}

User包

普通用户Customer类

在Customer类中,他继承了user类,拥有了user类中的属性,先调用父类中的构造方法,然后在菜单中打印出各个功能的编号。并且在子类中的构造方法中实现一个功能数组,这个数组的每个元素为对应菜单中的功能的对象
最后返回选择后的功能下标

 package User;
import Operation.*;
import java.util.Scanner;
public class Customer extends user {
    //调用父类的构造方法
    public Customer(String name){
        super(name);
        this.iOperations = new IOperation[]{
                new ExitOperation(),
                new IsLentOperation(),
                new ReturnOperation(),
                new FindOperation()
        };
    }
    public int menu(){
        System.out.println("hello" + this.name + "欢迎来到图书管理系统");
        System.out.println("============= 普通用户菜单 ==============");
        System.out.println("1.借阅图书");
        System.out.println("2.归还图书");
        System.out.println("3.查找图书");
        System.out.println("0.退出系统");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

管理员Librarian类

和普通用户一样,先调用父类中的构造方法,作为子类拥有父类中的所有属性(除private修饰外),在子类的构造方法中创建功能数组数组中的每个元素都是对应专属管理员执行的功能对象。然后打印管理员菜单。最后返回功能选择

 package User;
import Operation.*;
import java.util.Scanner;
public class Librarian extends user{
    public Librarian(String name){
        super(name);
        this.iOperations = new IOperation[]{
                new ExitOperation(),
                new AddOperation(),
                new RemoveOperation(),
                new FindOperation(),
                new DisplayOperation(),
                new ArrangeOperation()
        };
    }
    public int menu(){
        System.out.println("hello" + this.name + "欢迎来到图书管理系统");
        System.out.println("=============  管理员菜单 ==============");
        System.out.println("1.新增图书");
        System.out.println("2.删除图书");
        System.out.println("3.查找图书");
        System.out.println("4.显示图书");
        System.out.println("5.整理图书");
        System.out.println("0.退出系统");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;//返回功能下标
    }
}

用户(user)类—父类

在父类user类,先封装一个属性,即用户的名字,然后通过构造方法对这个属性进行初始化,我们现在可以使用abstract来修饰父类,在父类中的所有抽象方法,都要在子类中被重写,我们在父类中写一个抽象方法为void menu()方法,当调用我们选择的功能下标时,我们可以直接调用父类中的menu方法。实现向上转型,动态绑定

 package User;
import Book.BookList;
import Operation.IOperation;
public  abstract class user {
    //因为用户包含有两类
    protected String name;
    public user(String name){
        this.name = name;
    }
    //实现菜单
    public  abstract int menu();
    protected  IOperation []iOperations; //创建一个功能数组
    public void doOperation(int choice,BookList bookList){ //操作功能数组,并且调用功能包中的类中的被重写的方法。
            iOperations[choice].work(bookList);
    }
}

功能包-- Operation包

创建接口–IOperation接口

创建一个接口,让其他类实现接口中的抽象方法

 package Operation;
import Book.BookList;
public interface IOperation  {
    void work(BookList bookList);
}

新增图书–AddOperation

首先在原有的书籍中查找有没有你要添加的图书如果有就提示你此书已经存在,你无需添加。在查找有没有这本书的时候我们需要遍历原书架上的所有书籍,所以我们要在BookList类中实现一个方法得到所有的书。如果在原有的书籍中没有找到你要添加的这本书,那么接在原来书架的末尾添加上这本书(调用BookList类中的setBook()方法),最后把书的个数加一(调用BookList类中的getsueSize()方法)。

 package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class AddOperation implements IOperation{
    public void work(BookList bookList){
        System.out.println("新增图书");
        System.out.println("请输入书名");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请输入书的作者");
        String author = scanner.nextLine();
        System.out.println("请输入图书的类型");
        String type = scanner.nextLine();
        System.out.println("请输入图书的价格");
        int price = scanner.nextInt();
        Book book = new Book(name,author,type,price);
        //在原有的书籍中查找是否已经存在了要添加的这本书
        //得到书的每下标

        for(int i = 0;i < bookList.getUseSize();i++) {
            Book book1 = bookList.getPos(i);
            if (name.equals(book1.getName())){
                System.out.println("此书已经存在,无需添加");
                return;
            }
        }
        bookList.setBook(book,bookList.getUseSize()); //把这本书添加到书架的末尾
        bookList.setUseSize(bookList.getUseSize()+1); //书的书目加1
        System.out.println("添加成功");
    }
}

删除图书–RemoveOperation

首先输入你要删除的图书,看书架上有没有这本书,如果没有就提示书库中没有你要删除的书如果书架上有,那么就让要删除的这本书的后一本书去覆盖将要删除的这本书,即[i] = [i+1].最后在原有的书架上的图书个数减一

 package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class RemoveOperation implements IOperation{
    public void work(BookList bookList){
        System.out.println("删除图书");
        System.out.println("请输入删除的书名");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int pos = -1;
        for(int i = 0;i<bookList.getUseSize();i++){
            Book book = bookList.getPos(i);
            if(book.getName().equals(name)) {
             pos = 1;
            }
        }
        if(pos == 1){
        //进行删除
            for(int i = pos;i<bookList.getUseSize() - 1;i++){
                Book book = bookList.getPos(i+1);
                bookList.setBook(book,i);
            }
            bookList.setUseSize(bookList.getUseSize() - 1);
            System.out.println("删除成功");
        }else{
            System.out.println("没有你要删除的图书");
        }
    }
}

查找图书–FindOperation

 package Operation;
import Book.Book;
import Book.BookList;
import java.util.Scanner;
public class FindOperation implements IOperation{
    public void work(BookList bookList){
        System.out.println("查找图书");
        System.out.println("请输入你要查找的书籍");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        for(int i = 0;i<bookList.getUseSize();i++){
            Book book = bookList.getPos(i);
            if(book.getName().equals(name)){
                System.out.println("已经找到");
                System.out.println(book);
                return;
            }
        }
        System.out.println("找不到");
    }
}

显示图书–DisplayOperation

 package Operation;
import Book.Book;
import Book.BookList<

以上是关于[java篇]图书管理系统,是你的期末大作业吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java Swing 期末大作业-----图书借阅管理系统

期末Web大作业图书管理系统(.net&C#)

期末Web大作业图书管理系统(.net&C#)

html5期末大作业:基于html+css+javascript+jquery+bootstarp响应式图书电商HTML模板网上书店(25页)

Java期末大作业基础项目--在线学生选课系统(建议收藏)

Java期末大作业基础项目--在线学生选课系统(建议收藏)