java实现简易超市管理系统 附源码下载

java超市管理系统 1.0(含源文件,后续会继续优化~)

前言

一个月零零散散的时间学习了java,通过这次“超市管理系统”的练习,希望可以给一同开始学习java的朋友一些参考,更希望大佬们多多指点和批评~


一、确定需求

程序概述:
小型超市商品销售管理系统选择小型超市的四类商品进行管理。
这四类商品是:食品、化妆品、生活用品和饮料(四个类)。
每类商品都包含有商品名和商品利润 (其中包括商品的售价、进价、库存量)。(五个属性)
每类不同的商品还有区别于其他商品的特殊信息(子类特有属性)例如,食品有批发商,化妆品有品牌,饮料有生产厂家。

上述文字可以确定以下几点

程序要实现“增,删,改,查”这四个基本功能 + 显示利润本程序要求对四类商品进行操作,因此分类很明确,只需要创建四个类分别表示四类商品即可本程序中要求商品有(以下属性)商品名、商品利润、售价、进价、库存量(我们当然可以额外加入一个属性:商品id,以实现更加明确的equals比较,后文会提及)。本程序中要求对于不同类的商品还要有自己特有的信息(食品有批发商,化妆品有品牌,饮料有生产厂家)

通过以上内容,我们大概对这个程序有了初步的想法和思路,下面我们深入分析一下需要哪些类以及哪些方法

二、确定类、接口、方法实现

1.确定类

上文提及到:我们需要定义四个类分别表示四类商品,那么我们在写之前是否可以从四个类抽取它们相同的特点(属性)来引入继承的思想呢?

显然是可以的,我们可以定义一个商品类Wares作为父类,(并且使用多态来切换父类引用的不同指向)Wares父类包含了四个类商品的共性(具有商品名、售价、进价、库存量、商品编号id这五个属性),而其子类当然就是食品Food、化妆品Cosmetic、生活用品DailyUsing和饮料Drinking,这样程序中的类就确定下来了

我们可以再深入思考一下:Wares可以是普通类、可以是抽象类,我们如何去选择呢?

其实两者在功能实现上都是可以的,但是普通类实现接口的时候,是一定要重写接口中每一个方法的,而抽象类却不需要;况且Wares是四类商品的父类,我们在对商品进行操作的时候,只需要操作其子类的对象即可,没有必要实例化Wares对象,因此我们选择将Wares定义为抽象类。

关于四个子类:食品类Food、饮料类Drinking、化妆品类Cosmetic、生活用品类DailyUsing的确定

四个子类只需要继承父类Wares即可,共性属性自然而然的继承了下来,特性属性在每个类中单独编写即可。

//Wares类中的属性
//商品名字
private String name;
//商品编号
private int id;
//商品进价
private double inPrice;
//商品售价
private double outPrice;
//库存量
private int Count;

注:Wares及其子类的属性我们最好都设为私有属性,再去通过settergetter方法进行存取,养成封装的好习惯~

2.确定接口

商品类Wares会包含所以商品类及其子类所共有的静态特征(属性)和对商品的动态操作(方法),属性在类中一一初始化即可,但是方法我们也要在此类中一一写出方法体吗?

我们可以利用接口,把我们程序所需要的方法都一一声明到接口内,不需实现,只需等待父类Waresimplement接口,再让其子类中对接口内的方法一一实现(重写)即可

3.确定方法

下面我们来根据程序需求来确定方法(需求:增删改查、显示利润)

我们还可以加入“遍历所有商品”功能,这样还可以在程序调试的时候,判断是否可以真正实现增删改查功能,起到验证作用

因此我们确定下来了有以下几个方法:

public interface Operations {
 /*
  添加商品信息
  */
 void addWareInfo(ArrayList<Wares> arrayList);
 /*
  输出商品信息
  注意:需要重写toString方法
  */
 void printWareInfo(ArrayList<Wares> arrayList);

 /*
  查询商品信息
  注意:需要重写equals方法
  */
 void findWareInfo(ArrayList<Wares> arrayList);
 /*
  计算并显示某个商品的利润
  注意:需要重写equals方法
  */
 void countWarePrice(ArrayList<Wares> arrayList);
 /*
  删除商品的信息
  注意:需要重写equals方法
  */
 void delWareInfo(ArrayList<Wares> arrayList);
 /*
  修改货物信息
  注意:需要重写equals方法
  */
 void updateWareInfo(ArrayList<Wares> arrayList);
}

三、敲代码前再分析一波~

1.重写equals()吗?

重写equals()的目的是用于比较两个不同对象在其本身内容相同时,希望equals方法判定结果是true而非false,这时我们需要重写equals()

本程序我们自定义equals()判定规则为:当对象的编号和名称同时相同时,判定两个对象为同一个对象
很显然,本程序无论是“增删改查”操作这四个基本功能,还是验证用户是否重复添加同一商品这一功能,都需要两个对象进行equals比较,因此重写equals()是必须的。

那么是否每一个类都需要重写equals方法呢?

显然,Wares抽象类是不需要的,因为我们在比较的时候,是比较其子类的对象是否是同一对象,而并非父类对象(况且该父类是抽象类,无法实例化对象,更别谈可以调用其equals()了)因此我们可以确定:要重写Food类、Drinking类、DailyUsing类、Cosmetic类中的equals()要进行重写

/*
 重写equals方法
 自定义为:当名称相同且商品id相同的时候,视为同一件商品
 */
@Override
public boolean equals(Object o) {
 if (this == o) return true;
 if (o == null || !(o instanceof Wares)) return false;
 Cosmetic cosmetic = (Cosmetic) o;
 return super.getName().equals(cosmetic.getName()) && super.getId()==cosmetic.getId();
}

2.重写toString吗?

由于需要清晰的显示商品信息,每一次需要输出信息的时候,可以System.out.print(“…” + 属性1 + “…” + 属性2);来显示每一条信息。

但是鉴于本程序输出的次数很多,而且System.out.print()方法在内部调用toString()

因此我们可以重写(父类)toString方法,使得每次的输出都有一套固定的输出格式,实现了System.out.print(实例化的对象名);即可完成格式化输出。

那么是否每一个类都需要重写toString()呢?

显然,Wares抽象类是不需要的,因为我们输出信息的时候,是要输出四个子类对象的信息(父类Wares是抽象类,无法实例化对象,更别谈可以调用其toString()了)因此我们可以确定:要重写Food类、Drinking类、DailyUsing类、Cosmetic类中的toString()要进行重写

/*
 重写toString方法
 */
@Override
public String toString() {
 return "化妆品 {\t " + super.getId() +
   "\t " + super.getName() +
   "\t\t" + super.getInPrice() + "元" +
   "\t\t" + super.getOutPrice() + "元" +
   "\t\t" + super.getCount() + "件" +
   "\t}";
}

3.重写hashCode()吗?

Java中规定:如果两个对象相同,那么它们的hashCode值一定要相同;如果两个对象的hashCode相同,它们对象本身equals比较并不一定相同。
因此如果改写了equals方法,令两个实际不是一个对象的两个实例在逻辑上相等了,但是hashcode却是不等,这是有矛盾的。

这种矛盾会在hashMap等集合中造成实际运行结果和预期运行结果的不一致产生。
(个人理解:equals()返回true表示两个对象相同,在同一个单向链表上比较那么对于同一个单向链表上的结点来说,他们的哈希值都应该是相同的所以hashCode()的返回值也应该相同)。

就本程序来说没有用到hashMap这样集合底层的数据结构来存储每一个对象(而是用的arrayList),因此是否重写hashCode方法对本程序的影响不大,但是鉴于程序的规范性,还是应该遵循以下原则:

如果一个类的equals方法重写了,那么hashCode方法必须重写。并且equals方法返回如果是true,hashCode方法返回的值必须一样。

/*
 重写hashCode方法
 */
@Override
public int hashCode() {
 return Objects.hash(brand);
}

4.存储结构的确定

类、接口、方法、属性、数据类型以及实现方法都已经确定了,现在需要把实例化的对象以什么样的形式存储到一起呢?

一种是数组、一种是集合

很显然,我们在进行初始化的时候,不知道需要存入多少商品,无法对数组进行预估计容量;数组只能存放单一数据类型的元素,在对其操作的时候(相比较集合中已提供了对集合的很多操作而言)很不方便,而且数组虽然检索效率高,但是插入查找效率很低。

本程序我们选择arrayList集合进行对象的存储。

注:就本程序而言,个人感觉还是使用hashMap(查询更加快捷)或hashSet(排序更加便捷),且两者都可以自动控制存储的信息无重复的特点。这是本程序需要改进的地方之一

四、总结以及源代码

希望通过这篇文章可以帮助到初学java的你!
如果在文章中的描述或者想法不正确或不恰当,希望路过的大佬们可以多多指正!

链接: https://pan.baidu.com/s/167ee8r1IMW80y3-MKq4aoQ

提取码: i4bk

到此这篇关于java实现简易超市管理系统 附源码下载的文章就介绍到这了,更多相关java实现超市管理系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java实现水果超市管理系统

    本文为大家分享了java实现水果超市管理系统的具体代码,供大家参考,具体内容如下 首先建立水果类的界面 public class Fruit { //定义ID private String id; //定义名称 private String name; //定义价格 private int price; //定义单位 private String unit; //定义数量 private int number; public Fruit(String id, String name, int p

  • Java实现简单的酒店管理系统

    本文实例为大家分享了java实现酒店管理系统的具体代码,供大家参考,具体内容如下 要求: [酒店管理系统]HotelSystem.java 某酒店有12层楼,每层楼有10个房间(二维数组),要求为该酒店设计一套简单的前台房间管理程序,该程序可以通过在命令行输入命令来为客人办理入住和退房手续.要求该程序支持通过命令行输入以下命令来进行入住,退房及查询的操作: (1).search:查询所有房间的状态  无人住显示empty,有人则显示住户姓名(2).in 房间号码 姓名 :客人入住 命令:in 请

  • java实现简单超市管理系统

    本文实例为大家分享了java实现超市管理系统的具体代码,供大家参考,具体内容如下 一.使用技术 javaSE 二.实现功能 超市管理系统 具体要求如下: 使用选择结构,循环结构,数组的知识实现一个超市管理系统 三.运行效果图 1.货物清单 2.增加货物 3.删除货物 4.修改货物 5.退出 首先我们分析图片里的内容,需要创建一个货物类. public class Goods { private String number; private double price; private String

  • java实现超市管理系统

    本文实例为大家分享了java实现超市管理系统的具体代码,供大家参考,具体内容如下 实现功能 使用选择结构,循环结构,数组的知识实现一个超市管理系统 运行结果:货物清单: 添加商品功能: 删除商品功能: 修改商品: 商品货物实体类 import java.util.Arrays; public class Goods { private int id; private double price; private String name; public Goods(int id, double pr

  • Java 实现简易教务管理系统的代码

    Main.java import java.util.Scanner; public class Main { public static void main(String[] args) { System.out.println("\t\t简易教务管理系统"); System.out.println("1.录入学生\t2.显示学生\t3.录入课程\t4.显示课程\t5.录入教师" +"\t6.显示教师\t7.学生选课\t8.教师录入成绩\t9.教师排课\

  • java实现通讯录管理系统

    本文实例为大家分享了java实现通讯录管理系统的具体代码,供大家参考,具体内容如下 完成项目的流程: 1.根据需求,确定大体方向 2.功能模块分析 3.界面实现 4.功能模块设计 5.coding 6.代码测试 下面是源代码: import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import j

  • java实现简易超市管理系统 附源码下载

    java超市管理系统 1.0(含源文件,后续会继续优化~) 前言 一个月零零散散的时间学习了java,通过这次"超市管理系统"的练习,希望可以给一同开始学习java的朋友一些参考,更希望大佬们多多指点和批评~ 一.确定需求 程序概述: 小型超市商品销售管理系统选择小型超市的四类商品进行管理. 这四类商品是:食品.化妆品.生活用品和饮料(四个类). 每类商品都包含有商品名和商品利润 (其中包括商品的售价.进价.库存量).(五个属性) 每类不同的商品还有区别于其他商品的特殊信息(子类特有属

  • C#图书管理系统 附源码下载

    用来练手还是不错的,分享大家看一下,还是一些新颖点的   !哈哈 就是自定义DataGridView,方便每个功能部分调用!简单!再次重申!!!后面源码会送上! 首先看一下登录,上图吧! 只有超级管理员跟管理员 接下来看一下主界面 更改DataGridView数据列 datagridView自定义类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.

  • 使用Java实现天天酷跑(附源码)

    首先,写一个需求文档: 一.项目名称:<天天酷跑>(RunDay) 二.功能介绍: 闯关类游戏,玩家登录后,选择进入游戏,通过键盘控制玩家的上下左右移动,来躲避 障碍物和吃金币,玩家躲避的障碍物越多跑酷距离越远,玩家吃的金币越多,得分越高. 三.功能模块: 1.登录界面 用户名(输入框,明文) 密码(输入框,密文) 登录.取消按钮 2.菜单选择界面 开始游戏按钮(图片按钮) 帮助按钮 退出按钮 3.缓冲加载界面 自动加载进度条,加载完毕之后,跳转到下一界面 4.游戏主界面 移动的背景图片.动态

  • 基于Java实现互联网实时聊天系统(附源码)

    目录 0. 前言 1.技术准备 2. 整体说明 2.1 设计思想 2.2 系统结构 2.3 项目结构 2.4 系统功能模块 2.5 系统界面 3. 核心编码 3.1 Netty服务器启动与关闭 4. 效果及操作演示 4.1 登录操作 4.2 聊天演示 5. 源码下载 0. 前言 决定以Netty为核心,以WebSocket为应用层通信协议做一个互联网聊天系统,整体而言就像微信网页版一样,但考虑到这个聊天系统的功能非常多,因此只打算实现核心的聊天功能,包括单发.群发.文件发送,然后把项目与Spri

  • 快速搭建Spring Boot+MyBatis的项目IDEA(附源码下载)

    如何快速构建一个Spring Boot的项目工具 ideaJDK版本 1.8Spring Boot 版本 1.5.9环境搭建实现:最基础前端可以访问到数据库内的内容 开始 1.IDEA 内部新建一个项目,项目类型选择Spring Initializr,Project SDK选择适合你当前环境的版本,这里我选择的是1.8(Spring Boot 2.0以上的版本,JDK选择请选择1.8即以上版本),构建服务选择默认就好,点击Next 2.填写Group和Artifact(此处我使用的是默认,请根据

  • jQuery日期范围选择器附源码下载

    jQuery Date Range Picker是一款允许用户选择一个日期时间范围的jQuery日期选择器插件.整个日期选择器插件使用CSS来渲染样式,可以非常容易的使用CSS来定制皮肤.而且浏览器兼容性非常好,支持多种时间格式. 查看演示             下载源码 准备 使用该日期选择器插件需要 jQuery 1.3.2+和Moment 2.2.0+的支持. <link rel="stylesheet" href="css/daterangepicker.cs

  • jQuery+Ajax+PHP实现“喜欢”评级功能附源码下载

    本文章来给大家介绍一个jQuery+Ajax+PHP实现"喜欢"评级功能代码,用户点击页面中自己喜欢的图片上的红心按钮时,前端页面向后台发送一个ajax请求,后台PHP程序接收请求后,查询IP库中是否已经有该用户的点击记录,如果没有,则将对应的数值+1,同时将该用户IP信息写入IP库,反之则告诉用户已经"喜欢过了".  源码下载地址:http://xiazai.jb51.net/201509/yuanma/loveit(jb51.net).rar 实现过程 本文基于

  • 基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)

    这是一款漂亮简洁的CSS3价格表样式,该价格表基于Bootstrap网格系统来进行布局,通过简单的CSS3代码来美化价格表,样式非常的时尚漂亮,且能在不同屏幕下展示良好的效果. 查看演示     下载源码 HTML 首先在页面中引入bootstrap.min.css文件,这里我用官方的CDN资源,你也可以下载到本地使用. <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstra

  • C++实现四叉树效果(附源码下载)

    什么是四叉树? 如图,设想, 红框表示地图,星星表示单位,黄框表现范围, 要处理地图中范围内的单位,最直接的做法是筛选所有单位. 通过上图可以看到一个显而易见的问题,大部分单位都不需要被处理. 如果把地图分成块,只筛选范围覆盖的块中的单位,这样就可以减少很多不必要的筛选. 四叉树可以有效解决这个问题. 树的每一层都把地图划分四块,根据地图尺寸来决定树的层数,层数越大划分越细. 当需要对某一范围的单位筛选时,只需要定位到与范围相交的树区域,再对其区域内的对象筛选即可. 四叉树的实现 #pragma

  • 基于Jquery制作图片文字排版预览效果附源码下载

    基于jQuery图文排版图片预览特效.这是一款基于jQuery+CSS3实现的鼠标点击图片弹出画廊切换特效. 效果图如下所示,怎么样感兴趣吗,感兴趣的朋友继续往下学习哦. 效果演示    源码下载 html代码: <div id="fullscreen"> <div id="fullscreen-inner"> <div id="fullscreen-inner-left" class="fullscree

随机推荐