图书管理系统

  • 一.book包
    • 1.书的类
      • 一本书的基本内容:

      • 成员变量是private那么我们就需要set和get方法,也需要一个构造方法:

      • Tostring的方法也需要加上:

    • 2.书的增加是i在书架上操作的,创建一个BookList类
      • 首先我们需要让书和书架进行组合,因为书架上会放很多书并且我们这里的书是一个数组那么我们也还需要知道他的实际长度,那么成员变量的定义就是如下:

      • 之后我们就要先给书架上放上书,并且记录下现在几本书:

  • 二.用户包
    • 1.父类用户
      • 无论是什么用户都是有名字的:

      • 这里我们用父类的原因是当我们在程序入口选择用户种类的时候,我们不知道返回的是那种用户,所以无论登入的静态函数返回一个普通用户还是管理员用户他们的类型都是不一样的,所以这里需要用到父类来进行返回类型:

      • 然后我们知道不同身份的用户的菜单也是不一样的所以这里的menu方法是需要重写的,那么我就可以知道,父类中的menu方法就是一个申明的作用不需要实现具体内容,那么父类的User就直接是抽象类,menu方法就是抽象的方法:

    • 2.普通用户
      • 重写的menu:

      • 在menu我们需要选择自己要的操作那么就需要来返回我们所需要操作前面的数字(并且将menu方法的返回值设置成int)(管理员系统也是一样的):

    • 3.管理员用户
      • 重写的menu:

  • 三.运行程序入口
    • 首先写一个等于的函数来提示用户输入信息:

    • 其次我们就需要知道他选择哪种用户:

  • 四.操作包
    • 1.操作包里面都是写的管理员和普通用户的操作,但是二者的操作是不同的,我们就无法区分哪个方法是哪个用户的操作。所以这里我们在操作包里面需要使用让类实现接口,这样接口就有了功能,我们直接定义接口就可以区分每个方法是属于哪个用户的了。
    • 在用户中我们定义一个接口数组就可以在数组中放入对应用户的方法,这样不同用户就可以找到自己的方法:

    • 2.这里我们创建了所有的用户需要用到的功能类:

    • 3.从程序入口Main中我们可以知道当我们登入之后,我们就已经new好了对应的身份信息了:

    • 那么我们知道了对应的身份信息之后就需要找到对应身份的操作有哪些,那么我们就知道在不同用户的类下初始化这个接口,这样当我们拿到了对应身份,接口的功能也就直接就能使用了。
    • 普通用户:

    • 管理员用户:

    • 4.我们需要对操作进行使用,那么我就需要使用这个接口数组来实现我们需要的操作,但是我们需要先得到选择的数组下标,才能操作对应下标所指向的操作:(用户通过对于传入的操作序号知道操作哪个方法,在将书架引用传入,就可以对书架进行操作了)

    • 5.这里我们需要再程序入口的地方创建一个书架的对象,然后当用户登入选择了对应的身份系统之后,我们再通过用户在菜单中选择的操作方式传回一个choice来进行接口数组对操作的实例化对象。

  • 五.操作内部细节
    • 1.查找图书
      • 总过程

      • 其中需要先说明的是,currentSize是需要通过构造方法来获取他的实际长度的,因为BookList这个类中都是的成员变量都是private修饰的,我们是在不同包中引用肯定是不行的,这里只能通过我们构造一个方法来获取。还有在books数组里面循环的时候,不能直接写成bookList[i]因为bookList不是一个数组类型他是一 个类 类型,而其中的books才是数组,并且books这个数组也是private修饰的成员变量,那么这里我们又需要写一个构造方法:

      • 构造了这个方法是为了获取对应下标下的图书是哪本,这样好进行对比。
      • 还需要注意的是在进行对比的时候,要写book.getName而不是在equals中只写一个book。
    • 2.显示图书
      • 这个比较简单,直接通过下标访问就行了,在通过自己的Tostring来打印出来就好了:

    • 3.增加图书
      • 增添图书的时候会有两种情况,第一种情况就是书架满了就不能在进行增加图书的操作了,第二种情况就是直接在以现有图书长度作为下标来放图书。
      • 判断书架是否满了,我们直接在书架的类中写了一个方法来判断书架是否满了:

      • 然后书架没满我们就需要将我们增加图书的信息写出来:(这里需要注意的是,如果nextint写在了nextLine之前,那么输入一个整型之后回车,回车是不会被nextint接收的,那么这个回车就会在缓存区中,然后就会被下面type的nextLine接收这个回车,就无法对type进行书写。)

      • 然后我们要将我们输入的新书来通过实例化一个book的对象里面,然后通过我们自己在bookList中写的增加图书方法来进行books这个数组增加:(通过书架上书的本数来向书架中增加书)

      • 增加好书之后我们需要对useSize进行增加,因为现在的使用的空间就多了1,那么我们需要通过setuseSize的方法来增加useSize的长度:

    • 4.删除图书
      • 删除图书需要先知道你要删除哪个图书,我们就通过输入要删除书的名字就可以去删除这个书:

      • 当我们输入了这个书的名字之后我们就需要通过循环遍历这个书架里面的书数组,找到这个书然后在对他进行删除:、

      • 这里面需要注意的是,我们是用book引用bookList.getBook()这个方法,这个方法的返回值又是book所以不要搞成是用book引用了一个bookList的对象:

      • 找不到的时候也要写出提示语:

      • 之后找到需要删除的书之后我们直接就可以将这个下标的书的后面一本书将这个书的位置来进行覆盖就可以了:

      • 这里需要注意的是,我们删除了书,那么就需要将书架里面书的数量进行减少,然后可以将最后一本书,置为null,因为原来的最后一本书在前面的下标位置了,这里就会有两个相同的最后一本书了,那么我们就可以置为null。
    • 5.退出图书
      • 退出图书比较简单,直接就是一个指令就可以了:

      • 如果要细致一点把图书里面的东西都删除那么就需要置为null:

    • 6.借阅(归还)图书(借阅归还是一样的)
      • 这里我们还是要直接输入我们需要借阅图书的名字:

      • 借阅图书我们可以直接循环这个书架,看他有没有这本图书,如果有这本图书我们直接将他的isLend的成员变量设置为false这样就可以知道这本图书是否被借出了:

      • 这里面有一个细节,就是将自己写的Tostring方法中的isLend的打印方式改成已借出或者已归还:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nginx 基本使用、借助 nginx 和 mkcert 实现本地 https://localhost 测试。

CSDN 如何将资源设置为免费? 安装和基本使用 进入 nginx 官网 下载 Mainline version 版本 解压到一个你喜欢的位置,比如解压到 C: 目录 不管配不配置环境变量,对 nginx 的所有操作都应该在对应文件夹中 基本命令的使用: cd …

初级爬虫实战——哥伦比亚大学新闻

文章目录 发现宝藏一、 目标二、简单分析网页1. 寻找所有新闻2. 分析模块、版面和文章 三、爬取新闻1. 爬取模块2. 爬取版面3. 爬取文章 四、完整代码五、效果展示 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不…

手写微前端micro-app-页面渲染

我们可以使用循环递归的方式提取上面字符串资源中所有遍历到的link、style、script标签,提取静态资源地址并格式化标签。 在source.js文件中,添加extraSourceDom函数,用来提取link,script这种特殊标签 // 提取link的css链接 fun…

一些 AI 工具

AI 搜索:Phind,perplexity AI聊天大模型:chatgpt, kimi(国内可用,支持上传文件) AI 机器人:https://www.coze.com/ AI工具集;https://ai-bot.cn/#term-2 agent GPT&a…

【REST2SQL】13 用户角色功能权限设计

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…

【每日一题】2024年3月汇编(上)

3.1【2369】检查数组是否存在有效划分 2369. 检查数组是否存在有效划分https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/ 1.这样的判断可以用动态规划来解决,用一个长度为(n1) 的数组来记录 是否存在有效划分,dp[i]…

【iOS】ARC学习

文章目录 前言一、autorelease实现二、苹果的实现三、内存管理的思考方式__strong修饰符取得非自己生成并持有的对象__strong 修饰符的变量之间可以相互赋值类的成员变量也可以使用strong修饰 __weak修饰符循环引用 __unsafe_unretained修饰符什么时候使用__unsafe_unretained …

webstorm 使用prettier格式化保存 导致代码缩进与gitlab代码不一致问题

问题 webstorm显示缩进正常 gitlab显示不正常 解决 .prettierrc.js module.exports {printWidth: 100,tabWidth: 2,useTabs: false, //设置为false 不使用tab作为缩进符semi: true,vueIndentScriptAndStyle: true,singleQuote: true,quoteProps: as-needed,bracketSpaci…

肖恩的投球游戏——前缀和

题目链接:1.肖恩的投球游戏 - 蓝桥云课 (lanqiao.cn) 前缀和: package lanqiao;import java.util.Arrays; import java.util.Scanner;/*** 2023/11/29* 前缀和问题*/ public class lanqiao3693_肖恩的投球游戏 {public static void main(String[] args) …

vue3+vite项目打包遇到的问题

一、项目打包出现空白页 vite.config.js中,添加base: ./ import { defineConfig } from vite import vue from vitejs/plugin-vueexport default defineConfig({base: ./, })router/index.js,将路由模式改成hash模式 import { createRouter, createWe…

性能分析调优模型

性能测试除了为获取性能指标外,更多是为了发现性能瓶颈和性能问题,然后针对性能问题和性能瓶颈进行分析和调优。在当今互联网高速发展的时代,结合传统软件系统模型以及互联网网站特征,性能调优的模型可以归纳总结为如图1-5-1所示的…

idea 的基本配置

一、安装目录介绍 其中:bin 目录下: 二、配置信息目录结构 这是 IDEA 的各种配置的保存目录。这个设置目录有一个特性,就是你删除掉整个目录之后,重新启动 IntelliJ IDEA 会再自动帮你生成一个全新的默认配置,所以很多…

力扣● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇

● 583. 两个字符串的删除操作 注意审题: 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 删除最少的字符使两者相同,说明留下来的就是最大公共子序列。不要求…

01.Vue2入门

一、为什么要学习Vue 1.前端必备技能 2.岗位多,绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能(Vue2Vue3) 二、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) 是一套 **构建用户界面 ** 的 渐进式 …

多种双拼方案的实现

首发日期 2024-03-14, 以下为原文内容: 就像 GNU/Linux 用户, 虽然比例小, 却又分散为一堆不同的发行版. 双拼用户在拼音输入法之中的比例也很小, 同时也分为各种不同的双拼方案. 那么作为一个 双拼 输入法, 最重要的事情是什么呢 ? 嗯, 那当然是支持自定义双拼方案 ! 实际上…

网络协议与层次划分:探索计算机网络体系结构

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

AWTK slider_circle 控件发布

slider_circle 控件。 主要特色: 支持正向和反向支持设置滑块的半径支持背景线宽和颜色支持前景线宽和颜色支持设置是否显示值的文本支持设置起始角度和结束角度支持设置格式化值的格式字符串支持使用图片填充背景和前景 界面效果: 注意: …

【绘图案例-绘图的方式1 Objective-C语言】

一、接下来,我们来说这个,绘图的方式 1.新建一个项目,Name:04-绘图的方式, 方式:就是,我要同样画一条线,然后,用不同的代码,把它写出来,这就叫方式, 我们在storyboard里边,还拖一个UIView,这些步骤都一样, 我们来一个,宽= 300, 高 = 300 , 然后,再来一个水…

zabbix配置

1 下载zabbix 1 配置yum源 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release- 5.0-1.el7.noarch.rpm yum clean all yum makecache fast 完成后会出现zabbix.repo文件 2安装zabbix服务 yum -y install zabbix-server-mysql zabbix-web-mysql z…

计算机网络——物理层(信道复用技术)

计算机网络——物理层(信道复用技术) 信道复用技术频分多址与时分多址 频分复用 FDM (Frequency Division Multiplexing)时分复用 TDM (Time Division Multiplexing)统计时分复用 STDM (Statistic TDM)波分复用码分复用 我们今天接着来看信道复用技术&am…