Java SE--圖書管理系統模擬實現

一.設計思路

首先這個系統可以由倆種用戶使用,分別為管理者用戶和普通者用戶,根據不同的用戶有不同的界面,每個界面有不同的功能。

二.代碼實現

創建三個包和一個類

book包:包括Book類和Booklist類

Book類:

package book;
public class Book {private String name;  private String author;private int price;private String type;private boolean isborrow;
//構造方法public Book(String name, String author, int price, String type) {  //初始化this.name = name;this.author = author;this.price = price;this.type = type;}
//重寫toString方法,利于后續對象的打印@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +", " + ((isborrow==true)?"已借出":"未借出") +'}';}
//public boolean isIsborrow() {      //來判斷是否借出return isborrow;}public void setIsborrow(boolean isborrow) { //來設置是否借出this.isborrow = isborrow;}
}

Booklist類:

package book;public class Booklist {private int brrownum;private Book[] books=new Book[10]; //表示可以放11本書
//構造方法public Booklist() {                //初始化this.books[0]=new Book("三國演義","羅貫中",20,"小說");this.books[1]=new Book("紅樓夢","曹雪芹",20,"小說");this.books[2]=new Book("西游記","吳承恩",20,"小說");this.brrownum=3;         //表示已借出的書}
//封裝成員的訪問方法public int getBrrownum() {   //返回已借出的書的數量return brrownum;}public void setBrrownum(int brrownum) {    //調整刪除或增加時已借出的書的數量this.brrownum = brrownum;}public Book getBook(int pos) {    //得到某本書的位置return books[pos];}public void setBook(Book books,int currentNum) {   //用于新增書this.books[currentNum] = books;}
}

user包:User類、AdminUser類、Normaluser類

User類:

package user;import Opeartion.Operation;
import book.Booklist;public abstract class User {public Operation[] operation;     public abstract int meau();   public void doOpearation(int choice, Booklist booklist){this.operation[choice].work(booklist);}
}

AdminUser類:

public class AdminUser extends User{public AdminUser(){               //每個數組成員代表了不同的功能this.operation=new Operation[]{new ExitSystem(),new FindBook(),new AddBook(), new DelBook(),new ShowBook()};}@Override         //重寫了抽象父類User的方法public int meau(){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("***********************");System.out.println("其輸入你的選擇:");Scanner scanner=new Scanner(System.in);int choice=scanner.nextInt();return choice;}
}

Normaluser類:

import Opeartion.*;import java.util.Scanner;public class Normaluser extends User {public Normaluser(){this.operation=new Operation[]{new ExitSystem(),new FindBook(),new BorrowBook(),new ReturnBook(),};}@Overridepublic int meau(){System.out.println("***********************");System.out.println("1. 查找圖書");System.out.println("2. 借閱圖書");System.out.println("3. 歸還圖書");System.out.println("0. 退出系統");System.out.println("***********************");System.out.println("其輸入你的選擇:");Scanner scanner=new Scanner(System.in);int choice=scanner.nextInt();return choice;}
}

Operation包:包括了各種功能的類和一個接口

Operation接口:

package Opeartion;import book.Booklist;public interface Operation {  void work(Booklist booklist);
}

ReturnBook類:

package Opeartion;import book.Booklist;import java.util.Scanner;public class ReturnBook implements Operation{@Overridepublic void work(Booklist booklist) {System.out.println("歸還圖書....");Scanner scanner =new Scanner(System.in);System.out.println("請輸入歸還書的名字:");String name=scanner.nextLine();int currentSize=booklist.getBrrownum();   //利用改變量進行數組遍歷for (int i = 0; i < currentSize; i++) {if (booklist.getBook(i).getName().equals(name)){booklist.getBook(i).setIsborrow(false);System.out.println("歸還成功!");return;}}System.out.println("沒有你要歸還的書.....");}
}

AddBook類:

package Opeartion;import book.Book;
import book.Booklist;import java.util.Scanner;public class AddBook implements Operation {@Overridepublic 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();    scanner.nextLine();            //清除換行符System.out.println("請輸入新增書的類型:");String type =scanner.nextLine();int currentSize=booklist.getBrrownum();for (int i = 0; i < currentSize; i++) {if (booklist.getBook(i).getName().equals(name)){System.out.println("已有這本書了,不能插入!");return;}}Book newbook =new Book(name,author,price,type);  //創建新書booklist.setBook(newbook,currentSize);booklist.setBrrownum(currentSize+1);System.out.println("新增成功!");}
}

BorrowBook類:

package Opeartion;import book.Booklist;import java.util.Scanner;public class BorrowBook implements Operation{@Overridepublic void work(Booklist booklist) {System.out.println("借閱圖書");Scanner scanner =new Scanner(System.in);System.out.println("請輸入借閱書的名字:");String name=scanner.nextLine();int currentSize=booklist.getBrrownum();for (int i = 0; i < currentSize; i++) {if (booklist.getBook(i).getName().equals(name)){if(booklist.getBook(i).isIsborrow()){System.out.println("該書已被借出了");return;}else {booklist.getBook(i).setIsborrow(true);System.out.println("借閱成功!");return;}}}System.out.println("沒有你要找的書,借閱失敗!");}
}

ExitSystem類:

package Opeartion;import book.Booklist;public class ExitSystem implements Operation{@Overridepublic void work(Booklist booklist) {System.out.println("退出系統...");System.exit(0);  //退出系統}
}

ShowBook類:

package Opeartion;import book.Booklist;import java.util.Scanner;public class ShowBook implements Operation{@Overridepublic void work(Booklist booklist) {System.out.println("顯示圖書....");Scanner scanner =new Scanner(System.in);int currentSize=booklist.getBrrownum();for (int i = 0; i < currentSize; i++) {System.out.println(booklist.getBook(i));}}}

DelBook類:

package Opeartion;import book.Book;
import book.Booklist;import java.util.Scanner;public class DelBook implements Operation{@Overridepublic void work(Booklist booklist) {System.out.println("刪除圖書...");Scanner scanner =new Scanner(System.in);System.out.println("請輸入刪除書的名字:");String name=scanner.nextLine();int currentSize=booklist.getBrrownum();int pos =1;int i=0;for (i = 0; i < currentSize; i++) {if (booklist.getBook(i).getName().equals(name)){pos=i;break;}}if (i==currentSize){System.out.println("沒有你刪除的書!");return;}for (int j = i; j < currentSize-1; j++) {   //currentSize-1 是防止指針越界booklist.setBook(booklist.getBook(j+1),j);}booklist.setBook(null,currentSize-1);   //為空指針后其對象會被收回booklist.setBrrownum(currentSize-1);System.out.println("刪除成功!");}
}

FindBook類:

package Opeartion;import book.Booklist;import java.util.Scanner;public class FindBook implements Operation{@Overridepublic void work(Booklist booklist) {System.out.println("查找圖書....");Scanner scanner =new Scanner(System.in);System.out.println("請輸入查找書的名字:");String name=scanner.nextLine();int currentSize=booklist.getBrrownum();for (int i = 0; i < currentSize; i++) {if (booklist.getBook(i).getName().equals(name)){System.out.println("找到了!");System.out.println(booklist.getBook(i));return;}}System.out.println("沒有你要找的書.....");}
}

Main類:

import book.Booklist;
import user.AdminUser;
import user.Normaluser;
import user.User;import java.util.Scanner;public class Main {public static User login(){System.out.println("其輸入你的名字:");Scanner scanner =new Scanner(System.in);String name =scanner.nextLine();while (true){System.out.println("請輸入你的身份:1.管理員  2.用戶");int choice =scanner.nextInt();if(choice==1){return new AdminUser();}else if (choice==2){return new Normaluser();}else {System.out.println("輸入錯誤請重新輸入");}}}public static void main(String[] args) {Booklist booklist=new Booklist();User user =login();   //打印界面while (true){int choice=user.meau();  //打印對應的菜單user.doOpearation(choice,booklist);}}
}

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

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

相關文章

[RPA] 批量數據抓取指定商品名稱信息

影刀RPA案例&#xff1a;批量數據抓取指定商品名稱信息流程圖&#xff1a;操作步驟&#xff1a;涉及的影刀RPA大致指令&#xff1a; 1. 打開影刀商城頁面 2. 使用【填寫輸入框(web)】指令輸入用戶名和密碼&#xff0c;并點擊"登錄"按鈕 3. 切換到"訂單管理"…

我的世界Java版1.21.4的Fabric模組開發教程(十四)方塊實體

這是適用于Minecraft Java版1.21.4的Fabric模組開發系列教程專欄第十四章——方塊實體。想要閱讀其他內容&#xff0c;請查看或訂閱上面的專欄。 方塊實體(Block Entity) 指的是一種用于存儲方塊額外數據的方法。但這種數據和為了控制方塊狀態而在自定義方塊類中創建的屬性不太…

【UE教程/進階】UE中的指針與引用

目錄直接屬性引用共享指針 TSharedPtr實現原理共享引用 TSharedRef弱引用指針 TWeakPtrObject弱指針 FWeakPtr實現原理Object軟指針 FSoftObjectPtr原理直接屬性引用 在c通過UPROPERTY()宏將屬性公開&#xff0c;藍圖中屬性類型中的Object Reference。 對一個類型及其子類型的…

早期 CNN 的經典模型—卷積神經網絡(LeNet)

目錄 LeNet 的設計背景與目標 LeNet 的網絡結構&#xff08;經典 LeNet-5&#xff09; 局部感受野詳解 一、局部感受野和全連接網絡的區別 1. 傳統全連接網絡的問題 2. 局部感受野的解決方案 二、局部感受野的優勢 1. 參數大幅減少 2. 提取局部特征 3. 平移不變性 參數…

RabbitMQ 高級特性之延遲隊列

1. 簡介 在某些場景下&#xff0c;當生產者發送消息后&#xff0c;可能不需要讓消費者立即接收到&#xff0c;而是讓消息延遲一段時間后再發送給消費者。 2. 實現方式 2.1 TTL 死信隊列 給消息設置過期時間后&#xff0c;若消息在這段時間內沒有被消費&#xff0c;就會將消…

uniapp app安卓下載文件 圖片 doc xls 數據流文件 app安卓本地路徑下載保存

//下載圖片 downloadToLocal() {plus.android.requestPermissions([android.permission.WRITE_EXTERNAL_STORAGE],(success) > {uni.saveImageToPhotosAlbum({filePath: /static/x.png,//本地地址success: () > {this.$refs.uToast.show({message: "模版下載成功&am…

Context Engineering:從Prompt Engineering到上下文工程的演進

最近在做Deepresearch以及刷到一個不錯的文章&#xff1a;context-engineering-guide &#xff0c;這篇文章揭示了提示工程以及上下文過程在智能體應用開源流程中&#xff0c;包括Deepresearch&#xff0c;MCP在內的一些概念&#xff0c;起到了非常重要的作用&#xff01; Cont…

jenkins部署vue前端項目

文章目錄前言一、安裝nginx二、jenkins構建項目總結前言 前面已經使用jenkins部署了后端springboot項目&#xff0c;現在開始學習jenkins部署前端Vue項目。 一、安裝nginx 訪問nginx官網&#xff0c;https://nginx.org/en/download.html下載tar包 上傳到服務器目錄中 然后到…

設計總監年中復盤:用Adobe XD內容識別布局,告別“手動調距”

時至年中&#xff0c;這不僅是檢視上半年項目成果的節點&#xff0c;更是優化團隊工作流、為下半年挑戰儲備動能的關鍵時期。在海外設計界工作的十余年間&#xff0c;我發現&#xff0c;一個高效的設計團隊與一個疲于奔命的團隊之間&#xff0c;最大的差別往往就在于是否建立了…

Unity 在Rider中通過Lingma插件使用MCP

環境&#xff1a; Unity 2022.3.12f1 JetBrains Rider 2025.1.4 Lingma 2.5.14 Python 3.13.4 下載包 首先在unity package manager 加入unity-mcp包 https://github.com/justinpbarnett/unity-mcp.git 然后下載uv包&#xff08;要先先下載python&#xff09;,網上很多…

pycharm+SSH 深度學習項目 遠程后臺運行命令

pycharmSSH 深度學習項目 遠程后臺運行命令碎碎念&#xff0c;都是實驗室里那說關機就關機&#xff0c;說重啟就重啟的臺式機逼得。。學吧記錄 運行&#xff1a;nohup /root/miniconda3/bin/python -u "run.py" > /root/log/nohup.log 2>&1 &實時查看日…

【Linux | 網絡】應用層(HTTP)

目錄一、認識URL二、urlencode和urldecode三、HTTP協議格式&#xff08;使用Fiddler抓包&#xff09;3.1 安裝并使用Fiddler抓包3.2 HTTP協議格式3.2.1 HTTP請求3.2.1.1 資源URL路徑3.2.1.2 請求方法&#xff08;Method&#xff09;3.2.1.3 Location頭字段&#xff08;重定向相…

編程實踐:單例模式(懶漢模式+餓漢模式)

說明:本專欄文章有兩種解鎖方案 1:付費訂閱,暢享所有文章 2:免費獲取,點擊下方鏈接,關注,自動獲取免費鏈接 https://free-img.400040.xyz/4/2025/04/29/6810a50b7ac8b.jpg 主題:C++ 單例模式 什么是單例模式

破局電機制造四大痛點:MES與AI視覺的協同智造實踐

萬界星空科技電機行業MES系統解決方案是針對電機制造過程中多工序協同難、質量追溯復雜、設備管理要求高等痛點設計的數字化管理系統。一、電機行業的核心痛點1. 多工序協同困難 電機制造涉及繞線、裝配、測試等多道工序&#xff0c;工藝銜接復雜&#xff0c;傳統人工調度效率…

HTML 初體驗

HTML&#xff08;超文本標記語言&#xff09;全稱&#xff1a;HyperText Markup Language。超文本是什么&#xff1f;答&#xff1a;超文本就是網頁中的鏈接。標記是什么&#xff1f;答&#xff1a;標記也叫標簽&#xff0c;是帶尖括號的文本。需求1&#xff1a;將“我愛中國”…

網絡層TCP機制

1.確認應答機制由于發送信息的距離可能較遠,可能出現后發的信息先到的情況,怎么辦?TCP將每個字節的數據都進行了編號,即為序列號如何分辨一個數據包是普通數據還是應答數據呢2.超時重傳由于丟包是一個隨機的事件,因此在上述tcp傳輸的過程中,丟包就存在兩種情況但是在發送方的角…

【一起來學AI大模型】微調技術:LoRA(Low-Rank Adaptation) 的實戰應用

LoRA&#xff08;Low-Rank Adaptation&#xff09; 的實戰應用&#xff0c;使用 Hugging Face 的 peft (Parameter-Efficient Fine-Tuning) 庫對大型語言模型進行高效微調。LoRA 因其顯著降低資源消耗&#xff08;顯存和計算&#xff09;同時保持接近全量微調性能的特點&#x…

RedisJSON 內存占用剖析與調優

一、基礎內存模型指針包裝 所有 JSON 值&#xff08;標量、對象、數組、字符串等&#xff09;至少占用 8 字節&#xff0c;用于存儲一個帶類型標記的指針。標量與空容器 null、true、false、小整數&#xff08;靜態緩存&#xff09;、空字符串、空數組、空對象 均不分配額外內存…

【LeetCode 熱題 100】23. 合并 K 個升序鏈表——(解法一)逐一合并

Problem: 23. 合并 K 個升序鏈表 題目&#xff1a;給你一個鏈表數組&#xff0c;每個鏈表都已經按升序排列。 請你將所有鏈表合并到一個升序鏈表中&#xff0c;返回合并后的鏈表。 文章目錄整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(K * N)空間復雜度&#xff1a;O(1…

垃圾收集器-Serial Old

第一章 引言1.1 JVM 中垃圾收集的簡要概述JVM&#xff08;Java Virtual Machine&#xff09;作為 Java 程序的運行時環境&#xff0c;負責將字節碼加載至內存并執行&#xff0c;同時也承擔著內存管理的重任。垃圾收集&#xff08;Garbage Collection&#xff0c;簡稱 GC&#x…