Java快速實(shí)現(xiàn)圖書(shū)管理基本功能
前言
今天的內(nèi)容主要是利用前面所學(xué)的知識(shí)點(diǎn):類(lèi),抽象類(lèi),封裝,繼承,多態(tài),接口等進(jìn)行的一個(gè)簡(jiǎn)單的代碼練習(xí)。
主要要求:
1、用戶登錄
2、管理端
- 查找圖書(shū)
- 新增圖書(shū)
- 刪減圖書(shū)
- 顯示圖書(shū)列表
- 退出系統(tǒng)
3、用戶端
- 查找圖書(shū)
- 借閱圖書(shū)
- 歸還圖書(shū)
- 退出系統(tǒng)
我們可以將以上內(nèi)容分為對(duì)書(shū)的創(chuàng)建初始化,對(duì)用戶的操作,對(duì)書(shū)的操作。
主函數(shù)
Main:(對(duì)所有流程進(jìn)行整合)
import book.BookList; import User.NormalUser; import User.AdminUser; import User.user; import java.util.Scanner; public class Main { public static user login(){ System.out.print("請(qǐng)輸入你的姓名:"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); System.out.println("請(qǐng)選擇你的身份:1->管理員 0->普通用戶"); int choice=scanner.nextInt(); if(choice==1){ return new AdminUser(name); }else{ return new NormalUser(name); } } public static void main(String[] args) { BookList bookList = new BookList(); user us = login();//向上轉(zhuǎn)型 while (true) { int choice = us.menu();//多態(tài)綁定 us.doWork(choice, bookList); } } }
書(shū)的創(chuàng)建
Book:
package book; //創(chuàng)建圖書(shū) public class Book { private String name;//書(shū)名 private String author;//書(shū)的作者 private String type;//書(shū)的類(lèi)型 private int price;//書(shū)的價(jià)格 boolean isBorrowed;//書(shū)是否被借出 //在這里我們就不對(duì)isBorrowed進(jìn)行構(gòu)造,在最后打印的時(shí)候?qū)λM(jìn)行判斷就好 public Book(String name, String author, String type, int price) { this.name = name; this.author = author; this.type = type; this.price = price; } 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 String getType() { return type; } public void setType(String type) { this.type = type; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public boolean isBorrowed() { return isBorrowed; } public void setBorrowed(boolean borrowed) { isBorrowed = borrowed; } @Override public String toString() { return "Book{" + "name='" + name + '\'' + ", author='" + author + '\'' + ", type='" + type + '\'' + ", price=" + price + ((isBorrowed==true)?" 已被借出":" 未被借出") + '}'; } }
BookList:
package book; //創(chuàng)建書(shū)架 public class BookList { private Book[] books=new Book[10];//創(chuàng)建一個(gè)數(shù)組當(dāng)書(shū)架放書(shū),假設(shè)一共可以放10本 public int usedSize;//書(shū)架上有效放書(shū)數(shù) public BookList(){//假設(shè)一開(kāi)始書(shū)架上就放了三本書(shū) books[0]=new Book("紅樓夢(mèng)","曹雪芹","文學(xué)",55); books[1]=new Book("西游記","吳承恩","文學(xué)",65); books[2]=new Book("水滸傳","施耐庵","文學(xué)",23); usedSize=3; } public int getUsedSize(){ return usedSize; } public void setUsedSize(int usedSize){ this.usedSize=usedSize; } //獲取一本書(shū)的位置 public Book getpos(int pos){ return this.books[pos]; } //在下標(biāo)為pos的位置上放一本書(shū)(添加) public void setBook(int pos,Book book){ this.books[pos]=book; } }
對(duì)用戶的操作
創(chuàng)建用戶user類(lèi):
package User; import book.BookList; import operation.IOperation; public abstract class user { protected String name; protected IOperation[] iOperations;//創(chuàng)建操作類(lèi)數(shù)組,通過(guò)返回的數(shù)字用于對(duì)書(shū)的操作 public user(String name){ this.name=name; } public abstract int menu();//用于動(dòng)態(tài)綁定 public void doWork(int choice, BookList bookList){ iOperations[choice].work(bookList); } }
創(chuàng)建管理員用戶類(lèi)AdminUser ,是 user 的子類(lèi).
package User; import operation.*; import java.util.Scanner; public class AdminUser extends user { public AdminUser(String name) { super(name); this.iOperations=new IOperation[]{//初始化數(shù)組,將菜單上的數(shù)字與對(duì)應(yīng)的操作放好 new ExitOperation(), new FindOperation(), new AddOperation(), new DelOperation(), new DisplayOperation() }; } public int menu(){ System.out.println("========管理員的菜單========"); System.out.println("歡迎"+this.name+"來(lái)到圖書(shū)館"); System.out.println("1.查找圖書(shū)"); System.out.println("2.新增圖書(shū)"); System.out.println("3.刪減圖書(shū)"); System.out.println("4.顯示圖書(shū)"); System.out.println("0.查退出系統(tǒng)"); System.out.println("==========================="); System.out.print("請(qǐng)選擇你要的操作: "); Scanner scanner=new Scanner(System.in); int choice=scanner.nextInt(); return choice;//返回選擇的數(shù)字 } }
創(chuàng)建普通用戶類(lèi)NormalUser, 是 user 的子類(lèi).
package User; import operation.*; import java.util.Scanner; public class NormalUser extends user { public NormalUser(String name){ super(name); this.iOperations=new IOperation[]{ new ExitOperation(), new FindOperation(), new BorrowOperation(), new ReturnOperation() }; } public int menu(){ System.out.println("========普通用戶的菜單========"); System.out.println("歡迎"+this.name+"來(lái)到圖書(shū)館"); System.out.println("1.查找圖書(shū)"); System.out.println("2.借閱圖書(shū)"); System.out.println("3.歸還圖書(shū)"); System.out.println("0.退出系統(tǒng)"); System.out.println("============================"); System.out.print("請(qǐng)選擇你要的操作: "); Scanner scanner=new Scanner(System.in); int choice=scanner.nextInt(); return choice; } }
對(duì)書(shū)的操作
創(chuàng)建接口 IOperation:
package operation; import book.BookList; import java.util.Scanner; public interface IOperation { Scanner scanner=new Scanner(System.in); void work(BookList bookList); }
創(chuàng)建增加圖書(shū)類(lèi)AddOperation,繼承接口 IOperation
package operation; import book.Book; import book.BookList; import java.util.Scanner; public class AddOperation implements IOperation{ public void work(BookList bookList){ System.out.println("新增圖書(shū)!"); System.out.println("請(qǐng)輸入圖書(shū)的名字:"); String name = scanner.nextLine(); System.out.println("請(qǐng)輸入圖書(shū)的作者:"); String author = scanner.nextLine(); System.out.println("請(qǐng)輸入圖書(shū)的類(lèi)型:"); String type = scanner.nextLine(); System.out.println("請(qǐng)輸入圖書(shū)的價(jià)格:"); int price = scanner.nextInt(); Book book=new Book(name,author,type,price);//新創(chuàng)建一本書(shū) int size= bookList.getUsedSize(); bookList.setBook(size,book); bookList.setUsedSize(size+1); System.out.println("新增圖書(shū)成功"); } }
創(chuàng)建刪減圖書(shū)類(lèi)DelOperation,繼承接口 IOperation
package operation; import book.Book; import book.BookList; public class DelOperation implements IOperation{ public void work(BookList bookList){ System.out.println("刪減圖書(shū)"); System.out.println("請(qǐng)輸入要?jiǎng)h減圖書(shū)的名字:"); String name=scanner.nextLine(); int size= bookList.getUsedSize(); int index=0; int i=0; for (i = 0; i <size ; i++) { Book book = bookList.getpos(i); if(name.equals(book.getName())) { index=i; break; } } if(i>=size){ System.out.println("沒(méi)有你要?jiǎng)h除的圖書(shū)"); } //刪除就是要將j+1下標(biāo)的信息放進(jìn)j下標(biāo)里面信息去,這樣子j里面的信息就被刪除了 for (int j = index; j < size-1; j++) { Book book=bookList.getpos(j+1);//獲取j+1下標(biāo)放的書(shū)的信息給j下標(biāo) bookList.setBook(j,book); } bookList.setBook(size,null);//刪除之后,把最后一個(gè)下標(biāo)信息置為null bookList.setUsedSize(size-1);//下標(biāo)減1 System.out.println("刪除成功"); } }
創(chuàng)建查找圖書(shū)類(lèi)FindOperation,繼承接口 IOperation
package operation; import book.BookList; import book.Book; public class FindOperation implements IOperation{ public void work(BookList bookList){ System.out.println("查找圖書(shū)!"); System.out.println("請(qǐng)輸入要查找書(shū)的名字"); String name = scanner.nextLine(); int size = bookList.getUsedSize(); for (int i = 0; i < size; i++) { Book book = bookList.getpos(i);//找到這本書(shū)的信息 if(name.equals(book.getName())) {//比較名字是否相同 System.out.println("找到了這本書(shū),信息如下:"); System.out.println(book); return; } } System.out.println("沒(méi)有找到這本書(shū)!"); } }
創(chuàng)建顯示圖書(shū)列表類(lèi)DisplayOperation,繼承接口 IOperation
package operation; import book.Book; import book.BookList; public class DisplayOperation implements IOperation{ public void work(BookList bookList){ System.out.println("顯示圖書(shū)"); for(int i=0;i<bookList.usedSize;i++){ Book book=bookList.getpos(i); System.out.println(book); } } }
創(chuàng)建借閱圖書(shū)列表類(lèi)BorrowOperation,繼承接口 IOperation
package operation; import book.Book; import book.BookList; public class BorrowOperation implements IOperation{ public void work(BookList bookList){ System.out.println("借閱圖書(shū)"); System.out.println("請(qǐng)輸入你要借閱的圖書(shū)的名字"); String name=scanner.nextLine(); int size= bookList.getUsedSize(); for(int i=0;i<size;i++){ Book book = bookList.getpos(i); if(name.equals(book.getName())) { book.setBorrowed(true); System.out.println("借閱成功"); System.out.println(book); return; } } System.out.println("沒(méi)有你要借閱的書(shū)"); } }
創(chuàng)建歸還圖書(shū)列表類(lèi)ReturnOperation,繼承接口 IOperation
package operation; import book.Book; import book.BookList; public class ReturnOperation implements IOperation{ public void work(BookList bookList){ System.out.println("歸還圖書(shū)"); System.out.println("請(qǐng)輸入你要?dú)w還的圖書(shū)的名字"); String name=scanner.nextLine(); int size= bookList.getUsedSize(); for(int i=0;i<size;i++){ Book book = bookList.getpos(i); if(name.equals(book.getName())) { book.setBorrowed(true); System.out.println("歸還成功"); System.out.println(book); return; } } System.out.println("沒(méi)有你要?dú)w還的書(shū)"); } }
創(chuàng)建退出系統(tǒng)類(lèi)ExitOperation,繼承接口 IOperation
package operation; import book.BookList; public class ExitOperation implements IOperation{ public void work(BookList bookList){ System.out.println("退出系統(tǒng)"); System.exit(0); } }
到此這篇關(guān)于Java快速實(shí)現(xiàn)圖書(shū)管理基本功能的文章就介紹到這了,更多相關(guān)Java圖書(shū)管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 實(shí)現(xiàn)倒計(jì)時(shí)功能(由秒計(jì)算天、小時(shí)、分鐘、秒)
最近做項(xiàng)目遇到這樣的需求,天、小時(shí)、分鐘、秒的數(shù)值都是隔開(kāi)的,服務(wù)器端只返回一個(gè)時(shí)間戳長(zhǎng)度,怎么實(shí)現(xiàn)這樣的功能呢?下面小編給大家?guī)?lái)了Java 實(shí)現(xiàn)倒計(jì)時(shí)功能的方案,需要的朋友參考下吧2018-01-01SpringMVC五種類(lèi)型參數(shù)傳遞及json傳遞參數(shù)
本文主要介紹了SpringMVC五種類(lèi)型參數(shù)傳遞及json傳遞參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Java8新特性之類(lèi)型注解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java8新特性之類(lèi)型注解的相關(guān)資料,需要的朋友可以參考下2017-06-06Java實(shí)現(xiàn)分庫(kù)分表實(shí)踐指南
在開(kāi)發(fā)中我們經(jīng)常使用到分庫(kù)分表,但是一般是我們前期就已經(jīng)做了規(guī)劃,對(duì)數(shù)據(jù)庫(kù)怎么劃分,對(duì)哪些表進(jìn)行分表,這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)分庫(kù)分表的相關(guān)資料,需要的朋友可以參考下2024-01-018種常見(jiàn)的接口請(qǐng)求重試方法總結(jié)
在跨境業(yè)務(wù)中,可能第三方的服務(wù)器分布在世界的各個(gè)角落,所以請(qǐng)求三方接口的時(shí)候,難免會(huì)遇到一些網(wǎng)絡(luò)問(wèn)題,這時(shí)候需要加入重試機(jī)制了,下面小編就給大家分享幾個(gè)接口重試的寫(xiě)法吧2023-11-11JAVA實(shí)現(xiàn)異步調(diào)用實(shí)例代碼
在java平臺(tái),實(shí)現(xiàn)異步調(diào)用的角色主要三種角色:調(diào)用者、取貨憑證、真實(shí)數(shù)據(jù)。本篇文章給大家介紹java實(shí)現(xiàn)異步調(diào)用實(shí)例代碼,需要的朋友可以參考下2015-09-09詳解Java中二叉樹(shù)的基礎(chǔ)概念(遞歸&迭代)
二叉樹(shù)(Binary?tree)是樹(shù)形結(jié)構(gòu)的一個(gè)重要類(lèi)型。本文將通過(guò)圖片和示例代碼詳細(xì)為大家講解一下Java中的二叉樹(shù)的基礎(chǔ)概念,需要的可以參考一下2022-03-03Mybatis實(shí)現(xiàn)自定義的typehandler三步曲
這篇文章主要介紹了Mybatis實(shí)現(xiàn)自定義的typehandler三步曲的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07