JAVA는 라이브러리 관리 시스템(아이디어, 완성 코드)을 구현합니다.

파일이 너무 많기 때문에 각 파일 간의 관계는 다음과 같습니다( 각 파일에는 하나의 클래스만 있습니다 ).

JAVA는 객체 지향 프로그래밍 언어이기 때문에 라이브러리 관리 시스템을 구현하려면 다음 단계를 수행해야 합니다.

  • 에서 모든 개체 찾기
  • 모든 객체 구현
  • 객체 간 상호작용 완성

도서관 관리 시스템에서는 책 , 사용자(사용자는 일반 사용자 와 관리자 로 나눌 수도 있음 ) , 책을 보관하기 위한 책장이 있어야 한다는 객체를 생각할 수 있습니다 .

개체를 찾은 후 이를 두 개의 패키지( 책과 책장용, 일반 사용자 및 관리자용 )에 넣습니다.

bookshelf 클래스에서 책의 배열을 만들 수 있는데, 이는 책장에 책을 넣는 것과 같습니다.

package book;

public class BookList {
    public Book[] books;//书架
    public int numBooks;//书架实际存放的书的本书
}

현재로서는 book 클래스의 속성을 private으로 수정할 수도 있습니다. 왜냐하면 앞으로의 모든 작업은 bookshelf를 대상으로 하기 때문입니다. (private 수정을 사용하는 경우 각 속성에 대해 get 및 set 메서드를 구현해야 합니다.)

Book 클래스에는 다음 속성이 포함되어 있습니다.

문자열 이름.

문자열 작성자;

돈이 없네;

문자열 유형;

부울 isBorrow;

다음 방법:

공개 도서(){}; 
public Book(문자열 이름, 문자열 작성자, int 돈, 문자열 종류) {}
public String getName() {} 

public void setName(String name) {} 

public String getAuthor() {} 

public void setAuthor(String 작성자) {} 

public int getMoney() {} 

public void setMoney(int Money) {} 

public String getType() {} 

public void setType(String kind) {} 

​​public boolean getBorrow() {} 

public void setBorrow(boolean rent) {} 

@Override 
public String toString() { 
    return "name='" + name + '\' ' + 
            ", 저자='" + 저자 + '\'' + 
            ", 돈=" + 돈 + 
            ", 종류='" + 유형 + '\'' + 
            ",상태: "+(isBorrow == false ? "빌리지 않음" : "빌려옴"); 
}

ToString은 여기서 System.out.println()을 직접 사용할 수 있도록 다시 작성되었습니다.

일반 사용자와 관리자는 사용자에 속하므로 상속을 사용하면  일반 사용자관리자가 사용자 의 상위 클래스를 상속받을 수 있습니다.

관리자 권한: 일반 사용자 권한:

                                                 

 

이런 식으로 다형성이라는 개념을 이용하여 사용자 클래스를 생성할 수 있으며, 동일한 메소드를 호출해도 참조되는 객체가 다르기 때문에 결과가 달라집니다.

하지만 이제 관리자와 일반 사용자가 인쇄하는 메뉴가 다르기 때문에 부모 클래스에서 구현할 수 없으므로 부모 클래스는 일반 부모 클래스가 될 수 없고 추상 클래스여야 한다는 새로운 문제가 발생 합니다 .

사용자 작업이 너무 많고 반복되는 메서드가 있으므로 새 패키지를 만들어 모두 새 패키지에 넣고 모든 작업을 별도로 클래스로 캡슐화하는 것이 좋습니다.

작업은 사용자에게 속하므로 다음 형식으로 작성됩니다.

//用户类
abstract public class User {
    protected String name;
    protected Work[] work;//存放用户所有的操作
    public int counst; //work中的元素个数
    
}
//管理员
public class AdvancedUser extends User{

    public AdvancedUser(String name){
        this.name = name;
        this.work = new Work[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation()
        };
        this.counst = 5;
    }

}
//普通用户
public class NormalUser extends User {

    public NormalUser(String name){
        this.name = name;
        this.work = new Work[]{
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new RetOperation(),
        };
        this.counst = 4;
    }
    
}

 이 방법으로 배열을 사용하여 메소드를 호출할 수 있습니다.

public void operation(int choice, BookList bookList){

        work[choice].work(bookList);
    }

전체 코드:

package main;

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

import java.util.Scanner;

public class Main {

    public static User login(){
        Scanner in = new Scanner(System.in);
        System.out.println("请输入你的姓名:");
        String name = in.nextLine();
        System.out.println("请选择你的身份:1.管理员    0.普通用户");
        if (in.nextInt() == 1){
            return new AdvancedUser(name);
        }else {
            return new NormalUser(name);
        }
    }

    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();
        while(true){
            int choice;
            do{
                choice = user.menu();
            }while(choice < 0 || choice >= user.counst);

            user.operation(choice, bookList);
        }
    }
}
package book;

public class Book {
    private String name;
    private String author;
    private int money;
    private String type;
    private boolean isBorrow;

    public Book(){};
    public Book(String name, String author, int money, String kind) {
        this.name = name;
        this.author = author;
        this.money = money;
        this.type = kind;
    }

    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 getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    public String getType() {
        return type;
    }

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

    public boolean getBorrow() {
        return isBorrow;
    }

    public void setBorrow(boolean borrow) {
        isBorrow = borrow;
    }

    @Override
    public String toString() {
        return  "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", money=" + money +
                ", kind='" + type + '\'' +
                ", 状态:"+(isBorrow == false ? "未被借出" : "已被借出");
    }
}
package book;

public class BookList {
    public Book[] books;//书架
    public int numBooks;//书架实际存放的书的本书

    public BookList() {
        this.books = new Book[10];
        //默认书架存放两本书
        this.books[0] = new Book("西游记","吴承恩",39,"小说");
        this.books[1] = new Book("红楼梦","曹雪芹",39,"小说");
        this.numBooks = 2;
    }


}

 

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperation extends Work{

    @Override
    public void work(BookList bookList) {
        Scanner in = new Scanner(System.in);
        bookList.books[bookList.numBooks] = new Book();
        System.out.print("请输入书名:");
        bookList.books[bookList.numBooks].setName(in.nextLine());
        System.out.print("请输入作者:");
        bookList.books[bookList.numBooks].setAuthor(in.nextLine());
        System.out.print("请输入所属书类:");
        bookList.books[bookList.numBooks].setType(in.nextLine());
        System.out.print("请输入书价:");
        bookList.books[bookList.numBooks].setMoney(in.nextInt());
        bookList.numBooks++;
    }
}

 

package operation;

import book.BookList;

import java.util.Scanner;

public class BorrowOperation extends Work{

    @Override
    public void work(BookList bookList) {
        int numBooks = bookList.numBooks;

        Scanner in = new Scanner(System.in);
        System.out.print("请输入书名:");
        String name = in.nextLine();

        for (int i = 0; i < numBooks; i++) {
            if (name.equals(bookList.books[i].getName())) {
                if (bookList.books[i].getBorrow() == false){
                    System.out.println("借阅成功");
                    bookList.books[i].setBorrow(true);
                    return;
                }else{
                    System.out.println("该书已被借出");
                    return;
                }
            }
        }
        System.out.println("未收录该书");
    }
}
package operation;

import book.BookList;

import java.util.Scanner;

public class DelOperation extends Work{

    @Override
    public void work(BookList bookList) {
        int numBooks = bookList.numBooks;

        Scanner in = new Scanner(System.in);
        System.out.print("请输入书名:");
        String name = in.nextLine();

        for (int i = 0; i < numBooks; i++) {
            if (name.equals(bookList.books[i].getName())){
                int j = 0;
                for (j = i; j < numBooks-1; j++) {
                    bookList.books[j] = bookList.books[j + 1];
                }
                bookList.books[j] = null;
                bookList.numBooks--;
                return;
            }
        }
    }
}
package operation;

import book.BookList;

public class ExitOperation extends Work{

    @Override
    public void work(BookList bookList) {
        System.exit(0);
    }
}

 

package operation;

import book.BookList;

import java.util.Scanner;

public class FindOperation extends Work{

    @Override
    public void work(BookList bookList) {
        int numBooks = bookList.numBooks;

        Scanner in = new Scanner(System.in);
        System.out.print("请输入书名:");
        String name = in.nextLine();

        for (int i = 0; i < numBooks; i++) {
            if (name.equals(bookList.books[i].getName())) {
                System.out.println(bookList.books[i]);
                return;
            }
        }
        System.out.println("未收录该书");
    }
}
package operation;

import book.BookList;

import java.util.Scanner;

public class RetOperation extends Work{

    @Override
    public void work(BookList bookList) {
        int numBooks = bookList.numBooks;

        Scanner in = new Scanner(System.in);
        System.out.print("请输入书名:");
        String name = in.nextLine();

        for (int i = 0; i < numBooks; i++) {
            if (name.equals(bookList.books[i].getName())) {
                if (bookList.books[i].getBorrow()){
                    System.out.println("归还成功");
                    bookList.books[i].setBorrow(false);
                    return;
                }else{
                    System.out.println("该书未被借出");
                    return;
                }
            }
        }
        System.out.println("未收录该书");
    }
}
package operation;

import book.BookList;

public class ShowOperation extends Work{

    @Override
    public void work(BookList bookList) {
        for (int i = 0; i < bookList.numBooks; i++) {
            System.out.println(bookList.books[i]);
        }
    }
}
package operation;

import book.BookList;

abstract public class Work {
    abstract public void work(BookList bookList);
}
package user;

import operation.*;

import java.util.Scanner;

public class AdvancedUser extends User{

    public AdvancedUser(String name){
        this.name = name;
        this.work = new Work[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation()
        };
        this.counst = 5;
    }

    @Override
    public int menu() {
        System.out.println("###########################");
        System.out.println(" Hello " + "AdvancedUser:" + this.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 in = new Scanner(System.in);
        return in.nextInt();
    }
}

 

package user;

import operation.*;

import java.util.Scanner;

public class NormalUser extends User {

    public NormalUser(String name){
        this.name = name;
        this.work = new Work[]{
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new RetOperation(),
        };
        this.counst = 4;
    }
    @Override
    public int menu() {
        System.out.println("###########################");
        System.out.println(" Hello " + "NormalUser:" + this.name);
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出系统");
        System.out.println("###########################");
        System.out.println("请选择你的操作:");
        Scanner in = new Scanner(System.in);
        return in.nextInt();
    }
}
package user;

import book.BookList;
import operation.Work;

abstract public class User {
    protected String name;
    protected Work[] work;//存放用户所有的操作
    public int counst; //work中的元素个数
    abstract public int menu();

    public void operation(int choice, BookList bookList){
        work[choice].work(bookList);
    }
}

작업 결과:

 

추천

출처blog.csdn.net/2302_76339343/article/details/132167792