springcloud+vue实现图书管理系统

news2025/7/19 20:12:17

一、前言:

今天我们来分享一下一个简单的图书管理系统
我们知道图书馆系统可以有两个系统,一个是管理员管理图书的系统,管理员可以(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方法
    @Override
    public 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方法,添加书籍的信息
    @Override
    public 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方法
    @Override
    public 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方法
    @Override
    public 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方法
    @Override
    public 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方法
    @Override
    public 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类
    @Override
    public 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);
        else
            return 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、效果展示
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/361393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python+Selenium4三大等待预期条件_web自动化(4)

目录 0. 上节回顾 1. 定位失败的原因 2. 强制等待 3. 隐式等待 4. 显式等待 【重点难点】 4.1. 实例化 WebDriverWait 对象 4.2. 指定等待条件 4.3. 等待条件的具体要求 4.3. 1. 等待条件是一个函数 4.3. 2. 返回值是布尔值 4.3. 3. 只有一个参数&#xff0c;参数值…

查询服务器tns文件路径,oracle数据库tns配置方法详解

查询服务器tns文件路径,oracle数据库tns配置方法详解 TNS简要介绍与应用 Oracle中TNS的完整定义&#xff1a;transparence Network Substrate透明网络底层&#xff0c; 监听服务是它重要的一部分&#xff0c;不是全部&#xff0c;不要把TNS当作只是监听器。 TNS是Oracle Net…

scrum敏捷开发实践—leangoo任务看板

任务板展现了我们在Sprint过程中所有要完成的任务。在Sprint过程中我们要不断的更新它。–如果某个开发人员想到了一个任务他就可以把这个任务写下来放在任务墙上。无论每日站会过程中或者之后&#xff0c;如果估计发生了变化&#xff0c;任务会根据变化在任务墙上做相应的调整…

云业务成本的组成与管理趋势

在过去几年里&#xff0c;社会经济环境对云服务的采用产生了巨大的影响。如今&#xff0c;全球各规模公司都在加速数字化转型&#xff0c;包括转向基于云的应用程序&#xff0c;以支持远程工作人员&#xff0c;同时迅速推出新的云服务来更好地留住客户。在诸多经济环境不稳定因…

linux部署zookeeper

linux部署zookeeper 1、单机部署zk ZooKeeper服务器是用Java创建的&#xff0c;它需要在JVM上运行&#xff0c;所以需要使用JDK1.6及以上版本&#xff0c;一般都是jdk1.8。 选择自己安装本地的jdk&#xff0c;而不是centos自带的openjdk。 查看本地安装的jdk&#xff1a; j…

vue中go.js的使用教学(四:模型及模板)

目录 一、使用代码构建图表 二、使用模型和模板 a、创建基础图表 b、定义模板&#xff08;将节点模板定义为我们上面所做的特定节点构造的泛化&#xff09; 三、使用数据绑定参数化节点 a、使用数据绑定参数化节点 扩展&#xff1a;修改模型 一、使用代码构建图表 场景&…

Goreplay使用教程0221

1、简介Goreplay 是用 Golang 写的一个HTTP 实时流量复制工具。功能更强大&#xff0c;支持流量的放大、缩小&#xff0c;频率限制&#xff0c;还支持把请求记录到文件&#xff0c;方便回放和分析&#xff0c;也支持和 ElasticSearch 集成&#xff0c;将流量存入 ES 进行实时分…

2023 Softing在线培训计划

通过以实践为导向的培训课程提高能力 小型和模块化的培训研讨会&#xff0c;是一种以实践为导向的用户研讨会&#xff0c;并结合了深厚的理论知识。通过Softing的初级和高级研讨会&#xff0c;我们将帮助您应对日常挑战。我们还为初学者和高级用户提供了有关车辆诊断和通信工具…

一维,二维差分の详解(简单易懂)

一,差分定义差分,就是前缀和的逆运算。二,具体过程1.一维差分例题构造差分数组首先给定一个原数组a&#xff1a;a[1], a[2], a[3],,,,,, a[n];然后我们构造一个数组b &#xff1a; b[1], b[2], b[3],,,,,, b[i];使得 a[i] b[1] b[2] b[3] ,,,,,, b[i]也就是说&#xff0c;…

数据挖掘,计算机网络、操作系统刷题笔记52

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记52 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…

【Linux】vim的使用及常用快捷键(不会使用vim?有这篇文章就够了)

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 目录&#x1f496;vim的基本概念vi…

C语言——动态内存管理

目录0. 思维导图&#xff1a;1. 为什么存在动态内存分配2. 动态内存函数介绍2.1 malloc和free2.2 calloc2.3 realloc3. 常见的动态内存错误3.1 对NULL指针的解引用操作3.2 对动态内存开辟的空间越界访问3.3 对非动态开辟内存使用free释放3.4 使用free释放一块动态开辟内存的一部…

读书笔记//来自公众号(2)

非常喜欢阅读同行的文章&#xff0c;彷佛进行一场隔空交流。大家都是数据分析师&#xff0c;有许多共鸣&#xff1b;了解数据分析在不同行业的应用&#xff0c;往往很有收获。 这位朋友在零售行业、工业物联网、汽车互联网、2G电商等做个数据分析&#xff0c;有10多工作经验。…

【STC8A8K64D4开发板】——搭建开发环境

第1-2讲&#xff1a;搭建开发环境 需要安装的工具软件 表1&#xff1a;需要的工具软件 序号 软件工具 说明 1 Keil C51 9.52安装文件 Keil C51集成开发环境。 2 ch341ser驱动 USB最新驱动可到沁恒官网下载&#xff1a;www.wch.cn/downloads/CH341SER_EXE.html 3 st…

JVM运行时数据区

在上篇文章中我们详细介绍了JVM类加载子系统&#xff1a;https://blog.csdn.net/u011837804/article/details/129049418&#xff0c;Class文件被类加载子系统加载后就进入到了运行时数据区等待执行引擎执行&#xff0c;运行时数据区也是JVM中最重要的一部分&#xff0c;GC、OOM…

基于springboot+mybatis+mysql+vue运动会报名管理系统

基于springbootmybatismysqlvue运动会报名管理系统一、系统介绍二、功能展示1.用户登陆2.报名详情(运行员)3.比赛报名&#xff08;运动员&#xff09;4.个人参赛项目&#xff08;运动员&#xff09;5.加油稿展示&#xff08;运动员&#xff09;6.学院积分排名&#xff08;运动员…

Spring MVC 源码 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping

HandlerMapping 组件HandlerMapping 组件&#xff0c;请求的处理器匹配器&#xff0c;负责为请求找到合适的 HandlerExecutionChain 处理器执行链&#xff0c;包含处理器&#xff08;handler&#xff09;和拦截器们&#xff08;interceptors&#xff09;handler 处理器是 Objec…

K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示

K_A12_022 基于STM32等单片机驱动VL53L0X模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明UART对应程序:IIC对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCVL53L0X模块1.2、STM32F103C8T6VL53L0X模块五、基础知识学习与相关资料下载六、…

打印流、转换流、数据流 、随机访问流

Java知识点总结&#xff1a;想看的可以从这里进入 目录5、打印流6、转换流7、数据流8、随机访问流5、打印流 实现将基本数据类型的数据格式转化为字符串输出&#xff0c;它们提供了一系列重载的print()和println()方法&#xff0c;用于多种数据类型的输出&#xff0c;这种流不会…

基于react+typescript的前端组件库violet-design(字节青训营项目)

文章目录前言一、项目介绍&#x1f48c; 介绍特性兼容性&#x1f4e6; 安装使用 npm 安装使用 yarn 安装浏览器引入&#x1f528; 示例1. 引入样式2. 使用组件按需加载TypeScript✨ 组件&#x1f517; 链接二、项目实现2.1 技术选型2.2 架构设计2.2.1 目标用户和场景2.2.2 组件…