当前位置: 首页 > news >正文

Java---图书管理系统(练习版)

1.主函数

import book.Book;
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();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);}}
}

2.user包

2.1User类

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

2.2AdminUser类-----管理员

import java.util.Scanner;public class AdminUser extends User{public AdminUser(String name) {super(name);this.ioPerations=new IOPeration[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DeleteOperation(),new ShowOperation(),};}@Overridepublic 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("********************");System.out.println("请输入你的操作:");Scanner scanner=new Scanner(System.in);int choice=scanner.nextInt();return choice;}
}

2.3NormalUser类----普通成员

mport ioperation.*;import java.util.Scanner;public class NormalUser extends User{public NormalUser(String name) {super(name);this.ioPerations=new IOPeration[]{new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation()};}@Overridepublic int menu() {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;}
}

3.book包

3.1Book类

package 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=" + ((isBorrowed==true)?"已经借出":"未借出") +'}';}
}

3.2 BookList类

package book;public class BookList {//将书存在书架中private Book[] books=new Book[10];//存10本书private int usedSize;//记录书的数量public BookList() {this.books[0]=new Book("三国演义","罗贯中",18,"小说");this.books[1]=new Book("西游记","吴承恩",8,"小说");this.books[2]=new Book("红楼梦","曹雪芹",12,"小说");this.usedSize=3;}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;}
}

4. ioperation包--实现增删查改

4.1 接口IOperation

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

4.2 ExitOperation类----退出系统

package ioperation;import book.BookList;public class ExitOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("你已经退出图书系统");System.exit(0);}
}

4.3 ShowOperation类----展现书籍

package ioperation;import book.Book;
import book.BookList;public class ShowOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("书籍展现");//获取书籍的数量int currentSize=bookList.getUsedSize();int i=0;for(;i<currentSize;i++){System.out.println(bookList.getBook(i));}}
}

4.4 FindOperation类----实现书籍的查询

package ioperation;import book.Book;
import book.BookList;import java.util.Scanner;public class FindOperation implements IOPeration{@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++){Book book=bookList.getBook(i);if(book.getName().equals(name)){System.out.println(book);}}System.out.println("没有你想要找的书");}
}

4.5 BorrowOperation类----实现书籍的借阅

import book.Book;
import book.BookList;import java.util.Scanner;public class BorrowOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("图书借阅");System.out.println("请输入你要借的图书的名字");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();int currentSize= bookList.getUsedSize();int i=0;for(;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("没有你想借的书");}
}

4.6 ReturnOperation类----实现书籍的返还

package ioperation;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.println("请输如你要归还的书名");String name=scanner.nextLine();int currentSize= bookList.getUsedSize();int i=0;for(;i<currentSize;i++){Book book=bookList.getBook(i);if(book.getName().equals(name)){book.setBorrowed(false);System.out.println("归还成功");return;}}System.out.println("没有你想要归还的数据");return;}
}

4.7 DeleteOperation类---实现书籍的删除

package ioperation;import book.Book;
import book.BookList;import java.util.Scanner;public class DeleteOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("图书删除");Scanner scanner=new Scanner(System.in);System.out.println("输入你想删除的书名");String name=scanner.nextLine();int currentSize=bookList.getUsedSize();int i=0;//找到这本书int pos=-1;for(;i<currentSize;i++){Book book=bookList.getBook(i);if(book.getName().equals(name)){pos=i;break;}}//判断有无删除的书if(i==currentSize){System.out.println("没有你要删除的书");return;}//删除操作int j=pos;for(;j<currentSize-1;j++){Book book=bookList.getBook(j+1);bookList.setBook(j,book);}bookList.setUsedSize(currentSize-1);System.out.println("删除成功");}
}

4.8 AddOperation类----实现书籍的增加

package ioperation;import book.Book;
import book.BookList;import javax.script.ScriptContext;
import java.util.Scanner;public class AddOperation implements IOPeration{@Overridepublic void work(BookList bookList) {//判断是否满书int currentSize=bookList.getUsedSize();//获取数组if(currentSize==bookList.getBooks().length){System.out.println("书架已满");return;}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("输入类型");String type=scanner.nextLine();System.out.println("输入价格");int price=scanner.nextInt();Book newBook=new Book(name,author,price,type);bookList.setBook(currentSize,newBook);System.out.println("增加成功");bookList.setUsedSize(currentSize+1);return;}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章:

Java---图书管理系统(练习版)

1.主函数 import book.Book; 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 sc…...

ICML2024 定义新隐私保护升级:DP-BITFIT新型微调技术让AI模型学习更安全

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; 引言&#xff1a;差分隐私在大模型微调中的重要性和挑战 在当今的深度学习领域&#xff0c;大型预训练模型的微调已成为提高各种任务性能的关键技术。然而&am…...

网络空间安全数学基础·整除与同余

主要内容&#xff1a; 整除的基本概念&#xff08;掌握&#xff09; 素数&#xff08;掌握&#xff09; 同余的概念&#xff08;掌握&#xff09; 1.1整除 定义&#xff1a;设a&#xff0c;b是任意两个整数&#xff0c;其中b≠0&#xff0c;如果存在一个整数q&#xff0c;使 …...

同旺科技 FLUKE ADPT 隔离版发布 ---- 说明书

所需设备&#xff1a; 1、FLUKE ADPT 隔离版 内附链接&#xff1b; 应用于&#xff1a;福禄克Fluke 12E / 15BMax / 17B Max / 101 / 106 / 107 应用于&#xff1a;福禄克Fluke 15B / 17B / 18B...

云计算-角色、特性和模型 (Roles, Characteristics, and Models)

角色、特性和模型 (Roles, Characteristics, and Models) 角色和边界 (Roles and Boundaries) 为了识别云计算模型&#xff0c;我们首先需要了解各种参与者的角色和边界。由于云系统通常遵循面向服务的模型&#xff0c;我们需要了解服务提供者和服务订阅者之间的边界。我们将遵…...

介绍一下Hugging Face,这个公司的背景是什么

Hugging Face是一家成立于2016年的人工智能公司&#xff0c;专注于为AI研究人员和开发者提供开源模型库和工具。以下是关于Hugging Face公司的详细背景介绍&#xff1a; 公司历史与创始人&#xff1a; Hugging Face由Clment Delangue、Julien Chaumond和Thomas Wolf三位法国籍…...

【C++高阶(一)】继承

目录 一、继承的概念 1.继承的基本概念 2.继承的定义和语法 3.继承基类成员访问方式的变化 ​编辑 4.总结 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 1.派生类中的默认构造函数 2.派生类中的拷贝构造函数 3.派生类中的移动构造函数…...

AI原生嵌入式矢量模型数据库ChromaDB-部署与使用指南

在人工智能大模型领域&#xff0c; 离不开NLP技术&#xff0c;在NLP中词向量是一种基本元素&#xff0c;如何存储这些元素呢&#xff1f; 可以使用向量数据库ChromeDB Chroma Chroma 是 AI 原生开源矢量数据库。Chroma 通过为 LLM 提供知识、事实和技能&#xff0c;使构建 L…...

c# 画一个正弦函数

1.概要 c# 画一个正弦函数 2.代码 using System; using System.Drawing; using System.Windows.Forms;public class SineWaveForm : Form {private const int Width 800;private const int Height 600;private const double Amplitude 100.0;private const double Period…...

Docker学习(3):镜像使用

当运行容器时&#xff0c;使用的镜像如果在本地中不存在&#xff0c;docker 就会自动从 docker 镜像仓库中下载&#xff0c;默认是从 Docker Hub 公共镜像源下载。 一、列出镜像列表 可以使用 docker images 来列出本地主机上的镜像。 各个选项说明&#xff1a; REPOSITORY&am…...

【Git】版本控制工具——Git介绍及使用

目录 版本控制版本控制系统的主要目标分类小结 分布式版本控制系统——GitGit特点Git与SVN的区别Git的工作机制 Git安装Git 团队协作机制团队内协作跨团队协作远程仓库远程仓库的作用有以下几个方面远程仓库操作流程/团队协作流程 Git分支什么是分支分支的好处 Git的常用命令Gi…...

面试八股之JVM篇3.6——垃圾回收——强引用、弱引用、虚引用、软引用

&#x1f308;hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;一名不断学习的码农&#xff0c;很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 &#x1f3c3;人生之义&#xff0c;在于追求&#xff0c;不在成败&#xff0c;勤通…...

博客摘录「 Sql Server 收缩日志文件原理及always on 下的实践」2024年5月22日

四、Always on 环境下实践   先对数据库进行完整备份&#xff1a; EXEC sp_configure show advanced options, 1; RECONFIGURE; EXEC sp_configure xp_cmdshell, 1; RECONFIGURE; DECLARE DbName NVARCHAR(1000); DECLARE myCursor CURSOR LOCAL STATIC FOR S…...

每日一题(5)——StringBuffer操作

编写程序&#xff0c;对StringBuffer对象进行追加&#xff0c;插入和修改缓冲区长度等操作&#xff1b; class StringDemo{public static void main(String[] args){boolean btrue;int i321;long l123456;String s1new String("Hello,world!");StringBuffer s2new S…...

默认路由实现两个网段互通实验

默认路由实现两个网段互通实验 **默认路由&#xff1a;**是一种特殊的静态路由&#xff0c;当路由表中与数据包目的地址没有匹配的表项时&#xff0c;数据包将根据默认路由条目进行转发。默认路由在某些时候是非常有效的&#xff0c;例如在末梢网络中&#xff0c;默认路由可以…...

ComfyUI完全入门:图生图局部重绘

大家好&#xff0c;我是每天分享AI应用的萤火君&#xff01; 这篇文章的主题和美女有关&#xff0c;不过并不是教大家生产美女视频&#xff0c;而是讲解 ComfyUI 的图生图局部重绘&#xff0c;其中将会以美女图片为例&#xff0c;来展示局部重绘的强大威力。 先看看效果&…...

基于UDP的网络多人聊天室

UDP服务器 #include <myheader.h>//宏定义打印错误信息 #define PRINT_ERR(msg) \do \{ \printf("%S,%D,%S\n",__FI…...

美国FDA认证是什么,食品FDA注册申请流程

​美国FDA认证是什么&#xff1f; 美国FDA认证&#xff0c;全称为美国食品药品监督管理局&#xff08;Food and Drug Administration&#xff09;的认证&#xff0c;是美国政府为了确保食品、药品、医疗器械等产品的安全性和有效性所设立的重要制度。FDA认证的种类繁多&#x…...

golang的context和chan 的使用

1. context 作用 context包的context的接口&#xff0c;主要是控制协程执行上下文的时间&#xff0c;以及取消程序的执行&#xff0c;以及上下文中传递数据等作用&#xff0c;golang中耗时或者需要协同的操作都会见到context的身影。 context有几个常用的方法 1.1 context.B…...

洛谷P3574 [POI2014] FAR-FarmCraft(树形dp)

洛谷 P 3574 [ P O I 2014 ] F A R − F a r m C r a f t &#xff08;树形 d p &#xff09; \Huge{洛谷P3574 [POI2014] FAR-FarmCraft&#xff08;树形dp&#xff09;} 洛谷P3574[POI2014]FAR−FarmCraft&#xff08;树形dp&#xff09; 文章目录 题意题目说明 思路标程 题目…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序&#xff0c;无论是测试应用程序、搜寻漏洞还是收集情报&#xff0c;它们都能提升工作流程。 FoxyProxy 代理管理工具&#xff0c;此扩展简化了使用代理&#xff08;如 Burp…...