備案號(hào)網(wǎng)站下邊軟文廣告經(jīng)典案例分析
前言:為了鞏固之前學(xué)習(xí)的java知識(shí)點(diǎn),我們用之前學(xué)習(xí)的java知識(shí)點(diǎn)(方法,數(shù)組,類和對(duì)象,封裝,繼承,多態(tài),抽象類,接口)來實(shí)現(xiàn)一個(gè)簡單的圖書管理系統(tǒng)!
目錄
一. 創(chuàng)建文件的目錄
二. 源碼
book包
Book類
BookList類
operation包
IOeration接口
AddOperation類
DelOperation類
FindOperation類
ShowOperation類
BorrowOperation類
ReturnOperation類
ExitOperation類
user包
User類
AdminUser類
NormalUser類
Main類
三. 操作實(shí)例
1. 管理員
2. 用戶
四. 補(bǔ)充說明
一. 創(chuàng)建文件的目錄
使用Java開發(fā)工具IDEA創(chuàng)建一個(gè)Project工程,命名為TestBook,并在這個(gè)TestBook工程下的src下創(chuàng)建如下文件:book、opreation、user這三個(gè)包(Package)(以及這三個(gè)包下的類(class)?和 接口(interface)),并創(chuàng)建一個(gè) Main 類。
二. 源碼
book包
創(chuàng)建一個(gè)book包,book包下面創(chuàng)建兩個(gè)類Book類(表示 圖書類)和BookList類(表示 書架類)
Book類
描述書的有關(guān)信息,構(gòu)造方法和各種getter,setter方法
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("1. 查找圖書");System.out.println("2. 借閱圖書");System.out.println("3. 歸還圖書");System.out.println("0. 退出系統(tǒng)");System.out.println("**********************");Scanner sc = new Scanner(System.in);System.out.println("請輸入你的操作:");int choice = sc.nextInt();return choice;}}
BookList類
作為書架,利用數(shù)組存放書籍。
package book;public class BookList {private Book[] books; //定義數(shù)組存儲(chǔ)書架上的書籍private int usedSize; //記錄當(dāng)前書架上 實(shí)際存放的書的 數(shù)量private static final int DEFAULT_CAPACITY = 10; //書架的初始容量是 10本書public BookList() {this.books = new Book[DEFAULT_CAPACITY];this.books[0] = new Book("三國演義","羅貫中",10,"小說");this.books[1] = new Book("西游記","吳承恩",9,"小說");this.books[2] = new Book("紅樓夢","曹雪芹",19,"小說");this.usedSize = 3;}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}// 通過下標(biāo)獲取對(duì)應(yīng)書籍的getter方法public Book getBook(int pos) {return books[pos];}public void setBooks(int pos,Book book) {books[pos] = book;}public Book[] getBooks(){return books;}
}
operation包
在operation包下面創(chuàng)建IOperation接口(圖書操作 接口)和圖書操作相關(guān)類AddOperation(表示 添加圖書類),DelOperation(表示 刪除圖書類),FindOperation(表示 查找圖書類),ShowOperation(顯示圖書類),BorrowOperation(表示 借閱圖書類),ReturnOperation(歸還圖書類),ExitOperation(退出系統(tǒng)類)。
IOeration接口
后續(xù)使用所有與圖書操作相關(guān)都要實(shí)現(xiàn)這個(gè)接口,對(duì)bookList對(duì)象進(jìn)行相關(guān)工作。
package operation;import book.BookList;public interface IOperation {void work(BookList bookList);
}
AddOperation類
添加圖書類
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class AddOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("新增圖書!");Scanner sc = new Scanner(System.in);System.out.println("請輸入書名:");String name = sc.nextLine();System.out.println("請輸入作者:");String author = sc.nextLine();System.out.println("請輸入類型:");String type = sc.nextLine();System.out.println("請輸入價(jià)格:");int price = sc.nextInt();Book book = new Book(name,author,price,type);//檢查 數(shù)組當(dāng)中 有沒有這本書int currentSize = bookList.getUsedSize();for(int i=0;i<currentSize;i++) {Book book1 = bookList.getBook(i);if(book1.getName().equals(name)) {System.out.println("有這本書,不進(jìn)行存放了!");return;}}if(currentSize==bookList.getBooks().length) {System.out.println("書架滿了!");}else {bookList.setBooks(currentSize,book);bookList.setUsedSize(currentSize+1);}}}
DelOperation類
刪除圖書類
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class DelOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("刪除圖書!");Scanner sc = new Scanner(System.in);System.out.println("請輸入你要?jiǎng)h除的圖書:");String name = sc.nextLine();int pos = -1;int currentSize = bookList.getUsedSize();int i = 0;for(;i<currentSize;i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)) {pos = i;break;}}if(i == currentSize) {System.out.println("沒有你要?jiǎng)h除的圖書!");return;}//開始刪除int j = pos;for(;j<currentSize;j++) {Book book = bookList.getBook(j+1);bookList.setBooks(j,book);}bookList.setBooks(j,null);bookList.setUsedSize(currentSize-1);}
}
FindOperation類
查找圖書類
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class FindOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("查找圖書!");Scanner sc = new Scanner(System.in);System.out.println("請輸入你要查找的圖書:");String name = sc.nextLine();// 遍歷這個(gè)數(shù)組int currentSize = bookList.getUsedSize();for(int i=0;i<currentSize;i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)) {System.out.println("找到了這本書,信息如下:");System.out.println(book);return;}}System.out.println("沒有找到這本書!");}
}
ShowOperation類
顯示圖書類
package operation;import book.Book;
import book.BookList;public class ShowOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("顯示圖書!");int currentSize = bookList.getUsedSize();for(int i=0;i<currentSize;i++) {Book book = bookList.getBook(i);System.out.println(book);}}
}
BorrowOperation類
借閱圖書類
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class BorrowOperation implements IOperation {@Overridepublic void work(BookList bookList) {System.out.println("借閱圖書!");Scanner sc = new Scanner(System.in);System.out.println("請輸入你要借閱的圖書:");String name = sc.nextLine();int currentSize = bookList.getUsedSize();for(int i=0;i<currentSize;i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)) {book.setBorrowed(true);System.out.println("借閱成功!");System.out.println(book);return;}}System.out.println("你借閱的書 不存在!!");}
}
ReturnOperation類
歸還圖書類
package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class ReturnOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("歸還圖書!");Scanner sc = new Scanner(System.in);System.out.println("請輸入你要?dú)w還的圖書:");String name = sc.nextLine();int currentSize = bookList.getUsedSize();for(int i=0;i<currentSize;i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)) {book.setBorrowed(false);System.out.println("歸還成功!");System.out.println(book);return;}}System.out.println("你歸還的圖書 不存在!!");}
}
ExitOperation類
退出系統(tǒng)類
package operation;import book.BookList;public class ExitOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("退出系統(tǒng)!");System.exit(0);}
}
user包
user包下創(chuàng)建三個(gè)類,抽象類User類(表示所有用戶類,父類),AdminUser類(管理員類,子類),NormalUser(普通用戶類,子類)類
User類
所有用戶類,包含基本屬性:姓名,菜單(menu)方法的聲明,執(zhí)行方法操作(doOperation)方法的聲明
package user;import book.BookList;
import operation.IOperation;public abstract class User {protected String name;protected IOperation[] ioPerations;public User(String name) {this.name = name;}public abstract int menu();public void doOperation(int choice, BookList bookList) {ioPerations[choice].work(bookList);}
}
AdminUser類
管理員類,包含管理員使用方法的數(shù)組和管理員菜單
package user;import operation.*;import java.util.Scanner;public class AdminUser extends User {public AdminUser(String name) {super(name);this.ioPerations = new IOperation[] {new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new ShowOperation(),};}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. 退出系統(tǒng)");System.out.println("**********************");Scanner sc = new Scanner(System.in);System.out.println("請輸入你的操作:");int choice = sc.nextInt();return choice;}
}
NormalUser類
普通用戶類,包含普通用戶使用方法的數(shù)組和普通用戶菜單
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("1. 查找圖書");System.out.println("2. 借閱圖書");System.out.println("3. 歸還圖書");System.out.println("0. 退出系統(tǒng)");System.out.println("**********************");Scanner sc = new Scanner(System.in);System.out.println("請輸入你的操作:");int choice = sc.nextInt();return choice;}}
Main類
主要的操作邏輯
import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;import java.util.Scanner;public class Main {public static User login() {System.out.println("請輸入你的姓名:");Scanner sc = new Scanner(System.in);String name = sc.nextLine();System.out.println("請輸入你的身份,1. 管理員 2. 普通用戶 ->");int choice = sc.nextInt();if(choice == 1) {// 管理員return new AdminUser(name);}else {// 普通用戶return new NormalUser(name);}}public static void main(String[] args) {BookList bookList = new BookList();//user 指向哪個(gè)對(duì)象 就看返回值User user = login();while(true) {int choice = user.menu();//根據(jù)choice 的選擇 來決定調(diào)用的是哪個(gè)方法user.doOperation(choice, bookList);}}
}
三. 操作實(shí)例
1. 管理員
2. 用戶
四. 補(bǔ)充說明
由于目前所學(xué)知識(shí)有限,這個(gè)圖書管理系統(tǒng)目前存在的缺點(diǎn):
1. 沒有做到持久化存儲(chǔ)。以后可以進(jìn)行升級(jí):將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫或者文件夾中
2. 當(dāng)前用到的只是數(shù)組。后期可以做成網(wǎng)頁交互。