圖書管理小系統
- 分析物件
- 搭建框架
- 1、定義被繼承物件User
- 2、撰寫用戶類
- 3、撰寫Book類
- 4、撰寫書架類
- 5、撰寫各個操作類
- Main程式入口
- 整合框架
- 1、實作選單
- 2、呼叫用戶的功能方法
- 實作業務
- 1、添加圖書
- 2、查找圖書
- 3、展示圖書
- 4、借閱書籍
- 5、退出系統
- 6、洗掉書籍
- 7、歸還書籍
分析物件
在做一個專案的時候,先要搭建專案的架構,首先分析,圖書管理系統,需要有書,人,操作等物件,我們將其分為
- book書:Book(圖書)、BookList(存放圖書的書架)
- user人:AdminUser(管理員)、NormalUser(普通用戶)
- operation操作:增刪查改
- Main類,程式的主入口

搭建框架
1、定義被繼承物件User
在User中撰寫構造方法以及用戶選單
public abstract class User {
public String name;
//定義構造方法
public User(String name) {
this.name = name;
}
public abstract void menu();
}
2、撰寫用戶類
對應的在AdminUser和NomalUser中繼承User并撰寫構造方法,搭建不用用戶選單框架
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
}
@Override
public void menu() {
System.out.println("普通用戶的選單");
}
}
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
}
@Override
public void menu() {
System.out.println("管理員的選單");
}
}
3、撰寫Book類
提供屬性,構造方法,get和set方法,以及列印的toString方法
package 圖書管理.book;
/**
* Created with IntelliJ IDEA.
* Description:
* User: starry
* Date: 2021 -01 -20
* Time: 18:08
*/
public class Book {
/**
*圖書的所有屬性
*/
private String name; //圖書名稱
private String author; //作者
private int price; //價格
private String type; //型別
private boolean status; //借出狀態:默認false
/**
* 創建構造方法
* @param name
* @param author
* @param price
* @param type
*/
public Book(String name, String author, int price, String type) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
}
/**
* 既然封裝了起來,撰寫get和set方法之后來呼叫Book中的屬性
* @return
*/
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 isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
/**
* 提供列印所有屬性的toString方法
* @return
*/
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
", type='" + type + '\'' +
", status=" + status +
'}';
}
}
4、撰寫書架類
把書存入陣列中,相當于放置在書架上
public class BookList {
private Book[] books; //圖書物件,存放在順序表中
private int usedSize;
public BookList(){
this.books = new Book[10];
books[0] = new Book("三國演義","羅貫中",55,"小說");
books[1] = new Book("西游記","吳承恩",74,"小說");
books[2] = new Book("水滸傳","施耐庵",49,"小說");
this.usedSize = 3;
}
//尾插法
public void setBooks(int pos,Book book) {
this.books[pos] = book;
}
public Book getBook(int pos) {
return this.books[pos];
}
public int getUsedSize() {
return usedSize;
}
public void setUsedSize(int usedSize) {
this.usedSize = usedSize;
}
}
5、撰寫各個操作類
先不著急實作每個操作類的具體作業,先搭建框架
- 先創建一個介面,讓各種操作類實作這個介面
public interface IOperation {
void work(BookList bookList);
}
- 添加資料類
public class AddOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("添加書籍");
}
}
- 借閱書籍類
public class BorrowOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("借閱書籍");
}
}
- 洗掉書籍
public class DelOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("洗掉書籍");
}
}
- 展示書籍
public class DisplayOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("展示書籍");
}
}
- 退出系統
public class ExitOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("退出系統");
}
}
- 查找書籍
public class FindOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("查找書籍");
}
}
- 歸還書籍
public class ReturnOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("歸還書籍");
}
}
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-》管理員 0-》普通用戶");
int choice = scanner.nextInt();
if(choice == 1) {
return new AdminUser(name);
}else {
return new NormalUser(name);
}
}
public static void main(String[] args) {
//1.登錄
User user = login(); //向上轉型
user.menu(); //動態系結
}
}

現在我們已經實作了大概的程式框架,接下來就需要把每一部分完善了
整合框架
1、實作選單
- User類
public abstract class User {
public String name;
//定義構造方法
public User(String name) {
this.name = name;
}
public abstract int menu();
}
- AdminUser類
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
}
/**
* 回傳 你要執行的對應的操作
* @return
*/
@Override
public int menu() {
Scanner scanner = new Scanner(System.in);
System.out.println("管理員的選單");
System.out.println("==============================");
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;
}
}
- NormalUser類
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
}
/**
* 回傳 你要執行的對應的操作
* @return
*/
@Override
public int menu() {
Scanner scanner = new Scanner(System.in);
System.out.println("普通用戶的選單");
System.out.println("==============================");
System.out.println("hello " + this.name + "歡迎來到圖書系統");
System.out.println("1.查找圖書");
System.out.println("2.借閱圖書");
System.out.println("3.歸還圖書");
System.out.println("0.退出系統");
System.out.println("==============================");
int choice = scanner.nextInt();
return choice;
}
}
2、呼叫用戶的功能方法
- User類
public abstract class User {
public String name; //用戶名
public IOperation[] operations; //對應用戶的操作陣列
//定義構造方法
public User(String name) {
this.name = name;
}
//用戶選單
public abstract int menu();
//呼叫對用操作的work方法
public void doOperation(int choice, BookList bookList) {
this.operations[choice].work(bookList);
}
}
- AdminUser類
public class AdminUser extends User{
public AdminUser(String name) {
super(name);
this.operations = new IOperation[] {
new ExitOperation(),
new FindOperation(),
new AddOperation(),
new DelOperation(),
new DisplayOperation(),
}; //呼叫不同功能
}
/**
* 回傳 你要執行的對應的操作
* @return
*/
@Override
public int menu() {
Scanner scanner = new Scanner(System.in);
System.out.println("管理員的選單");
System.out.println("==============================");
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;
}
}
- NormalUser類
public class NormalUser extends User{
public NormalUser(String name) {
super(name);
this.operations = new IOperation[] {
new ExitOperation(),
new FindOperation(),
new BorrowOperation(),
new ReturnOperation(),
}; //呼叫不同功能
}
/**
* 回傳 你要執行的對應的操作
* @return
*/
@Override
public int menu() {
Scanner scanner = new Scanner(System.in);
System.out.println("普通用戶的選單");
System.out.println("==============================");
System.out.println("hello " + this.name + "歡迎來到圖書系統");
System.out.println("1.查找圖書");
System.out.println("2.借閱圖書");
System.out.println("3.歸還圖書");
System.out.println("0.退出系統");
System.out.println("==============================");
int choice = scanner.nextInt();
return choice;
}
}
- main函式
public static void main(String[] args) {
BookList bookList = new BookList();
//1.登錄
User user = login(); //向上轉型
while (true) {
//拿choice去呼叫對應類中的work方法
int choice = user.menu(); //動態系結
user.doOperation(choice,bookList);
}
}

實作業務
1、添加圖書
public class AddOperation implements IOperation{
@Override
public 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("請輸入圖書的價格");
int price = scanner.nextInt();
System.out.println("請輸入圖書的型別");
String type = scanner.next();
Book book = new Book(name,author,price,type);
int currentSize = bookList.getUsedSize();
//放在書架有的書后面
bookList.setBooks(currentSize,book);
bookList.setUsedSize(currentSize+1);
}
}

2、查找圖書
public class FindOperation 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.getUsedSize(); i++) {
Book book = bookList.getBook(i);
if(book.getName().equals(name)) {
System.out.println("有這本書!");
System.out.println(book);
return;
}
}
System.out.println("沒有這本書!");
}
}

3、展示圖書
public class DisplayOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("展示書籍");
for(int i = 0; i < bookList.getUsedSize(); i++) {
Book book = bookList.getBook(i);
System.out.println(book);
}
}
}

4、借閱書籍
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.getUsedSize(); i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(name)) {
//說明有這本書
//邏輯:把這本書的借閱狀態修改為true
book.setStatus(true);
System.out.println("借閱成功!");
System.out.println(book);
return;
}
}
System.out.println("借閱失敗,沒有你要借閱的圖書");
}
}

5、退出系統
public class ExitOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("退出系統");
System.exit(1);
}
}

6、洗掉書籍
public class DelOperation implements IOperation{
@Override
public void work(BookList bookList) {
System.out.println("洗掉書籍");
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入要洗掉的書名");
String name = scanner.nextLine();
int i;
for(i = 0; i < bookList.getUsedSize(); i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(name)) {
break;
}
}
if(i >= bookList.getUsedSize()) {
System.out.println("沒有你要洗掉的這本書!");
return;
}
int pos = i;
for(int j = pos; j < bookList.getUsedSize()-1; j++) {
Book book = bookList.getBook(j+1);
bookList.setBooks(j,book);
}
int currentSize = bookList.getUsedSize();
bookList.setUsedSize(currentSize-1);
System.out.println("洗掉書籍完畢!");
}
}

7、歸還書籍
public class ReturnOperation 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.getUsedSize(); i++) {
Book book = bookList.getBook(i);
if (book.getName().equals(name)) {
//說明有這本書
//邏輯:把這本書的借閱狀態修改為false
book.setStatus(false);
System.out.println("歸還成功!");
System.out.println(book);
return;
}
}
System.out.println("歸還失敗,沒有你要歸還的圖書");
}
}


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/262541.html
標籤:java
