用Java实现简易收银台,供大家参考,具体内容如下
简易收银台的实现并不难,主要实现这几个类:
- 商品类 Goods (将商品根据编号,名称,价格存放)
- 商品中心类 GoodsCenter (存放商品,可以添加商品,下架商品,修改商品信息,判断商品是否存在或者货架已满,打印商品等功能)
- 订单类 Order (处理订单,主要实现买单功能,下单,计算总价)
功能实现
初始化界面
商品上架
修改商品信息
下架商品
返回并进入买单功能
选择商品及数量进行买单
取消订单
查看订单
返回并退出
功能分析
代码展示
package com.bittech; import java.time.LocalDate; import java.util.Scanner; /** * Author:weiwei * description: * Creat:2019/5/5 **/ public class CheckStand { public static Scanner scanner = new Scanner(System.in); public static void helpInfo() { System.out.println("==============欢迎使用简易收银台============="); System.out.println(" [U]使用 [S]设置 [A]关于 [Q]退出 "); System.out.println(" 输入 U S A Q 进行操作 "); System.out.println("============================================"); } public static void quit() { System.out.println("==========================================="); System.out.println(" 欢迎下次使用 "); System.out.println("==========================================="); System.exit(0); } public static void usageInfo() { System.out.println("================买单功能===================="); System.out.println(" [S]查看 [A]下单 [D]取消 [L]浏览 [R]返回"); System.out.println(" 输入 S A D L R 进行操作 "); System.out.println("==========================================="); } public static void about() { System.out.println("==================关于====================="); System.out.println(" 名称:简易收银台 "); System.out.println(" 功能:基于字符界面的收银台操作 "); System.out.println(" 作者:weiwei "); System.out.println(" 版本:v0.0.1 "); System.out.println(" 意见反馈:[email protected] "); System.out.println("=========================================="); } public static void settingInfo() { System.out.println("=================设置功能=================="); System.out.println(" [S]查看 [A]上架 [D]下架 [U]修改 [R]返回 "); System.out.println(" 输入 S A D U R 进行操作 "); System.out.println("==========================================="); } public static void usage() { usageInfo(); GoodsCenter.printGoods(); Order order = new Order(); while(true){ String line = scanner.nextLine(); switch(line.trim()){ case "S":{ order.printOrder(); break; } case "A":{ System.out.println("请输入下单信息[编号][数量] (格式如:1 2 ):"); String value = scanner.nextLine(); String[] infoArray = value.split(" "); if(infoArray != null && (infoArray.length == 2)){ Goods goods = GoodsCenter.getGoods(Integer.parseInt(infoArray[0])); if(goods != null){ order.add(goods,Integer.parseInt(infoArray[1])); order.printOrder(); break; } } System.out.println("请按照格式要求输入信息"); break; } case "D":{ System.out.println("请输入取消信息[编号 数量](如下格式:1 2 ):"); String value = scanner.nextLine(); String[] infoArray = value.split(" "); if (infoArray != null && (infoArray.length == 2)) { Goods goods = GoodsCenter.getGoods(Integer.parseInt(infoArray[0])); if (goods != null) { order.cance(goods, Integer.parseInt(infoArray[1])); order.printOrder(); break; } } System.out.println("请按照格式要求输入信息"); break; } case "L": { GoodsCenter.printGoods(); break; } case "R": { return; } default: { usageInfo(); } } } } public static void setting() { settingInfo(); if (GoodsCenter.isFull()) { System.out.println("!当前商品货架已经满了,如果要进行添加请下降部分商品"); } while (true) { String line = scanner.nextLine(); switch (line.toUpperCase()) { case "S": { GoodsCenter.printGoods(); break; } case "A": { System.out.println("请输入上架商品信息(如下格式:1 餐巾纸 1.4):"); Goods goods = readGoods(); if (goods == null) { System.out.println("!请按照格式要求输入信息"); break; } if (GoodsCenter.isFull()) { System.out.println("!当前商品货架已经满了,如果要进行添加请下降部分商品"); } else if (GoodsCenter.isExist(goods)) { System.out.println("!上架商品已经存在,注意编号不能重复"); } else { GoodsCenter.addGoods(goods); GoodsCenter.printGoods(); } break; } case "D": { System.out.println("请输入下架商品信息编号(如下格式:1 ):"); Goods goods = readGoods(); if (goods == null) { System.out.println("请按照格式要求输入信息"); break; } if (GoodsCenter.isPutaway(goods)) { GoodsCenter.soldOutGoods(goods); GoodsCenter.printGoods(); } else { System.out.println("请选择上架的商品编号,当前下架商品未设置"); } break; } case "U": { System.out.println("请输入修改商品信息(如下格式:1 餐巾纸 1.4 )"); Goods goods = readGoods(); if (goods == null) { System.out.println("请按照格式要求输入信息"); break; } if (GoodsCenter.isPutaway(goods)) { GoodsCenter.modifyGoods(goods); GoodsCenter.printGoods(); } else { System.out.println("请选择上架的商品编号,当前修改商品未设置"); } break; } case "R": { return; } default: { settingInfo(); } } } } public static Goods readGoods() { String value = scanner.nextLine(); String[] infoArray = value.split(" "); if (infoArray != null && (infoArray.length == 3 || infoArray.length == 1)) { if (infoArray.length == 3) { Goods goods = new Goods(Integer.parseInt(infoArray[0]), infoArray[1], Double.parseDouble(infoArray[2])); return goods; } if (infoArray.length == 1) { Goods goods = new Goods(Integer.parseInt(infoArray[0]), "", 0.0D); return goods; } } return null; } public static void main(String[] args) { helpInfo(); while (true) { String line = scanner.nextLine(); switch (line.trim().toUpperCase()) { case "U": usage(); helpInfo(); break; case "S": setting(); helpInfo(); break; case "A": about(); break; case "Q": quit(); break; default: helpInfo(); } } } }
GoodsCenter类
class GoodsCenter { //商品占位符 private static String placeholder = "--"; //最大商品数量 private static int maxGoods = 10; //商品容器 private static Goods[] goodsArray; //初始化商品容器 static { goodsArray = new Goods[maxGoods]; for (int i = 0; i < goodsArray.length; i++) { goodsArray[i] = new Goods(i + 1, "--", 0.0D); } } private GoodsCenter() { } public static int getMaxGoods() { return maxGoods; } //添加商品 public static void addGoods(Goods goods) { for (int i = 0; i < goodsArray.length; i++) { Goods temp = goodsArray[i]; if (temp.getId() == goods.getId()) { temp.setName(goods.getName()); temp.setPrice(goods.getPrice()); break; } } } //下架商品 public static void soldOutGoods(Goods goods) { for (int i = 0; i < goodsArray.length; i++) { Goods temp = goodsArray[i]; if (temp.getId() == goods.getId()) { temp.setName(placeholder); temp.setPrice(0.0D); break; } } } //修改商品 public static void modifyGoods(Goods goods) { for (int i = 0; i < goodsArray.length; i++) { Goods temp = goodsArray[i]; if (temp.getId() == goods.getId()) { temp.setName(goods.getName()); temp.setPrice(goods.getPrice()); break; } } } //商品是否存在 public static boolean isExist(Goods goods) { for (int i = 0; i < goodsArray.length; i++) { Goods temp = goodsArray[i]; if (temp.getId() == goods.getId() && temp.getName().equals(goods.getName())) { return true; } } return false; } //商品位是否存在商品 public static boolean isPutaway(Goods goods) { for (int i = 0; i < goodsArray.length; i++) { Goods temp = goodsArray[i]; if (temp.getId() == goods.getId() && !temp.getName().equals(placeholder)) { return true; } } return false; } //商品已满 public static boolean isFull(){ for(int i =0;i
Goods类
class Goods{ //商品编号 private int id; //商品名称 private String name; //商品价格 private double price; public Goods(int id,String name,double price){ this.id = id; this.name = name; this.price = price; } public int getId(){ return this.id; } public int getIndex(){ return this.getId()-1; } public String getName(){ return this.name; } public void setName(String name) { this.name = name; } public double getPrice(){ return this.price; } public void setPrice(double price) { this.price = price; } @Override public String toString(){ return String.format("[%2d] %s %.2f",this.getId(),this.getName(),this.getPrice()); } }
Order类
class Order{ private static int orderId = 0; private int id; private Goods[] items; private int[] itmesNumber; private int currentIndex; public Order(){ this.id = ++orderId; this.items = new Goods[GoodsCenter.getMaxGoods()]; this.itmesNumber = new int[GoodsCenter.getMaxGoods()]; this.currentIndex = -1; } public void add(Goods goods,int count){ int index = goods.getIndex(); this.items[index] = goods; this.itmesNumber[index] += count; } public void cance(Goods goods,int count){ int index = goods.getIndex(); int value = this.itmesNumber[index]-count; if(value > 0){ this.itmesNumber[index] = value; }else{ this.items[index] = null; this.itmesNumber[index] = 0; } } public int getSize(){ return this.currentIndex+1; } public double getTotalPrice(){ double tatalPrivce = 0; for(int i =0;i
项目总结
- 用常用String类,Scanner类实现,代码量不多,简单易懂
- 有弊端存在,就是用数组存放商品,容易出现数组越界异常,而且如果商品多的话用数组存储也是极其不方便的
- 还有就是未使用到数据库,商品信息,订单信息的保存有很多不方便的地方,如果建立连接了数据库,这个问题就解决了
目前能力只能实现到这了,希望可以再努力一下,将数据库加入到项目中,让它的易用性再提升更多。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。