Java實現圖書管理系統

一、框架

1. 創建類

用戶:管理員AdminUser??普通用戶NormalUser 繼承抽象類User

書:書Book?書架BookList

操作對象:書Book

2. 知識點

主要涉及的知識點:數據類型 變量 if for 數組 方法 類和對象 封裝繼承多態 抽象類和接口

3.利用數組放置圖書

Test.Java

BookList.java

方法調用

BookList.java

Book.java

4.利用向上轉型實現用戶身份的選擇

User.java

添加圖書操作AddIOperation等類實現接口IOperations

IOperations.java

每個功能操作均需重寫接口IOperations的work方法--此處以添加操作為例

NormalUser.java

AdminUser.java

Test.java

二、功能的實現——重寫Work()方法

1.退出操作ExitOperation

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

2.展示操作ShowOperation

public class ShowOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("展示書籍");for (int i = 0; i < bookList.getUsedSize(); i++) {System.out.println(bookList.getBooks()[i].toString());}}
}

3.查找操作FindOperation

public class FindOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("查找書籍");System.out.println("請輸入您要查找的圖書名字:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();for (int i = 0; i < bookList.getUsedSize(); i++) {if(bookList.getBooks()[i].getName().equals(name)) {System.out.println(bookList.getBooks()[i].toString());return;}}System.out.println("沒有這本書");}
}

4.借閱操作BorrowOperation

public class BorrowOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("借閱書籍");System.out.println("請輸入你要借閱的圖書名字:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();for (int i = 0; i < bookList.getUsedSize(); i++) {if (bookList.getBooks()[i].getName().equals(name)) {bookList.getBooks()[i].setBorrowed(true);System.out.println("借閱成功");return;}}System.out.println("沒有找到這本書");}
}

5.歸還操作ReturnOPeration

public class ReturnIOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("歸還書籍");System.out.println("請輸入你要歸還的圖書名字:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();for (int i = 0; i < bookList.getUsedSize(); i++) {if (bookList.getBooks()[i].getName().equals(name)) {if(bookList.getBooks()[i].isBorrowed()) {bookList.getBooks()[i].setBorrowed(false);System.out.println("歸還成功");return;}else {System.out.println("這本書已經歸還了,無需再次歸還");return;}}}System.out.println("沒有找到這本書");}
}

6.添加功能AddOperation

public class AddIOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("增添書籍");//判滿int currentSize = bookList.getUsedSize();if (currentSize == bookList.getBooks().length) {System.out.println("書架已滿,添加失敗");return;}System.out.println("請輸入圖書名字:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();System.out.println("請輸入圖書的作者:");String author = scanner.nextLine();System.out.println("請輸入圖書的價格:");int price = scanner.nextInt();scanner.nextLine();System.out.println("請輸入圖書的類型:");String type = scanner.nextLine();Book newBook = new Book(name,author,price,type);//判斷書架有沒有這本書for (int i = 0; i < bookList.getBooks().length; i++) {if(newBook.equals(bookList.getBooks()[i])) {System.out.println("該書已存在,添加無效");return;}}bookList.setBooks(currentSize,newBook);bookList.setUsedSize(currentSize+1);System.out.println("添加成功");}
}

7.刪除操作DelOperation

public class DelOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("刪除書籍");System.out.println("請輸入您要刪除的圖書名字");Scanner scanner = new Scanner(System.in);int pos = -1;String name = scanner.nextLine();int currentSize = bookList.getUsedSize();int i = 0;for (; i < currentSize; i++) {if(name.equals(bookList.getBooks()[i].getName())) {pos = i;break;}}if (i == currentSize) {System.out.println("沒有你想刪除的圖書");return;}int j = pos;for (;j < bookList.getUsedSize()-1; j++) {Book book = bookList.getBooks()[j+1];bookList.setBooks(j,book);}bookList.setBooks(j,null);bookList.setUsedSize(currentSize-1);System.out.println("刪除成功");}
}

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

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

相關文章

Linux運維之需掌握的基本Linux命令

前言&#xff1a;本博客僅作記錄學習使用&#xff0c;部分圖片出自網絡&#xff0c;如有侵犯您的權益&#xff0c;請聯系刪除 目錄 一、SHELL 二、執行命令 三、常用系統工作命令 四、系統狀態檢測命令 五、查找定位文件命令 六、文本文件編輯命令 七、文件目錄管理命令…

【JavaWeb】登錄校驗-會話技術(一)Cookie與Session

登錄校驗 實現登陸后才能訪問后端系統頁面&#xff0c;不登陸則跳轉登陸頁面進行登陸。 首先我們在宏觀上先有一個認知&#xff1a; HTTP協議是無狀態協議。即每一次請求都是獨立的&#xff0c;下一次請求并不會攜帶上一次請求的數據。 因此當我們通過瀏覽器訪問登錄后&#…

go語言怎么獲取文件的大小并且轉化為kb為單位呢?

在Go語言中&#xff0c;你可以使用os包中的IsExist和Stat函數來獲取文件的信息&#xff0c;包括文件的大小。文件的大小通常是以字節為單位的&#xff0c;但你可以很容易地將其轉換為KB&#xff08;千字節&#xff09;。 下面是一個簡單的Go程序示例&#xff0c;該程序打開指定…

Simulink 模型生成 C 代碼(一):使用 Embedded Coder 快速向導生成代碼

以matlab自帶的示例模型RollAxisAutopilot為例進行講解。RollAxisAutopilot為飛機自動駕駛控制系統模型。 使用快速向導工具生成代碼 通過鍵入以下命令打開模型 RollAxisAutopilot&#xff1a; openExample(RollAxisAutopilot); 如果 C 代碼選項卡尚未打開&#xff0c;請在 …

【C++】宏定義

嚴格來說&#xff0c;這個題目起名為C是不合適的&#xff0c;因為宏定義是C語言的遺留特性。CleanCode并不推薦C中使用宏定義。我當時還在公司做過宏定義為什么應該被取代的報告。但是適當使用宏定義對代碼是有好處的。壞處也有一些。 無參宏定義 最常見的一種宏定義&#xf…

makefile總結

1,Makefile規則介紹 一個簡單的 Makefile 描述規則組成: TARGET... : PREREQUISITES... COMMAND 注意: 每一個命令行必須以[Tab]字符開始, [Tab]字符告訴 make 此行是一個命令行。 make 按照命令完成相應的動作。這也是書寫 Makefile 中容易產生,而且比較隱蔽的錯…

油煙凈化器:餐飲業健康環保的守護者

我最近分析了餐飲市場的油煙凈化器等產品報告&#xff0c;解決了餐飲業廚房油膩的難題&#xff0c;更加方便了在餐飲業和商業場所有需求的小伙伴們。 在現代餐飲業&#xff0c;油煙凈化器已經成為不可或缺的重要設備。它不僅是保障餐飲環境清潔的利器&#xff0c;更是守護健康…

新聲創新20年:無線技術給助聽器插上“娛樂”的翅膀

聽力損失并非現代人的專利&#xff0c;古代人也會有聽力損失。助聽器距今發展已經有二百多年了&#xff0c;從當初單純的聲音放大器到如今的全數字時代助聽器&#xff0c;助聽器發生了翻天覆地的變化&#xff0c;現代助聽器除了助聽功能&#xff0c;還具有看電視&#xff0c;聽…

【LeetCode】368. 最大整除子集

雖然這題挺難寫的&#xff0c;但是仍然提醒了我&#xff1a;解題要注意方法。在明確分析當一條道路走不通的時候&#xff0c;就不要再猶豫了&#xff0c;就要果斷的換方法&#xff0c;嘗試用其它方法解決。否則一味的消耗時間&#xff0c;得不償失。換方法的前提是明確的分析&a…

C++ 和C#的差別

首先把眼睛瞪大&#xff0c;然后憋住一口氣&#xff0c;讀下去&#xff1a; 1、CPP 就是C plus plus的縮寫&#xff0c;中國大陸的程序員圈子中通常被讀做"C加加"&#xff0c;而西方的程序員通常讀做"C plus plus"&#xff0c;它是一種使用非常廣泛的計算…

Maya崩潰閃退常見原因及解決方案

Autodesk Maya 是一款功能強大的 3D 計算機圖形程序&#xff0c;被電影、游戲和建筑等各個領域的設計師廣泛使用。然而&#xff0c;Maya 就像任何其他軟件一樣可能會發生崩潰問題。在前文中&#xff0c;小編給大家介紹了3ds Max使用V-Ray渲染時的崩潰閃退解決方案&#xff1a; …

Neo4j 圖數據庫 高級操作

Neo4j 圖數據庫 高級操作 文章目錄 Neo4j 圖數據庫 高級操作1 批量添加節點、關系1.1 直接使用 UNWIND 批量創建關系1.2 使用 CSV 文件批量創建關系1.3 選擇方法 2 索引2.1 創建單一屬性索引2.2 創建組合屬性索引2.3 創建全文索引2.4 列出所有索引2.5 刪除索引2.6 注意事項 3 清…

后端之路第三站(Mybatis)——JDBC跟Mybatis、lombok

一、什么是JDBC JDBC就是sun公司研發的一套通過java來操控數據庫的工具&#xff0c;對應不同的數據庫系統有不同的JDBC&#xff0c;而他們統稱【驅動】&#xff0c;這就是上一篇我們提到創建Mybatis項目時要引入的依賴、以及連接數據庫四要素里的第一要素。 JDBC有自己一套原始…

SerialportToTCP② 全

效果補全&#xff08;代碼&#xff09;&#xff1a; namespace SerialportToTCP {public partial class Form1 : Form{IniHelper Ini;string[] botelvs new string[] { "1200", "4800", "9600", "13200" };public Form1(){Initializ…

Elasticsearch:Painless scripting 語言(一)

Painless 是一種高性能、安全的腳本語言&#xff0c;專為 Elasticsearch 設計。你可以使用 Painless 在 Elasticsearch 支持腳本的任何地方安全地編寫內聯和存儲腳本。 Painless 提供眾多功能&#xff0c;這些功能圍繞以下核心原則&#xff1a; 安全性&#xff1a;確保集群的…

安卓gdb 建立鏈接

adbshell gdbserver :1234 testdcam --sensor 0 --workmode 0 --args preview-size1024x600,picture-size640x480, --time 10 adb forwardtcp:1234 tcp:1234 //設置adb的轉發 ./prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gdb out/tar…

近紅外光譜腦功能成像(fNIRS):1.光學原理、變量選取與預處理

一、朗伯-比爾定律與修正的朗伯-比爾定律 朗伯-比爾定律 是一個描述光通過溶液時被吸收的規律。想象你有一杯有色液體&#xff0c;比如一杯紅茶。當你用一束光照射這杯液體時&#xff0c;光的一部分會被液體吸收&#xff0c;導致透過液體的光變弱。朗伯-比爾定律告訴我們&#…

mmdetection3D指定版本安裝指南

1. 下載指定版本號 選擇指定版本號下載mmdetection3d的源碼&#xff0c;如這里選擇的是0.17.2版本 git clone https://github.com/open-mmlab/mmdetection3d.git -b v0.17.22. 安裝 cd mmdetection3d安裝依賴庫 pip install -r requirment.txt編譯安裝 pip install -v e .…

redis主從復制哨兵模式集群管理

主從復制&#xff1a; 主從復制是高可用Redis的基礎&#xff0c;哨兵和集群都是在主從復制基礎上實現高可用的。主從復制主要實現了數據的多機備份&#xff0c;以及對于讀操作的負載均衡和簡單的故障恢復。缺陷&#xff1a;故障恢復無法自動化&#xff1b;寫操作無法負載均衡&…

軟件測試與質量保證 | 云班課簡答題庫

目錄 第14章 質量相關簡答題 第15章 測試實際相關簡答題 第16章 測試基本相關簡答題 第14章 質量相關簡答題 1. 簡述基本的測量原則。 測量應該基于該應用領域正確的理論之上&#xff0c;并在測量的定義中確定測度的目標&#xff1b;每一個技術測量的定義應該具有一致性和客…