이 기사에서는 도서관 관리 시스템의 기능 분석, IDEA에서 기능적 클래스 생성, 라이브러리 관리 시스템의 간단한 버전 구현과 관련된 문제를 주로 정리하는 java에 대한 관련 지식을 제공합니다. 사용자 관련 처리 등에 대해 모두에게 도움이 되기를 바랍니다.
추천 학습: "java 비디오 튜토리얼"
먼저 도서관 관리 시스템이 가져야 할 기능을 분석하고 간단한 프레임워크를 구축해 보겠습니다.
(1) 로그인
일반적으로 도서관 관리 시스템은 학생과 사서 두 사람만 사용할 수 있습니다.
이것은 우리 학교 온라인 도서관의 로그인 인터페이스입니다. 학생 검색 도서는 검색할 수 있습니다. 인터넷을 통해 접속
여기서 관리자 로그인 인터페이스는 볼 수 없지만, 시스템 유지관리를 위해 관리자가 로그인할 수 있는 창이 분명 있을 거에요
그래서 로그인할 때 선택하세요. 일반 사용자든 관리자든 상관없습니다.
(2) 분석 기능
간단한 도서관 관리 시스템이 갖춰야 할 기능,
(1) 책의 속성을 표시하는 Book 클래스를 만듭니다.
책을 검색하려면 책에 다음 속성이 있어야 합니다.
private String name;//书名 private String author;//作者 private int price;//价格 private String type;//类型 private boolean isBorrowed;//借阅情况
여기에 참고하세요. book은 모두 비공개이므로 클래스 외부에서 액세스할 수 없습니다.
따라서 속성을 설정하고 가져오기 위해 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 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; }
그런 다음 책의 속성에 대한 생성자 메서드를 제공합니다.
여기서 isBorrowed는 생성 메소드에서 책에 추가되지 않습니다. isBorrowed는 부울 유형이고 기본값은 false입니다. 이는 대출되지 않았음을 의미합니다. 조건이 책이면 기본적으로 빌려주지 않습니다
public Book(String name, String author, int price, String type) { this.name = name; this.author = author; this.price = price; this.type = type; }
마지막으로 책 정보를 표시하는 toString 메소드를 제공합니다
@Override public String toString() { return "BookList{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + ", type='" + type + '\'' + ", isBorrowed=" + isBorrowed + '}'; }
(2) BookList 클래스를 생성합니다. 이것이 책 도서관입니다
도서관이고 책을 보관하기 때문에 책을 보관할 배열을 설정하고
//最多存放20本书 private Book[] books = new Book[20];
현재 책 배열의 책 수를 실시간으로 기록하기 위해 멤버 변수를 제공합니다
private int usedSize;//实时记录 当前Books这个数组中有多少本书
다음은 책을 내부에 보관할 수 있는 구성 방법을 제공할 수 있습니다. 지난 몇 권의 책은
public BookList() { books[0] = new Book("西游记","吴承恩",25,"小说"); books[1] = new Book("红楼梦","曹雪芹",26,"小说"); books[2] = new Book("三国演义","罗贯中",27,"小说"); books[3] = new Book("水浒传","施耐庵",28,"小说"); usedSize = 4;//当前有4本书 }
방법을 제공하고, 법적 배열 첨자를 지정하면 이 책을 찾을 수 있습니다.
public Book getBook(int pos) { return books[pos]; }
방법을 제공하고, 법적 배열 첨자를 지정하면, 그리고 책을 저장할 수 있습니다. 이 책을 도서관에 추가하세요
public void setBooks(int pos,Book book) { books[pos] = book; }
매개변수를 제공하여 현재 책장에 있는 책의 수를 실시간으로 수정하는 방법을 제공하세요
public void setUsedSize(int size) { usedSize = size; }
( 1) IOperation 인터페이스를 생성하여 배열에 대한 작업 참조를 구현합니다
관리자이든 일반 사용자이든 책에 대한 작업은 BookList 클래스의 books 배열에서 수행됩니다. ,
배열에 대한 연산을 구현하기 위한 IOperation 인터페이스를 제공할 수 있도록,
public interface IOperation { /* * 对书的所有操作都是通过BookList类里面的books数组进行操作 * 可以将这个写成一个接口 **/ void work(BookList bookList); }
(2) 책에 대한 모든 연산을 구현하기 위한 다양한 클래스를 생성합니다
예를 들어 일반 사용자와 관리자는 책을 표시해야 합니다. 디스플레이는 효과이므로
일반 사용자와 관리자가 호출할 수 있는 클래스만 작성하면 됩니다.
함께 이런 수업을 만들어 보세요.
然后就可以对这些类引用接口了,再重写一下
比如新增图书
public class AddOperation implements IOperation { @Override public void work(BookList bookList) { System.out.println("新增图书!"); } }
也就是对普通用户和管理员进行处理
(1)创建一个user的包,在包中创建一个类
这里只创建一个类,是因为对于普通用户和管理员来说,他们两个都是用户
所以创建一个成员变量,来表示用户
//写protected是后面要继承 protected String name;//用户名
下面提供一个构造方法对其初始化
//提供一个构造方法,用来初始化当前对象name属性 public User(String name) { this.name = name; }
(2)在user包中再创建两个类
子类NormalUser继承父类User,提供一个构造方法来显示帮助父类进行构造
public class NormalUser extends User{ public NormalUser(String name) { super(name); } }
子类AdminUser继承父类User和前面一样
下来就是打印菜单了,根据两个用户所需功能进行打印菜单
先看AdminUser管理员的
public int menu() { System.out.println("hello " + 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("请输入你的操作:"); Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt(); return choice; //因为这个是个菜单,所以要把这个输入的值传出去,才能使用 }
再看NormalUser普通用户的
System.out.println("hello " + this.name + "欢迎进入图书管理系统!"); System.out.println("1.查找图书!"); System.out.println("2.借阅图书!"); System.out.println("3.归还图书!"); System.out.println("0.退出系统!"); System.out.println("请输入你的操作:"); Scanner scanner = new Scanner(System.in); int choice = scanner.nextInt(); return choice; //因为这个是个菜单,所以要把这个输入的值传出去,才能使用
(3)单独创建一个Main的类,将前面所有整合起来
菜单用户都有了,下面就是要把这些都整合起来,
先准备图书
BookList bookList = new BookList();//准备图书
结下来就是登录了,
先写一个判断你是普通用户还是管理员的方法
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); } }
注意观察这段代码,返回类型是User,这是因为不论if中返回是AdminUser还是NormalUser,User作为父类都可以接收,这个过程就发生了向上转型
然后再在main方法中引用这个login()方法,就可以实现选择登录了
//登录-》user这个引用 引用哪个对象看前面if User user = login();
选择完你是哪种用户后,就打印对应功能菜单
但是注意,刚刚把菜单写在了对应子类中去了
如果现在要在父类中访问,是访问不了的,所以就要在父类中也引用出菜单
public abstract class User { //写protected是后面要继承 protected String name;//用户名 //提供一个构造方法,用来初始化当前对象name属性 public User(String name) { this.name = name; } public abstract int menu(); }
看代码中,只需将父类写成抽象类,然后在抽象类中,引出抽象方法的菜单,
就可以在Main类中通过父类访问到菜单,这就实现了动态绑定
public static void main(String[] args) { //开始整合 BookList bookList = new BookList();//准备图书 //登录-》user这个引用 引用哪个对象看前面if User user = login(); user.menu();//动态绑定 //要想访问子类中的菜单,那就要将父类写成抽象类, //然后子类重写父类的方法,才可以访问菜单 } }
然后此时代码就可以运行了
先在User中写一个方法,这个方法的作用是
通过某个用户,访问这个用户对应方法功能的数组下标,然后通过调用work方法,来实现功能
public void doOperation(int choice, BookList bookList) { this.iOperations[choice].work(bookList); }
然后在mian中,通过选择用户引用这个方法
public static void main(String[] args) { //开始整合 BookList bookList = new BookList();//准备图书 //登录-》user这个引用 引用哪个对象看前面if User user = login(); int choice = user.menu();//动态绑定 user.doOperation(choice,bookList); }
细节可以看这个图片
下面来看一下具体细节分析
(1)mian函数先调用
(2)现在user引用,有可能是两个对象
(3)
当引用doOperation时,根据菜单选择来访问数组元素
(4)具体选择哪个用户根据,前面login()中输入的选择对象
(5)根据前面选择需要的功能,调用work方法
比如这个
现在已经整合完成了,就差具体操作功能实现了,先运行代码试试
代码成功运行起来了,但是就用了一个功能就结束了,
所以我们可以加一个循环,来使用多个功能
public static void main(String[] args) { //开始整合 BookList bookList = new BookList();//准备图书 //登录-》user这个引用 引用哪个对象看前面if User user = login(); while(true){ int choice = user.menu();//动态绑定 user.doOperation(choice,bookList); } }
(1)新增图书 AppOperation类
新增一本图书我们需要考虑输入这些
不用考虑isBorrowed 因为默认状态是未被借出的
将这些属性进行输入
Scanner scanner = new Scanner(System.in); System.out.println("请输入图书的名字:"); String name = scanner.nextLine(); System.out.println("请输入图书的作者:"); String author = scanner.nextLine(); System.out.println("请输入图书的价格:"); int price = scanner.nextInt(); System.out.println("请输入图书的类型:"); String type = scanner.nextLine();
然后将这些属性存放到new Book中
Book book = new Book(name,author,price,type);
获取当前下标,然后赋给currentSize,将前面输入的那本书放到数组下标为currentSize中,
然后给 currentSize加1
int currentSize = bookList.getUsedSize(); bookList.setBooks(currentSize,book); bookList.getUsedSize(currentSize+1);
运行一下,试试看
新增图书 AppOperation类的所有代码
public class AddOperation implements IOperation { @Override public void work(BookList bookList) { System.out.println("新增图书!"); Scanner scanner = new Scanner(System.in); System.out.println("请输入图书的名字:"); 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,price,type); int currentSize = bookList.getUsedSize(); bookList.setBooks(currentSize,book); bookList.getUsedSize(currentSize+1); System.out.println("新增书籍成功!"); } }
(2)借阅图书 orrowOperation类
先输入要借阅图书的名字
Scanner scanner = new Scanner(System.in); System.out.println("请输入借阅图书的名字:"); String name = scanner.nextLine();
通过for循环遍历一遍,然后将遍历的每一本书赋给变量 book ,
再通过equals,来判断book和输入的书的名字是否相同,
如果相同就通过setBorrowed修改此时借阅状态,显示借阅成功
如果不同就显示没有这本书
int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ book.setBorrowed(true); System.out.println("借阅成功!"); return; } } System.out.println("没有这本书!");
运行一下,试试看
借阅图书 orrowOperation类的所有代码
public class BorrowOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("借阅图书!"); Scanner scanner = new Scanner(System.in); System.out.println("请输入借阅图书的名字:"); String name = scanner.nextLine(); int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ book.setBorrowed(true); System.out.println("借阅成功!"); return; } } System.out.println("没有这本书!"); } }
(3)删除图书 DelOperation类
输入删除图书的名字
Scanner scanner = new Scanner(System.in); System.out.println("请输入删除图书的名字:"); String name = scanner.nextLine();
找到图书,然后删除
int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ for (int j = i; j < currentSize; j++) { bookList.getBook(j); } bookList.getUsedSize(currentSize-1);//不要忘记更新图书种类 bookList.getUsedSize(currentSize-1); System.out.println("删除成功!"); return; } } System.out.println("没有找到要删除的图书!");
运行程序,试试看
删除图书 DelOperation类的全部代码
public class DelOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("删除图书!"); Scanner scanner = new Scanner(System.in); System.out.println("请输入删除图书的名字:"); String name = scanner.nextLine(); int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ for (int j = i; j < currentSize; j++) { bookList.getBook(j); } bookList.getUsedSize(currentSize-1);//不要忘记更新图书种类 bookList.getUsedSize(currentSize-1); System.out.println("删除成功!"); return; } } System.out.println("没有找到要删除的图书!"); } }
(4)显示图书 DisplayOperation类
将当前有几本书记录下来
int currentSize = bookList.getUsedSize();
然后for循环全部遍历一遍就可以了 ,直接看代码吧
public class DisplayOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("显示图书!"); int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { System.out.println(bookList.getBook(i)); } } }
运行结果就是这样
(5)退出系统 ExitOperation类
直接调用状态码exit来退出系统
public class ExitOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("退出系统!"); System.exit(0); } }
(6)查找图书 FindOperation类
要查找图书,肯定是先要输入你需要查找书的名字
Scanner scanner = new Scanner(System.in); System.out.println("请输入图书的名字:"); String name = scanner.nextLine();
通过for循环遍历一遍,然后将遍历的每一本书赋给变量 book ,
再通过equals,来判断book和输入的书的名字是否相同,
如果相同就打印,并显示找到了,如果不相同,就直接显示没有找到,
但这里有一个问题在前面给每一本书默认都是false,现在打印还是这样,所以要修改一下
在Book类中,修改toString,给借阅状态一个三目运算符,来判断是否借出了
@Override public String toString() { return "Book{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + ", type='" + type + '\'' + ((isBorrowed == true)?" 已经借出":" 未借出")+ '}'; }
运行一下,试试
查找图书 FindOperation类的全部代码就是
public class FindOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("查找图书!"); Scanner scanner = new Scanner(System.in); System.out.println("请输入图书的名字:"); String name = scanner.nextLine(); int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ System.out.println("这本书找到了!"); System.out.println(book); return; } } System.out.println("这本书没有找到!"); } }
(7)归还图书 ReturnOperation类
先输入要归还图书的名字
Scanner scanner = new Scanner(System.in); System.out.println("请输入归还图书的名字:"); String name = scanner.nextLine();
和前面借阅基本一样,修改一下setBorrowed的状态就可以了
int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ book.setBorrowed(false); System.out.println("归还成功!"); return; } }
运行代码,试试看
<br>
归还图书 ReturnOperation类的全部代码
public class ReturnOperation implements IOperation{ @Override public void work(BookList bookList) { System.out.println("归还图书!"); Scanner scanner = new Scanner(System.in); System.out.println("请输入归还图书的名字:"); String name = scanner.nextLine(); int currentSize = bookList.getUsedSize(); for (int i = 0; i < currentSize; i++) { Book book = bookList.getBook(i); if(book.getName().equals(name)){ book.setBorrowed(false); System.out.println("归还成功!"); return; } } } }
推荐学习:《java视频教程》
위 내용은 Java로 간단한 버전의 도서관 관리 시스템을 구현하는 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!