基于Java實現的圖書管理系統

前言:該圖書管理系統實現了查找、添加、刪除、顯示、借閱、歸還等功能,分為兩個用戶群體:管理者和普通用戶。使用了類與對象,封裝繼承多態,抽象類和接口等Java基礎知識。

一.思路

面向對象三部曲:找對象,創建對象,使用對象。

1.找對象

圖書館管理系統中的對象有書和人。人通過一些方法操作書。操作方法是一個集合。

2.創建對象

這里可用使用包將它們整合在一起,人、書和功能各一個包。

書是一個類,還一個類是書架。書中是定義書的各種屬性,書架是放書的地方,也是操作書的地方。

人分為兩種,一種是管理員,一種是普通用戶。創建一個父類將兩人共有的屬性放在這里,另外創建兩個子類擴展父類。

功能這個包里放著各種各樣我們實現的包,

3.脈絡

 public static void main(String[] args) {BookList bookList=new BookList();//實例化書架,形象的理解為創建了一個圖書館Person person=logic();      //判斷這個人是哪一個類,是管理員還是普通用戶while(true){int choice=person.menu();person.doFunction(choice,bookList);}}

這是main方法的全部。

我們可以看到,我們先實例化了書架,相當于建立起了一個書架,我們可以在這個書架上對書進行操作。

第二步,通過一個logic方法判斷出用戶是哪一類。

書架有了,身份有了,接下來就是書架進行操作,也就是下面while循環里的內容。

二.框架的具體實現

1.logic方法的實現

先上代碼:

 public static Person logic(){System.out.println("歡迎來的圖書管理系統");System.out.println("請輸入您的姓名:");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();System.out.println("輸入1:管理員  2:普通用戶");int choice=scanner.nextInt();if(choice==1){return new Manager(name);}else{return new Normal(name);}}

返回值是我們定義的父類Person。通過輸入的選擇,用if分出兩種情況(這里不是很嚴謹,沒有判別輸入其他數字的情況),直接new一個對象返回,new完類也實例化完了。

這樣我們就得到了我們要用戶身份。

2.person.menu方法的實現

person現在是某一個具體的身份,可以調用其類里的menu方法。

//普通用戶
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);int choice= scanner.nextInt();return choice;}
//管理員
public int menu(){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);int choice= scanner.nextInt();return choice;}

通過輸入數字來選擇我們要進行的操作,并將剛輸入的數字作為返回值去返回。

獲得具體數字后我們可以進行下面的操作來進行具體的實現。

3.person.doFunction方法的實現

public IFunction[] iFunctions;
public void doFunction(int choice, BookList bookList){iFunctions[choice].work(bookList);}

這是Person類中的內容,可以看到我們先定義了一個接口數組,使用了這個接口中的某一個方法。在一開始實例化兩種用戶時我們就用構造方法來實現了數組的“賦值”:

//普通用戶
public Normal(String name) {super(name);       this.iFunctions = new IFunction[]{new Exit(),new Seek(),new Borrow(),new Back()};}
//管理員
public Manager(String name) {super(name);       this.iFunctions=new IFunction[]{new Exit(),new Seek(),new Add(),new Del(),new Show()};}

這里的順序對應了menu方法里的順序,大家可以去上面查看。

4.接口的實現

public interface IFunction {void work(BookList bookList);
}

在接口里寫了一個work方法,這個就是上面調用的方法。參數是書架,目的是為了操作書架。

三.功能的具體實現

0.前置內容

每一個具體的功能都通過接口連上了IFunction,都要再次實現work方法

iFunctions[choice].work(bookList);

另外在書架上定義一個int變量來記錄書的數量

int size = 0;

1.查閱圖書

public void work(BookList bookList) {System.out.println("查找圖書");System.out.println("請輸入想要查找書的名稱:");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();int size=bookList.getSize();    //利用BookList類的方法來獲得書架上書的數量for(int i=0;i<size;i++){String bname=bookList.getname(i);if(bname.equals(name)){                 //比較字符串System.out.println("書找到了");return ;}}System.out.println("沒有這本書");}

bookList.getSize()這個方法是獲取現在書架上書的數量,然后進入循環去尋找是否有這本書,比較簡單。

2.借閱圖書

public void work(BookList bookList) {System.out.println("借閱圖書");System.out.println("輸入要借閱書的名稱:");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();int choice=bookList.getSize();for(int i=0;i<choice;i++){String bname= bookList.getname(i);if(bname.equals(name)){bookList.changeType(i,true);         //用人方法要說哪一個bookList.changeSize(-1);System.out.println("借閱成功");return ;}}System.out.println("沒有這本書無法借閱");}

借閱圖書要實現的細節:

1.把書的屬性設置為已借出;2.書架上書的數量減一。

3.歸還圖書

public void work(BookList bookList) {System.out.println("歸還圖書");System.out.println("輸入要歸還書的名稱:");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();int choice=bookList.getSize();for(int i=0;i<choice;i++){String bname= bookList.getname(i);if(bname.equals(name)){bookList.changeType(i,false);         //用人方法要說哪一個bookList.changeSize(1);System.out.println("歸還成功");return ;}}System.out.println("沒有這本書無法歸還");}

細節方面與上面的借閱相反。

4.新增圖書

public void work(BookList bookList) {System.out.println("添加書籍");int choice=bookList.getSize();if(choice==10){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 < choice; i++) {String name2=bookList.getname(i);if(newbook.equals(name2)){System.out.println("書架上已經有這本書了");return ;}}bookList.setBooks(choice,newbook);bookList.setSize(choice+1);System.out.println("添加成功");}

5.刪除圖書

 public void work(BookList bookList) {System.out.println("刪除書籍");Scanner scanner=new Scanner(System.in);System.out.println("輸入要刪除的書的名稱");String name=scanner.nextLine();int choice=bookList.getSize();int i = 0;int flag=-1;for (; i < choice; i++) {String bname=bookList.getname(i);if(bname.equals(name)){flag=i;break;}}if(i==choice){System.out.println("沒有這本書");return ;}for (int j = flag; j < choice-1; j++) {Book book = bookList.getBooks(j+1);bookList.setBooks(j,book);}bookList.setBooks(choice-1,null);bookList.setSize(choice-1);System.out.println("刪除成功");}

6.退出系統

public void work(BookList bookList) {System.out.println("成功退出系統");System.exit(0);}

四.總結

以上功能的實現不是最主要的,代碼的框架是最主要的。怎么實現一個圖書管理系統,它的整個脈絡是怎樣的,這是重要的。上述功能代碼的實現可能有不嚴謹的地方,大家可以自行修改。

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

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

相關文章

oracle數據庫查看各類文件的位置

select name from v$controlfile; --控制文件 &#xff08;一般以.ctl結尾&#xff09; select file_name from dba_data_files; --數據文件 &#xff08;一般以.dbf或.ora結尾&#xff09; select file_name from dba_temp_files; --臨時文件&#xff08;一般以.d…

OrangePi_Kunpeng_Pro開發板測驗——性能巨人

文章目錄 &#x1f4d1;前言一、開箱初體驗的愉悅二、產品規格概述三、前置工作四、性能測試4.1 CPU 性能測試4.1.1 單線程 CPU 測試4.1.2 多線程 CPU 測試 4.2 內存性能測試4.2.1 內存讀寫性能測試4.2.2 高負載內存測試 4.3 I/O 性能測試4.4 網絡性能測試4.5 測試小結4.5.1 CP…

ECMAScript簡介

前言 ECMAScript&#xff08;通常簡稱為ES&#xff09;由ECMA國際標準化組織制定的一種腳本語言標準&#xff0c;Netscape最初開發的JavaScript演變而來。ECMAScript為JavaScript提供了基礎語言結構和功能。最初設計成一種腳本語言&#xff0c;用來服務Web。作為腳本語言ES同時…

CF1148C C. Crazy Diamond

題目鏈接 題意&#xff1a;給定一個數組p長度為n按照規則對下標滿足2 * abs(i - j) > n進行交換&#xff0c;最后使數組不遞減。輸出用的交換次數和每次交換的下標。&#xff08;交換次數不能超過5*n次&#xff09; 題解&#xff1a; 默認i < j,否則交換 abs(i - j) &…

基于異構圖的大規模微服務系統性能問題診斷

簡介&#xff1a;本文介紹由南開大學、清華大學、騰訊、國家超級計算天津中心共同合作的論文&#xff1a;基于異構圖的大規模微服務系統性能問題診斷。該論文已被IEEE Transactions on Services Computing期刊錄用 論文標題&#xff1a;Diagnosing Performance Issues for Lar…

docker刪除所有容器

筆記 要使用 Docker 刪除所有容器&#xff08;無論是停止的還是正在運行的&#xff09;&#xff0c;可以按照以下步驟操作&#xff1a; 1. **刪除所有正在運行的容器**&#xff1a; 首先&#xff0c;您需要停止所有正在運行的容器。可以使用以下命令&#xff1a; dock…

MATLAB分類與判別模型算法:K-近鄰法(KNN)分類代碼 【含Matlab源碼 MX_001期】

算法簡介&#xff1a; K-近鄰法&#xff08;KNN&#xff09;是一種簡單而有效的分類算法&#xff0c;也可用于回歸問題。它的基本原理是根據待分類樣本與訓練樣本的距離&#xff0c;選取最近的K個樣本進行投票決定分類。該算法無需訓練過程&#xff0c;而是利用訓練數據集直接…

數據結構與算法-反轉單鏈表

數據結構與算法-反轉單鏈表 大家好&#xff0c;歡迎回到我們的算法學習系列。今天&#xff0c;我們將探討一個在算法面試中非常經典的問題——反轉單鏈表。 什么是單鏈表&#xff1f; 在介紹問題之前&#xff0c;我們先簡單了解一下單鏈表。單鏈表是一種線性數據結構&#x…

氣缸前端鎖緊技術探討:從四個方面、五個方面、六個方面和七個方面深度解析

氣缸前端鎖緊技術探討&#xff1a;從四個方面、五個方面、六個方面和七個方面深度解析 在工業自動化領域&#xff0c;氣缸作為關鍵的執行元件&#xff0c;其前端鎖緊技術的穩定性與可靠性直接影響到整個系統的運行效率。本文將從四個方面、五個方面、六個方面和七個方面&#…

python 面對對象 類 補充

isinstance isinstance()&#xff1a;判斷一個實例化對象是否屬于這個類的&#xff0c;isinstance(對象&#xff0c;類) class Man():passclass Women():passa Man()print(isinstance(a, Man)) # True print(isinstance(a, Women)) # False 類的屬性操作 getattr() 獲…

小白windows系統從零開始本地部署大模型全記錄

大家好&#xff0c;最近兩年大語言模型風靡全球&#xff0c;最近&#xff0c;不少開源大模型&#xff0c;將模型部署到自己的電腦上&#xff0c;用個性化的數據微調想必是不少人的愿望&#xff0c;這次&#xff0c;讓我來分享從hugging face上下載部署chatglm3-6b中的經驗。 1.…

自動控制: 最小二乘估計(LSE)、加權最小二乘估計(WLS)和線性最小方差估計

自動控制&#xff1a; 最小二乘估計&#xff08;LSE&#xff09;、加權最小二乘估計&#xff08;WLS&#xff09;和線性最小方差估計 在數據分析和機器學習中&#xff0c;參數估計是一個關鍵步驟。最小二乘估計&#xff08;LSE&#xff09;、加權最小二乘估計&#xff08;WLS&…

conda環境里安裝ffmpeg

遇到的問題 在執行腳本的時候提示&#xff1a; /home/xxx/anaconda3/envs/llm-asr/lib/python3.9/site-packages/pydub/utils.py:170: RuntimeWarning: Couldnt find ffmpeg or avconv - defaulting to ffmpeg, but may not workwarn("Couldnt find ffmpeg or avconv - …

wifi貼碼推廣哪家靠譜?

如今越來越多的人想輕資產創業&#xff0c;WIFI貼碼是共享行業最無成本的創業項目了&#xff0c;而在選擇廠商的時候&#xff0c;大家就想要知道哪家公司靠譜&#xff0c;更好、更便宜、可靠。那么wifi貼碼推廣哪家靠譜&#xff1f;別急&#xff0c;下面小編將帶你一起了解。 目…

OpenAI開始訓練新的前沿模型——但GPT-5至少在90天內不會推出

ChatGPT 制造商 OpenAI 今早宣布&#xff0c;已開始訓練其新的“前沿模型”&#xff0c;并成立了一個新的安全委員會&#xff0c;由現任董事會成員 Bret Taylor&#xff08;OpenAI 董事會主席兼客戶服務初創公司 Sierra AI 聯合創始人、前谷歌地圖負責人和前 Facebook 首席技術…

BGP路由策略實驗

一、實驗拓撲 二、IP分配(骨干) R1&#xff1a; 0/0/0 15.0.0.1 24 0/0/1 18.0.0.2 24 0/0/2 19.0.0.1 24 R2: 0/0/0 16.0.0.1 24 0/0/1 15.0.0.2 24 R3: 0/0/0 17.0.0.2 24 0/0/1 18.0.0.1 24 R4: 0/0/0 16.0…

元宇宙vr工業產品展示空間降低研發成本

元宇宙產品虛擬展廳搭建編輯器為您提供了一個自助式元宇宙場景搭建的絕佳平臺。無論您是設計公司、攝影公司、營銷公司還是教育機構&#xff0c;我們都能為您量身打造專屬的元宇宙解決方案&#xff0c;滿足您的多樣化需求。 元宇宙產品虛擬展廳搭建編輯器具備強大的3D編輯功能&…

藍牙設備中的UUID

文章目錄 一、Device UUID二、Service UUID 一、Device UUID Device UUID也可以被稱作為DeviceID。 Android 設備上掃描獲取到的 deviceId 為外圍設備的 MAC 地址&#xff0c;相對固定。iOS 設備上掃描獲取到的 deviceId 是系統根據外圍設備 MAC 地址及發現設備的時間生成的 …

如何成為AI工程師

AI工程師&#xff08;不是打標員&#xff09;已經成為新一代的熱門崗位&#xff08;高薪、有前景&#xff09;&#xff0c;無論你是計算機科學專業的學生&#xff0c;還是已經在其他技術領域工作的專業人士&#xff0c;可以通過以下幾點來大概了解如何成為AI工程師。 1. 技術技…

【吊打面試官系列】Java高并發篇 - ThreadLocal 是什么?有什么用?

大家好&#xff0c;我是鋒哥。今天分享關于 【ThreadLocal 是什么&#xff1f;有什么用&#xff1f;】面試題&#xff0c;希望對大家有幫助&#xff1b; ThreadLocal 是什么&#xff1f;有什么用&#xff1f; ThreadLocal 是一個本地線程副本變量工具類。主要用于將私有線程和該…