javaEE—图书管理系统(基础代码版)

                                            

前言:

本篇博客是集合了javaEE所学的知识构建的一个基础框架,讲述着面向对象的过程是如何做到多对象交互协作完成框架的构建的。利用了数组,接口,类和对象,抽象类,Object类等知识来完成。

后续会加入数据库,网页,框架等内容,使得该图书管理系统可以存储数据,搭配网页形成一个真正的图书管理系统。

图书管理系统演示

图书管理系统演示

实现构思

首先,我们需要管理书籍,用户也存在着不同的菜单,管理方法也不一样,所以我们分为三个包来区分这些类的不同,然后利用对象来相互工作,完成工作。书类的属性为书的各种书名,作者,价格,类型,还有状态(是否被借出),书架则是用来存放书籍信息的,同时存放几本书,可以通过书架来对书进行增添或删除等操作。用户之间的菜单操作也有所不同,需要分类来存放不同的操作功能,这些类的不同使得存放功能方法很麻烦,我们可以利用向上转型和重写的知识定义一个专门执行操作的接口,这个接口就是用来实现功能的一个接口,其他的方法通过重写来实现不同的功能,统一实现这个接口,这样用户类里面存放方法就会变得简单起来,只用定义一个接口数组即可。

先进行登录选项,各种功能方法则需要通过书架来操作书的属性,包括增添书籍,删除书籍,书籍属性的打印等

书和书架类

先看书的属性:

因为在特定的条件下,为了安全,书的属性是不允许被修改的,所以我们采用private的方式来修饰属性,通过get和set的方法来访问到属性内容,还定义了一个tostring方法,用来完成书籍属性的打印(注:状态是boolean类型的,所以需要修改一下重写tostring方法的内容,使其打印出“未借出”和“已借出”的状态)

然后看看书架的属性和方法内容:

书架的属性同样是不能随意修改的,还是通过get和set方法来访问,同时预先存好三本书。

用户类

用户类的大多数类型是相同的,比如说都有名字和功能菜单,功能方法,功能方法的实现方法。所以我们只需要定义一个抽象类即可:

普通用户和管理员的功能大多数都不一样,所以我们建立一个接口数组,来存放不同的方法

父类和子类实现方法也不一样,所以我们也重写执行方法:

普通用户类:

管理员用户类:

在PerformOperations中,是通过选择的方法,来执行书架的内容,this代表引用的对象(如用户),this引用的dos(接口数组)中的第flag个方法,来执行接口的work方法,形参是书架,因为是通过书架去操作书。

接口:

该接口用于实现各种方法

主函数调用结合

先创建一个书架,再进行登录操作,打印登录对象的菜单,实现菜单中的方法。

登录操作为:

通过不同的选择,返回不同的用户,向上转型的方式用用户类来接收,再调用menu方法来重写子类用户的方法,然后就可以执行对应的操作(Performperations方法)。

以管理员为例:

实现方法类

先来看功能接口:

 

只有一个工作的抽象方法,形参是书架类,用于通过书架来操作书类。

管理员功能:

查找图书:

因为属性都被修饰成私有,所以我们要学会充分利用get和set方法来访问属性:

getbooks(int pos)方法

新增图书:

实现新增图书则需要先判满,再判断是否有重复图书,再书架上得需要重写下setbooks方法来改变书架的存放的书籍,直接使用尾插的方法添加

setbooks(int pos,book b)方法:

需要注意的是:

添加完要改变书的数目

添加类型的时候注意输出方法

判满和判不同

删除图书:

假如需要删掉在pos上的图书,后续的移动方式一定是重后往前移!(从前往后移会改变书的属性)

 setbooks(int pos,book b)方法:

显示图书:

直接循环打印第i本书的属性即可

 getbooks(int pos)方法

退出系统:

需要用到一个方法:exit(),形参为0的时候就自动退出系统

普通用户功能:

与管理员不同的方法就只有借阅和归还,所以我们直接看这俩个代码即可

借阅图书:

 getbooks(int pos)方法

归还图书:

 getbooks(int pos)方法

以上就是图书管理系统的底层逻辑,充分利用了javaEE的内容来实现。看到这麻烦点个赞支持一下!

                                                 

代码演示

Test

 

book

Booklist

User

ManageUser

OrdinaryUser

DoBookcase(接口)

SearchBooks

NewlyBooks

DeleteBooks

DisplayBooks

Quit

BorrowingBooks

RepayBooks

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BGP选路实验

编写实验报告: 1、拓扑信息 2、要求及分析 3、配置命令 4、测试 1、拓扑信息 2、要求及分析 1、使用preval策略,确保R4通过R2到达192.168.10.0/24 2、使用AS Path策略,确保R4通过R3到达192.168.11.0/24 3、配置MED策略,确保R4…

嵌入式UI开发-lvgl+wsl2+vscode系列:1、资料收集以及Windows下WSL2模拟环境运行示例demo

文章目录 一、前言二、资料收集三、Windows下WSL2上编译运行lvgl的demo程序1、lvgl简介2、lvgl特性3、配置要求4、Windows下vscodewsl2模拟环境搭建4.1、安装vscodewsl24.2、下载获取项目:4.3、安装显卡驱动4.4、下载lvgl并编译运行示例demo 四、最后 一、前言 UI界…

leetcode437 路径总和III-哈希表+前缀和

题目 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节…

专为汽车内容打造的智能剪辑解决方案

汽车内容创作已成为越来越多车主和汽车爱好者热衷的活动。然而,如何高效、便捷地将行车途中的精彩瞬间转化为高质量的视频作品,一直是困扰着广大用户的一大难题。美摄科技凭借其深厚的视频处理技术和智能分析能力,推出了专为汽车内容记录而生…

探索python循环逻辑的魅力:从无限到有限

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:循环逻辑的初步认识 二、无限循环:持续运转的引擎 三、有…

JavaWeb-JS

目录 学习重点 什么是 JavaScript? Web标准 JS的引入方式 JS的基本语法 JS的函数 JS的对象 JS事件监听 学习重点 js 引入方式 js 基础语法 js 函数 js 对象 js 事件监听 什么是 JavaScript? Web标准 Web 标准也称为网页标准 ,由一系列的标准组成&#xff0…

安泰电子:功率放大器的选择方法有哪些

选择适合的功率放大器是实现电子系统中的关键步骤之一。以下是一些选择功率放大器的常用方法和考虑因素: 功率需求:首先确定你的系统需要多大的功率输出。功率输出需求通常由被驱动设备的功率要求决定。计算出所需功率后,选择一个具有适当功率…

Java数组详解

Java数组详解 📚 Java数组详解:一篇文章搞懂Java中的数组知识摘要引言1. 数组的定义与创建📦1.1 数组的定义1.2 数组的创建及初始化数组不进行初始化时的默认值 2. 数组的遍历🔍2.1 使用for循环2.2 使用增强for循环2.3 使用Arrays…

斐讯N1刷OpenWRT并安装内网穿透服务实现远程管理旁路由

文章目录 前言1. 制作刷机固件U盘1.1 制作刷机U盘需要准备以下软件:1.2 制作步骤 2. N1盒子降级与U盘启动2.1 N1盒子降级2.2 N1盒子U盘启动设置2.3 使用U盘刷入OpenWRT2.4 OpenWRT后台IP地址修改2.5 设置旁路由&无线上网 3. 安装cpolar内网穿透3.1 下载公钥3.2 …

wordpress主题给网站增加一个版权声明区块代码分享

在数字化时代,网络上的信息传播变得越来越便捷,给人们生活和工作带来了极大的便利。然而,在这个过程中也产生了很多版权问题。为了更好地保护自己的版权,许多网站开始在其网页上添加版权声明。本文将探讨在网站上添加版权声明的重…

scala完整笔记-5万字一周入门到精通系列(一)

scala完整笔记-5万字一周入门到精通写在开篇 1.scala学习前一定要具备了解一些java基本知识,无需精通;如果从未接触java,最好熟悉一门编程语言,否则相对还是学习起来相对吃力且很难学懂 2.本篇主要以代码示例为主,很多…

亲测使用frp获得访问者真实ip

怎么访问都只有127.0.0.1这个内网ip,获取不到访问者的真实ip 1.打开frp的配置文件(一般是frpc.toml,无需设置frps.toml) 在每一个tcp协议中添加 transport.proxyProtocolVersion "v2" 实例: # frpc.toml [[proxies]] name "web" …

1小时从0开始搭建自己的直播平台(详细步骤)

本文讲述了如何从0开始,利用腾讯云的平台,快速搭建一个直播平台的过程。 文章目录 效果图详细步骤准备工作第一步:添加域名并检验cname配置1.先填加一个推流域名2. 点击完下一步,得到一个cname地址3. 将cname地址,配置…

路径规划 | 图解粒子群(PSO)算法(附ROS C++仿真)

目录 0 专栏介绍1 从鸟群迁徙说起2 粒子群算法基本概念3 粒子群算法流程4 粒子群算法ROS实现 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规…

类和对象【六】友元和内部类

文章目录 友元友元的作用友元的缺点友元函数语法:特点: 友元类语法:特点: 内部类概念特点 友元 友元的作用 友元提供了一种打破封装的方式,有时提供了便利。 友元的主要作用就是打破封装 即可以让一个类的友元函数…

每日一题24:数据操作之第N高的薪水

一、每日一题 表: Employee ------------------- | Column Name | Type | ------------------- | id | int | | salary | int | ------------------- 在 SQL 中,id 是该表的主键。 该表的每一行都包含有关员工工资的信息。查询 Employee 表中第 …

C#--SVG矢量图画法示例

1.代码示例 <Viewbox Grid.Column"1" Grid.ColumnSpan"1" Grid.RowSpan"1" ><Path Name"ValveShape" Stroke"Black" Data"M 50,0 L 150,200 L 50,200 L 150,0 Z" Width"200" Height"…

5、xss-labs之level6

一、level6-----大小写绕过 1、测试分析 测试了之前用过的payload&#xff0c;发现都不行&#xff0c;并且level4使用的Java伪协议也不行&#xff0c;可以得出<>、script、onclick都被过滤 2、构造payload 因为href被过滤&#xff0c;可以试一下大写HREF 初试payload…

前端Vue自定义顶部搜索框:实现热门搜索与历史搜索功能

前端Vue自定义顶部搜索框&#xff1a;实现热门搜索与历史搜索功能 摘要&#xff1a; 随着前端开发复杂性的增加&#xff0c;组件化开发成为了提高效率和降低维护成本的有效手段。本文介绍了一个基于Vue的前端自定义顶部搜索框组件&#xff0c;该组件不仅具备基本的搜索功能&am…

【wiki知识库】02.wiki知识库SpringBoot后端的准备

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日目标 二、&#x1f4c2;打开SpringBoot项目 2.1 导入所需依赖 2.2修改application.yml配置文件 2.3导入MybatisPlus逆向工程工具 2.4创建一个公用的返回值 2.5创建CopyUtil工具类 2.6创建…