Java快速實(shí)現(xiàn)圖書管理基本功能
前言
今天的內(nèi)容主要是利用前面所學(xué)的知識點(diǎn):類,抽象類,封裝,繼承,多態(tài),接口等進(jìn)行的一個簡單的代碼練習(xí)。
主要要求:
1、用戶登錄
2、管理端
- 查找圖書
- 新增圖書
- 刪減圖書
- 顯示圖書列表
- 退出系統(tǒng)
3、用戶端
- 查找圖書
- 借閱圖書
- 歸還圖書
- 退出系統(tǒng)
我們可以將以上內(nèi)容分為對書的創(chuàng)建初始化,對用戶的操作,對書的操作。
主函數(shù)
Main:(對所有流程進(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("請輸入你的姓名:"); 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); } } 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); } } }
書的創(chuàng)建
Book:
package book; //創(chuàng)建圖書 public class Book { private String name;//書名 private String author;//書的作者 private String type;//書的類型 private int price;//書的價格 boolean isBorrowed;//書是否被借出 //在這里我們就不對isBorrowed進(jìn)行構(gòu)造,在最后打印的時候?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)建書架 public class BookList { private Book[] books=new Book[10];//創(chuàng)建一個數(shù)組當(dāng)書架放書,假設(shè)一共可以放10本 public int usedSize;//書架上有效放書數(shù) public BookList(){//假設(shè)一開始書架上就放了三本書 books[0]=new Book("紅樓夢","曹雪芹","文學(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; } //獲取一本書的位置 public Book getpos(int pos){ return this.books[pos]; } //在下標(biāo)為pos的位置上放一本書(添加) public void setBook(int pos,Book book){ this.books[pos]=book; } }
對用戶的操作
創(chuàng)建用戶user類:
package User; import book.BookList; import operation.IOperation; public abstract class user { protected String name; protected IOperation[] iOperations;//創(chuàng)建操作類數(shù)組,通過返回的數(shù)字用于對書的操作 public user(String name){ this.name=name; } public abstract int menu();//用于動態(tài)綁定 public void doWork(int choice, BookList bookList){ iOperations[choice].work(bookList); } }
創(chuàng)建管理員用戶類AdminUser ,是 user 的子類.
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ù)字與對應(yīng)的操作放好 new ExitOperation(), new FindOperation(), new AddOperation(), new DelOperation(), new DisplayOperation() }; } public int menu(){ System.out.println("========管理員的菜單========"); System.out.println("歡迎"+this.name+"來到圖書館"); System.out.println("1.查找圖書"); System.out.println("2.新增圖書"); System.out.println("3.刪減圖書"); System.out.println("4.顯示圖書"); System.out.println("0.查退出系統(tǒng)"); System.out.println("==========================="); System.out.print("請選擇你要的操作: "); Scanner scanner=new Scanner(System.in); int choice=scanner.nextInt(); return choice;//返回選擇的數(shù)字 } }
創(chuàng)建普通用戶類NormalUser, 是 user 的子類.
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+"來到圖書館"); System.out.println("1.查找圖書"); System.out.println("2.借閱圖書"); System.out.println("3.歸還圖書"); System.out.println("0.退出系統(tǒng)"); System.out.println("============================"); System.out.print("請選擇你要的操作: "); Scanner scanner=new Scanner(System.in); int choice=scanner.nextInt(); return choice; } }
對書的操作
創(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)建增加圖書類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("新增圖書!"); 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,type,price);//新創(chuàng)建一本書 int size= bookList.getUsedSize(); bookList.setBook(size,book); bookList.setUsedSize(size+1); System.out.println("新增圖書成功"); } }
創(chuàng)建刪減圖書類DelOperation,繼承接口 IOperation
package operation; import book.Book; import book.BookList; public class DelOperation implements IOperation{ public void work(BookList bookList){ System.out.println("刪減圖書"); System.out.println("請輸入要刪減圖書的名字:"); 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("沒有你要刪除的圖書"); } //刪除就是要將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)放的書的信息給j下標(biāo) bookList.setBook(j,book); } bookList.setBook(size,null);//刪除之后,把最后一個下標(biāo)信息置為null bookList.setUsedSize(size-1);//下標(biāo)減1 System.out.println("刪除成功"); } }
創(chuàng)建查找圖書類FindOperation,繼承接口 IOperation
package operation; import book.BookList; import book.Book; public class FindOperation implements IOperation{ public void work(BookList bookList){ System.out.println("查找圖書!"); System.out.println("請輸入要查找書的名字"); 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())) {//比較名字是否相同 System.out.println("找到了這本書,信息如下:"); System.out.println(book); return; } } System.out.println("沒有找到這本書!"); } }
創(chuàng)建顯示圖書列表類DisplayOperation,繼承接口 IOperation
package operation; import book.Book; import book.BookList; public class DisplayOperation implements IOperation{ public void work(BookList bookList){ System.out.println("顯示圖書"); for(int i=0;i<bookList.usedSize;i++){ Book book=bookList.getpos(i); System.out.println(book); } } }
創(chuàng)建借閱圖書列表類BorrowOperation,繼承接口 IOperation
package operation; import book.Book; import book.BookList; public class BorrowOperation implements IOperation{ public void work(BookList bookList){ System.out.println("借閱圖書"); System.out.println("請輸入你要借閱的圖書的名字"); 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("沒有你要借閱的書"); } }
創(chuàng)建歸還圖書列表類ReturnOperation,繼承接口 IOperation
package operation; import book.Book; import book.BookList; public class ReturnOperation implements IOperation{ public void work(BookList bookList){ System.out.println("歸還圖書"); System.out.println("請輸入你要?dú)w還的圖書的名字"); 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("沒有你要?dú)w還的書"); } }
創(chuàng)建退出系統(tǒng)類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)圖書管理基本功能的文章就介紹到這了,更多相關(guān)Java圖書管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 實(shí)現(xiàn)倒計時功能(由秒計算天、小時、分鐘、秒)
最近做項目遇到這樣的需求,天、小時、分鐘、秒的數(shù)值都是隔開的,服務(wù)器端只返回一個時間戳長度,怎么實(shí)現(xiàn)這樣的功能呢?下面小編給大家?guī)砹薐ava 實(shí)現(xiàn)倒計時功能的方案,需要的朋友參考下吧2018-01-01SpringMVC五種類型參數(shù)傳遞及json傳遞參數(shù)
本文主要介紹了SpringMVC五種類型參數(shù)傳遞及json傳遞參數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Java8新特性之類型注解_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java8新特性之類型注解的相關(guān)資料,需要的朋友可以參考下2017-06-06Java實(shí)現(xiàn)分庫分表實(shí)踐指南
在開發(fā)中我們經(jīng)常使用到分庫分表,但是一般是我們前期就已經(jīng)做了規(guī)劃,對數(shù)據(jù)庫怎么劃分,對哪些表進(jìn)行分表,這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)分庫分表的相關(guān)資料,需要的朋友可以參考下2024-01-01JAVA實(shí)現(xiàn)異步調(diào)用實(shí)例代碼
在java平臺,實(shí)現(xiàn)異步調(diào)用的角色主要三種角色:調(diào)用者、取貨憑證、真實(shí)數(shù)據(jù)。本篇文章給大家介紹java實(shí)現(xiàn)異步調(diào)用實(shí)例代碼,需要的朋友可以參考下2015-09-09Mybatis實(shí)現(xiàn)自定義的typehandler三步曲
這篇文章主要介紹了Mybatis實(shí)現(xiàn)自定義的typehandler三步曲的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07