简易版 图书管理系统
目錄
1. Book包
1.1?Book類
1.2?BookList類
2. User包
2.1 User抽象類
2.2?AdminUser類
2.3? NormalUser類
3.?Operate包
3.1 MyOperate接口
3.2? AddOperation類
3.3? DelOperation類
?3.4 ExitOperation
?3.5? FindOperation類
?3.6 ShowOperation類
?3.7?BorrowedOperation類
3.8 ReturnOperation類
4. Main類
本章作為一個練習,對于前面學過的那些語法進行一個整合運用。
語法方面主要包括:封裝、繼承、多態、抽象類和接口。
首先,我們將整個系統分為4個包,
分別是Book類用于封裝書和書架的具體信息。
Main包也就是封裝主類,用于對整個系統的具體操作。
Operate包用于封裝具體的操作。
User包用于管理用戶信息。
我們一個包一個包來講解。
1. Book包
Book包分為兩類,分別是書和書架。
1.1?Book類
該類主要是對書的一些基本信息進行封裝,并且提供Getting和Setting方法。
package Book;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;}@Overridepublic String toString() {return "Book.Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +", isBorrowed=" + isBorrowed +//", isBorrowed=" + isBorrowed +(isBorrowed ? " 已經被借出" : " 未被借出") +'}';} }1.2?BookList類
書架的創建:
包括了初始化,以及對一些書籍的基本操作。
package Book;public class BookList {private Book[] books = new Book[10];//創建書架private int usedSize;//記錄書架上書的數量public BookList() {//初始化3本書books[0] = new Book("我們仨","楊絳",89,"文學");books[1] = new Book("明朝那些事","當年明月",78,"歷史");books[2] = new Book("紅樓夢","曹雪芹",49,"小說");this.usedSize = 3;}public Book[] getBooks() {return books;}public void setBooks(int pos,Book book) {books[pos] = book;}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}public Book getBook(int pos) {return this.books[pos];}//重寫setBook方法作用于設置圖書(增刪)public void setBook(Book book) {this.books[usedSize] = book;}public void setBook(int pos,Book book) {this.books[pos] = book;} }2. User包
User包被分為三類,其中User類是抽象類,用于管理人員類和普通用戶類繼承。
AdminUser是管理類,NormalUser類是普通用戶類。
2.1 User抽象類
因為對于不同的用戶而言,他們的訪問權限是不同的,所以需要將菜單抽象出來以示區分。
另外就是基本信息。
package User;import Book.BookList; import Operate.MyOperate;//抽象出menu()菜單方法 public abstract class User {//protected是訪問權限,改為更大的也可以protected String name;protected MyOperate[] myOperate;//等會到Operate包再講//用戶信息public User(String name) {this.name = name;}public abstract int menu();//作用于main方法中對不同的用戶進行區分public void doWork(int choice, BookList bookList) {this.myOperate[choice].work(bookList);} }2.2?AdminUser類
這里開辟的MyOperate數組是對管理人員的訪問權限開辟空間,其中功能包括 退出,查找,增加,刪除,顯示。
package User;import Operate.*;import java.util.Scanner;public class AdminUser extends User {//管理人員所擁有的訪問權限public AdminUser(String name) {super(name);this.myOperate = new MyOperate[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new ShowOperation(),};}//管理人員擁有的權限public int menu() {System.out.println("*****************************************");System.out.println("hello"+ name +"歡迎來到圖書小小練習");System.out.println("1:查找圖書");System.out.println("2:新增圖書");System.out.println("3:刪除圖書");System.out.println("4:顯示圖書");System.out.println("0:退出系統");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;} }2.3? NormalUser類
這里開辟的MyOperate數組是對普通用戶的訪問權限開辟空間,其中功能包括 退出,查找,借書,還書。
package User;import Operate.*;import java.util.Scanner;public class NormalUser extends User {//普通用戶所擁有的訪問權限public NormalUser(String name) {super(name);this.myOperate = new MyOperate[]{new ExitOperation(),new FindOperation(),new BorrowedOperate(),new ReturnOperation(),};}//普通用戶擁有的權限@Overridepublic int menu() {System.out.println("****************************");System.out.println("hello "+name+" 歡迎來到圖書小練習");System.out.println("1.查找圖書!");System.out.println("2.借閱圖書!");System.out.println("3.歸還圖書!");System.out.println("0.退出系統!");System.out.println("****************************");System.out.println("請輸入你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;} }3.?Operate包
Operate的各個操作,增、刪、查、借書、還書、退出。
我們?Operate包 將普通用戶和管理員用戶的具體實現操作類全寫在Operate包 中。
3.1 MyOperate接口
MyOperate接口只設計好了各個Operation規范(方法)
package Operate;import Book.BookList;public interface MyOperate {public void work(BookList bookList); }3.2? AddOperation類
本類用于添加書籍得基本信息,并且做了基本的判斷。
package Operate;import Book.Book; import Book.BookList;import java.util.Scanner;public class AddOperation implements MyOperate {@Overridepublic void work(BookList bookList) {System.out.println("新增圖書");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 book = new Book(name, author, price, type);//得到此時書架上書的數量int currentSize = bookList.getUsedSize();//遍歷,查找是否想添加的書已經存在了//默認添加在最后面for (int i = 0; i < currentSize; i++) {Book tmp = bookList.getBook(i);if(tmp.getName().equals(name)) {System.out.println("已經存在這本書了,不能再放入了!");return;//如果存在即退出}}//如果不存在即添加bookList.setBook(book);//每添加一本書下表向后移bookList.setUsedSize(currentSize + 1);} }3.3? DelOperation類
先上代碼:
package Operate;import Book.Book; import Book.BookList;import java.util.Scanner;public class DelOperation implements MyOperate {@Overridepublic void work(BookList bookList) {System.out.println("刪除圖書!");System.out.println("請輸入你要刪除圖書的名字:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();//得到當前下標int currentSize = bookList.getUsedSize();int index = -1;//遍歷,tmp.getName().equals(name)為真即表示書架存在該書//否則則該書不存在for (int i = 0; i < currentSize; i++) {Book tmp = bookList.getBook(i);if (tmp.getName().equals(name)) {index = i;break;}}//圖示說明for (int j = index; j < currentSize - 1; j++) {Book book = bookList.getBook(j+1);bookList.setBook(j,book);}bookList.setUsedSize(currentSize - 1);//刪除對象,把最后一個設置為bullbookList.setBook(currentSize - 1, null);} }圖示:
?假設currentSize 在這里,我們想要刪掉該書,那么我們就將currentSize + 1 賦值給currentSize;
接著currentSize向后走:
?重復上述操作:
知道最后一個:
直接將最后一個刪除,畢竟每刪除一個都需要將?書架上的書減少一本:
這樣也解釋了為什么之前需要重寫setBook()方法。
?3.4 ExitOperation
該類就只提供一個方法:exit()
import Book.BookList;public class ExitOperation implements MyOperate {@Overridepublic void work(BookList bookList) {System.out.println("退出系統!");System.exit(0);} }?為什么exit()方法中的參數是0,因為我們正常退出是就是0:
?3.5? FindOperation類
FindOperation類實現很簡單,只需要提供書名再進行遍歷,當然也可以根據價格、作者進行遍歷。
package Operate;import Book.Book; import Book.BookList;import java.util.Scanner;public class FindOperation implements MyOperate{@Overridepublic void work(BookList bookList) {System.out.println("查找圖書!");System.out.println("請輸入書名!");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();//獲取當前圖書在書架得下標int currentSize = bookList.getUsedSize();//遍歷for (int i = 0; i < currentSize; i++) {//System.out.println(bookList[i]);Book book = bookList.getBook(i);if (book.getName().equals(name)) {System.out.println("找到了這本書");System.out.println(book.toString());return;}}System.out.println("沒有找到"+name);} }?3.6 ShowOperation類
遍歷獲取通過Getting方法打印即可。
package Operate;import Book.Book; import Book.BookList;public class ShowOperation implements MyOperate {@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);}} }以上便是管理員訪問得全部權限,當然有需要還可以自己添加所需要的方法。
后面得便是普通用戶特有的權限,普通用戶也有FindOperation、ShowOperation。
?3.7?BorrowedOperation類
方法的邏輯很簡單,只需稍加注意
package Operate;import Book.Book; import Book.BookList;import java.util.Scanner;public class BorrowedOperate implements MyOperate {@Overridepublic void work(BookList bookList) {System.out.println("借閱圖書!");System.out.println("請輸入你要借閱的圖書:");Scanner scanner = new Scanner(System.in);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) &&book.isBorrowed() == false) {book.setBorrowed(true);System.out.println("借閱成功");return;}}} }3.8 ReturnOperation類
邏輯于BorrowedOperation類相似
package Operate;import Book.Book; import Book.BookList;import java.util.Scanner;public class ReturnOperation implements MyOperate {@Overridepublic void work(BookList bookList) {System.out.println("歸還圖書!");System.out.println("請輸入你要歸還的圖書:");Scanner scanner = new Scanner(System.in);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) &&book.isBorrowed()) {book.setBorrowed(false);System.out.println("歸還成功");return;}}} }4. Main類
?Main類中只有一個類,主類,整個程序的入口。
上代碼:
package Main;import Book.BookList; import User.AdminUser; import User.User; import User.NormalUser; import java.util.Scanner;public class Main {//提供一個靜態方法用于創建身份,是判斷管理員還是普通用戶public static User login() {System.out.println("請輸入你的姓名");Scanner scanner = new Scanner(System.in);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.doWork(choice,bookList);}} }這里發生了一個向上轉型:
?主方法的內容非常簡單:
1. 創建一個書架;
2.通過登錄方法確認用戶信息;
3.一個死循環,不停的使用“權限”,知道用戶輸入0退出。
這里就體現了面向對象的思想,所有的過程全部封裝完成,只對外提供了公開的方法。
本章的思路都非常簡單,只是有些地方需要稍加注意,本章的目的便是體驗面向對象的思想。
案例演示:
總結
以上是生活随笔為你收集整理的简易版 图书管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淘宝API、书籍API、商品详情API接
- 下一篇: 索引一般加在什么字段上_在价值上亿的豪华