java實(shí)現(xiàn)圖書館管理系統(tǒng)
本文實(shí)例為大家分享了java實(shí)現(xiàn)圖書館管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
思路:所有包都在book_manage包里
利用面向?qū)ο蟮亩鄳B(tài)特性去除了很多if-else的判斷,不同的子類在父類所對(duì)應(yīng)的方法不同。
1.首先建立一個(gè)book包
包里面有2個(gè)類,一個(gè)是Book,這個(gè)類里面包含一本書的全部信息
另外一個(gè)類是BookList,這個(gè)類是用來(lái)管理每一個(gè)書,通過(guò)這個(gè)類來(lái)尋找每一本書。
private Book[] books = new Book[100];
Book數(shù)組里面存放所有的書。
2.再建立一個(gè)包Operation 這個(gè)類里面有一個(gè)OI接口,通過(guò)對(duì)接口里面的Work方法重寫,來(lái)實(shí)現(xiàn)管理員身份和普通用戶身份的不同操作。
3.最后建立一個(gè)User包,里面有三個(gè)類,User,Admin,NormalUser
Admin和NormalUser都繼承自User.
User里秒你有一個(gè)數(shù)組
protected IO[] operation;
這個(gè)數(shù)組里面包含了用戶或者管理員所具備的操作。
通過(guò)對(duì)數(shù)組的索引來(lái)確定具體需要調(diào)用的操作方法。
下面來(lái)看看代碼吧:
book包
Book類
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)格式化打印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類
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類
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)輸入書名"); 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)輸入類型"); 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類
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)輸入需要借閱的書名"); 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類
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類
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類
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)輸入需要查找的書名"); String name = scan.next(); for(;i<bookList.getSize();i++){ if(name.equals(bookList.getBook(i).getName())){ count++; } } if(count==0){ System.out.println("不好意思,沒有找到"); } 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類
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類
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("不好意思,沒有此書"); } } }
user包:
User類
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();//該方法被重寫 public void doOperation(int choice, BookList bookList) { operation[choice].work(bookList); } }
Admin類
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. 查找書籍"); System.out.println("2. 增加書籍"); System.out.println("3. 刪除書籍"); 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. 查找圖書"); System.out.println("2. 借閱圖書"); System.out.println("3. 歸還圖書"); 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(); // close 本質(zhì)上是在關(guān)閉 System.in // 由于后面還需要用到 System.in, 此處不能盲目關(guān)閉. // scanner.close(); return choice; } }
最后還有一個(gè)Test類,里面放了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.普通用戶 2.管理員"); int role= scanner.nextInt(); if(role==1){ return new NormalUser(name); } else{ return new Admin(name); } } }
更多學(xué)習(xí)資料請(qǐng)關(guān)注專題《管理系統(tǒng)開發(fā)》。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 圖書管理系統(tǒng)java代碼實(shí)現(xiàn)
- 圖書管理系統(tǒng)java版
- Java+MySQL實(shí)現(xiàn)圖書管理系統(tǒng)(完整代碼)
- 一個(gè)簡(jiǎn)陋的java圖書管理系統(tǒng)
- java實(shí)現(xiàn)簡(jiǎn)單的圖書管理系統(tǒng)
- JAVA初級(jí)項(xiàng)目——實(shí)現(xiàn)圖書管理系統(tǒng)
- java+mysql實(shí)現(xiàn)圖書館管理系統(tǒng)實(shí)戰(zhàn)
- java控制臺(tái)輸出圖書館管理系統(tǒng)
- java實(shí)現(xiàn)圖書管理系統(tǒng)
- Java?Web實(shí)現(xiàn)簡(jiǎn)易圖書管理系統(tǒng)
相關(guān)文章
java開發(fā)AOP基礎(chǔ)JdkDynamicAopProxy
這篇文章主要為大家介紹了java開發(fā)AOP基礎(chǔ)JdkDynamicAopProxy源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07spring aop之@AfterReturning不生效問(wèn)題及解決
這篇文章主要介紹了spring aop之@AfterReturning不生效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Java源碼解析之SortedMap和NavigableMap
今天帶大家來(lái)學(xué)習(xí)Java SortedMap和NavigableMap,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05springmvc?html資源請(qǐng)求404的問(wèn)題解決并分析
這篇文章主要介紹了springmvc?html資源請(qǐng)求404的問(wèn)題解決并分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09簡(jiǎn)單談?wù)刯ava的異常處理(Try Catch Finally)
在程序設(shè)計(jì)中,進(jìn)行異常處理是非常關(guān)鍵和重要的一部分。一個(gè)程序的異常處理框架的好壞直接影響到整個(gè)項(xiàng)目的代碼質(zhì)量以及后期維護(hù)成本和難度。2016-03-03MyEclipse整合ssh三大框架環(huán)境搭載用戶注冊(cè)源碼下載
這篇文章主要為大家詳細(xì)介紹了如何使用MyEclipse整合ssh三大框架進(jìn)行環(huán)境搭載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10SpringMVC+Mysql實(shí)例詳解(附demo)
本篇文章主要介紹了SpringMVC+Mysql實(shí)例詳解(附demo),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。2016-12-12Java Swing實(shí)現(xiàn)窗體添加背景圖片的2種方法詳解
這篇文章主要介紹了Java Swing實(shí)現(xiàn)窗體添加背景圖片的2種方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Swing實(shí)現(xiàn)窗體添加背景圖片的方法,并總結(jié)分析了Swing重繪中repaint與updateUI的區(qū)別,需要的朋友可以參考下2017-11-11RocketMQ中消費(fèi)者的消費(fèi)進(jìn)度管理
這篇文章主要介紹了RocketMQ中消費(fèi)者的消費(fèi)進(jìn)度管理,業(yè)務(wù)實(shí)現(xiàn)消費(fèi)回調(diào)的時(shí)候,當(dāng)且僅當(dāng)此回調(diào)函數(shù)返回ConsumeConcurrentlyStatus.CONSUME_SUCCESS ,RocketMQ才會(huì)認(rèn)為這批消息(默認(rèn)是1條)是消費(fèi)完成的,需要的朋友可以參考下2023-10-10