Java基于字符界面的简易收银台


Posted in Java/Android onJune 26, 2021

用Java实现简易收银台,供大家参考,具体内容如下

简易收银台的实现并不难,主要实现这几个类:

  • 商品类 Goods (将商品根据编号,名称,价格存放)
  • 商品中心类 GoodsCenter (存放商品,可以添加商品,下架商品,修改商品信息,判断商品是否存在或者货架已满,打印商品等功能)
  • 订单类 Order (处理订单,主要实现买单功能,下单,计算总价)

功能实现

初始化界面

Java基于字符界面的简易收银台

商品上架  

Java基于字符界面的简易收银台

修改商品信息

Java基于字符界面的简易收银台

下架商品

Java基于字符界面的简易收银台 

返回并进入买单功能

Java基于字符界面的简易收银台

 选择商品及数量进行买单

Java基于字符界面的简易收银台

取消订单

Java基于字符界面的简易收银台 

查看订单

Java基于字符界面的简易收银台 

返回并退出

Java基于字符界面的简易收银台

功能分析

Java基于字符界面的简易收银台

代码展示

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("          意见反馈:liusz0501@163.com       ");
        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<goodsArray.length;i++){
            if(goodsArray[i].getName().equals(placeholder)){
                return false;
            }
        }
        return true;
    }
 
    public static Goods getGoods(int id){
        for(int i = 0;i<goodsArray.length;i++){
            Goods temp = goodsArray[i];
            if(temp.getId() == id && !temp.getName().equals(placeholder)){
                return goodsArray[i];
            }
        }
        return null;
    }
 
    //打印商品
    public static void printGoods(){
        System.out.println("=============商品清单================");
        System.out.println("\t" + "编号" + "\t" +"产品名称" + "\t" + "单价");
        for(int i = 0;i<goodsArray.length;i++){
            Goods temp = goodsArray[i];
            String name = temp.getName();
            if(name.equals(placeholder)){
                name = name + "[未上架]";
            }
            System.out.println("\t" + temp.getId() + "\t" + temp.getName() + "\t" + temp.getPrice());
        }
        System.out.println("=========================================");
    }
}

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<this.items.length;i++){
            Goods goods = this.items[i];
            if(goods != null){
                tatalPrivce += (this.itmesNumber[goods.getIndex()] * goods.getPrice());
            }
        }
        return tatalPrivce;
    }
 
    public int getId(){
        return this.id;
    }
 
    public void printOrder(){
        System.out.println("========================");
        System.out.println("编号" + this.getId()     );
        System.out.println("打印时间" + LocalDate.now().toString());
        System.out.println("========================");
        System.out.println("编号   名称    数量   单价");
        for(int i = 0;i<this.items.length;i++){
            Goods goods = this.items[i];
            if(goods != null){
                int count = this.itmesNumber[goods.getIndex()];
                if(count <= 0){
                    continue;
                }
                System.out.println(String.format("%2d\t%s\t%d\t%.2f",goods.getId(),goods.getName(),count,goods.getPrice() ));
            }
        }
        System.out.println("=========================");
        System.out.println(String.format("总价:%2f",this.getTotalPrice()));
        System.out.println("=========================");
    }
}

项目总结

  • 用常用String类,Scanner类实现,代码量不多,简单易懂
  • 有弊端存在,就是用数组存放商品,容易出现数组越界异常,而且如果商品多的话用数组存储也是极其不方便的
  • 还有就是未使用到数据库,商品信息,订单信息的保存有很多不方便的地方,如果建立连接了数据库,这个问题就解决了

目前能力只能实现到这了,希望可以再努力一下,将数据库加入到项目中,让它的易用性再提升更多。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Java中PriorityQueue实现最小堆和最大堆的用法
Jun 27 Java/Android
Java基础之线程锁相关知识总结
Jun 30 Java/Android
Java生成读取条形码和二维码的简单示例
Jul 09 Java/Android
SpringBoot+VUE实现数据表格的实战
Aug 02 Java/Android
Log4j.properties配置及其使用
Aug 02 Java/Android
Java8中Stream的一些神操作
Nov 02 Java/Android
Java 通过手写分布式雪花SnowFlake生成ID方法详解
Apr 07 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
Java时间工具类Date的常用处理方法
May 25 Java/Android
springboot 全局异常处理和统一响应对象的处理方式
Jun 28 Java/Android
向Spring IOC 容器动态注册bean实现方式
Jul 15 Java/Android
springboot+rabbitmq实现智能家居实例详解
Jul 23 Java/Android
springboot集成flyway自动创表的详细配置
idea搭建可运行Servlet的Web项目
Java Dubbo框架知识点梳理
Java实现多线程聊天室
eclipse创建项目没有dynamic web的解决方法
Feign调用传输文件异常的解决
springcloud之Feign超时问题的解决
You might like
php使用pack处理二进制文件的方法
2014/07/03 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
基于Vue.js的表格分页组件
2016/05/22 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
原生JS和jQuery操作DOM对比总结
2017/01/19 Javascript
vue.js获取数据库数据实例代码
2017/05/26 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
2018/01/05 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
金讯Java笔试题目
2013/06/18 面试题
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
Python制作动态字符画的源码
2021/08/04 Python
mysql函数全面总结
2021/11/11 MySQL
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技