简易图书馆系统制作

  • 一. 业务设计整体框架
    • 1.1 输入姓名
    • 1.2 选择身份从而进入不同的系统
    • 1.3 选择身份进入
      • 1.3.1 从管理员身份进入:
      • 1.3.2 从普通用户身份进入:
  • 二. 具体代码块的实现以及思路讲解
    • 2.1 包的创建和分类
    • 2.2 定义属性
    • 2.3 创建书架
    • 2.4 方法的分类
    • 2.5 用户的分类
    • 2.6 主函数的实现
    • 2.7 用户的具体实现
    • 2.8 方法的实现

通过JavaSE基础部分的学习,我们可以把基础的部分结合起来做个小项目,此篇就制作了一篇简易的图书馆管理系统,能更好的串联我们所学的知识,也能更好的学以致用

前言:为了更好服务于我们的学习,在图书馆里的一系列操作都会被记录在案,无论是管理员还是普通用户,都可以很好的知晓图书是否外借,以及图书馆里现存的书籍,作为管理员可以增删图书,作为普通用户可以借还书籍,以此达到我们的个人需求。

一. 业务设计整体框架

1.1 输入姓名

1.2 选择身份从而进入不同的系统

可以看到1对应的是管理员身份,0对应的是普通用户

1.3 选择身份进入

1.3.1 从管理员身份进入:

在图中能知晓管理员菜单:
1对应的操作是查找图书
2对应的操作是新增图书
3对应的操作是删除图书
4对应的操作是显示图书
0对应的操作是退出系统

接下来我们一一完成对应的操作

1查找图书:

此处输入我们要找的书的名字

输出书的相关信息,有书名,作者名,价格,类型,以及是否借出等状态

2新增图书

查阅新增图书之前图书馆有的书:

依次输入新增图书名字,作者,类型及价格

系统整理新增图书信息并进行打印输出
查阅新增图书之后图书馆有的书:

可以看到我们输入的图书信息被录进去了

3删除图书

输入要删除的图书名字

然后再进行显示图书查验是否删除了图书

此时看到《Java图书操作系统》这本书确实被删除了

退出系统

1.3.2 从普通用户身份进入:

在图中可以知晓普通用户菜单
1对应的操作是查找图书
2对应的操作是借阅图书
3对应的操作是归还图书
0对应的操作是退出系统

接下来我们一一完成对应的操作
1查找图书:

输出书的相关信息,有书名,作者名,价格,类型,以及是否借出等状态

2借阅图书

借阅图书之前我们已经查到了《三国演义》并且状态是未借出的

此时我们《三国演义》借阅成功
继续查在系统里查阅三国演义是否借出等状态

可以看出借阅出来了,所以借阅状态成功了,当我们再次借阅《三国演义》的时候就会显示借阅失败,没有此书或已被借出

3归还图书

当我们再次查阅《三国演义》状态就是未借出的

0退出系统

这就是整体的设计,可能有些地方设计的不是很合格,但是我们作为程序员,我们只关注设计的本身,不关注业务本身,业务的设计每个人都会有自己的想法,所以思维的学习和培养很重要

二. 具体代码块的实现以及思路讲解

在详解代码之前,我们需要知道的是在面向对象设计的时候,很多细节处的描写并不是一步到位的,是需要我们一步一步完善改进的,所以对于初学者这也是被劝退的一个点,但是没关系,我们一步步来,知识和经验都是慢慢积累过来的。

2.1 包的创建和分类

我们需要知道的是①在主函数里进行命令的传递,②书这个类在上面的描写中有许多属性,以及借还都需要利用这个包来操作,③各种数字对应的命令,④赋予普通用户和管理员的各种权限,使他们权限不混合。

2.2 定义属性

首先我们可以对书这个类进行属性的定义,由于为了方便后期书籍的借还所以此处在书这个包当中又分了两个类
第一个类写的是书籍的属性,每次放一本书到书架上,都要构造一个书的对象,所以要写一个构造方法,我们在定义属性的时候用private修饰,我们需要实现对外的接口来让类外和包外拿到属性,以及写一个ToString来对外输出打印,代码如下:

在我们的ToString方法里我们对借还书状态进行了改变,为的是符合我们的需求,对书的借还状态一目了然。

2.3 创建书架

我们还需要创建一个书架类,用来存放我们的书籍,在书籍按顺序存放的时候我们可以看作是数组的存放,所以在book这个包里我们又弄了一个书架类

在这里面有不解的是我们为何要对数组下标的元素进行操作呢?我们接着往下看

2.4 方法的分类

我们在上文可以看到我们需要查找,借阅,删除等一系列操作,为了方便简洁有效我们直接把各种操作都写成不同的类,放在一个operation包里面

其中我们可以看到还有一个接口类,它的作用就是规范了标准,利于向上转型,因为在这些类里面,都需要引用BookList数组,所以我们直接抽象化出来

2.5 用户的分类

在我们的使用者里面又可以分为普通用户和管理员,并且实现一个公共的类,达到共性抽取,且在User里更方便调用两者

2.6 主函数的实现

在确定调用的对象及对象的方法的时候需要在普通用户,管理员以及User里面实现doOperation方法

2.7 用户的具体实现

User类里的具体实现:

NormalUser(普通用户)的具体实现:

AdminUser(管理员)的具体实现:

2.8 方法的实现

我们上面第三步仅仅创建了各种方法的类,并没有具体实现,那我们接下来一一实现:
对所有的方法实现规范,创建一个接口类,并让所有的方法类去继承它:

显示图书:

退出系统:

此处置为null其实也可以不这么做,但是没有null之后在程序运行结束的时候内存才会被回收,当程序一直在运行的时候,内存装满了,这就会发生内存泄漏

新增图书:

查找图书:

删除图书:

借阅图书:

归还图书:

到此一个简单的小项目就写成功了,它集合了数组,类和对象,封装,继承,多态,抽象类,接口等知识,学完此项目能有效帮我们巩固基础知识,并且开始真正的认识面向对象。

【JavaSE】图书馆系统制作--JavaSE简易知识整合相关推荐

  1. javaee, javaweb和javase的区别以及各自的知识体系

    javaee, javaweb和javase的区别以及各自的知识体系 来源 https://blog.csdn.net/weixin_39297312/article/details/79454642 ...

  2. java和javaweb的区别_javaee, javaweb和javase的区别以及各自的知识体系

    javaee, javaweb和javase的区别以及各自的知识体系 来源 https://blog.csdn.net/weixin_39297312/article/details/79454642 ...

  3. 如何制作linux系统硬盘,手把手带你自制Linux系统之二 简易Linux的制作

    手把手带你自制Linux系统之二 简易Linux的制作 本文利用CentOS5.5自带内核制作一个可以正常启动的Mini Linux. 打开上一篇准备工作中创建的CentOS虚拟机,为另一台虚拟机Mi ...

  4. 【软考系统架构设计师】2011年下系统架构师综合知识历年真题

    [软考系统架构设计师]2011年下系统架构师综合知识历年真题 2011年下系统架构师综合知识历年真题 [软考系统架构设计师]2011年下系统架构师综合知识历年真题 [2011下架构真题第01题:绿色] ...

  5. C#毕业设计——基于C#+asp.net+sqlserver的中学图书馆系统设计与实现(毕业论文+程序源码)——图书馆系统

    基于C#+asp.net+sqlserver的中学图书馆系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于C#+asp.net+sqlserver的中学图书馆系统设计与实现,文章末尾附有 ...

  6. 【软考系统架构设计师】2017下系统架构师综合知识历年真题

    [软考系统架构设计师]2017下系统架构师综合知识历年真题 [2017下架构真题第01题:绿色] 01.某计算机系统采用5级流水线结构执行指令,设每条指令的执行由取指令(2Δt).分析指令(1Δt). ...

  7. html+css基础知识整合 2021-08-30

    html基础知识整合 文章目录 **html基础知识整合** [web的组成] [HTML5基本语法] 常规标签(普通标签.双标签) [文章标签] [修饰标签] [特殊字符] [HTML注释] [列表 ...

  8. 【软考系统架构设计师】2021年下系统架构师综合知识历年真题

    [软考系统架构设计师]2021年下系统架构师综合知识历年真题 [2021下架构真题第01题:绿色] 01.某计算机系统页面大小为4K,进程P1的页面变换表如下图所示,看P1要访问数据的逻辑地址为十六进 ...

  9. 最小的Linux系统制作过程详解

    http://club.topsage.com/thread-890315-1-1.html 一,什么是BabyLinux 二,为什么要做这样一个linux 三,什么人适合读这篇文档 四,应该具备的知 ...

最新文章

  1. 微信小程序把玩(三十三)Record API
  2. 针对C++最主要的优势就是没有指针
  3. html单选框换行,html – 如何防止单选按钮及其标签之间的换行符,同时仍然允许标签本身中的换行符?...
  4. Zookeeper节点详解
  5. 计算机基础(一):ION IOMMU 内存申请
  6. yarn-site.xml相关配置参数
  7. android camera无预览拍照 后台拍照
  8. Python计算水仙花数
  9. 计算机中丢失d3dx11 43.dll,电脑为何玩了游戏都有什么丢失d3dx11_34.dll
  10. 运放放大倍数计算公式_运算放大器基础知识
  11. 网络抓包与HTTP协议(采用wireshark、Fiddler抓包软件)
  12. 周伟焜:IBM为何重造信仰
  13. 【大白话学习】UniApp 微信小程序与APP应用 开发零基础入门教程(一)---基础页面框架搭建
  14. Python操作json文件
  15. android导入库项目,如何在android studio项目中导入开源库?
  16. libxml主要函数说明
  17. linux rm 提示无法删除“xxxxxxx“:不允许的操作
  18. 关于CNN中出现的诸如conv4_3、conv8_2、conv7等标识的含义
  19. 对睡眠好的东西,失眠了,就看看这些助眠好物
  20. 【入门】人见人爱A+B:时间相加

热门文章

  1. Python非常适合副业,以私单的形式接一些小型项目
  2. opencv findcourter之后的轮廓点拟合
  3. 【squid缓存服务器】
  4. 名编辑电子杂志大师教程 | 阅读量浏览量统计
  5. STM32 - 解决一次下位机偶校验收包乱码的问题
  6. int正数和负数的原码、反码、补码
  7. vue模仿网易云客户端
  8. PointNet和PointNet++论文解读
  9. 类似staruml的工具有哪些?
  10. 我写的书:《C++,挑战编程——程序设计竞赛进阶训练指南》