面向物件編程之繼承、多型、封裝、抽象類、介面、包-下(圖書管理系統)
- 概述
- 需求分析
- 核心需求
- 抽象實作
- 所需要創建的包和類、介面
- 👧書類
- 👧BookList類
- 🧑IOperation介面
- 🧑AddOperation類(增加圖書操作)
- 🧑BorrowOperation類(借閱圖書操作)
- 🧑DisplayOperation類(顯示圖書操作)
- 🧑ExitOperation類(退出系統操作)FindOperation類(按名字查詢圖書操作)ReturnOperation類(歸還圖書操作)
- 👶User抽象類
- 👶NormalUser類(普通用戶類)
- 👶AdminUserr類(管理員類)
- 運行截圖
- 管理員
- 普通用戶
- 原始碼
- 歡迎指正,相互關注啊😄
上篇👇
面向物件編程之繼承、多型、封裝、抽象類、介面、包-上
概述
使用面向物件思想,運用繼承、多型、封裝、抽象、介面、包等思想、技術、方法等來實作圖書管理系統,
需求分析
圖書管理系統首先要有書,書有屬性,有名字、價格、作者、書的型別、是否被借閱等,所以可以設計為一個Book 類來存放這些屬性,將屬性設定為私有,提供對應get和set方法,這就是封裝,
圖書館不止一本書,有書架來存放許多書,所以在設計一個BookList類,來存放多本書,書可以被借閱、查詢、管理員可以增加書籍等,是不是類似與順序表或鏈表的增刪查改?可以使用順序表或鏈表結構來設計這個BookList類,
可以有兩類用戶,一個管理員和普通用戶,這兩類用戶都有對書共同的操作,如查閱等,還有自己獨有的操作,管理員可以增加或洗掉書籍,普通用戶可以借閱書籍,是不是想到了上篇說的向上轉型?所以可以想到,設計一個抽象父類User,有name屬性,一系列操作等,然后管理員類和普通用戶類繼承這個User類,重寫父類宣告的方法然后來重寫這些方法,分別實作自己所獨有的操作,也體現了多型,
還有就是兩類用戶所對應的操作了,他們有相同的操作和不同的操作,可以設計一個介面Operation,它有一個work方法,然后讓不同操作去實作它的work方法,這就用到了介面,
最后可以將對有關書籍的類放在同一個包中,將有關操作放在一個包中,將用戶類放在一個包中,
核心需求
核心也就是來實作對應的增刪查改操作,本質上就是對順序表的基本操作,這里我使用了簡單的順序表,
🎄簡單的登錄
🎄管理端de
🎈查閱書籍
🎈增加書籍
🎈洗掉書籍
🎈顯示書籍串列
🎈退出
🎄普通用戶端
🎈查詢書籍
🎈借閱書籍
🎈歸還書籍
🎈顯示書籍串列
🎈退出
抽象實作
所需要創建的包和類、介面

👧書類
提供構造方法,加入對應set/get方法
/**
* user:ypc;
* date:2021-04-22;
* time: 15:40;
*/
public class Book {
private String name;
private String author;
private int price;
private String type;
private boolean isBorrowed = false;
public Book(String name, String author, int price, String type, boolean isBorrowed) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
this.isBorrowed = isBorrowed;
}
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;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", isBorrowed=" + isBorrowed +
'}';
}
}
👧BookList類
結構類似于順序表,有一個Book類的陣列,還有usesize并且使用構造方法初始化
package book;
import java.util.Arrays;
/**
* user:ypc;
* date:2021-04-22;
* time: 15:41;
*/
public class BookList {
@Override
public String toString() {
return "BookList{" +
"books=" + Arrays.toString(books) +
", useSize=" + useSize +
'}';
}
private Book [] books = new Book[10];
private int useSize = 3;
public BookList() {
books[0] = new Book("三國演義", "羅貫中", 100, "小說",false);
books[1] = new Book("水滸傳", "施耐庵", 100, "小說",false);
books[2] = new Book("西游記", "吳承恩", 100, "小說",false);
}
public Book getBook(int pos) {
return books[pos];
}
public void setBook(int pos, Book book) {
books[pos] = book;
}
public int getSize() {
return useSize;
}
public void setSize(int size) {
this.useSize = size;
}
}
🧑IOperation介面
package operation;
import book.*;
/**
* user:ypc;
* date:2021-04-22;
* time: 15:49;
*/
public interface IOperation {
void work(BookList booklist);
}
🧑AddOperation類(增加圖書操作)
增加圖書
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
/**
* user:ypc;
* date:2021-04-22;
* time: 15:49;
*/
public class AddOperation implements IOperation {
@Override
public void work(BookList booklist) {
Scanner s = new Scanner(System.in);
Book book;
boolean isBorrowed = false;
System.out.println("請輸入書名");
String name = s.nextLine();
System.out.println("請輸入作者");
String author = s.nextLine();
System.out.println("請輸入型別");
String type = s.nextLine();
System.out.println("請輸入價格");
int price = s.nextInt();
book = new Book(name,author,price,type,isBorrowed);
booklist.setBook(booklist.getSize(),book);
booklist.setSize(booklist.getSize()+1);
System.out.println("增加書籍成功");
}
}
🧑BorrowOperation類(借閱圖書操作)
增加圖書
package operation;
import book.Book;
import book.BookList;
import java.util.Scanner;
/**
* user:ypc;
* date:2021-04-22;
* time: 16:44;
*/
public class BorrowOperation implements IOperation {
@Override
public void work(BookList booklist) {
System.out.println("借閱圖書:");
Scanner scanner =new Scanner(System.in);
System.out.println("請輸入書名:");
String name = scanner.nextLine();
for (int i = 0; i < booklist.getSize(); i++) {
Book book = booklist.getBook(i);
if(book.getName().equals(name)){
book.setBorrowed(true);
System.out.println("借閱成功!");
return;
}
}
System.out.println("沒有這本書!");
}
}
🧑DisplayOperation類(顯示圖書操作)
增加圖書
package operation;
import book.BookList;
/**
* user:ypc;
* date:2021-04-22;
* time: 15:50;
*/
public class DisplayOperation implements IOperation{
@Override
public void work(BookList booklist) {
System.out.println("顯示圖書!!!");
for (int i = 0; i <booklist.getSize(); i++) {
System.out.println(booklist.getBook(i));
}
}
}
🧑ExitOperation類(退出系統操作)FindOperation類(按名字查詢圖書操作)ReturnOperation類(歸還圖書操作)
其它操作類似,就是順序表的基本操作
👶User抽象類
package User;
import operation.IOperation;
import book.*;
/**
* user:ypc;
* date:2021-04-22;
* time: 16:33;
*/
public abstract class User {
protected String name;
protected IOperation[] operations;
public User(String name) {
this.name = name;
}
// 顯示選單
abstract public int menu();
// 根據用戶選項執行操作
public void doOperation(int choice, BookList bookList) {
operations[choice].work(bookList);
}
}
👶NormalUser類(普通用戶類)
package User;
import operation.*;
import java.util.Scanner;
/**
* user:ypc;
* date:2021-04-22;
* time: 16:41;
*/
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
this.operations= new IOperation[] {
new ExitOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation(),
new DisplayOperation()
};
}
@Override
public int menu() {
Scanner scanner = new Scanner(System.in);
System.out.println("==========="+ "hello " + this.name +" 歡迎!==============");
System.out.println("1.查找圖書");
System.out.println("2.借閱圖書");
System.out.println("3.歸還圖書");
System.out.println("4.顯示圖書");
System.out.println("0.退出系統");
System.out.println("=====================================================");
int choice = scanner.nextInt();
return choice;
}
}
👶AdminUserr類(管理員類)
與普通用戶類類似
運行截圖
管理員




普通用戶



原始碼
原始碼太多了,可以去github地址下載👇
歡迎關注評論點贊啊,大家一起學習啊
歡迎指正,相互關注啊😄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/279582.html
標籤:java
上一篇:深入淺出理解類和物件
