java實(shí)現(xiàn)圖書(shū)館管理系統(tǒng)
本文實(shí)例為大家分享了java實(shí)現(xiàn)圖書(shū)館管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
思路:所有包都在book_manage包里
利用面向?qū)ο蟮亩鄳B(tài)特性去除了很多if-else的判斷,不同的子類(lèi)在父類(lèi)所對(duì)應(yīng)的方法不同。
1.首先建立一個(gè)book包
包里面有2個(gè)類(lèi),一個(gè)是Book,這個(gè)類(lèi)里面包含一本書(shū)的全部信息
另外一個(gè)類(lèi)是BookList,這個(gè)類(lèi)是用來(lái)管理每一個(gè)書(shū),通過(guò)這個(gè)類(lèi)來(lái)尋找每一本書(shū)。
private Book[] books = new Book[100];
Book數(shù)組里面存放所有的書(shū)。
2.再建立一個(gè)包Operation 這個(gè)類(lèi)里面有一個(gè)OI接口,通過(guò)對(duì)接口里面的Work方法重寫(xiě),來(lái)實(shí)現(xiàn)管理員身份和普通用戶(hù)身份的不同操作。
3.最后建立一個(gè)User包,里面有三個(gè)類(lèi),User,Admin,NormalUser
Admin和NormalUser都繼承自User.
User里秒你有一個(gè)數(shù)組
protected IO[] operation;
這個(gè)數(shù)組里面包含了用戶(hù)或者管理員所具備的操作。
通過(guò)對(duì)數(shù)組的索引來(lái)確定具體需要調(diào)用的操作方法。
下面來(lái)看看代碼吧:
book包
Book類(lèi)
package book_manager.book;
public class Book {
private String name;
private String id;
private String author;
private int price;
private String type;
private boolean isBorrow;
public Book(String name, String id, String author, int price,
String type, boolean isBorrow) {
this.name = name;
this.id = id;
this.author = author;
this.price = price;
this.type = type;
this.isBorrow = isBorrow;
}
@Override //Object中內(nèi)置的類(lèi),用來(lái)格式化打印book的信息
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", isBorrow=" + isBorrow +
'}';
}
public String getName(){
return name;
}
public boolean isBorrow(){
return isBorrow;
}
public void setBorrow(boolean bool){
this.isBorrow=bool;
}
public String getId(){
return id;
}
}
BookList類(lèi)
package book_manager.book;
import java.util.Arrays;
public class BookList {
private Book[] books = new Book[100];
private int size;
public BookList(){
books[0] = new Book("金瓶梅",
"001", "蘭陵笑笑生", 100,
"古典名著", false);
books[1] = new Book("水滸傳",
"002", "施耐庵", 100,
"古典名著", false);
books[2] = new Book("西游記",
"003", "吳承恩", 100,
"古典名著", false);
size = 3;
}
public int getSize(){
return size;
}
public void setBooks(int index,Book book){
books[index]=book;
}
public void setSize(int size){
this.size=size;
}
public Book getBook(int index){
return books[index];
}
}
Operation包:
ADD類(lèi)
package book_manager.Operation;
import book_manager.book.*;
import java.util.Scanner;
public class ADD implements IO{
@Override
public void work(BookList bookList) {
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入書(shū)名");
String name =scanner.next();
System.out.println("請(qǐng)輸入序號(hào)");
String id = scanner.next();
System.out.println("請(qǐng)輸入作者");
String author =scanner.next();
System.out.println("請(qǐng)輸入價(jià)格");
int price = scanner.nextInt();
System.out.println("請(qǐng)輸入類(lèi)型");
String type = scanner.next();
Book book = new Book(name, id,
author, price, type, false);
bookList.setBooks(bookList.getSize(),book);
bookList.setSize(bookList.getSize()+1);
System.out.println("添加成功");
}
}
Borrow類(lèi)
package book_manager.Operation;
import book_manager.book.Book;
import book_manager.book.BookList;
import java.util.Scanner;
public class Borrow implements IO{
@Override
public void work(BookList bookList) {
int i=0;
int flag=0;
Scanner scan = new Scanner(System.in);
System.out.println("請(qǐng)輸入需要借閱的書(shū)名");
String name = scan.next();
for(;i<bookList.getSize();i++){
if(name.equals(bookList.getBook(i).getName())){
if(bookList.getBook(i).isBorrow()==false){
System.out.println("借閱成功");
flag=1;
bookList.getBook(i).setBorrow(true);
}
}
}
if(flag==0){
System.out.println("不好意思,借閱失敗");
}
}
}
Delete類(lèi)
package book_manager.Operation;
import book_manager.book.BookList;
import java.util.Scanner;
public class Delete implements IO{
public void work(BookList bookList){
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入想要?jiǎng)h除的編號(hào)");
String id = scanner.next();
for(int i=0;i<bookList.getSize();i++){
if(bookList.getBook(i).getId().equals(id)){
bookList.setBooks(i,bookList.getBook(bookList.getSize()));
bookList.setSize(bookList.getSize()-1);
System.out.println("刪除成功");
}
else{
System.out.println("刪除失敗");
}
}
}
}
Exit類(lèi)
package book_manager.Operation;
import book_manager.book.BookList;
public class Exit implements IO{
@Override
public void work(BookList bookList) {
System.out.println("退出成功");
System.exit(0);
}
}
Find類(lèi)
package book_manager.Operation;
import book_manager.book.BookList;
import java.util.Scanner;
public class Find implements IO{
@Override
public void work(BookList bookList) {
int i=0;
int count=0;
Scanner scan = new Scanner(System.in);
System.out.println("請(qǐng)輸入需要查找的書(shū)名");
String name = scan.next();
for(;i<bookList.getSize();i++){
if(name.equals(bookList.getBook(i).getName())){
count++;
}
}
if(count==0){
System.out.println("不好意思,沒(méi)有找到");
}
else{
System.out.println("找到了,共計(jì)"+count+"本");
}
}
}
IO接口
package book_manager.Operation;
import book_manager.book.BookList;
public interface IO {
abstract public void work(BookList bookList);
}
PrintAll類(lèi)
package book_manager.Operation;
import book_manager.book.BookList;
public class PrintAll implements IO{
@Override
public void work(BookList bookList) {
for(int i=0;i<bookList.getSize();i++){
System.out.println(bookList.getBook(i));
}
}
}
Return類(lèi)
package book_manager.Operation;
import book_manager.book.BookList;
import java.util.Scanner;
public class Return implements IO{
@Override
public void work(BookList bookList) {
int i=0;
int flag=0;
Scanner scan = new Scanner(System.in);
System.out.println("請(qǐng)輸入需要?dú)w還的ID");
String id = scan.next();
for(;i<bookList.getSize();i++){
if(id.equals(bookList.getBook(i).getId())){
if(bookList.getBook(i).isBorrow()==true){
System.out.println("歸還成功");
bookList.getBook(i).setBorrow(false);
flag=1;
}
else{
System.out.println("歸還失敗");
}
}
}
if(flag==0){
System.out.println("不好意思,沒(méi)有此書(shū)");
}
}
}
user包:
User類(lèi)
package book_manager.user;
import book_manager.Operation.*;
import book_manager.Operation.IO;
import book_manager.book.BookList;
abstract public class User {
String name;
protected IO[] operation;
public User(String name){
this.name=name;
}
abstract public int menu();//該方法被重寫(xiě)
public void doOperation(int choice, BookList bookList) {
operation[choice].work(bookList);
}
}
Admin類(lèi)
package book_manager.user;
import book_manager.Operation.*;
import java.util.Scanner;
public class Admin extends User{
public Admin(String name){
super(name);
operation=new IO[]{
new Exit(),
new Find(),
new ADD(),
new Delete(),
new PrintAll(),
};
}
public int menu() {
System.out.println("============");
System.out.println("hello " + name);
System.out.println("1. 查找書(shū)籍");
System.out.println("2. 增加書(shū)籍");
System.out.println("3. 刪除書(shū)籍");
System.out.println("4. 打印所有信息");
System.out.println("0. 退出");
System.out.println("============");
System.out.println("請(qǐng)輸入您的選擇: ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
return choice;
}
}
NormalUser
package book_manager.user;
import book_manager.Operation.*;
import java.util.Scanner;
public class NormalUser extends User{
public NormalUser(String name){
super(name);
operation=new IO[]{
new Exit(),
new Find(),
new Borrow(),
new Return(),
new PrintAll()
};
}
public int menu() {
System.out.println("============");
System.out.println("hello " + name);
System.out.println("1. 查找圖書(shū)");
System.out.println("2. 借閱圖書(shū)");
System.out.println("3. 歸還圖書(shū)");
System.out.println("4. 查看全部書(shū)籍");
System.out.println("0. 退出");
System.out.println("============");
System.out.println("請(qǐng)輸入您的選擇: ");
Scanner scanner = new Scanner(System.in);
int choice = scanner.nextInt();
// close 本質(zhì)上是在關(guān)閉 System.in
// 由于后面還需要用到 System.in, 此處不能盲目關(guān)閉.
// scanner.close();
return choice;
}
}
最后還有一個(gè)Test類(lèi),里面放了main函數(shù)
package book_manager;
import book_manager.book.BookList;
import book_manager.user.Admin;
import book_manager.user.NormalUser;
import book_manager.user.User;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
BookList list = new BookList();
User user = login();
//通過(guò)不同的choice和身份調(diào)用不同的Operation方法
while(true){
int choice = user.menu();
user.doOperation(choice, list);
}
}
public static User login(){
Scanner scanner = new Scanner(System.in);
System.out.println("請(qǐng)輸入你的姓名");
String name = scanner.next();
System.out.println("請(qǐng)輸入你的身份");
System.out.println("1.普通用戶(hù) 2.管理員");
int role= scanner.nextInt();
if(role==1){
return new NormalUser(name);
}
else{
return new Admin(name);
}
}
}
更多學(xué)習(xí)資料請(qǐng)關(guān)注專(zhuān)題《管理系統(tǒng)開(kāi)發(fā)》。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 圖書(shū)管理系統(tǒng)java代碼實(shí)現(xiàn)
- 圖書(shū)管理系統(tǒng)java版
- Java+MySQL實(shí)現(xiàn)圖書(shū)管理系統(tǒng)(完整代碼)
- 一個(gè)簡(jiǎn)陋的java圖書(shū)管理系統(tǒng)
- java實(shí)現(xiàn)簡(jiǎn)單的圖書(shū)管理系統(tǒng)
- JAVA初級(jí)項(xiàng)目——實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
- java+mysql實(shí)現(xiàn)圖書(shū)館管理系統(tǒng)實(shí)戰(zhàn)
- java控制臺(tái)輸出圖書(shū)館管理系統(tǒng)
- java實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
- Java?Web實(shí)現(xiàn)簡(jiǎn)易圖書(shū)管理系統(tǒng)
相關(guān)文章
Apache Dubbo的SPI機(jī)制是如何實(shí)現(xiàn)的
SPI全稱(chēng)為Service Provider Interface,對(duì)應(yīng)中文為服務(wù)發(fā)現(xiàn)機(jī)制。SPI類(lèi)似一種可插拔機(jī)制,首先需要定義一個(gè)接口或一個(gè)約定,然后不同的場(chǎng)景可以對(duì)其進(jìn)行實(shí)現(xiàn),調(diào)用方在使用的時(shí)候無(wú)需過(guò)多關(guān)注具體的實(shí)現(xiàn)細(xì)節(jié)。在Java中,SPI體現(xiàn)了面向接口編程的思想,滿(mǎn)足開(kāi)閉設(shè)計(jì)原則。2021-06-06
PowerJob的QueryConvertUtils工作流程源碼解讀
這篇文章主要為大家介紹了PowerJob的QueryConvertUtils工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
microlog4android將Android Log日志寫(xiě)到SD卡文件中實(shí)現(xiàn)方法
這篇文章主要介紹了microlog4android將Android Log日志寫(xiě)到SD卡文件中實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2016-10-10
記一次集成swagger2(Knife4j)在線(xiàn)文檔提示:Knude4j文檔請(qǐng)求異常的解決辦法
Knife4j是一個(gè)集Swagger2 和 OpenAPI3為一體的增強(qiáng)解決方案,下面這篇文章主要給大家介紹了關(guān)于一次集成swagger2(Knife4j)在線(xiàn)文檔提示:Knude4j文檔請(qǐng)求異常的解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
如何將SpringBoot項(xiàng)目打成?war?包并部署到Tomcat
這篇文章主要介紹了如何將SpringBoot項(xiàng)目?打成?war?包?并?部署到?Tomcat,當(dāng)前環(huán)境是windows,tomcat版本是8.5采用的springboot版本是2.2.3,本文結(jié)合實(shí)例代碼給大家詳細(xì)講解需要的朋友可以參考下2022-11-11
java使用泛型實(shí)現(xiàn)棧結(jié)構(gòu)示例分享
泛型是Java SE5.0的重要特性,使用泛型編程可以使代碼獲得最大的重用。由于在使用泛型時(shí)要指明泛型的具體類(lèi)型,這樣就避免了類(lèi)型轉(zhuǎn)換。本實(shí)例將使用泛型來(lái)實(shí)現(xiàn)一個(gè)棧結(jié)構(gòu),并對(duì)其進(jìn)行測(cè)試2014-03-03
Java使用Jasypt進(jìn)行加密和解密的技術(shù)指南
Jasypt (Java Simplified Encryption) 是一個(gè)簡(jiǎn)化 Java 應(yīng)用中加密工作的庫(kù),它支持加密和解密操作,易于與 Spring Boot 集成,通過(guò) Jasypt,可以安全地管理敏感信息,比如數(shù)據(jù)庫(kù)密碼、API 密鑰等,本文介紹了Java使用Jasypt進(jìn)行加密和解密的技術(shù)指南,需要的朋友可以參考下2025-03-03
Java三個(gè)類(lèi)加載器及它們的相互關(guān)系
Java在需要使用類(lèi)別的時(shí)候,才會(huì)將類(lèi)別加載,Java的類(lèi)別載入是由類(lèi)別載入器(Class loader)來(lái)達(dá)到的,預(yù)設(shè)上,在程序啟動(dòng)之后,主要會(huì)有三個(gè)類(lèi)別加載器,文中詳細(xì)介紹了這三個(gè)類(lèi)加載器,需要的朋友可以參考下2021-06-06
關(guān)于Spring中的@Configuration中的proxyBeanMethods屬性
這篇文章主要介紹了關(guān)于Spring中的@Configuration中的proxyBeanMethods屬性,需要的朋友可以參考下2023-07-07

