【JavaEE】图书管理系统-简易版

2023-11-03


我们将先前学习的知识运用起来,写一篇图书管理系统简易版 链接

book包

Book类

编写每一本书的基本属性和方法
package Book;

/**
 * Created with Intellij IDEA.
 * Description:每一本书的属性和方法
 * User: a
 * Date: 2022-04-15
 * Time: 14:56
 */
public class Book {
    /**
     * 属性:书名,价格,作者,类型,状态(是否被借出)
     */
    private String name;
    private String author;
    private int price;
    private String type;
    private boolean isBorrow;//成员变量未初始化默认未false,即未被借出

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

    public void setBorrow(boolean borrow) {
        isBorrow = borrow;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ((isBorrow == true) ? " 已借出 " : " 未借出 ") +
                '}';
    }
}

BookList类

对整个“书架”操作
package Book;

/**
 * Created with Intellij IDEA.
 * Description:存储书及其相关信息
 * User: a
 * Date: 2022-04-15
 * Time: 14:56
 */
public class BookList {
    //初始值
    private static int SIZE = 5;

    //书架容量
    private Book[] books = new Book[SIZE];

    //已使用的空间
    private int usedSize = 0;

    //初始化书架
    public BookList() {
        books[0] = new Book("三国演义","罗贯中",90,"小说");
        books[1] = new Book("西游记","吴承恩",78,"小说");
        books[2] = new Book("红楼梦","曹雪芹",89,"小说");
        books[3] = new Book("水浒传", "施耐庵",91,"小说");
        books[4] = new Book("推背图","袁天罡",93,"谶颂述");
        this.usedSize = 5;
    }
    //get和set方法
    public int getUsedSize() {
        return usedSize;
    }

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

    //获取pos下标书
    public Book getPos(int pos) {
        return books[pos];
    }
    //修改pos位置的书
    public void setPos(int pos, Book book) {
        books[pos] = book;
    }
    //判断是否满
    public boolean isFull(int newSize) {
        return newSize > SIZE ? true : false;
    }
    //扩容
    public void addCapacity() {
        SIZE *= 2;
        Book[] newBooks = new Book[SIZE];
        System.arraycopy(books,0,newBooks,0,usedSize);
        this.books = newBooks;
        System.out.println("扩容成功!");
    }
}

operation包

AddOperation 类

package operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

/**
 * Created with Intellij IDEA.
 * Description:增加图书
 * User: a
 * Date: 2022-04-15
 * Time: 14:57
 */
public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书!");
        System.out.println("请输入图书的名字:");
        Scanner scanner = new Scanner(System.in);
        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 book = new Book(name,author,price,type);

        int currentSize = bookList.getUsedSize();
        if (bookList.isFull(currentSize + 1)) {
            bookList.addCapacity();
        }
        bookList.setPos(currentSize,book);

        bookList.setUsedSize(currentSize + 1);

        System.out.println("新增成功!");
    }
}

BorrowOperation 类

package operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

/**
 * Created with Intellij IDEA.
 * Description:借出书
 * User: a
 * Date: 2022-04-15
 * Time: 14:57
 */
public class BorrowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书!");

        System.out.println("请输入你要借阅图书的名字:");
        Scanner input = new Scanner(System.in);
        String name = input.nextLine();

        int currentSize = bookList.getUsedSize();
        int i = 0;
        for (; i < currentSize; i++) {
            Book book = bookList.getPos(i);
            //找到这本书
            if (book.getName().equals(name)) {
                //判断其是否被借出
                if(book.isBorrow() == true) {
                    System.out.println("该书已被借出!");
                    return;
                } else {
                    book.setBorrow(true);
                    System.out.println("借阅成功!");
                    return;
                }
            }
        }
        if (i == bookList.getUsedSize()) {
            System.out.println("没有这本书!");
        }

    }
}

DelOperation类

package operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

/**
 * Created with Intellij IDEA.
 * Description:删除图书
 * User: a
 * Date: 2022-04-15
 * Time: 14:57
 */
public class DelOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书!");

        System.out.println("请输入你要删除图书的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();

        int i = 0;
        for (; i < bookList.getUsedSize(); i++) {
            Book book = bookList.getPos(i);
            if (book.getName().equals(name)) {
                break;
            }
        }
        //没有找到
        if (i == bookList.getUsedSize()) {
            System.out.println("删除图书不存在!");
            return;
        }
        //找到了,正常退出
        for (int j = i; j < bookList.getUsedSize() - 1; j++) {
            //这里的boolList内是对象,所以下面的写法是错误的
            //bookList[j] = bookList[j + 1];

            Book book = bookList.getPos(j + 1);
            bookList.setPos(j, book);
        }
        int currentSize = bookList.getUsedSize();
        bookList.setPos(currentSize - 1,null);
        bookList.setUsedSize(currentSize - 1);
        System.out.println("删除成功!");
    }
}

DisplayOperation 类

package operation;

import Book.Book;
import Book.BookList;

/**
 * Created with Intellij IDEA.
 * Description:展示图书
 * User: a
 * Date: 2022-04-15
 * Time: 14:58
 */
public class DisplayOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("显示图书!");

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

ExitOperation 类

package operation;

import Book.BookList;

/**
 * Created with Intellij IDEA.
 * Description:退出系统
 * User: a
 * Date: 2022-04-15
 * Time: 14:58
 */
public class ExitOperation implements IOperation{

    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统");
        //销毁所有数据
        for (int i = 0; i < bookList.getUsedSize(); i++) {
            bookList.setPos(i,null);
        }
        System.exit(0);
    }
}

FindOperation 类

package operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

/**
 * Created with Intellij IDEA.
 * Description:查找图书
 * User: a
 * Date: 2022-04-15
 * Time: 14:58
 */
public class FindOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书!");
        System.out.println("请输入你要查找图书的名字:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();

        int i = 0;
        for (; i < bookList.getUsedSize(); i++) {
            Book book = bookList.getPos(i);
            if (book.getName().equals(name)) {
                System.out.println("找到了,信息如下:");
                System.out.println(book);
            }
        }
        if (i == bookList.getUsedSize()) {
            System.out.println("图书不存在");
        }

    }
}

IOperation 类

package operation;


import Book.BookList;

/**
 * Created with Intellij IDEA.
 * Description:
 * User: a
 * Date: 2022-04-15
 * Time: 15:00
 */
public interface IOperation {
   void work(BookList bookList);
}

ReturnOperation 类

package operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

/**
 * Created with Intellij IDEA.
 * Description:归还图书
 * User: a
 * Date: 2022-04-15
 * Time: 14:59
 */
public class ReturnOperation implements IOperation{
    @Override
    public 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.getPos(i);
            if (book.getName().equals(name)) {
                book.setBorrow(false);
                System.out.println("归还成功");
                return;
            }
        }
        System.out.println("归还图书不存在!");
    }
}

User包

AdminUser类

package User;

import Book.BookList;
import operation.*;

import java.util.Scanner;

/**
 * Created with Intellij IDEA.
 * Description:管理员
 * User: a
 * Date: 2022-04-15
 * Time: 15:01
 */
public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);

        this.iOperations = new IOperation[] {
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new DisplayOperation()
        };
    }

    @Override
    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.退出系统");
        System.out.println("请输入你的操作: ");
        Scanner input = new Scanner(System.in);
        int choice = input.nextInt();
        return choice;


    }

}

NormalUser 类

package User;

import operation.*;

import java.util.Scanner;

/**
 * Created with Intellij IDEA.
 * Description:普通用户
 * User: a
 * Date: 2022-04-15
 * Time: 15:01
 */
public class NormalUser extends User{
    public NormalUser(String name) {
        super(name);

        this.iOperations = new IOperation[] {
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation()
        };
    }

    @Override
    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.退出系统");
        System.out.println("请输入你的操作:");
        Scanner input = new Scanner(System.in);
        int choice = input.nextInt();
        return choice;
    }
}

User 类

package User;

import Book.BookList;
import operation.IOperation;

/**
 * Created with Intellij IDEA.
 * Description:
 * User: a
 * Date: 2022-04-15
 * Time: 15:01
 */
public abstract class User {
    protected String name;

    public IOperation[] iOperations;

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

    public abstract int menu(); //根据选择动态绑定普通用户和管理员

    //用户操作权限不同,对应功能也不同
    public void doOperation(int choice, BookList bookList) {
        iOperations[choice].work(bookList);
    }
}

Main 类

import Book.BookList;
import User.User;
import User.AdminUser;
import User.NormalUser;

import java.util.Scanner;

/**
 * Created with Intellij IDEA.
 * Description:主逻辑
 * User: a
 * Date: 2022-04-15
 * Time: 15:47
 */
public class Main {
    //载入用户信息
    public static User login() {
        System.out.println("请输入姓名:");
        Scanner input = new Scanner(System.in);
        String name = input.nextLine();
        System.out.println("请输入你的身份:1 -> 管理员 2 -> 普通用户");
        int choice = input.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);
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【JavaEE】图书管理系统-简易版 的相关文章

  • Java Util Logger 写入同步

    通常在应用程序中 以 Web 应用程序为例 我们在启动期间创建一个记录器实例 它甚至可以是一个单例 但这并不重要 重要的是整个应用程序有 1 个实例 我们使用java util logger 现在想象一下 您有来自两个不同用户的两个请求 它
  • Lombok 如何将代码生成到现有类中? [复制]

    这个问题在这里已经有答案了 我可以使用注释处理器从头开始生成类 但我无法像 lombok 那样修改类 我在 android studio 中搜索了 lombok 生成的类 但是我什么也没找到 然后我通过他们的网站检查了龙目岛概述 还在论坛中
  • 为什么在Java中读取易失性和写入字段成员是不可扩展的?

    观察以下用 Java 编写的程序 完整的可运行版本如下 但程序的重要部分在下面的代码片段中 import java util ArrayList A not easy to explain benchmark class MultiVola
  • 扩展 CrudRepository (Spring) 时是否需要 @Repository 注解?

    public interface CarRepository extends CrudRepository
  • Hibernate统计打印HQL:null

    我是使用休眠的新手 我打开了统计信息 与普通的 HQL 查询一起 我得到了许多这样的统计信息 INFO Statistics HQL null time 1724ms rows blah 有人可以以任何方式帮助我为什么null查询大约需要
  • uniVocity 不会将第一列解析为 beans

    我试图在 uniVocity parsers 的帮助下从 GTFS zip 读取 CSV 文件 但遇到了一个我无法解决的问题 由于某种原因 某些 CSV 文件的第一列似乎无法正确解析 例如 在 stops txt 文件中 如下所示 stop
  • 从 java 代码运行 Python 脚本

    这是我第一次在java中尝试python 我正在尝试从我的代码执行 python 脚本 如下所示 Process process Runtime getRuntime exec python C Users username Desktop
  • HQL - 分页的行标识符

    有谁知道HQL是否有一个关键字来标识行 例如ROWID或ROWNUM 我想使用 HQL 实现分页 但我无法使用 setMaxResult 或 setFirstResult 因为我不直接使用会话对象 因此不使用 Query 对象 而只是将查询
  • 在java中将HTML转换为RTF?

    我需要将 HTML 转换为 RTF 我正在使用以下代码 private static String convertToRTF String htmlStr OutputStream os new ByteArrayOutputStream
  • 问题:将大数据传递给第二个 Activity

    我有一个奇怪的问题 我在网上浏览但没有找到答案 我仍然是android编程的初学者 那么让我们开始吧 我想做的就是用一些数据调用第二个活动 它适用于小数据 但如果数据变大 第二个 Activity 将不会显示 第一个 Activity 将完
  • java中简单程序中的“未为类型定义方法”错误

    所以我只是想学习 Java 在观看了一些教程并阅读了一些基本内容之后 我对为什么它无法运行感到困惑 package Test public class TestProg public static void main String args
  • 无法在 PHP 中接收 JSON POST 请求

    我正在将 JSON 对象从 Java 传递到 PHP 我正在使用 jdk 1 8 和 WAMPserver 下面是Java代码 import java io IOException import org apache http client
  • 菜单项标题未显示

    菜单项的标题未显示在片段内 我在菜单文件中有两个项目 第一个是带有图标和标签的showAsAction always在工具栏中显示图标 第二个只有标题 我不知道这里出了什么问题 菜单项的所有操作均有效 例如下面 菜单 销售 xml menu
  • 方法中缺少 return 语句错误

    我正在尝试编写一个返回计算机 MAC 地址字符串的静态方法 该函数本身可以在此处找到 http www mkyong com java how to get mac address in java http www mkyong com j
  • 在 libgdx 中截取屏幕截图

    我有一个应用程序 我想在其中截取游戏屏幕的屏幕截图并将其保存为图像并上传到 Facebook 我正在使用 Libgdx 我的重点是 android 谁能帮助我如何以编程方式截取游戏屏幕并将其另存为图像 现在相当容易 Libgdx提供了一个例
  • 在java中访问dll方法

    我正在尝试访问java中用c 编写的dll方法 从下面的代码我试图构建已成功生成的 dll using System using Microsoft Win32 namespace CyberoamWinHelper public clas
  • JdbcTemplate queryForInt/Long 在 Spring 3.2.2 中已弃用。应该用什么来代替呢?

    JdbcTemplate 中的 queryforInt queryforLong 方法在 Spring 3 2 中已弃用 我无法找出为什么或什么被认为是使用这些方法替换现有代码的最佳实践 典型方法 int rowCount jscoreJd
  • GridLayout 中的 JLabel

    如何添加JLabel出于GridLayout 我有一个 8x8 网格布局 Container content getContentPane content setLayout new GridLayout 8 8 2 2 for int f
  • 从 Java 程序中获取局部变量的名称和类型

    这是我正在尝试的代码 JavaCompiler compilerA ToolProvider getSystemJavaCompiler int resultA compilerA run null null null Users a Do
  • JFrame.repaint() 和 JPanel.repaint() 之间的区别

    谁能解释一下两者之间的区别JPanel repaint 方法和JFrame repaint 方法 我想两者都调用paintComponent JPanel 中的方法 请澄清 谢谢 Calling repaint 在任何组件上都会向重绘管理器

随机推荐

  • TypeScript入门-9.函数箭头表达式

    箭头表达式是function 匿名函数的简写 旨在解决javascript的this指向问题 写函数的时候也更简洁 函数一个参数的时候小括号可以不 写 写在一行后面的大括号可以不写 return也可以不写 如果写了大括号就必须加上retur
  • 【华为OD机试真题2023 JS】寻找核酸检测点

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 寻找核酸检测点 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 张三要去外地出差 需要做核酸 需要在指定时间点前做完核酸 请帮他找到满足条件的核酸检测点 1 给出
  • jenkinsci/blueocean:latest

    Jenkins maven配置 MVN3 mvn clean package Dmaven test skip true Dmaven javadoc skip true Javadoc 用于描述类或者方法的作用 Javadock可以写在类
  • 嵌入式Qt开发—Excel表格数据导出

    有一个嵌入式Excel表格数据导出的需求 应用软件运行于嵌入式Linux平台上 在设备运行过程中 存储了许多数据 这些数据想以表格的形式导出 考虑到Windows平台的普遍性 需要将数据以excel表格形式导出 故选择了一个开源库 QtXl
  • IJCAI 2023 直播预告

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 哔哩哔哩直播通道 扫码关注AI TIME哔哩哔哩官方账号预约直播 15 00 15 20 廖馨婷 基于双曲空间探索的非独立同分布联邦学习 15 20 15 40 吴南楠 面向不平
  • 【Java并发编程的艺术】Java并发容器和框架:Java中的阻塞队列

    1 什么是阻塞队列 阻塞队列常用于生产者和消费者的场景 生产者是向队列里添加元素的线程 消费者是 从队列里取元素的线程 阻塞队列就是生产者用来存放元素 消费者用来获取元素的容器 阻塞队列 BlockingQueue 是一个支持两个附加操作的
  • jQuery 入门教程(27): jQuery UI Button示例(二)

    本例为使用jQuery的一个实用的例子 显示媒体播放器的控制条 其中按钮的图标使用jQuery库自带的CSS定义的一些图标 比如ui icon seek end等 1 2
  • awk 入门 —— 强大的文本分析工具

    awk 是用于 Unix 和类 Unix 系统的强大文本解析工具 但是由于它有可编程函数 因此你可以用它来执行常规解析任务 因此它也被视为一种编程语言 你可能不会使用 awk 开发下一个 GUI 应用 并且它可能不会代替你的默认脚本语言 但
  • 【转载】sp_spaceused2,看库里全部表占用的物理空间

    我常用sp spaceused来查看表所占的空间大小 可是一次只能看一个对象的 今天有空写了个sp spaceused2 可以同时看全部表的空间大小 use master go EXEC sp addmessage msgnum 55000
  • 企业在数字化转型,数据化运营上遇到了哪些困境,如何解决?

    公司决策者意识到成功的数字体验越来越重要 调查受访者表示 这种成功的衡量标准是 用户体验和满意度提高 53 市场敏捷性提高 49 收入和盈利能力增加 49 员工生产力提高 49 以及更快的上市时间 48 然而 数字战略的失败原因是由于系统各
  • ios中模拟手势单击或是双击

    1 拓展UITouch类和UIEvent类 通过category 具体见附件TouchSynthesis h和TouchSynthesis m 2 在需要的类中 定义UITouch和UIEvent类的对象 UITouch touch UIT
  • 交换机连接不同网段的主机为何ping不通

    大家都知道 如果一交换机连接的主机在同一网段 则各主机可以互相通信 可为什么连接不同网段的主机就ping不通了呢 我想很多人都有这样的想法 交换机不是基于帧的源MAC地址进行学习 目标MAC地址进行转发吗 也就是说 当第一次通信时 即交换机
  • adb如何启动

    adb 怎么启动应用 来源于 解晴新生 Android的应用分为两种 一种是常用的有界面的App 另一种是自动化测试中的无界面Instrumentation 两种应用都可以使用adb am 命令启动它 工具 原料 adb App启动方法 步
  • C++ 纵横字谜的答案(详解)

    输入一个r行c列 1 r c 10 的网格 黑格用 表示 每个白格都填有一个字母 如果一个白格的左边相邻位置或者上边相邻位置没有白格 可能是黑格 也可能出了网格边界 则称这个白格是一个起始格 首先把所有起始格按照从上到下 从左到右的顺序编号
  • LaTeX新人教程,30分钟从完全陌生到基本入门

    对于真心渴望迅速上手LaTeX的人 前言部分可以跳过不看 本教程面向对LaTeX完全无认知无基础的新人 旨在让新人能够用最简单快捷的方式 轻松入门 能够迅速使用LaTeX完成基本的文本编辑 这个教材最终能够达到的水平是能够使用LaTeX写一
  • echarts饼图显示百分比_复合饼图和双层饼图的制作方法

    Excel数据分析中 我们经常会用到饼状图 今天我们来分享一下复合饼图和双层饼图的制作方法 01 复合饼图复合饼图 从主饼图提取部分数值 并将其组合到另一个饼图中 复合饼图主要有两个作用 1 提高小百分比数据的可读性 在Excel中插入饼图
  • RabbitMQ五种消息模式

    1 简单模式 工作的流程 当生产者生产消息后 将消息发往队列 当队列中有消息时 消费者会实时的监听队列中的消息 如果有消息则会执行消息 2 工作模式 默认的传统队列是为均摊消费 存在不公平性 如果每个消费者速度不一样的情况下 均摊消费是不公
  • 和你一起从零开始写RISC-V处理器(1)

    RISC V加法指令的实现 文章目录 RISC V加法指令的实现 前言 一 RISC V简介 二 指令实现的前期准备 1 指令 2 ADD指令和ADDI指令 3 三级流水线结构 4 一个需要注意的点 5 再来一个需要注意的点 6 环境搭建
  • DDD领域驱动篇——第一章(一文带你领略DDD、微服务和中台设计)

    在讲DDD之前 我对领域驱动曾经有过一段时间的了解 其实这个概念当我第一次听的时候发现很泛化 而且很抽象甚至难以理解 后来我发现这个玩意得需要很多时间 很多框架 技术的演进 软件迭代到了一定的瓶颈 业务愈发复杂而带来一系列架构转变和业务重构
  • 【JavaEE】图书管理系统-简易版

    文章目录 book包 Book类 BookList类 operation包 AddOperation 类 BorrowOperation 类 DelOperation类 DisplayOperation 类 ExitOperation 类