【javaSE】ライブラリ管理システムの実装

目次

全体のアイデア

ブックバッグ

書籍クラス

BookList クラス

ユーザーパッケージ

ユーザークラス

NormalUser クラス

AdminUser 管理者クラス

テストメインパッケージ

オペラパッケージ

IOperationインターフェース

一般ユーザー

ExitOperation クラス

FindOperation クラス

BrowOperation クラス

ReturnOperation クラス

管理者

AddOperation クラス

 DelOperation クラス

ShowOperation クラス

要約する


全体のアイデア

まず、達成したい効果を見てみましょう

ログイン名と ID オプションが必要です

さまざまな機能に対応するさまざまな ID を選択する

たとえば、管理者を選択します

一般ユーザーを選択

  

私たちの本を持っているはずです

 ブロガーはここでライブラリ管理システムを実装し、実装のためにそれを 4 つのパッケージに分割します

パッケージの作成方法がわからないお友達は、以下のリンクにアクセスして確認してください。

[javaSE] オブジェクト指向プログラムの 3 つの主要な特徴のカプセル化

bookクラスとbookshelfクラスはbookパッケージに実装されています。

Opera パッケージでは、インターフェイスを使用して、ライブラリ管理システムに実装する必要がある機能を実装します。

testmain パッケージにはメイン関数が配置されています

ユーザー パッケージは継承を使用して、必要なマネージャー クラスと借り手クラスを実装します。

すべてのクラスを次のように実装します

次に、内部の各クラスについて説明します。

ブックバッグ

書籍クラス

このクラスで実装されるのは、書籍に必要なプロパティ、対応する構築メソッド、および印刷の便宜のために書き換えられた toString メソッドです。

コードは次のように実装されます

package book;

public class Book {
    private String name;//书名
    private String author;//作者
    private int price;//价钱
    private String type;//类型
    private boolean isBorrowed;//是否被借阅
    //构造方法
    public Book(String name, String author, int price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

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

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

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean isBorrowed() {
        return isBorrowed;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }

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

BookList クラス

ここでは、多くの書籍を格納できる配列を実装する必要があります。

追加、削除などに使用できる対応するメソッド。

コード

package book;

public class BookList {
    //定义常量
    private static final int DEFAULT_SIZE = 20;
    //创建一个Book类型的数组,books里面存放的是多个book类型实例化的对象
    private Book[] books = new Book[DEFAULT_SIZE];
    //记录当前books数组当中 有多少本书?
    private int usedSize;
    public BookList() {
        books[0] = new Book("剑来","烽火戏诸侯",88,"修仙小说") ;
        books[1] = new Book("雪中悍刀行","烽火戏诸侯",66,"武侠小说");
        books[2] = new Book("流浪地球","刘慈欣",99,"科幻小说");
        books[3] = new Book("木苏里","某某",88,"爱情小说") ;
        books[4] = new Book("天官赐福","墨香铜臭",66,"爱情小说");
        books[5] = new Book("镇魂","priest",99,"爱情小说");
        //表示最初是三本
        this.usedSize = 6;
    }
    //读取这一本书
    public Book getBooK(int pos) {
        return this.books[pos];
    }
    //将该书写入该下标对应的位置,可以实现增加图书
    public void setBook(Book book) {
        this.books[usedSize] = book;
    }
    //后面会用于读取图书
    public int getUsedSize() {
        return usedSize;
    }
    //用于写入数组下标,与增加删除功能都有关系
    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }


}

ユーザーパッケージ

ユーザークラス

ここでの User クラスは、NormalUser クラスと AdminUser クラスの親クラスです。

対応する属性名と構築メソッドがあります

サブクラスが使用する配列が提供されます

メニューを実装する抽象クラスがあります

ユーザーの選択結果を伝えて、対応する関数のメソッドを呼び出すメソッドがあります

実装コード

package user;

import book.BookList;
import opera.IOPeration;

public abstract class User {
    protected String name;
    protected IOPeration[] ioPerations;

    public User(String name) {

        this.name = name;
    }
    //创建一个抽象类,实现菜单
    public abstract int menu();
    //通过对象的相应调用与所传参数实现操作者选择的功能
    public void doWork(int choice, BookList bookList) {
        this.ioPerations[choice].work(bookList);
    }
}

NormalUser クラス

Userクラスを継承した通常のユーザークラス

これには、通常のユーザーの機能を実現するためにいくつかのオブジェクトを保存するために使用される配列が含まれます。

ユーザーが選択を行えるようにし、ユーザーが行った選択を返すメニュー

package user;

import opera.*;

import java.util.Scanner;
/**
 * @Author 12629
 * @Description:
 */
public class NormalUser extends User{
    public NormalUser(String name) {
        super(name);
        //对ioPerations数组进行初始化,里面放的是使用者所需要功能类的对象
        ioPerations = new IOPeration[] {
                //0.退出系统
                new ExitOperation(),
                //1.查找图书
                new FindOperation(),
                //2.借阅图书
                new BrrowOperation(),
                //3.归还图书
                new ReturnOperation()
        };
    }

    public int menu() {
        System.out.println("****************************");
        System.out.println("hello "+name+" 欢迎来到阳光图书馆");
        System.out.println("1.查找图书!");
        System.out.println("2.借阅图书!");
        System.out.println("3.归还图书!");
        System.out.println("0.退出系统!");
        System.out.println("****************************");
        System.out.println("请输入你的操作:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }

}

AdminUser 管理者クラス

User クラスから継承された Administrator クラス

これには、管理者の機能を実現するためにいくつかのオブジェクトを保存するために使用される配列が含まれます。

管理者が選択を行うことができ、管理者が行った選択を返すメニュー

package user;

import opera.*;

import java.util.Scanner;

public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
        //对ioPerations数组进行初始化,里面放的是管理员所需要功能类的对象
        ioPerations = new IOPeration[] {
                //0.退出系统
                new ExitOperation(),
                //1、查找图书
                new FindOperation(),
                //2.新增图书
                new AddOperation(),
                //3.删除图书
                new DelOperation(),
                //4.显示图书
                new ShowOperation()
        };
    }

    public int menu() {
        System.out.println("****************************");
        System.out.println("hello "+name+" 欢迎来到阳光图书管");
        System.out.println("1.查找图书!");
        System.out.println("2.新增图书!");
        System.out.println("3.删除图书!");
        System.out.println("4.显示图书!");
        System.out.println("0.退出系统!");
        System.out.println("****************************");
        System.out.println("请输入你的操作:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }

}

テストメインパッケージ

ここで実装する必要があるのは、

ユーザーによるさまざまなアイデンティティの選択と、アイデンティティの選択後に実行される機能に応じて、対応するオブジェクトを呼び出して実現できます。

コード

package testmain;

import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;

import java.util.Scanner;

/**
 * @Author 12629
 * @Description:
 */
public class Main {
    public static User login() {
        System.out.println("请输入你的姓名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请输入你的身份:1-》管理员  0-》普通用户");
        int choice = scanner.nextInt();
        if(choice == 1) {
            return new AdminUser(name);
        }else {
            return new NormalUser(name);
        }
    }

    public static void main(String[] args) {
        BookList bookList = new BookList();
        //返回来的值进行向上转型
        User user = login();
        while(true) {
            //此处是一个简单的多态实现
            int choice = user.menu();
            //根据 choice 和   user 来确定 我到底 调用哪个对象的哪个操作
            user.doWork(choice, bookList);
        }
    }
}

オペラパッケージ

このパッケージは、インターフェイスを使用してこれらの機能を実装します。

IOperationインターフェース

抽象的な作業メソッドがあり、パラメータのタイプは BookList です。

コード

package opera;

import book.BookList;

public interface IOPeration {
    void work(BookList bookList);
}

一般ユーザー

ExitOperation クラス

システムからログアウトするには

ここでの実装は非常に簡単で、System.exit(0) を使用するだけです。

import book.BookList;

public class ExitOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {

        System.out.println("退出系统!");
        System.exit(0);
    }
}

FindOperation クラス

本を探すために

本のタイトルに従って、Books 配列内の各 Book クラスの名前を比較します。

package opera;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class FindOperation  implements IOPeration{
    @Override
    public void work(BookList bookList) {
        int currenSize = bookList.getUsedSize();
        System.out.println("请输入要查找书的名字");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        for(int i = 0;i < currenSize;i++) {
            Book book = bookList.getBooK(i);
            if(book.getName().equals(input)){
                System.out.println(book);
                return;
            }
        }
        System.out.println("查找书不存在");
    }

}

BrowOperation クラス

借入機能の実現

本のタイトルに従ってトラバースして、そのような本があるかどうかを確認してください

本の状態を判断する

借りた本のステータスを「借り中」に変更します。

コードは次のように実装されます

import java.util.Scanner;

public class BrrowOperation implements IOPeration {
    public void work(BookList bookList) {

        System.out.println("借阅书籍!");
        System.out.println("请输入你要借阅的图书的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();

        int currentSize = bookList.getUsedSize();

        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooK(i);
            if(name.equals(book.getName())) {
                if(book.isBorrowed()) {
                    System.out.println("该书已经被借出! ");
                }else {
                    book.setBorrowed(true);
                    System.out.println("借阅图书成功!");
                }
                return;
            }
        }
        System.out.println("没有你要借阅的图书!");
    }

}

ReturnOperation クラス

本を返す

本のタイトルに従ってトラバースして、そのような本があるかどうかを確認してください

本の状態を判断する

本を返却した後にステータスを「未借り」に変更する

コードは次のように実装されます

package opera;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class ReturnOperation implements IOPeration{
        @Override
        public void work(BookList bookList) {
            System.out.println("归还图书!");
            System.out.println("请输入你要归还的图书的名字:");
            Scanner scanner = new Scanner(System.in);
            String name = scanner.nextLine();


            int currentSize = bookList.getUsedSize();;
            for (int i = 0; i < currentSize; i++) {
                Book book = bookList.getBooK(i);
                if(name.equals(book.getName())) {
                    book.setBorrowed(true);
                    System.out.println("归还图书成功!");
                    return;
                }
            }
            System.out.println("没有你要归还的图书!");
        }
}

管理者

ExitOperation クラスと FindOperation クラスは 2 つの ID で共有されるため、ここでは詳しく説明しません。

AddOperation クラス

本を追加する

タイトルに従ってその本がすでに存在するかどうかを調べる

本のすべてのプロパティを追加します

Books 配列を更新して追加します。ここでは、以下に示すように、先ほど BookList で作成したメソッドを使用します。

コードは次のように実装されます

package opera;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation implements IOPeration{
    public void work(BookList bookList) {
        int currenSize = bookList.getUsedSize();
        System.out.println("新增图书!");
        System.out.println("请输入你要新增的图书的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        for(int i = 0;i < currenSize;i++) {
            Book book = bookList.getBooK(i);
            if(book.getName().equals(name)){
                System.out.println("所添加书籍已存在");
                return;
            }
        }
        System.out.println("请输入你要新增的图书的作者:");
        String author  = scanner.nextLine();

        System.out.println("请输入你要新增的图书的价格:");
        int  price  = scanner.nextInt();

        scanner.nextLine();

        System.out.println("请输入你要新增的图书的类型:");
        String type  = scanner.nextLine();

        Book book = new Book(name,author,price,type);

        //1. 获取到当前可以存放书的位置
        int currentSize = bookList.getUsedSize();
        //2. 把书放入指定位置
        bookList.setBook(book);
        //3. 书的有效个数+1
        bookList.setUsedSize(currentSize+1);
        System.out.println("添加成功");
    }

}

 DelOperation クラス

本を削除する

タイトルに従ってその本がすでに存在するかどうかを調べる

本の配列添字を見つけて、前の配列が後ろの配列でカバーされることを認識します。

既存の本の数が 1 つ減り、元の本のリストの最後の位置が Null になります

コード

package opera;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class DelOperation implements IOPeration{
    public void work(BookList bookList) {

        System.out.println("删除图书!");
        System.out.println("请输入你要删除的图书:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        //1. 遍历数组当中 是否有你要删除的书  有记录下标
        int index = -1;
        int currentSize = bookList.getUsedSize();;
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBooK(i);
            if(name.equals(book.getName())) {
                index = i;
                break;
            }
        }
        //
        if(index == -1) {
            System.out.println("没有你要删除的书!");
            return;
        }

        for (int i = index; i < currentSize-1 ; i++) {
            //bookList[i] = bookList[i+1];
            Book book = bookList.getBooK(i+1);
            bookList.setBook(book);
        }
        //下标减一
        bookList.setUsedSize(currentSize-1);
        //每次删除 都要置空
        bookList.setBook(null);
        System.out.println("删除成功!");

    }
}

ShowOperation クラス

本を見せる

Books 配列を走査する

オーバーライドされた toString メソッドを使用するだけです

コード

package opera;

import book.BookList;

import java.sql.SQLOutput;

public class ShowOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        int currenSize = bookList.getUsedSize();
        for(int i = 0;i < currenSize;i++) {
            //我们重写了toString,所以这里会优先调用我们重写的toString方法
            System.out.println(bookList.getBooK(i));
        }
        System.out.println("显示完毕");
    }

}

要約する

「図書館管理システム」の説明は以上です。メッセージの交換や批判、修正を歓迎します。記事が役に立った場合、または著者の文章が悪くないと思う場合は、クリックしてフォローしてください、いいね、サポートを追加してください。完全なパッケージが必要な友人は、このブログ投稿のリソース バインディングにアクセスしてダウンロードするか、ブロガーにプライベート メッセージを送信することができます。

おすすめ

転載: blog.csdn.net/m0_71731682/article/details/132091521