使用eclipse创建一个图书管理系统(1)-----搭建架构

目录

思维导图:

图书管理系统的创建:

第一步:搭建框架-------使用者

第二步:搭建框架------被使用者

第三步:操作方法

第四步:main函数


思维导图:

 前言:

昨天学了一下使用Java语言来写一个图书管理系统,于是今天写一篇博客作为一个小笔记巩固一下自己学到的知识!博主也是刚学,可能写的不是很清楚,很明白……,希望大家谅解!

图书管理系统的创建:

第一步:搭建框架-------使用者

这个过程是最简单的,只要明确的知道自己的图书管理系统要面向的对象是谁!比如我写的,我面向的对象就是使用者:AdminUser与NormalUser,还有被使用的对象:Book与Booklist。

于是我的第一步便是创建了这几个类:

第一个:User(父类)

package User;

public  class User {
 
  protected String name;
  public User(String name) {
	// TODO Auto-generated constructor stub
	  this.name = name;
}
	
}

第二个:AdminUser(子类)

package User;

public class AdminUser extends User{
	public AdminUser(String name) {
		// TODO Auto-generated constructor stub
		super(name);//先帮父类构造
		this.name = name;//再自己构造
	}

}

第三个:NormalUser(子类)

package User;

public class NormalUser extends User{
	public NormalUser(String name) {
		// TODO Auto-generated constructor stub
		super(name);
		this.name = name;
	}

}

说明:

1.这三个类是在同一个包中的

2.至于为什么要多创建一个父类User呢?是因为这样方便向下转型! 毕竟两个子类在调用时不能统一类型,但是加一个父类就很好统一了!

第二步:搭建框架------被使用者

这个项目里面的被使用者是谁?毫无疑问是我们的书以及书架!因为你要借的是书,而书在书架上。你要动书,自然就会动书架!!!所以我们的操作对象也就确定了。

于是我的第二步就创建了这两个对象:

第一个:Book类

package Library;

public class Book {
	private String name;
	private String type;
	private String author;
	private int price;
	private boolean isBorrow;
	public Book( String name,String type,String author, int price) {
		this.name = name;
		this.type = type;
		this.author = author;
		this.price = price;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	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 boolean isBorrow() {
		return isBorrow;
	}
	public void setBorrow(boolean isBorrow) {
		this.isBorrow = isBorrow;
	}
	
	

}

 第二个类:Booklist

package Library;

public class Booklist {
	Book[]books = new Book[10];//创建一个Book类型的数组来当书架
	public Booklist(Book[]books) {//构造方法初始化数组
		// TODO Auto-generated constructor stub
		books[0] = new Book("三国演义", "古典小说", "罗贯中", 66);
		books[1] = new Book("水浒传", "古典小说","施耐庵", 55);
		books[2] = new Book("三体", "科幻小说", "刘慈欣", 88);		
	}
	

}

说明:

1.这两个类也是在同一个包里的

2.在Book类中使用private修饰符可以更好的封装并且能确保name,author这些变量不能随意改动。只能通过get与set方法来获取与更改。

3.在构造方法中之所以没有初始化isBorrow是因为它默认就是false。一开始我们的书架的书是没有被借出的,所以isBorrow就是false。

第三步:操作方法

操作方法的功能是多种多样的,也就是说他是多态的。于是我们便可以多态的方法来想如何实现多态。

接口:IOperation

package Operation;

import Library.Booklist;

public interface IOperation {
	public void work(Booklist booklist) ;//接口内的方法,操作的对象是Booklist。
	

}

 第二个类:AddOperation

package Operation;

import Library.Booklist;

public class AddOperation implements IOperation{
	public void work(Booklist booklist) {//重写方法,使这个方法变为Addoperation的方法
		System.out.println("添加图书!");
	}

}

第二个类:DelOperation

package Operation;

import Library.Booklist;

public class DelOperation implements IOperation {
	public void work(Booklist booklist) {//重写方法,使work方法变成DelOperation的方法
		System.out.println("删除图书!");
	}

}

第三个类:FindOperation

package Operation;

import Library.Booklist;

public class FindOperation implements IOperation {
   public void work(Booklist booklist){//重写work方法使之成为FindOperation的方法
	   System.out.println("查阅图书!");
   }
}

第四个类:DisplayOperation

package Operation;

import Library.Booklist;

public class DisplayOperation implements IOperation {
public void work(Booklist booklist) {
	System.out.println("显示图书!");
}
}

第五个类:isBorrowOperation

package Operation;

import Library.Booklist;

public class isBorrowOperation implements IOperation {
public void work(Booklist booklist) {
	System.out.println("借阅图书!");
}
}

第六个类:returnOperation

package Operation;

import Library.Booklist;

public class returnOperation implements IOperation{
	public void work(Booklist booklist) {
		System.out.println("归还图书!");
	}

}

说明:

1.这里的接口就是为了实现多态,方便以后的调用。

2.接口里的方法是只能定义不能写的。

3.每个继承接口的方法都要重写接口内的方法从而形成自己的方法

4.这些类和接口都在同一个包里面

第四步:main函数

就像我以前写C语言的小游戏有test.c源文件来实现游戏逻辑一样,用Java语言实现一个图书管理系统也要有一个单独的main函数来实现图书管理系统的逻辑!

在与User同样的包里创建main函数:

package User;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

 结语:

现在我们就把图书管理系统的框架搭建完成了!接下来要做的就是实现图书管理系统的逻辑!

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

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

相关文章

games103——作业2

实验二主要使用隐式积分法以及PBD法完成布料仿真 完整项目已上传至github。 文章目录 基于物理的方法弹簧系统单个弹簧多个弹簧弹簧网络结构化弹簧网络(Structured Spring Networks)非结构化弹簧网络(Unstructured Spring Networks)三角网格表示 代码 求解质量弹簧系统的显示积…

(别再手动点APP了)UiAutomator2自动化测试框架带你玩转APP操作

目录 前言 一、uiautomator/uiautomator2的前生今世 1.官方文档介绍 2.梳理一下脉络 3.三款框架对比 二、uiautomator2简介 1.项目组成 2.工作原理 三、环境搭建 1.安装uiautomator2 2.初始化设备 3.init时都干了啥? 四、基础操作 1.连接设备 2.命令…

Python——函数

概念 函数是一段具有特定功能,可重复使用的代码,python提供了很多内置函数,如:print(),input(),len()函数等,以及标准库函数,math库中的sqrt()函数等,除此之外用户还可以…

Hive3面试基础

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、基本知识Hive31.表的类型和表的存储格式a)b)c)创建表i)ii) 2.表 二、使用步骤1.引入库2.读入数据 总结 前言 面试准备之Hive 回顾…

设计模式之适配器模式

目录 1、什么是适配器模式 2、为什么用适配器模式 3、适配器模式的结构 4、类适配器模式代码实现 4.1 思想 4.2 代码实现 4.3 问题分析 5、对象适配器模式代码实现 5.1 思想 5.2 代码实现 6、适配器模式应用场景 1、什么是适配器模式 适配器模式(Adapter…

19. Unity - 2D游戏开发小记02 --- 伪透视图、2D物体碰撞、瓦片地图碰撞、素材缩放平铺

1. 伪视图 在2D游戏开发当中,当角色移动时,会发生物体与物体之间的前后遮挡。2D视图中的前后关系是由 Y 轴决定,y 值越小物体越靠前。unity的渲染应开启根据 y 值的大小进行渲染才能保证正确的遮挡效果,在菜单栏Editor–>project setting --> Graphic中按照下图方式…

C++三大特性—继承“复杂的菱形继承及菱形虚拟继承”

C的一个大坑:菱形继承 希望这篇文章能让你理解什么是菱形继承,以及菱形继承的注意事项 单继承与多继承 单继承:一个子类只有一个直接父类时称这个继承关系为单继承 多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承…

凌恩生物美文分享|HGTree v2.0:水平基因转移数据库

水平基因转移(HGT)是指遗传物在物种间从一个相邻生物体到另一个生物体横向传递,是原核生物遗传变异的重要过程。HGT是负责塑造原核生物基因组和在自然选择中生存的驱动力之一,对原核生物的进化有很大贡献,但它会使物种进化史复杂化&#xff0…

【Linux】进程信号保存

前言 上篇博客我们了解了进程信号的概念和信号如何产生。 本篇我们将学习进程信号如何保存。 文章目录 前言一. 阻塞信号二. 递达动作三. 信号集四. 信号集操作函数结束语 一. 阻塞信号 首先我们需要一些预备知识 实际执行信号的处理动作称为信号递达(Delivery&am…

数字图像处理-绪论

数字图像处理-绪论 文章目录 前言一、闲谈二、什么是数字图像处理?2.1. 什么是数字图像?2.1.1. 可见光图像2.1.2. 不可见光图像 2.2. 什么是数字图像处理? 三、数字图像处理的前世今生3.1. 数字图像处理的前世3.2. 数字图像处理的今生 四、数…

【嵌入式系统】课程复习资料整理

【嵌入式系统】课程复习资料整理 一、绪论 1.定义 从技术的角度定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。从系统的角度定义:嵌入式系统是设计完成复杂功能的硬件和软件&a…

使用crontab定时自动更新DDNS

需求说明: N1盒子的armbian系统配置好了 ipv6 的ddns,实现了域名访问本机,但是本地ipv6可能会发生变化,当发生变化后,需要手动执行指令,将新的ip与域名绑定,现在我们采用定时任务,每…

Nuvoton NK-980IOT开发板 u-boot 编译

前言 最近搭建了 Nuvoton NK-980IOT开发板 的开发编译环境,记录一下 u-boot 的 编译流程 Nuvoton NK-980IOT开发板 资源还是比较的丰富的,可以用于 嵌入式Linux 或者 RT-Thread 的学习开发 开发板上电比较的容易,两根 USB 线即可&#xff0…

计网笔记 01 概述 计算机网络体系结构、参考模型

文章目录 前言1、计网概述1.1 概念、组成、功能、分类1.1.1 概念1.1.2 计网组成1.1.2 计网分类 1.2 标准化工作及相关组织1.2.1 标准的分类 1.3 性能指标★★★1.3.1 速率相关性能指标1.3.2 时延相关指标 2、体系结构&参考模型★★★★★(对应王道视频7-10p 相当…

Android Jetpack:利用Palette进行图片取色

与产品MM那些事 新来一个产品MM,因为比较平,我们就叫她A妹吧。A妹来第一天就指出:页面顶部的Banner广告位的背景是白色的,太单调啦,人家不喜欢啦,需要根据广告图片的内容自动切换背景颜色,颜色…

基于CUDA的GPU计算PI值

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 基于CUDA的GPU计算PI值。本项目使用CUDA编程模型并行计算PI值,研究GPU与CPU效率的比较,分析不同GPU线程分块对性能的影响。 异构计算试验报告 —实验1:基于CUDA的GPU计算PI值 第一部分&…

JS逆向 -- 某平台登录加密分析

一、打开网站,使用账号密码登录 账号:aiyou123.com 密码:123456 二、通过F12抓包,抓到如下数据,发现密码加密了 三、加密结果是32位,首先考虑是md5加密。 四、全局搜索pwd,点击右上角&#xf…

【ros2】ros melodic迁移到ros2 dashing过程中碰到的问题及解决方法

序言 总结踩坑经历,以利他人 1. error: forming pointer to reference type … & 报错原因: ros2回调函数的参数不能是引用形式 &,需要去除& 解决方法: 如果是指针引用,直接去除引用 void Callback(con…

javascript中的严格模式

认识严格模式: 在ECMAScript5标准中,JavaScript提出了严格模式的概念(Strict Mode): 严格模式很好理解,是一种具有限制性的JavaScript模式,从而是代码隐式的脱离了“懒散(sloppy)模…

软件测试实战,Web测试详细总结 (覆盖所有测试点),你要的都有

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Web自动化测试&…