파일이 너무 많기 때문에 각 파일 간의 관계는 다음과 같습니다( 각 파일에는 하나의 클래스만 있습니다 ).
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);
}
}
작업 결과: