您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java圖書管理基本功能代碼怎么寫”,在日常操作中,相信很多人在Java圖書管理基本功能代碼怎么寫問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java圖書管理基本功能代碼怎么寫”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
首先還是來看看運行的效果
我們來分析一下:
Java中是通過對象之間的交互來解決事情的,所以我們來看看有哪些對象
首先顯而易見的兩個對象:用戶和書,所以創建兩個包book和user
通過上圖可以看到:不同用戶之間有相同的操作,也有不同的操作,所以不妨將所有的操作都放在一個包中,需要什么操作直接調用即可,我將這個包命名為operate
首先包中肯定需要有一個Book類,此類中記錄數的各種信息,包括書名、作者、書的類型、價格和借閱狀態,所有包中的所有類中的成員變量我都使用private修飾,只提供對外的方法,后面就不再重復,代碼如下(只展示部分代碼):
package book; public class Book { private String name; private String author; private String type; private int price; private boolean borrow; 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; } }
既然有書,那么就需要書架來存放書,所以在book包中再定義一個類為BookShelf用來存放書以及記錄書的數量,存放書可以用Book類數組實現
public class BookShelf { private Book[] books=new Book[1000]; private int count; //記錄書的數量 }
由于數組不能直接訪問,所以在類中增加一個獲取數組下標的方法,而訪問數組的方法一般都是對書進行操作,所以setBook方法也進行修改
package book; public class BookShelf { private Book[] books=new Book[1000]; private int count; //記錄書的數量 public void setBooks(int pos,Book book) { books[pos] = book; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public BookShelf() { books[0]=new Book("吶喊","魯迅","小說集",30); //默認初始有一本書,寫不寫隨你 this.count=1; } //獲取下標對應的書 public Book pos(int i) { return books[i]; } }
book包初步的代碼就到這,繼續下一個包
包中肯定會有普通用戶(NormalUser)和管理員(AdminUser)兩個類,但重點是如何實現圖中的不同用戶有不同的操作
那我們先將登陸方法寫出來,然后分析:
public static void login() { System.out.println("輸入姓名:"); Scanner scanner=new Scanner(System.in); String name=scanner.nextLine(); System.out.println("輸入你身份:1.管理員 2.普通用戶"); int i=scanner.nextInt(); if(i==1) { //管理員 } else { //普通用戶 } }
方法根據不同的數字來判斷是哪種用戶,所以返回值應該是返回一個類,但這里有兩個類,為解決這個問題,我們可以讓NormalUser和AdminUser都繼承同一個父類,方法只要返回父類即可
父類代碼如下:
public abstract class User { private String name; public User(String name) { this.name = name; } public abstract void menu(); //菜單抽象方法,子類實現 }
子類代碼:
public class AdminUser extends User{ public AdminUser(String name) { super(name); } @Override public void menu() { System.out.println("歡迎使用"); System.out.println("1.查找圖書"); System.out.println("2.新增圖書"); System.out.println("3.刪除圖書"); System.out.println("4.顯示圖書"); System.out.println("0.退出系統"); System.out.println("選擇操作"); } } public class NormalUser extends User{ public NormalUser(String name) { super(name); } @Override public void menu() { System.out.println("歡迎使用"); System.out.println("1.查找圖書"); System.out.println("2.借閱圖書"); System.out.println("3.歸還圖書"); System.out.println("0.退出系統"); System.out.println("選擇操作"); } }
不同用戶對應著不同的操作,但有相同的操作數,所以兩個類需要有一個數組來存放各自的方法來防止出錯,而且這個數組是要在用戶選擇之前就準備好,所以數組應該是在構造方法內,修改后的類如下:
public abstract class User { private String name; public IOperate[] ioperate; public void chooseOperate(int choice,BookShelf bookShelf) { ioperate[choice].work(bookShelf); } public User(String name) { this.name = name; } public abstract int menu(); } public class AdminUser extends User{ public AdminUser(String name) { super(name); this.ioperate=new IOperate[] { new Exit(), new FindBook(), new AddBook(), new DelBook(), new DisplayBook(), }; } @Override public int menu() { System.out.println("歡迎使用"); 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; } } public class NormalUser extends User{ public NormalUser(String name) { super(name); this.ioperate=new IOperate[] { new Exit(), new FindBook(), new BorrowBook(), new ReturnBook(), }; } @Override public int menu() { System.out.println("歡迎使用"); 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; } }
圖書的增刪改查等操作其實都是在對Book數組來進行操作的,所以這些方法的參數都是BookShelf類,那么我們可以定義一個接口,接口內定義此方法,然后其它類實現此接口即可
接口代碼:
package operate; import book.BookShelf; public interface IOperate { public void work (BookShelf bookShelf); }
至于對書的操作,這里以增加書籍為例
我們需要知道書的信息,然后要有一個Book類來接收,最后放到數組中
按照這個邏輯,之前的Book類就需要修改:在Book類中添加一個構造方法以便接收書的信息,注意方法在數組中的位置要和你自己寫的菜單中的位置對應
public Book(String name, String author, String type, int price) { this.name = name; this.author = author; this.type = type; this.price = price; }
增加書的方法代碼:
public class AddBook implements IOperate { @Override public void work(BookShelf bookShelf) { System.out.println("請輸入圖書的名字:"); Scanner scanner = new Scanner(System.in); 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); int count=bookShelf.getCount(); bookShelf.setBooks(count,book); bookShelf.setCount(count+1); System.out.println("新增成功"); } }
注:
1.由于引用變量默認是輸出修改的地址,所以要打印書的內容的話需要在類Book中重寫toString方法
2.退出方法在退出前需遍歷數組將其指向的對象都改為null方便回收,雖然程序結束后系統也會回收,但你要知道大型工程里面有些程序一旦跑起來后想要停下來不是那么容易的
到此,關于“Java圖書管理基本功能代碼怎么寫”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。