Java:圖書管理系統

目錄

一.book

1.在book包中的Book 類用來定義和引用書的名字,作者,價格,類型等。

2.在book包中的第二個類是BookList是用來構建書架,和書架上的初始書本,

二、ioperations

1.AddOperation?(增加圖書)

2.BorrowOperation?(借閱圖書)

3.DelOperation?(刪除圖書)

4.ExitOperation?(顯示圖書)

5.FindOperation?(查找圖書)

6.IOPeration(接口)

7.ReturnOperation(歸還圖書)

8.ShowOperation(顯示圖書)

?三、User

?1.AdminUser(管理員)

2.NormalUser(普通用戶)

3.User

?四、Main類?


?圖書管理系統的作用:顯而易見,圖書管理系統的出現就是為了緩和圖書管理員的管理任務。當然,這其中也蘊含了一定的抽象意義,就是實現了從計算機上的虛擬化在現實生活中的實際運用;實現了圖書館由傳統走向信息化道路的愿望。可以說,這樣的管理系統是極大地減輕了管理員的負擔。這樣的程序在將圖書信息進行簡明化處理后,就實現了圖書信息的集中化管理,使得管理的成本也大幅度降低。在進行查找操作時,系統可以快速地進行綜合查詢,得到最準確的結果。?

?圖書管理系統構建簡單的流程圖

選擇身份進入后選擇你要做的內容,通過這個架構來編寫代碼。

首先我們先創建三個包

?

一.book

?

1.在book包中的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{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +( (isBorrowed == true) ? " 已借出" : " 未借出") +'}';}
}

2.在book包中的第二個類是BookList是用來構建書架,和書架上的初始書本,

public class BookList {private Book[] books = new Book[10];private int usedSize;public BookList() {this.books[0] = new Book("狂人日記","魯迅",10,"小說");this.books[1] = new Book("淘氣包馬小跳","楊紅櫻",10,"小說");this.books[2] = new Book("笑貓日記","楊紅櫻",16,"小說");this.books[3] = new Book("阿Q正傳","魯迅",16,"小說");this.books[4] = new Book("紅樓夢","曹雪芹",30,"小說");this.usedSize = 5;  //初始書本個數}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}public Book getBook(int pos) {return books[pos];}public void setBook(int pos,Book book) {this.books[pos] = book;}public Book[] getBooks() {return books;}
}

二、ioperations

1.AddOperation?(增加圖書)

package ioperations;
import book.Book;
import book.BookList;
public class AddOperation  implements IOPeration {public void work(BookList bookList) {System.out.println("新添加的圖書");int currentSize = bookList.getUsedSize();if(currentSize == bookList.getBooks().length) {System.out.println("書架已經存滿");return;}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);for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)) {System.out.println("這本書已經存在");return;}}bookList.setBook(currentSize,newBook);bookList.setUsedSize(currentSize+1);System.out.println("添加成功");}
}

2.BorrowOperation?(借閱圖書)

package ioperations;
import book.Book;
import book.BookList;import java.util.Scanner;public class BorrowOperation implements IOPeration {@Overridepublic 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()) {System.out.println("已被借出");return;}book.setBorrowed(true);System.out.println("借閱成功");return;}}System.out.println("不存在");}
}

3.DelOperation?(刪除圖書)

package ioperations;
import book.Book;
import book.BookList;import java.util.Scanner;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.setBook(j,book);}bookList.setBook(currentSize-1,null);bookList.setUsedSize(currentSize-1);System.out.println("已經刪除");}
}

4.ExitOperation?(顯示圖書)

package ioperations;
import book.BookList;public class ExitOperation implements IOPeration {@Overridepublic void work(BookList bookList) {System.out.println("退出系統");System.exit(0);}
}

5.FindOperation?(查找圖書)

package ioperations;
import book.Book;
import book.BookList;
import java.util.Scanner;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("不存在");}
}

6.IOPeration(接口)

定義一個標準(接口)

package ioperations;
import book.BookList;public interface IOPeration {void work(BookList bookList);
}

7.ReturnOperation(歸還圖書)

package ioperations;
import book.Book;
import book.BookList;import java.util.Scanner;public class ReturnOperation implements IOPeration {@Overridepublic 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()) {book.setBorrowed(false);System.out.println("歸還成功");return;}}}System.out.println("不存在");}
}

8.ShowOperation(顯示圖書)

package ioperations;
import book.Book;
import book.BookList;public class ShowOperation implements IOPeration {@Overridepublic void work(BookList bookList) {System.out.println("顯示圖書");int currentSize = bookList.getUsedSize();//3for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);System.out.println(book);}}
}

?三、User

?1.AdminUser(管理員)

管理員可以管理書架,編輯圖書的增加與刪除。

管理員對圖書的數量,圖書號,圖書類型,圖書名稱等進行修改、刪除管理,如果普通用戶在線借書,圖書總數會相應減少。

package user;
import ioperations.*;
import java.util.Scanner;
import ioperations.IOPeration;public class AdminUser extends User{public AdminUser(String name) {super(name);this.operations = 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;}}

2.NormalUser(普通用戶)

普通用戶可以借閱書籍,在使用后進行歸還書籍。

package user;
import ioperations.*;import java.util.Scanner;public class NormalUser extends User{public NormalUser(String name) {super(name);this.operations = 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. 退出系統/");System.out.println("/");Scanner scanner = new Scanner(System.in);System.out.println("請輸入你的操作:");int choice = scanner.nextInt();return choice;}
}

3.User

package user;
import book.BookList;
import ioperations.IOPeration;public abstract class User {protected String name;public IOPeration[] operations;public User(String name) {this.name = name;}public abstract int menu();public void doOperation(int choice, BookList bookList) {operations[choice].work(bookList);}public void doIoperation(int choice, BookList bookList) {}
}

?四、Main類

用于將整個項目串聯到一起,然后整合起來運行。

import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;import java.util.Scanner;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();System.out.println("你好");User user = login();while (true){int choice =user.menu();user.doIoperation(choice,bookList);}}}
希望對大家關于圖書管理系統構建有所幫助
謝謝觀看!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15036.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15036.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15036.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

保研機試算法訓練個人記錄筆記(七)

輸入格式&#xff1a; 在第1 行給出不超過10^5 的正整數N, 即參賽&#xff5d;人數。隨后N 行&#xff0c;每行給出一位參賽者的 信息和成績&#xff0c;包括其所代表的學校的編號&#xff08;從1 開始連續編號&#xff09;及其比賽成績&#xff08;百分制&#xff09;&#xf…

Linux環境基礎開發工具的使用(yum,vim,gcc/g++,make/Makefile,gdb)

Linux 軟件包管理器-yum 什么是軟件包及安裝方式 在Linux下安裝軟件, 一個通常的辦法是下載到程序的源代碼, 并進行編譯, 得到可執行程序。 但是這樣太麻煩了, 于是有些人把一些常用的軟件提前編譯好, 做成軟件包(可以理解成windows上的安裝程序)放在一個服務器上, 通過包管理…

數據結構——棧(詳細分析)

目錄 &#x1f349;引言 &#x1f349;棧的本質和特點 &#x1f348;棧的基本操作 &#x1f348;棧的特點 &#x1f34d;后進先出 &#x1f34d;操作受限 &#x1f34d;動態調整 &#x1f348;棧的優缺點 &#x1f34d;優點 &#x1f34d;缺點 &#x1f349;棧的應用…

002 遞歸評論 mongodb websocket消息推送

文章目錄 商品評論CommentController.javaComment.javaCommentServiceImpl.javaCommentRepository.javaCommentService.javaWebSocketConfig.javaWebSocketProcess.javaapplication.yamlproductReview.htmlindex.htmlindex.jsindex.css 訂單評論EvaluateMapper.xmlEvaluateMapp…

從零手寫實現 nginx-01-為什么不能有 java 版本的 nginx?

前言 大家好&#xff0c;我是老馬。很高興遇到你。 作為一個 java 開發者&#xff0c;工作中一直在使用 nginx。卻發現一直停留在使用層面&#xff0c;無法深入理解。 有一天我在想&#xff0c;為什么不能有一個 java 版本的 nginx 呢&#xff1f; 一者是理解 nginx 的設計…

HTTP 協議中 GET 和 POST 有什么區別?分別適用于什么場景?

HTTP 協議中 GET 和 POST 是兩種常用的請求方法&#xff0c;它們的區別如下: 1. 參數傳遞方式不同 GET 請求參數是在 URL 中以鍵值對的形式傳遞的&#xff0c;例如:http://www.example.com/&#xff1f;key1value1&k ey2value2。 而 POST 請求參數是在請求體中以鍵值對的…

SQOOP詳細講解

SQOOP安裝及使用 SQOOP安裝及使用SQOOP安裝1、上傳并解壓2、修改文件夾名字3、修改配置文件4、修改環境變量5、添加MySQL連接驅動6、測試準備MySQL數據登錄MySQL數據庫創建student數據庫切換數據庫并導入數據另外一種導入數據的方式使用Navicat運行SQL文件導出MySQL數據庫impo…

數據訪問與Spring Data JPA

數據訪問與Spring Data JPA 在現代Java應用程序中&#xff0c;持久化數據是核心功能之一。Spring Data JPA&#xff08;Java Persistence API&#xff09;為開發者提供了一種簡單且高效的方式來訪問和操作數據庫。在本博文中&#xff0c;我將向您展示如何使用Spring Data JPA來…

數據結構------二叉樹經典習題2

博主主頁: 碼農派大星. 關注博主帶你了解更多數據結構知識 1.非遞歸的前序遍歷 1.用棧來實現 2,前序遍歷是根左右, 先是根節點入棧,,然后不為空時向左遍歷,當為空時就返回向右遍歷,右為空時直接出棧,依次循環即可. public void preOrderNot(TreeNode root){Stack<TreeNo…

科技賦能,打破視障人士的溝通壁壘

在探索如何增強盲人群體的社會參與度與幸福感的旅程中&#xff0c;盲人社交能力提升策略成為了不容忽視的一環。隨著科技的不斷進步&#xff0c;像“蝙蝠避障”這樣的輔助軟件&#xff0c;不僅在日常出行中為盲人提供了實時避障和拍照識別的便利&#xff0c;也在無形中為他們拓…

華為數通 HCIP-Datacom(H12-821)題庫

最新 HCIP-Datacom&#xff08;H12-821&#xff09;完整題庫請掃描上方二維碼訪問&#xff0c;持續更新中。 BGP路由的Update消息中可不包含以下哪些屬性&#xff1f; A、Local Preference B、AS Path C、MED D、Origin 答案&#xff1a;AC 解析&#xff1a;as-path和ori…

深度學習訓練框架——監督學習為例

訓練框架 文章目錄 訓練框架1. 模型網絡結構2. 數據讀取與數據加載2.1Dataloater參數2.2 collate_fn 3. 優化器與學習率調整3.1 優化器3.2 學習率調度 4迭代訓練4.1 train_epoch4.2 train iteration 5.1 保存模型權重 本文內容以pytorch為例 1. 模型網絡結構 自定義網絡模型繼…

測試開發面試題

簡述自動化測試的三大等待 強制等待。直接使用time.sleep()方法讓程序暫停指定的時間。優點是實現簡單&#xff0c;缺點是不夠靈活&#xff0c;可能會導致不必要的等待時間浪費。隱式等待。設置一個固定的等待時間&#xff0c;在這個時間內不斷嘗試去查找元素&#xff0c;如果…

Java17 --- SpringCloud之Sentinel

目錄 一、Sentinel下載并運行 二、創建8401微服務整合Sentinel 三、流控規則 3.1、直接模式 3.2、關聯模式 3.3、鏈路模式 3.3.1、修改8401代碼 3.3.2、創建流控模式 3.4、Warm UP&#xff08;預熱&#xff09; ?編輯 3.5、排隊等待 四、熔斷規則 4.1、慢調用比…

【C++】09.vector

一、vector介紹和使用 1.1 vector的介紹 vector是表示可變大小數組的序列容器。就像數組一樣&#xff0c;vector也采用的連續存儲空間來存儲元素。也就是意味著可以采用下標對vector的元素進行訪問&#xff0c;和數組一樣高效。但是又不像數組&#xff0c;它的大小是可以動態改…

操作系統實驗四 (綜合實驗)設計簡單的Shell程序

前言 因為是一年前的實驗&#xff0c;很多細節還有知識點我都已經遺忘了&#xff0c;但我還是盡可能地把各個細節講清楚&#xff0c;請見諒。 1.實驗目的 綜合利用進程控制的相關知識&#xff0c;結合對shell功能的和進程間通信手段的認知&#xff0c;編寫簡易shell程序&…

Excel透視表:快速計算數據分析指標的利器

文章目錄 概述1.數據透視表基本操作1.1準備數據&#xff1a;1.2創建透視表&#xff1a;1.3設置透視表字段&#xff1a;1.4多級分類匯總和交叉匯總的差別1.5計算匯總數據&#xff1a;1.6透視表美化&#xff1a;1.7篩選和排序&#xff1a;1.8更新透視表&#xff1a; 2.數據透視-數…

【B站 heima】小兔鮮Vue3 項目學習筆記Day02

文章目錄 Pinia1.使用2. pinia-計數器案例3. getters實現4. 異步action5. storeToRefsx 數據解構保持響應式6. pinia 調試 項目起步1.項目初始化和git管理2. 使用ElementPlus3. ElementPlus 主題色定制4. axios 基礎配置5. 路由設計6. 靜態資源初始化和 Error lens安裝7.scss自…

Github 2024-05-24 開源項目日報 Top10

根據Github Trendings的統計,今日(2024-05-24統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Python項目3非開發語言項目2TypeScript項目2JavaScript項目1Kotlin項目1C#項目1C++項目1Shell項目1Microsoft PowerToys: 最大化Windows系統生產…

軟件設計師備考筆記(十):網絡與信息安全基礎知識

文章目錄 一、網絡概述二、網絡互連硬件&#xff08;一&#xff09;網絡的設備&#xff08;二&#xff09;網絡的傳輸介質&#xff08;三&#xff09;組建網絡 三、網絡協議與標準&#xff08;一&#xff09;網絡的標準與協議&#xff08;二&#xff09;TCP/IP協議簇 四、Inter…