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

springcloud+vue实现图书管理系统

一、前言:

今天我们来分享一下一个简单的图书管理系统
我们知道图书馆系统可以有两个系统,一个是管理员管理图书的系统,管理员可以(1)查找某一本图书情况、(2)增加新的图书、(3)删除旧的图书、(4)查看图书馆有哪些图书、(5)图书类别管理
(6)读者管理 (7)借阅管理
另一个就是作为学生的我们去借书的系统,我们去图书馆可以(1)查找某一本图书的情况、(2)借阅某一本书、(3)归还某一本书、(4)退出管理系统。

二、部分代码实现

1、代码的类、抽象类及接口

(1)book
这个包就是字面意识用来存放书的信息。

(2)operation
这个包存放的是一些操作的实现,如查找图书,退出系统等等(容我慢慢道来)。

(3)user
这个包是用于区分两种不同使用者,而去实现相应的操作。

(4)Main
将以上所说的东西结合起来,从而实现这个图书馆管理系统。

2、代码的具体实现
(1)book
Book类:用于设置一本书的书名、作者、价格、类型、是否被借出的情况

package book;public class Book {private String name;//书名private String author;//作者private int price;//价格private String type;//类型private boolean isBorrowed;//是否被借出// Book构造方法public Book(String name, String author, int price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}
//个个变量的get和set方法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;}//重写toString方法@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +((isBorrowed==true)? "已借出":"未借出")+ '}';}
}

BookList类:一个书架,初始存放三本书,可以添加,删除,查找。

package book;public class BookList {private Book[] books =new Book[10];//创建一个Book类的书组,用来放书private int usedSize;//记录book有多少本书//BookList的构造方法,存放所以书的内容public BookList(){books[0] = new Book("三国演义","罗贯中",19,"小说");books[1] = new Book("西游记","吴承恩",29,"小说");books[2] = new Book("红楼梦","曹雪芹",9,"小说");usedSize = 3;}/**** @param pos pos位置一定是合法的* @return 一本书*/public Book getBook(int pos) {return books[pos];}/**** @param pos pos位置一定是合法的* @param book 你要放的书*/public void setBooks(int pos,Book book) {books[pos] = book;}/*** 实时获取当前的 书的个数* @return*/public int getUsedSize() {return usedSize;}/*** 实时的修改当前书架上的书的个数*/public void setUsedSize(int size) {usedSize = size;}}

(2)operation
IOperation接口:给operation通过work抽象方法

package operation;import book.BookList;//因为每个操作类都要实现work抽象方法,所以创建一个接口,提供work方法
public interface IOperation {void work(BookList bookList) ;
}
AddOperation类:进行添加操作 package operation;import book.BookList;
import book.Book;import java.util.Scanner;public class AddOperation implements IOperation{//重写work方法,添加书籍的信息@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("请输入图书的类型:");String type = scanner.nextLine();System.out.println("请输入图书的价格:");int price = scanner.nextInt();//new一个Book的对象,保持新添加书籍的信息Book book = new Book(name,author,price,type);//重新设置书架书的数量的值int currentSize = bookList.getUsedSize();bookList.setBooks(currentSize,book);bookList.setUsedSize(currentSize+1);System.out.println("新增书籍成功!");}
}BorrowOperation类:进行借书操作package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class BorrowOperation implements IOperation{//重写work方法@Overridepublic void work(BookList bookList) {Scanner sc=new Scanner(System.in);//给借书的人查看所有图书的信息,方便借阅System.out.println("我们图书馆有:");for (int i=0;i< bookList.getUsedSize();i++){Book book=bookList.getBook(i);System.out.println(book);}System.out.println("请问你要借的图书是:");String name = sc.nextLine();//判断书籍是否可以借阅for (int i=0;i< bookList.getUsedSize();i++){Book book=bookList.getBook(i);if (book.getName().equals(name)){System.out.println("找到图书!");if(!book.isBorrowed()){System.out.println("该书未被借出,借书成功!");book.setBorrowed(true);System.out.println(book);break;}}if (i== bookList.getUsedSize()-1)System.out.println("该书已被借出,借书失败!");}}
}

DelOperation类:进行删除操作

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class DelOperation implements IOperation{
//重写work方法@Overridepublic void work(BookList bookList) {System.out.println("删除图书!");Scanner scanner = new Scanner(System.in);System.out.println("请输入要删除图书的名字:");String name = scanner.nextLine();int j=0;for (int i=0;i< bookList.getUsedSize();i++){Book book=bookList.getBook(i);if (book.getName().equals(name)){j=i;break;}}//重新编排书籍的序号for (int i=j;i< bookList.getUsedSize()-1;i++){Book book=bookList.getBook(i+1);bookList.setBooks(i,book);}//更改书籍数量信息int currentSize=bookList.getUsedSize();bookList.setUsedSize(currentSize-1);System.out.println("删除成功!");}
}DisplayOperation类:进行展示操作 package operation;import book.Book;
import book.BookList;public class DisplayOperation implements IOperation{//重写work方法@Overridepublic void work(BookList bookList) {System.out.println("显示图书:");for (int i=0;i< bookList.getUsedSize();i++){Book book=bookList.getBook(i);System.out.println(book);}}
}ExitOperation类:进行退出操作package operation;import book.BookList;public class ExitOperation implements IOperation{//重写work方法public void work(BookList bookList) {System.out.println("退出系统!");//终止当前运行的Java虚拟机。 参数作为状态代码,为零则终止程序System.exit(0);}
}FindOperation类:进行查找操作package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class FindOperation implements IOperation{//重写work方法@Overridepublic void work(BookList bookList) {System.out.println("查找图书!");Scanner scanner = new Scanner(System.in);System.out.println("请输入图书的名字:");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.isBorrowed())? "已借出":"未借出"));System.out.println(book);break;}if (i== bookList.getUsedSize()-1){System.out.println("未找到该图书!");break;}}}
}

ReturnOperation:归还图书

package operation;import book.BookList;
import book.Book;
import java.util.Scanner;public class ReturnOperation implements IOperation{//重写work类@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();
//修改图书状态,是否被借出for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)) {book.setBorrowed(false);System.out.println("归还成功!");return;}}}
}

(3)user
AdminUsers类:用于实现组合管理员用户的功能

package user;import operation.*;import java.util.Scanner;public class AdminUsers extends User {//AdminUsers构造方法public AdminUsers(String name) {super(name);this.operations =new IOperation[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),new DisplayOperation(),};}//设计管理员用户的菜单,实现他们的功能public int menu(){System.out.println("hello "+this.name+"欢迎来到图书馆!");System.out.println("1,查找图书!");System.out.println("2,新增图书!");System.out.println("3,删除图书!");System.out.println("4,显示图书!");System.out.println("0,提出系统!");Scanner sc=new Scanner(System.in);int choice=sc.nextInt();return choice;}
}

NormalUsers类:用于实现组合普通用户的功能

package user;import operation.*;import java.util.Scanner;//继承User类,使得User类可以分别去满足两种不同用户的需求
public class NormalUsers extends User {//NormalUsers构造方法public NormalUsers(String name) {super(name);this.operations =new IOperation[]{new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation()};}//设计管理员用户的菜单,实现他们的功能public int menu(){System.out.println("hello "+this.name+"欢迎来到图书馆!");System.out.println("1,查找图书!");System.out.println("2,借阅图书!");System.out.println("3,归还图书!");System.out.println("0,退出系统!");Scanner sc=new Scanner(System.in);int choice=sc.nextInt();return choice;}}

User类: 该类是user包中另两个类的父类,通过此类来判断用户类型,并加以实现

package user;import book.BookList;
import operation.IOperation;public abstract class User {//两个变量:保存您的姓名 并创建一个IOperation的数组,用于实现相应的操作protected String name;protected IOperation[] operations;public User(String name) {this.name = name;}//通过用户类型来打印相应的菜单public abstract int menu();//选择你想进行的操作public void doOperation(int choice, BookList bookList) {this.operations[choice].work(bookList);}
}

(4)Main函数

import book.BookList;
import user.AdminUsers;
import user.NormalUsers;
import user.User;import java.util.Scanner;public class Main {//判断你的用户类型public static User login(){Scanner sc=new Scanner(System.in);System.out.println("请输入你的姓名:");String name =sc.nextLine();System.out.println("请确认你的身份:1-》管理员,0-》普通用户");int choice=sc.nextInt();if (choice==1)return new AdminUsers(name);elsereturn new NormalUsers(name);}public static void main(String[] args) {BookList bookList=new BookList();User user=login();//实现你想进行的操作while (true){int choice = user.menu();user.doOperation(choice,bookList);}}
}

3、效果展示
在这里插入图片描述
在这里插入图片描述

相关文章:

springcloud+vue实现图书管理系统

一、前言&#xff1a; 今天我们来分享一下一个简单的图书管理系统 我们知道图书馆系统可以有两个系统&#xff0c;一个是管理员管理图书的系统&#xff0c;管理员可以&#xff08;1&#xff09;查找某一本图书情况、&#xff08;2&#xff09;增加新的图书、&#xff08;3&…...

GEE学习笔记 六十:GEE中生成GIF动画

生成GIF动画这个是GEE新增加的功能之一&#xff0c;这一篇文章我会简单介绍一下如何使用GEE来制作GIF动画。 相关API如下&#xff1a; 参数含义&#xff1a; params&#xff1a;设置GIF动画显示参数&#xff0c;详细的参数可以参考ee.data.getMapId() callback&#xff1a;回调…...

react中的useEffect

是函数组件中执行的副作用&#xff0c;副作用就是指每次组件更新都会执行的函数&#xff0c;可以用来取代生命周期。 1. 基本用法 import { useEffect } from "react"; useEffect(()>{console.log(副作用); });2. 副作用分为需要清除的和不需要清除 假如设置…...

故障安全(Crash-Safe) 复制

二进制日志记录是故障安全的:MySQL 仅记录完成的事件或事务使用 sync-binlog 提高安全性默认值是1&#xff0c;最安全的&#xff0c;操作系统在每次事务后写入文件将svnc-binloq 设置为0&#xff0c;当操作系统根据其内部规则写入文件的同时服务器崩溃时性能最好但事务丢失的可…...

Spring aop之针对注解

前言 接触过Spring的都知道&#xff0c;aop是其中重要的特性之一。笔者在开发做项目中&#xff0c;aop更多地是要和注解搭配&#xff1a;在某些方法上加上自定义注解&#xff0c;然后要对这些方法进行增强(很少用execution指定&#xff0c;哪些包下的哪些方法要增强)。那这时就…...

【JavaScript速成之路】JavaScript数据类型转换

&#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f525;系列专栏&#xff1a;【JavaScript速成之路】 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 文章目录前言数据类型转换1&#xff0c;转换为字符串型1.1&#xff0c;利用“”拼接转换成…...

21-绑定自定义事件

绑定自定义事件 利用自定义事件获取子组件的值 父组件给子组件绑定一个自定义事件&#xff0c;实际上是绑定到了子组件的实例对象vc上&#xff1a; <!-- 自定义myEvent事件 --> <Student v-on:myEventgetStudentName/>在父组件中编写getStudentName的实现&#…...

【Mysql】触发器

【Mysql】触发器 文章目录【Mysql】触发器1. 触发器1.1 介绍1.2 语法1.2.1 创建触发器1.2.2 查看触发器1.2.3 删除触发器1.2.4 案例1. 触发器 1.1 介绍 触发器是与表有关的数据库对象&#xff0c;指在insert、update、delete之前(BEFORE)或之后(AFTER)&#xff0c;触发并执行…...

CODESYS开发教程11-库管理器

今天继续我们的小白教程&#xff0c;老鸟就不要在这浪费时间了&#x1f60a;。 前面一期我们介绍了CODESYS的文件读写函数库SysFile。大家可能发现了&#xff0c;在CODESYS的开发中实际上是离不开各种库的使用&#xff0c;其中包括系统库、第三方库以及用户自己开发的库。实际…...

【UnityAR相关】Unity Vuforia扫图片成模型具体步骤

1 资产准备 导入要生成的fbx模型&#xff08;带有材质&#xff09;&#xff0c; 你会发现导入fbx的材质丢失了&#xff1a; 选择Standard再Extract Materials导出材质到指定文件夹下&#xff08;我放在Assets->Materials了 ok啦&#xff01; 材质出现了&#xff0c; 模型…...

2023年全国最新保安员精选真题及答案2

百分百题库提供保安员考试试题、保安职业资格考试预测题、保安员考试真题、保安职业资格证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 21.一般来说&#xff0c;最经济的巡逻方式是&#xff08;&#xff09;。 A:步巡 B:…...

keil5安装了pack包但是还是不能选择device

一开始&#xff0c;我以为是keil5无法安装 STM32 芯片包&#xff0c;打开device倒是可以看到stm公司的芯片包&#xff0c;但是没有我想要的stm32f1。 我按照网上的一些说法&#xff0c;找到了这个STM32F1 的pack芯片包&#xff0c;但是我双击安装的时候&#xff0c;它的安装位…...

秒杀系统设计

1.秒杀系统的特点 瞬时高并发 2.预防措施 2.1.流量限制 对于一个相同的用户&#xff0c;限制请求的频次对于一个相同的IP&#xff0c;限制请求的频次验证码&#xff0c;减缓用户请求的次数活动开启之前&#xff0c;按钮先置灰&#xff0c;防止无效的请求流入系统&#xff0…...

全面认识数据指标体系

什么是数据指标体系&#xff1f; 看了下百度百科&#xff0c;竟然没有数据指标这个词条&#xff0c;看来这个词大家平时还用的不多啊。那只有间接偷懒一下&#xff0c;分别查下指标和数据这两个词条的含义&#xff0c;在组合起来看看。 数据&#xff1a;数据是指对客观事件进…...

热榜首推!阿里内部都在用的Java后端面试笔记,主流技术全在里面了!备战2023Java面试,拿理想offer

纵观今年的技术招聘市场&#xff0c; Java依旧是当仁不让的霸主 &#xff01;即便遭受 Go等新兴语言不断冲击&#xff0c;依旧岿然不动。究其原因&#xff1a;Java有着极其成熟的生态&#xff0c;这个不用我多说&#xff1b;Java在 运维、可观测性、可监 控性方面都有着非常优秀…...

Android架构设计——【 APT技术实现butterknife框架 】

APT简介 APT英文全称&#xff1a;Android annotation process tool是一种处理注释的工具&#xff0c;它对源代码文件进行检测找出其中的Annotation&#xff0c;使用Annotation进行额外的处理。 Annotation处理器在处理Annotation时可以根据源文件中的Annotation生成额外的源文…...

线程的基本概念

文章目录基础概念线程与进程什么是进程&#xff1f;什么是线程&#xff1f;进程和线程的区别&#xff1a;多线程什么是多线程&#xff1f;多线程的局限性串行、并行、并发同步异步、阻塞非阻塞线程的创建1、继承Thread类&#xff0c;重写run方法2、实现Runnable接口&#xff0c…...

java面试题中常见名词注解

一.常见名词注解 1.mysql索引&#xff0c;索引数据结构&#xff0c;hash&#xff0c;二叉树&#xff0c;B树&#xff0c;B树&#xff0c;红黑树&#xff0c; mysql索引&#xff1a;帮助mysql高效获取数据的数据结构&#xff0c;通俗来说&#xff0c;数据库索引就好比一本书的…...

SpringAOP从入门到源码分析大全,学好AOP这一篇就够了(二)

文章目录系列文档索引四、Spring AOP的使用入门1、激活AspectJ模块&#xff08;1&#xff09;注解激活&#xff08;2&#xff09;XML激活2、创建 AspectJ 代理&#xff08;了解&#xff09;&#xff08;1&#xff09;编程方式创建 AspectJ 代理实例&#xff08;2&#xff09;XM…...

华为OD机试 - 斗地主(C++) | 附带编码思路 【2023】

刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...