目錄
前置知識點
項目部署說明
項目運行截圖
項目結構展示
項目編寫構思
book包
Book類
Booklist類
ioperations包
IOPeration接口
AddOperation類
BorrowOperation類
DelOperation類
FindOperation類
ReturnOperation類
ShowOperation類
ExitOperation類
user包
User類
AdminUser類
NormalUser類
Main類
源碼獲取
前置知識點
? ? ? ? 學習了Java的基礎語法、類和對象、繼承和多態以及抽象類和接口等后,我們就可以借此完成一個基礎的圖書信息管理系統來鞏固知識。
項目部署說明
1.Java版本為17
2.開發環境:IntelliJ IDEA 2022.1.4
項目運行截圖
運行程序,輸入姓名并選擇身份權限,我們得到了管理員權限的菜單?
?
系統內置了三本圖書,圖書信息以Book{書名,作者,價格,類型,借出狀態}的形式展示。
?
?
?我們新增一本名為水滸傳的圖書并查看到它被成功加入書架。
其余的的刪除圖書以及普通用戶權限的借閱圖書和歸還圖書功能這里不做展示。
項目結構展示
項目結構分為三個包和一個主程序類,book包中為書和書架,ioperations包中為各種管理操作實現,user包中為用戶權限,Main類作為主程序運行。
項目編寫構思
首先創建出本項目使用到的三個包以及主程序類,這四個文件屬于并列關系。
book包
Book類
在這個類中,我們需要給圖書添加成員變量name,author,price,type和isBorrowed來描述圖書。
public class Book {private String name;private String author;private int price;private String type;private boolean isBorrowed;//書名,作者,價格,類型以及借出狀態public Book(String name, String author, int price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}//構造方法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 int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public String getType() {return type;}public void setType(String type) {this.type = type;}public boolean isBorrowed() {return isBorrowed;}public void setBorrowed(boolean borrowed) {isBorrowed = borrowed;}//使用getter and setter確保項目封裝性@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +((isBorrowed==true)?"已借出":" 未借出")+//", isBorrowed=" + isBorrowed +'}';}//重寫toString方法方便打印圖書信息
}
Booklist類
這個類用于存放圖書信息
public class BookList {private Book[] books = new Book[10];//創建一個Book類型的數組存放圖書信息private int usedSize;//實際放書個數public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}public BookList(){this.books[0] = new Book("三國演義","羅貫中",10,"小說");this.books[1] = new Book("西游記","吳承恩",59,"小說");this.books[2] = new Book("紅樓夢","曹雪芹",16,"小說");//書架初始存放三本圖書this.usedSize = 3;//此時實際存量為三本}public Book getBook(int pos) {return books[pos];}public void setBook(int pos,Book book){this.books[pos]=book;}public void setBooks(int pos,Book book) {this.books[pos] = book;}public Book[] getBooks(){return books;}
}
ioperations包
IOPeration接口
這個接口提供一個work方法供所有操作方法重寫
public interface IOPeration {void work(BookList bookList);
}
AddOperation類
這個類用于新增圖書操作
public class AddOperation implements IOPeration{public void work(BookList bookList){System.out.println("新增圖書......");//1.判滿int currentSize=bookList.getUsedSize();if(currentSize==bookList.getBooks().length){System.out.println("書架滿了 不能放了......");return;}//2.構建對象Scanner scanner=new Scanner(System.in);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 newBook=new Book(name,author,price,type);//3.判斷書架有沒有這本書for (int i = 0; i < currentSize; i++) {Book book=bookList.getBook(i);if(book.getName().equals(name)){System.out.println("有這本書,不能插入......");return;}}//4.插入這本書bookList.setBooks(currentSize,newBook);bookList.setUsedSize(currentSize+1);System.out.println("新增圖書成功!!!");}
}
BorrowOperation類
這個類用于借閱圖書操作
public class BorrowOperation implements IOPeration{public void work(BookList bookList){System.out.println("借閱圖書......");Scanner scanner = new Scanner(System.in);System.out.printf("請輸入你借閱的書名:");String name=scanner.nextLine();int currentSize=bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book=bookList.getBook(i);if(book.getName().equals(name)){if(book.isBorrowed()==true){System.out.println("這本書已經被借出了");return;}book.setBorrowed(true);System.out.println("借閱成功!!!");return;}}System.out.println("沒有你要借閱的這本書......");}
}
DelOperation類
這個類用于刪除圖書操作
public class DelOperation implements IOPeration{public void work(BookList bookList){System.out.println("刪除圖書......");Scanner scanner = new Scanner(System.in);System.out.print("請輸入你要刪除的書名:");String name=scanner.nextLine();int currentSize=bookList.getUsedSize();int pos=-1;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("沒有你要刪除的書!!!");return;}}for (int j = pos; j < currentSize-1; j++) {Book book=bookList.getBook(j+1);bookList.setBooks(j,book);}bookList.setBook(currentSize-1,null);bookList.setUsedSize(currentSize-1);System.out.println("刪除成功!!!");}
}
FindOperation類
這個類用于查找圖書操作
public class FindOperation implements IOPeration{public void work(BookList bookList){System.out.println("查找圖書......");Scanner scanner = new Scanner(System.in);System.out.printf("請輸入你的書名:");String name=scanner.nextLine();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("沒有你要找的這本書......");}}
ReturnOperation類
這個類用于歸還圖書操作
public class ReturnOperation implements IOPeration{public void work(BookList bookList){System.out.println("歸還圖書......");Scanner scanner = new Scanner(System.in);System.out.printf("請輸入你歸還的書名:");String name=scanner.nextLine();int currentSize=bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book=bookList.getBook(i);if(book.getName().equals(name)){if(book.isBorrowed()==true){book.setBorrowed(false);System.out.println("歸還成功");return;}}}System.out.println("沒有你要歸還的圖書!!!");}
}
ShowOperation類
這個類用于展示全部圖書操作
public class ShowOperation implements IOPeration{public 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);}}
}
ExitOperation類
這個類用于退出系統操作
public class ExitOperation implements IOPeration{public void work(BookList bookList){System.out.println("退出系統......");System.exit(0);}
}
以上這些操作都實現IOPeration接口并重寫work方法
user包
User類
作為管理員權限AdminUser類和普通用戶權限NormalUser類的父類
public abstract class User {protected String name;protected IOPeration[] ioPerations;public User(String name){this.name=name;}public abstract int menu();public void doIoperation(int choice, BookList bookList){ioPerations[choice].work(bookList);}
}
AdminUser類
這個類實現管理員操作權限
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("歡迎"+this.name+"來到圖書管理系統");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);System.out.println("請輸入你的操作:");int choice = scanner.nextInt();return choice;}}
NormalUser類
這個類實現普通用戶權限
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("歡迎"+this.name+"來到圖書管理系統");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);System.out.println("請輸入你的操作:");int choice = scanner.nextInt();return choice;}
}
Main類
public class Main {public static User login(){Scanner scanner = new Scanner(System.in);System.out.println("請輸入你的姓名:");String name = scanner.nextLine();System.out.println("請輸入你的身份:1:管理員 2:普通用戶");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 user = login();while (true) {int choice = user.menu();//根據這個返回值決定調用哪個方法user.doIoperation(choice, bookList);}}}
main函數實例化Booklist,使用login函數獲取登錄用戶姓名和權限,然后在死循環中不斷讀取指令并執行操作。
源碼獲取
項目源碼