java图书管理系统(简易)

news2024/11/17 22:15:04

实现的基本功能:

登录时,需要输入姓名,然后选择作为管理者还是普通用户。选择成功后选择想要实现的功能。管理者的目录下方有有五个功能,而普通用户有4个功能,如下图

首先我们要建立Book这个类,里面包含书本的详细信息

public class Book {
    private String name;
    private String author;
    private int price;
    private String type;
    private boolean isLend;

    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 isLend() {
        return isLend;
    }

    public void setLend(boolean lend) {
        isLend = lend;
    }

    public String toString() {
        return "book{" +
                "书名 " + name + "  " +
                "作者 " + author + "  " +
                "价格 " + price +
                "类型 " + type + "  " +
                "是否借出 " + (isLend?"已借出":"未借出") +
                '}';
    }

}

要设置一个书架,里面建立一个数组来放书:

 private Book[] books=new Book[10];
    private int usedSize;

    public BookList() {
        books[0]=new Book("三国演义","罗贯中",10,"小说");
        books[1]=new Book("西游记","吴承恩",12,"小说");
        books[2]=new Book("红楼梦","曹雪芹",11,"小说");
        this.usedSize =3;
    }

    public int getUsedSize() {
        return usedSize;
    }

    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }

    public Book[] getBooks() {
        return books;
    }

    public void setBooks(Book[] books) {
        this.books = books;
    }
    public Book getBook(int pos){
        return books[pos];
    }
    public void setBook(Book book,int pos){
        books[pos]=book;
    }
    public boolean isFull(){
        if(this.usedSize==books.length){
            return true;
        }else {
            return false;
        }
    }
}

设置主函数:

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.doOperation(choice, bookList);
        }

    }

面对的有两类人,一类为普通用户,另一类为管理者,建立两个类,他们均继承User这个类,因为这个User这个类不用实现对象,所以为一个抽象类

public abstract class User  {
    private String name;
    IOperation [] iOperations=new IOperation[]{};

    public User(String name) {
        this.name = name;

    }
    public  abstract int menu();
    public void doOperation(int choice, BookList bookList){
        this.iOperations[choice].work(bookList);
    }

}
public class AdminUser extends User{

    public AdminUser(String name) {
        super(name);
        this.iOperations=new IOperation[]{new ExitSystem(),
                new FindBook(),new AddBook(),new DelBook(),new ShowBook()};
    }
    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("**************************");
        System.out.println("请输入你操作");
        Scanner scanner=new Scanner(System.in);
        int choice=scanner.nextInt();
        return choice;

    }
}
public class NormalUser extends User {

    public NormalUser(String name) {
        super(name);
        this.iOperations=new IOperation[]{new ExitSystem(),
                new FindBook(),new LendBook(),new ReturnBook()};
    }
    public int  menu(){
        System.out.println("********普通用户菜单*********");
        System.out.println("1,查找图书");
        System.out.println("2,借阅图书");
        System.out.println("3,归还图书");
        System.out.println("0,退出系统");
        Scanner scanner=new Scanner(System.in);
        int choice=scanner.nextInt();
        return choice;

    }


}

实现各个功能:

public interface IOperation {
     void work(BookList bookList);
}
新增图书
public class AddBook  implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书");
        if (bookList.isFull()==true){
            System.out.println("满了不能放");
            return;
        }
        System.out.println("请输入新增图书的书名:");
        Scanner scanner=new Scanner(System.in);
        String bookName=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();
        Book book=new Book(bookName,author,price,type);
        int current=bookList.getUsedSize();
        bookList.setBook(book,current);
        bookList.setUsedSize(current+1);
        System.out.println("新增图书成功");
    }
}
删除图书
public class DelBook  implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书");
        System.out.println("请输入要删除的书名:");
        Scanner scanner=new Scanner(System.in);
        String bookName=scanner.nextLine();
        int currentSize= bookList.getUsedSize();
        int pos=-1;
        int i = 0;
        for (; i <currentSize ; i++) {
            Book book=bookList.getBook(i);
            if(book.getName().equals(bookName)){
                System.out.println("找到这本书,开始删除");
                pos=i;
                break;
            }
        }
        if(i>=currentSize){
            System.out.println("没有找到这本书");
            return;
        }
        for (int j = pos; j <currentSize-1 ; j++) {
            Book book=bookList.getBook(j+1);
            bookList.setBook(book,j);
        }
        bookList.setUsedSize(currentSize-1);
        bookList.setBook(null,currentSize-1);
        System.out.println("删除成功");
    }
}
退出系统
public class ExitSystem implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统");
        for (int i = 0; i < bookList.getUsedSize(); i++) {
            bookList.setBook(null,i);
        }
        System.exit(0);

    }
}
查找图书
public class FindBook  implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书");
        System.out.println("请输入要查找的书名:");
        Scanner scanner=new Scanner(System.in);
        String bookName=scanner.nextLine();
        int currentSize= bookList.getUsedSize();

        for (int i = 0; i <currentSize ; i++) {
            Book book=bookList.getBook(i);
            if(book.getName().equals(bookName)){
                System.out.println("找到了这本书");
                System.out.println(book);
                return;
            }

        }
        System.out.println("没有找到这本书");

    }
}
借书
public class LendBook  implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("借书");
        System.out.println("请输入要借阅的书名:");
        Scanner scanner=new Scanner(System.in);
        String bookName=scanner.nextLine();
        int currentSize= bookList.getUsedSize();
        for (int i = 0; i <currentSize ; i++) {
            Book book=bookList.getBook(i);
            if(book.getName().equals(bookName)){
                book.setLend(true);
                System.out.println("借阅成功");
                return;
            }
        }
        System.out.println("借阅失败");
    }
}
归还图书
public class ReturnBook  implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("ReturnBook");
        System.out.println("请输入要归还的书名:");
        Scanner scanner=new Scanner(System.in);
        String bookName=scanner.nextLine();
        int currentSize= bookList.getUsedSize();
        for (int i = 0; i <currentSize ; i++) {
            Book book=bookList.getBook(i);
            if(book.getName().equals(bookName)){
                book.setLend(false);
                System.out.println("归还成功");
                return;
            }
        }
        System.out.println("归还失败");
    }
}
显示图书
public class ShowBook  implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("显示图书");
        int currentSize= bookList.getUsedSize();

        for (int i = 0; i <currentSize ; i++) {
            Book book=bookList.getBook(i);
                System.out.println(book);
        }
    }
}

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

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

相关文章

Swagger3探索之游龙入海

引言 后端开发中常用的接口调用工具一般使用Postman、ApiPost工具&#xff0c;但后期需要与前端联调&#xff0c;要补充接口文档花费大量时间&#xff0c;此时Swagger3应运而生&#xff0c;大大提高沟通交流的效率。 引用依赖 <!-- Swagger3 调用方式 http://ip:port/swa…

Echarts之x轴,Y轴配置项大全

ECharts是一个强大的数据可视化库&#xff0c;提供了丰富的配置项来定制图表的x轴和y轴。下面是ECharts中x轴和y轴的配置项大全&#xff1a; xAxis配置项&#xff1a; type&#xff1a;轴类型&#xff0c;可选值有&#xff1a;“value”&#xff08;数值轴&#xff09;, “cat…

IP如何异地共享文件?

【天联】 组网由于操作简单、跨平台应用、无网络要求、独创的安全加速方案等原因&#xff0c;被几十万用户广泛应用&#xff0c;解决了各行业客户的远程连接需求。采用穿透技术&#xff0c;简单易用&#xff0c;不需要在硬件设备中端口映射即可实现远程访问。 异地共享文件 在…

excel匹配替换脱敏身份证等数据

假如excel sheet1中有脱敏的身份证号码和姓名&#xff0c;如&#xff1a; sheet2中有未脱敏的数据数据 做法如下&#xff1a; 1、在sheet2的C列用公式 LEFT(A2,6)&REPT("*",8)&RIGHT(A2,4) 做出脱敏数据&#xff0c;用来与sheet1的脱敏数据匹配 2、在sheet…

案例研究|DataEase实现物业数据可视化管理与决策支持

河北隆泰物业服务有限责任公司&#xff08;以下简称为“隆泰物业”&#xff09;创建于2002年&#xff0c;总部设在河北省高碑店市&#xff0c;具有国家一级物业管理企业资质&#xff0c;通过了质量体系、环境管理体系、职业健康安全管理体系等认证。自2016年至今&#xff0c;隆…

以太网链路聚合——增加带宽,解决生成树收敛慢的问题

目录 一.对STP生成树的补充 1.STP接口状态 2.STP生成树的改进 二.网络可靠性 1.单板可靠性 2.设备可靠性 3.链路可靠性 三.链路聚合 1.多条链路聚合增加带宽 2.链路聚合术语 四.链路聚合模式 1.手动模式 2.LASP模式 &#xff08;1).LASP术语 &#xff08;2&…

[Qt] QString::fromLocal8Bit 的使用误区

QString::fromLocal8Bit 是一个平台相关的函数。默认情况下在 Windows 下 就是 gbk 转 utf-8 ,在 Linux就应该是无事发生。因为Linux平台默认的编码方式就是 utf-8 可以通过 void QTextCodec::setCodecForLocale(QTextCodec *c)来修改 Qt默认的编码方式。如下 第一输出乱码的…

深入探讨分布式ID生成方案

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

图神经网络实战(6)——使用PyTorch构建图神经网络

图神经网络实战&#xff08;6&#xff09;——使用PyTorch构建图神经网络 0. 前言1. 传统机器学习与人工智能2. 人工神经网络基础2.1 人工神经网络组成2.2 神经网络的训练 3. 图神经网络4. 使用香草神经网络执行节点分类4.1 数据集构建4.2 模型构建4.3 模型训练 5. 实现香草图神…

广发期货:从灾备中心、信创云到主中心,超融合支撑云化与国产化双转型

案例亮点 超过 30 节点承载灾备中心、信创云及主中心的 60% 以上业务系统。超融合信创资源池稳定运行超 1 年&#xff0c;承载 80% 以上的信创系统&#xff0c;顺利通过信创验收。引入超融合架构后&#xff0c;业务在 1 周内快速上线&#xff0c;稳定运行 3 年&#xff1b;减少…

Spring Boot项目启动过程中为什么日志打印没有显示完整包名呢?

一、前言 不知道大家注意过没有&#xff0c;在Spring Boot项目启动过程中日志打印并没有显示完整的报名&#xff0c;而是显示一些o.a.c&#xff0c;o.s.web形式的包名&#xff0c;如下图&#xff1a; 这是为什么呢&#xff1f; 二、原理 首先&#xff0c;我们先看一下Spring…

Vue时间组件:Dayjs与Moment对比

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

亚马逊云科技:基于老服务器打造的旧实例类型

内容摘要&#xff1a; 2021年&#xff0c;距离第一个EC2实例上线已经十五周年了。 在漫长的开发过程中&#xff0c;很多EC2实例自然会基于旧服务器构建。 随着时间的推移&#xff0c;旧的服务器总是需要更换硬件&#xff0c;实例也得更换&#xff0c;但并不是所有的用户都想迁…

vue3 - 前端优秀案例 vue-admin-box 推荐

vue-admin-box 简介 vue-admin-box是一个免费并且开源的中后台管理系统模板。使用最新版本的vue3开发而成。 演示地址 https://cmdparkour.gitee.io/vue-admin-box/https://cmdparkour.gitee.io/vue-admin-box/ ​编辑 简介 更新日志经过三个多月的迭代&#xff0c;于202…

BRICK POP展示了有趣的链上游戏玩法与奖励机制

新游戏BRICK POP将Sui区块链技术与低Gas费用&#xff0c;以及其在Web3游戏开发方面的专业知识无缝结合。通过充分利用Sui和ONBUFF的INNO平台优势&#xff0c;BRICK POP为玩家提供了一个融合了前沿技术和引人入胜游戏的沉浸式游戏体验。BRICK POP游戏设计为实时交易和高用户参与…

Android 性能优化(六):启动优化的详细流程

书接上文&#xff0c;Android 性能优化&#xff08;一&#xff09;&#xff1a;闪退、卡顿、耗电、APK 从用户体验角度有四个性能优化方向&#xff1a; 追求稳定&#xff0c;防止崩溃追求流畅&#xff0c;防止卡顿追求续航&#xff0c;防止耗损追求精简&#xff0c;防止臃肿 …

【MySQL】5.2MySQL高级语句与sql语句

模板 test、class、class0 mysql> select * from test; -------------------------------- | idcard | name | age | hobbid | -------------------------------- | 01 | lizi | 18 | guangjie | | 02 | monor | 22 | zhaijia | | 03 | sansan | …

FFMPEG C++封装(一)(C++ FFMPEG)

1 概述 FFMPEG是一个C语言开源视音频编解码库。本文将FFMPG4.1.3进行C封装&#xff0c;形成C FFMPG库。 2 架构 架构图如下所示&#xff1a; 架构说明: Init 初始化FFMPEG库。IStream 输入流&#xff0c;FFMPEG的输入音视频文件。Packet 音视频数据包Decoder 音视频编码器F…

electron打包桌面版.exe之vue项目踩坑(vue3+electron 解决打包后首页打开空白,打包后路由不跳转及请求不到后端数据等问题)

vue项目https://www.qingplus.cn/components-web/index打包桌面版问题集合 一、静态资源加载问题 npm run electron_dev桌面版运行后页面空白&#xff0c;内容未加载。 填坑&#xff1a; 打包配置要用相对路径 vite.config.ts文件中的base要改成./&#xff0c;之前加了项目…

Towhee 小记

文章目录 关于 Towhee✨ 项目特点&#x1f393; 快速入门流水线预定义流水线自定义流水线 &#x1f680; 核心概念 关于 Towhee Towhee 是一个开源的 embedding 框架&#xff0c;包含丰富的数据处理算法与神经网络模型。通过 Towhee&#xff0c;能够轻松地处理非结构化数据&am…