字符界面的简易收银台小程序

本文介绍了一个基于字符界面的简易收银台小程序的设计思路,包括商品类、订单类、商品中心和订单中心的接口及实现,以及主调度类的功能。通过接口和Map集合管理商品和订单,实现添加、删除、查询等功能。程序待优化点包括持久化存储商品和订单信息到数据库。
摘要由CSDN通过智能技术生成

今天要写一个基于字符界面的简易收银台小程序。首先来分析一下我们都需要创建哪些类。
既然是收银台,那必不可少的就是货物和订单啦。因此我们首先必须将货物和订单分别抽象出一个类来,同时还需一个货物中心和商品中心分别对货物和商品进行管理。为了增加其灵活可扩展性,我们决定用接口的方式来实现货物中心和商品中心这两个类。最后我们需要一个主类来对订单中心和商品中心进行一系列的操作调度。因此我们的类结构就很清晰了。
类结构图示如下:
在这里插入图片描述
每个类之间的关系如图:
在这里插入图片描述
接下来,我们来分析各部分代码的功能及实现:
(1)商品类
对于一个商品,我们需知道他的基本属性:商品id、商品名称、商品价格。结构较简单
代码实现如下:

/**
 * 名称:商品表
 **/
public class Goods {
    private String name;
    private double price;
    private String id;

    public Goods( String id, String name, double price) {
        this.name = name;
        this.price = price;
        this.id = id;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    //对每个商品的输出格式加以规定
    public String toString(){
        return String.format("[%2s] %s %.2f",this.getId(),this.getName(),this.getPrice());
    }
}

(2)订单类
对于每个订单,必须要有其相应的订单编号,同时还应有该张订单上的产品信息,以及这些产品的总价钱。因为每张订单上都不只有一个产品,因此我们需要用一个Map的集合来存储这些产品信息,key和value分别代表产品id和产品数量。同时,订单还必须提供添加一定数量的商品,取消一定数量的商品,清空订单这3个基本功能·。
代码实现如下:

/**
 * 名称:订单表
 **/
public class Order {
    private final String orderId; //订单编号
    private final Map<String,Integer> goodsInfo=new HashMap<>();//产品信息
    private double countMoney=0.0D;

    public Order(String orderId) {
        this.orderId = orderId;
    }

    public String getOrderId() {
        return orderId;
    }
    public Map<String, Integer> getOrderInfo() {
        return goodsInfo;
    }
    public double getCountMoney() {
        return countMoney;
    }

    //添加商品及数量
    public void add(String id, Integer n){
         int sum=0;
         if(goodsInfo.containsKey(id)){
             sum=goodsInfo.get(id)+n;
         }else{
             sum=n;
         }
         this.goodsInfo.put(id,sum);
    }
    //取消商品及数量
    public void cancle(String id,Integer n){
        if(goodsInfo.containsKey(id)){
            int sum=goodsInfo.get(id);
            sum-=n;
            if(sum<0){
                this.goodsInfo.remove(id);
            }else{
                this.goodsInfo.put(id,sum);
            }
        }
    }
    //清空订单商品
    public void clear(){
        this.goodsInfo.clear();
    }
     //计算订单总价
    public double totleMoney(){
        double summoney=0.00;
        for(Map.Entry<String,Integer> entry:goodsInfo.entrySet()){
            summoney+=entry.getValue()*getCountMoney();
        }
        return summoney;
    }
}

(3)商品中心接口及其实现类

//商品中心接口
interface GoodsCenter {
    public void addGoods(Goods goods); //添加商品
    public void removeGoods(String goodsid);//移除商品
    public void updateGoods(Goods goods);//更新商品
    public boolean isExistGoods(String goodsid);//判断商品是否存在
    public Goods getGoods(String goodsid);//获取商品
    public String listGoods();//列举所有商品
    public void store();//存储商品信息
    public void load(); //加载商品信息
}

实现代码如下:

/**
 * 商品中心
 **/
public class SimpleGoodsCenter implements GoodsCenter {
    private final Map<String,Goods> goodsmap=new HashMap<String,Goods>();
    private String goodsFilePath=System.getProperty("user.dir")+File.separator+"goods.txt";
    //添加商品
    public void addGoods(Goods goods) {
        this.goodsmap.put(goods.getId(),goods);
    }
    //删除商品
    public void removeGoods(String goodsid) {
        this.goodsmap.remove(goodsid);
    }
    //更新商品
    public void updateGoods(Goods goods) {
        if(goodsmap.containsKey(goods.getId())){
            goodsmap.put(goods.getId(),goods);
        }
    }
    //判断商品是否存在
    public boolean isExistGoods(String goodsid) {
        if(this.goodsmap.containsKey(goodsid))
            return true;
        else
            return false;
    }
    public Goods getGoods(String goodsid) {
        return this.goodsmap.get(goodsid);
    }
    //商品清单
    public String listGoods(){
        StringB
Spring Boot是一个基于Java的开源框架,用于快速构建独立的、可部署的、自包含的应用程序。收银台程序是指用于处理支付和结算的系统,其功能包括生成订单、接收支付请求、完成支付、生成结算报表等。 使用Spring Boot来开发收银台程序具有以下优势: 1. 快速搭建:Spring Boot提供了自动配置的特性,可以快速搭建一个可用的基础应用程序。通过简化了繁琐的配置过程,开发人员可以更快地启动和调试程序。 2. 简化开发:Spring Boot集成了许多常用的开发框架和工具,如Spring MVC、Spring Data、MyBatis等,可以方便地进行数据库操作、RESTful API开发等常用功能的实现。 3. 高度可扩展:Spring Boot采用模块化的设计,可以根据实际需求选择不同的模块进行集成,从而实现自定义的功能。另外,Spring Boot还支持热更新特性,可以在运行时动态地加载和卸载模块,大大提高了系统的可扩展性。 4. 简化部署:Spring Boot打包成可执行的jar包,可以方便地部署到各种环境中,不需要依赖外部的Web容器。同时,Spring Boot还支持Docker容器化部署,可以进一步简化部署流程。 在开发收银台程序时,我们可以使用Spring Boot的相关模块来实现以下功能: 1. 订单管理:通过Spring Boot的数据访问模块,可以方便地进行数据库操作,实现订单的增删改查等功能。 2. 支付处理:可以使用Spring Boot的Web模块,接收支付请求,并调用支付接口完成支付操作。 3. 结算报表生成:可以使用Spring Boot的定时任务模块,在指定的时间生成结算报表并保存到指定位置。 总之,Spring Boot作为一个快速、简化开发的框架,在收银台程序的开发中具有很大的优势,可以帮助开发人员快速构建高效、可靠的收银台系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值