JavaSE-圖書信息管理系統

目錄

前置知識點

項目部署說明

項目運行截圖

項目結構展示

項目編寫構思

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函數獲取登錄用戶姓名和權限,然后在死循環中不斷讀取指令并執行操作。

源碼獲取

項目源碼

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

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

相關文章

網絡 IP 地址總結

網絡IP地址總結 一、IPv4地址核心分類與特殊網段 IPv4地址是32位二進制數&#xff08;通常表示為4組0-255的十進制數&#xff0c;即“點分十進制”&#xff09;&#xff0c;總地址空間約43億個。根據用途可分為公有地址&#xff08;公網使用&#xff0c;全球唯一&#xff09;和…

【C++進階】第7課—紅黑樹

文章目錄1. 認識紅黑樹1.1 紅黑樹的規則1.2 紅黑樹如何確保最長路徑不超過最短路徑的2倍呢?1.3 紅黑樹的效率2. 實現紅黑樹2.1 紅黑樹的結構2.2 紅黑樹的插入2.2.1 第一種情況:插入節點的父節點和其uncle節點都為紅色&#xff0c;且uncle節點存在2.2.2 第2種情況:插入節點cur和…

解決 SQL 錯誤 [1055]:深入理解 only_full_group_by 模式下的查詢規范

在日常的 SQL 開發中&#xff0c;你是否遇到過這樣的報錯&#xff1a;SQL 錯誤 [1055] [42000]: Expression #N of SELECT list is not in GROUP BY clause and contains nonaggregated column...&#xff1f;尤其是在 MySQL 5.7 及以上版本中&#xff0c;這個錯誤更為常見。本…

Keepalived 原理及配置(高可用)

一、Keepalived 原理keepalived 基于 VRRP&#xff08;虛擬路由冗余協議&#xff09;實現高可用。核心原理是通過競選機制在多臺服務器&#xff08;主 / 備節點&#xff09;中選舉出一臺主節點承擔服務&#xff0c;同時備節點持續監控主節點狀態&#xff1a;主節點正常時&#…

從代碼混亂到井然有序:飛算JavaAI的智能治理之道

文章目錄一、前言二、飛算JavaAI平臺三、飛算JavaAI安裝流程3.1 Idea安裝配置3.2 官網注冊登入四、飛算JavaAI獨特魅力:合并項目場景4.1 ERP老項目精準翻新&#xff1a;保留核心邏輯的智能改造方案4.2 智能合并&#xff1a;重構ERP系統的代碼迷宮4.3 ERP接口智能導航&#xff1…

iOS打開開發者模式

啟用開發者模式的方法在iOS設備上啟用開發者模式通常需要連接Xcode或通過設置手動開啟&#xff0c;以下是具體步驟&#xff1a;通過Xcode啟用將iOS設備通過USB線連接到Mac電腦。打開Xcode&#xff08;需提前安裝&#xff09;。在Xcode的菜單欄中選擇 Window > Devices and S…

leetcode101.對稱二叉樹樹(遞歸練習題)

文章目錄一、 題目描述二、 核心思路&#xff1a;判斷左右子樹是否互為鏡像三、 遞歸的終止條件 (Base Cases)四、 代碼實現與深度解析五、 關鍵點與復雜度分析六、 總結與對比 (LC100 vs LC101)LeetCode 101. 對稱二叉樹 - 力扣【難度&#xff1a;簡單&#xff1b;通過率&…

【國內電子數據取證廠商龍信科技】誰是躲在“向日葵”后的

一、前言大家可能每天都在使用在遠控軟件&#xff0c;我們在享受遠控軟件帶來的便利同時&#xff0c;犯罪者也在使用遠控軟件進行違法犯罪活動&#xff0c;以達到隱藏自己的目的。市面上常用的遠控軟件有“向日葵”、“TeamViewer”。二、案件背景在一次電信詐騙案件支援中&…

SAP-PP-MRPLIST

MRP(物料需求計劃)分析功能,主要包含以下要點: 程序通過選擇工廠和物料/銷售訂單范圍作為輸入條件,支持兩種展示方式:ALV表格和樹形結構 核心功能包括: 物料主數據查詢(MAKT/MARA表) 銷售訂單數據查詢(VBAP表) BOM展開(CS_BOM_EXPL_MAT_V2函數) MRP數據獲取(MA…

MIT線性代數01_方程組的幾何解釋

Linear Algebra Lecture #1 W. Gilbert Strangn linear equations, n unknowns row picturecol pictureMatrix form {2x?y0?x2y3 \left\{\begin{matrix} 2x - y 0 \\ -x 2y 3 \end{matrix}\right. {2x?y0?x2y3? 1 Row Picture2 Column PictureWhat are all combination…

FreeRTOS-中斷管理

學習內容中斷概念中斷是計算機系統中一種重要的事件驅動機制&#xff0c;用于在特定條件下打斷正在執行的程序&#xff0c;并跳轉到預定義的中斷處理程序中執行特定的操作。當發生中斷時&#xff0c;處理器會立即中止當前正在執行的指令&#xff0c;保存當前的執行狀態&#xf…

圖像梯度處理與邊緣檢測

在圖像處理的世界里&#xff0c;我們常常需要從復雜的像素矩陣中提取有意義的信息 —— 比如一張照片中物體的輪廓、醫學影像中病灶的邊界、自動駕駛視野里的道路邊緣。這些 “邊界” 或 “輪廓” 在專業術語中被稱為 “邊緣”&#xff0c;而捕捉邊緣的核心技術&#xff0c;離不…

GPU服務器與PC 集群(PC農場):科技算力雙子星

在數字經濟高速發展的今天&#xff0c;算力已成為驅動科技創新與產業變革的核心引擎。GPU服務器憑借其強大的并行計算能力&#xff0c;在圖形渲染、人工智能訓練等領域展現出不可替代的優勢&#xff1b;而PC集群則通過分布式架構&#xff0c;以高性價比和靈活擴展特性&#xff…

秋招Day19 - 分布式 - 分布式鎖

單體時代&#xff0c;可以直接用本地鎖來實現對競爭資源的加鎖&#xff0c;分布式環境下就要用到分布式鎖了有哪些分布式鎖的實現方案&#xff1f;MySQL分布式鎖、Zookeeper分布式鎖、Redis分布式鎖MySQL分布式鎖如何實現&#xff1f;創建一張鎖表&#xff0c;對字段定義唯一性…

AIStarter平臺亮點解析:從ComfyUI項目上架到一鍵運行的完整指南

大家好&#xff01;今天分享一個AIStarter平臺的深度體驗&#xff0c;帶你了解如何通過這個平臺輕松上架和運行AI項目&#xff01;視頻中&#xff0c;博主在凌晨分享了AIStarter的強大功能&#xff0c;重點展示了ComfyUI 4.0和5.0整合包的上架過程&#xff0c;以及如何簡化AI項…

電腦錄屏軟件推薦:如何使用oCam錄制游戲、教程視頻

在工作、學習或游戲過程中&#xff0c;我們經常需要錄制電腦屏幕&#xff0c;比如制作教程視頻、記錄游戲操作、分享軟件使用過程等。oCam 是一款功能強大且操作簡單的屏幕錄制工具&#xff0c;支持 Windows 系統&#xff0c;深受用戶喜愛。今天簡鹿辦公就來手把手教你如何使用…

安裝cuml報錯

安裝命令 &#xff08;注意cuda的版本&#xff09; pip install --no-cache-dir --extra-index-urlhttps://pypi.nvidia.com cuml-cu11 報錯&#xff1a; 找了很多網上的教程 1.版本問題 沒解決 pip install --upgrade pip pip install --upgrade setuptools 2.參考下面博…

【ECharts?】解決Vue 中 v-show 導致組件 ECharts 樣式異常問題

解決Vue 中 v-show 導致組件 ECharts 樣式異常問題 問題概述 在使用 Vue 的 v-show 指令實現 <PageOne/>、<PageTwo/>、<PageThree/> 三個視圖的定時切換時&#xff0c;<PageTwo/> 顯示時出現了異常&#xff0c;具體表現為 ECharts 圖表渲染圖表尺寸異…

旅游管理虛擬仿真實訓室:重構實踐教學新生態

在旅游產業數字化轉型與教育信息化深度融合的背景下&#xff0c;旅游管理虛擬仿真實訓室成為連接理論教學與行業實踐的關鍵紐帶。它通過沉浸式技術還原旅游場景&#xff0c;解決傳統實訓中資源受限、風險較高、時空局限等問題&#xff0c;為旅游管理專業人才培養提供全新路徑。…

【在線五子棋對戰】十、對戰玩家匹配管理模塊

文章目錄前言Ⅰ. 匹配隊列實現Ⅱ. 匹配隊列管理類實現完整代碼前言 五子棋對戰的玩家匹配是根據自己的天梯分數進行匹配的&#xff0c;而服務器中將玩家天梯分數分為三個檔次&#xff1a; 青銅&#xff1a;天梯分數小于 2000 分白銀&#xff1a;天梯分數介于 2000~3000 分之間…