Java入门项目——读书管理系统

2023-11-14

一、前言

相信有很多小伙伴学习完了【JavaSE】基础语法,想知道自己到底学的怎么样,或则学完不知道这么把知识点连窜起来使用,自己学到的知识会用才是真正的学到了。

下面就来领取你的第一个Java入门项目(读书管理系统),这里我们肯定是有针对性的去完成的,里面涵盖了许多知识点,例如:数组、循环以及面向对象方面的知识,主要是封装、继承、多态、抽象类、接口、代码块等等的知识点,相信你自己去实现一遍再和小编的实现进行对比或者直接拿来进行学习一定会有所收获。

学完【JavaSE】写的读书管理系统,编译器用到是IDEA,数据存储在内存中,这里没有用到数据库,随着学习的深入可以后面再改进的哦,实现了读书的查询、添加、删除、借阅、归还、修改。分为管理员和用户。

码源地址gitee):

二、思路及整体框架

**

  • 思路
    随着学习的深入,做项目无从下手,首先要弄明白有什么需求,有需求我们才去实现的嘛,然后再考虑程序的框架,先把框架搭起来,这个过程可以减少后续的很多麻烦。

  • 整体框架:
    正如上面所说的读书管理,既然有读书,那就免不了需要管理,这样我们就可以把有关读书信息的放到一个包下(Book),在这个包下再创建有关读书的类。有用户分为管理员和普通用户,我们就可以把管理员和普通用户放到一个包(User)下,再这个包下再创建有关用户的类。有关于读书的操作,比如增加、删除读书,我们也可以单独的把它写到一个包(Operate)下,再这个包下再创建有操作读书的类。

**

这里为小编搭的框架:

在这里插入图片描述

为什么要说先搭框架呢?而不是先把一个个功能先实现呢?道理很简单,我先搭框架,我就能以一个整体的思想去实现这个项目,即使我们把所需要的包以及类全部都创建出来后,你写起来就不会那么的绕,你也一个很好功能实现顺序,会减少很多的开发时间,效率也高。

三、代码展示

1.有关读书包(Book)

这里创建一个Book类来存储有关读书学习的类,所有有关读书的信息我都封装在这个类中。

package Book;

public class Book {
	//书的属性
    private String name;
    private String author;
    private String type;
    private double price;
    private boolean isBorrowed;//表示书籍状态,是否被借阅,默认false没有借阅

    public Book(String name, String author, String type, double price) {
        this.name = name;
        this.author = author;
        this.type = type;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public void setType(String type) {
        this.type = type;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public void isBorrowed(boolean flag) {
        this.isBorrowed = flag;
    }

    public boolean getIsBorrow() {
        return isBorrowed;
    }
	
	//重写toString方法,方便把每本读书信息打印出来
    @Override
    public String toString() {
        return "Book{" +
                "name ='" + name + '\'' +
                ", author ='" + author + '\'' +
                ", type ='" + type + '\'' +
                ", price =" + price +
                ", isBorrowed =" + (isBorrowed ? "已被借阅!" : "未被借阅") +
                '}';
    }
}

在这个包下我们在创建BookShelf类表示书架,用来管理我的每一本书,这里用到一个组合的思想,用Book类型的变量作为Bookshelf的成员变量。

package Book;

public class BookShelf {
    private static final int BOOK_NUMBER = 100;//书籍容量
    private Book[] books = new Book[BOOK_NUMBER];
    private int currentNumber;//当前书籍的数量

    /**实例代码块/非静态代码块
     * 在我实例这个类的对象的时候就已经加载了着三本书
     */
    {
        books[0] = new Book("三国演义", "罗贯中", "小说", 69.9);
        books[1] = new Book("红楼梦", "曹雪芹", "小说", 49.9);
        books[2] = new Book("水浒传", "施耐庵", "小说", 59.9);

    }
    public void setCurrentNumber(int currentNumber) {
        this.currentNumber = currentNumber;
    }

    //获取书籍列表长度
    public int getCurrentNumber() {
        int index = 0;
        while (books[index] != null) {
            index++;
        }
        return index;
    }

    public void setBooks(int pos, Book book) {
        this.books[pos] = book;
    }
    
    public Book[] getBooks() {
        return books;
    }
    public Book getBook(int pos) {
        return this.books[pos];
    }
    
    //判断书籍是否存在,存在就返回下标,不存在就返回-1
    public int isExist(String name) {
        int length = this.getCurrentNumber();
        for (int i = 0; i < length; i++) {
            if (this.books[i].getName().equals(name)) {
                return i;
            }
        }
        return -1;
    }
}

2.有关用户包

这里有关用户就是管理员和普通用户,由于管理员和普通用户都是用户,这里就用到继承方面的知识,让普通用户(NormalUser)和管理员(AdministerUser)这两个类继承我的用户(User)类,由于我是不希望实例用户(User)这个类的实例对象的,所以这个类需设置为抽象类为宜,再由普通用户和管理员的菜单都不一样,我们就可以把菜单方法设置为抽象方法。这样操作之后我们不仅体验到抽象类的好处还有多态的好处。

抽象类User的实现:

package User;

import Book.BookShelf;
import Operation.Operate;

public abstract class User {
    protected String name;
    protected Operate[] operations;
    public User(String name) {
        this.name = name;
    }
	//抽象方法,继承我的子类必须单独实现这个方法
    public abstract void menu();
    
    //用户进行读书操作的方法,无非就是choice的值对应操作的方法
    public void doWork(int choice, BookShelf bookShelf) {
        this.operations[choice].operate(bookShelf);
    }
}

子类普通用户类和管理员的实现:

package User;

import Operation.*;

public class NormalUser extends User{

    public NormalUser(String name) {
        super(name);
        super.operations = new Operate[] {
        		//直接赋值对应操作的对象,再实例这个类对象时就有这个操作功能
                new ExitOperation(),
                new BorrowOperation(),
                new ReturnOperation(),
                new SearchOperation()
        };
    }

	//重写抽象方法,属于普通用户的菜单
    @Override
    public void menu() {
        System.out.println("--------------欢迎来到普通用户管理系统--------------");
        System.out.println("--------------0.退出系统-------------------------------------");
        System.out.println("--------------1.借阅读书-------------------------------------");
        System.out.println("--------------2.归还读书-------------------------------------");
        System.out.println("--------------3.查找读书-------------------------------------");
        System.out.println("--------------请选择:》------------------------------------");
    }
}

package User;

import Operation.*;

public class AdministerUser extends User{

    public AdministerUser(String name) {
        super(name);
        super.operations = new Operation.Operate[]{
        		//直接赋值对应操作的对象,再实例这个类对象时就有这个操作功能
                new ExitOperation(),
                new AddOperation(),
                new DeleteOperation(),
                new SearchOperation(),
                new ShowOperation(),
                new UpdateOperation()
        };
    }
	//属于管理员的菜单方法
    @Override
    public void menu() {
        System.out.println("--------------欢迎来到普通用户管理系统--------------");
        System.out.println("--------------0.退出系统-------------------------------------");
        System.out.println("--------------1.添加读书-------------------------------------");
        System.out.println("--------------2.删除读书-------------------------------------");
        System.out.println("--------------3.查找读书-------------------------------------");
        System.out.println("--------------4.显示读书-------------------------------------");
        System.out.println("--------------5.修改读书-------------------------------------");
        System.out.println("--------------请选择:》------------------------------------");
    }
}

3.有关操作书的包

这里操作有增加、删除读书等操作,不过这些都是对书的操作,我们就可以在一个接口定义操作书的抽象方法,然后让每个操作书的类都实现这个接口,为什么这样做呢?这样可以实现多态啊,又用到多态的好处了

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

Java入门项目——读书管理系统 的相关文章

  • 使用 TreeMap 和 Comparator 按值对 HashMap 进行排序

    我使用以下代码创建哈希图 然后使用树形图和比较器对哈希图中的值进行排序 然而 输出结果却出乎意料 所以任何关于我做错了什么的想法都会有帮助 Code public static void main String args System ou
  • 使用 Intellij 2017.2 /out 目录构建会重复 /build 目录中的文件

    更新到 Intellij 2017 2 后 构建我的项目会创建一个 out包含生成的源文件和资源文件的目录 这些文件与已包含的文件重复 build并导致duplicate class生成的类的编译器错误 关于 Gradle 或 Intell
  • Maven 2 未运行 Junit 4 测试

    我在确保运行 Junit4 测试时遇到问题 同样的问题也被报告在https stackoverflow com questions 2021771 sort newest sort top https stackoverflow com q
  • @Cachable 在没有输入参数的方法上?

    我有问题 org springframework cache annotation Cachable注解 Bean public ConcurrentMapCache cache return new ConcurrentMapCache
  • 竞争性编码 - 以最低成本清除所有级别:未通过所有测试用例

    当我遇到这个问题时 我正在一个竞争性编码网站上解决问题 问题指出 游戏中有 N 个关卡和 M 种可用武器 等级编号从 0 到 N 1 武器编号从 0 到 M 1 您可以按任意顺序清除这些级别 在每个关卡中 需要这些 M 武器的某些子集才能通
  • 整数与 int 比较

    我是新来的java 我现在正在学习非原始整数类型java 我知道以下比较无效并引发编译错误 String str c Char chr c if str chr return true 上面的代码片段给了我 Test java lineNu
  • 处理 ANTLR 4 中的错误

    遵循后接受的答案 https stackoverflow com a 18137301 2279200的指示处理 ANTLR4 中的错误 https stackoverflow com q 18132078 2279200问题 我遇到了以下
  • “未找到 JAVA 路径。请检查 JAVA 是否已安装。”初始化 RSelenium 时出错

    我正在尝试启动一个 RSelenium 会话到 webscrape 但是 当运行此代码时 driver lt rsDriver browser c chrome chromever 76 0 3809 126 port 4444L 我收到此
  • Java检测鼠标长按

    如果用户按下 JList 组件超过 3 秒 有什么方法可以捕获事件吗 我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件 这可以通过 mousePressed 和 mouseReleased 组合轻松完成 您可以在 mouseDow
  • 为什么java(>=7版本)不支持运行没有main方法的程序? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 class WithoutMain static System out println Without main class Sy
  • 如何找到 Oracle 数据库的 URL?

    如何找到 Oracle 数据库的 URL 和端口 Example jdbc oracle thin host port dbName 用户名 密码 是否有我可以查看的 SQL 命令或日志 配置文件 对于甲骨文来说 有一个tnsnames o
  • java:如何设置全局线程ID?

    是否有可能为线程设置唯一ID 在分布式系统中 线程是在许多不同的机器上创建的 例如通过 RMI 我需要它来创建日志消息 根据我的研究 我知道可以使用 log4j mdc ndc 来完成 但只能在单线程中完成 我的问题是 在创建线程时必须设置
  • Elasticsearch NodeBuilder 与 TransportClient

    对于其他 Elasticsearch 开发人员来说 这可能是一个非常简单 而且愚蠢 的问题 这两者之间有什么区别 我正在从 Java Web 应用程序连接到远程 Elasticsearch 服务器 到目前为止我一直在使用 Transport
  • Java 泛型:将 Object o 的类与 进行比较

    假设我有以下课程 public class Test
  • 如何在不同的班级中启动和停止计时器?

    我想测量从传入 HTTP 请求开始到应用程序到达某个点的时间 这两个时间点都位于不同的类中 我将如何启动和停止这些不同类别的计时器 我没有看到使用 MeterRegistry 中的 命名 计时器的方法 我该怎么办呢 您可以使用 AOP 如下
  • 如何从Java中的连接获取查询字符串?

    我正在编写一个方法 尝试记录数据库调用 形成连接到它的连接 在查询之后 有很多地方调用方法 connect 来启动并调用 cleanUp 方法来结束 我不能并且不想修改每个地方 所以顺序是这样的 Connection con connect
  • 有没有办法处理Java堆空间异常[重复]

    这个问题在这里已经有答案了 我正在寻找将文件输入流转换为大文件 文件大小为 100MB 并且抛出 java lang OutOfMemoryError Java Heap space import java io FileInputStre
  • Spring Boot中服务接口类的用途

    我的问题是关于接口类的使用 我对 Spring 还很陌生 所以如果这过于简单 请耐心等待 首先 当您可以在 BoxService 中声明 find all 时 这里拥有 IBoxService 接口有什么意义 其次 在控制器中如何使用IBo
  • Jackson 的 ObjectMapper 和 SQL 中的 RowMapper

    我们正在使用对象映射器 当将 ObjectMapper 与 RowMapper 一起使用时 是否应该在每个 mapRow 内部 如下所示 声明它 还是在 mapRow 外部声明为类公共成员 我认为根据本文 它应该作为公共类成员在外部 我应该
  • 在没有 ODBC 的情况下从 Java 操作 Access 数据库

    我想从我的 Java 项目操作 Microsoft Access 数据库 accdb 或 mdb 文件 我不想使用 Microsoft 的 JDBC ODBC Bridge 和 Access ODBC 驱动程序 因为 JDBC ODBC 桥

随机推荐

  • 关于程序员【锁死】服务器

    干程序员这么多年 头一次听说 锁死 服务器这么个名词 乍一听到被媒体造的这个名词 觉着很突兀 自己念两遍就会感到头疼 恶心 想吐这么膈应 服务器到底是怎么 锁死 的 什么玩意 你看看人家 数据库系统概论 里面人家关于 锁 的一个翻译 死锁
  • ARM单片机通用IAP在线升级YMODEM协议

    ARM单片机通用IAP在线升级YMODEM协议 效果 YMODEM协议格式 移植修改接口 测试代码 代码获取 效果 YMODEM协议格式 接收开始流程 接收者1HZ发送接收状态 C C 代表字符 C 进入接收状态 发送者发送起始帧 SOH
  • 目标检测学习笔记+附入门资料+表面缺陷检测

    待更新补充 文章目录 放在最前 MARK入门阅读学习资料 一 目标检测基本概念 1 名词含义 目标检测 目标检测方法的分类 Bounding box 滑动窗口 R CNN步骤详解 交并比Interest over Union IoU 平均精
  • 对全连接层(fully connected layer)的通俗理解

    原文地址 https blog csdn net qq 39521554 article details 81385159 定义 全连接层 fully connected layers FC 在整个卷积神经网络中起到 分类器 的作用 如果说
  • matplotlib绘图

    孤影常伴灯 你在夜里写字 我在昏黄中布景 风吹皱那烟波浩渺的迷离 也想吹散关于你的记忆 你在红尘打坐 我在紫陌修佛 万般皆因果 何须嗔叹 闲来无事 索然无趣 忽而兴起 画几个简单的数据分析图 一 将数据生成柱状图 代码 coding utf
  • 【计算机网络】TCP/IP网络模型里这些问题你会吗

    零 为什么需要有TCP IP网络模型 不同设备的进程之间相互通信 需要网络通信 而设备存在多样性 需要兼容各种设备 从而协商出一套通用的网络协议 并且这个网络协议是分层的 每层都有各自的作用和职责 一 最上层是哪层 应用层 1 该层有哪些协
  • SQL 经典面试题:统计最近七天连续三天活跃的用户

    1 需求 给定 mid dt 的用户登录记录表 查找最近 7 天内连续 3 天活跃的用户 id 2 数据表 tmp table tmp login test CREATE TABLE tmp table tmp login test mid
  • 5G UE测量

    目录 系列文章目录 一 为何干测量 二 测量干了啥 三 何时干测量 四 用啥干测量 五 怎么干测量 如 以上就是今天要讲的内容 本文仅仅简单从缘由 结果 时机 原料 过程五个方面概述了5G UE测量大至的来龙去脉 一 为何测量 移动 性管理
  • 【hello Linux】进程信号

    目录 1 进程信号的引出及整体概况 2 信号的产生 1 键盘产生 2 进程异常 3 系统调用 4 软件条件 3 信号的保存 1 信号相关的常见概念 2 sigset t 3 信号集操作函数 4 sigprocmask 对block位图的操作
  • 5.4双积分ADC工作原理

    文章目录 1 高中几个知识点 exp n log n lgx lnx 电容充放电公式 2 双积分型ADC工作原理 3 SAR和 型模数转换器 ADC 1 高中几个知识点 exp n exp函数即指数函数 e的n次方的函数 自然常数e 2 7
  • Java 异常创建及控制

    最近在重新拾起Java 想开始分享一些自己的表达 就从这里开始了 Java中有一个Throwable类 它是所有异常或者说是违例的基础 包括了两种类型的异常 一种叫Error 表示的是编译器和系统错误 我们通常不需要去在意它们 另一种叫Ex
  • 国产版ChatGPT大盘点

    我们看到 最近 国内大厂开始密集发布类ChatGPT产品 一方面 是因为这是最近10年最大的趋势和机会 另一方面 国内的AI 不能别国外卡了脖子 那在类ChatGPT赛道上 哪些中国版的ChatGPT能快速顶上 都各有哪些困境需要突破呢 本
  • 第七周作业1

    1 调试分析课本每一个例题 有可能的话更改成2 3个方法的新程序 2 编程实现课本每一个编程习题 例5 1 include
  • LSM-Tree

    LSM Tree的设计思路是 将数据拆分为几百M大小的Segments 并是顺序写入 它的核心思路其实非常简单 就是假定内存足够大 因此不需要每次有数据更新就必须将数据写入到磁盘中 而可以先将最新的数据驻留在内存中 等到积累到最后多之后 再
  • 递归与迭代

    迭代 迭代 迭代简单来讲就是循环 类比于我们循环输出某一个字符数组时的情景 从字符数组中不断取出字符 再将字符输出 迭代的循环过程则是从栈 或者队列 中不断取出要操作的元素 进行操作 与普通循环过程不同的是在不断取出元素的同时也会向栈中放入
  • Java8中Collectors的使用

    前言 基本类型的流没有这个用法 文章目录 averagingDouble averagingInt averagingLong collectingAndThen counting groupingBy groupingByConcurre
  • IRQ和FIQ中断的区别

    FIQ和IRQ是两种不同类型的中断 ARM为了支持这两种不同的中断 提供了对应的叫做FIQ和IRQ处理器模式 ARM有7种处理模式 一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ还是IRQ 所以一个中断是可以指定为FIQ或
  • Mac下如何降级Java、卸载Java

    前言 安装一些组件或插件时 有时会提示错误 What went wrong Could not determine java version from 11 查看组件或插件对应的Java版本会发现 可能只支持 Java 8 但本地安装的Ja
  • 《网络安全》零基础教程-适合小白科普

    网络安全 零基础教程 目录 目录 网络安全 零基础教程 第1章 网络安全基础 什么是网络安全 常见的网络安全威胁 网络安全的三个基本要素 网络安全的保障措施 第2章 网络攻击类型 病毒 蠕虫 木马 后门 DoS DDoS攻击 SQL注入 X
  • Java入门项目——读书管理系统

    Java简单实现读书管理系统 一 前言 二 思路及整体框架 三 代码展示 1 有关读书包 Book 2 有关用户包 3 有关操作书的包 一 前言 相信有很多小伙伴学习完了 JavaSE 基础语法 想知道自己到底学的怎么样 或则学完不知道这么