面向对象编程经典例题 --- 收银系统设计

本文介绍了一个收银系统的实现,涉及销售税、进口税的计算以及不同商品的税率处理。通过面向对象编程设计,包括Tax接口、FixedRateTax和CompositeTax类来处理各种税种。同时,提出了ProductCategory、CatalogItem、OrderItem和Order等类来管理商品信息和购买记录。OrderManager和TaxManager接口用于处理订单和税收,Catalog接口用于获取商品信息。整个系统通过具体的类和接口相互协作,完成购物篮的结算过程。
摘要由CSDN通过智能技术生成

SALES TAXES

 

Basic sales tax is applicable at a rate of 10% on all goods, except books, food, and medical products that are exempt. Import duty is an additional sales tax applicable on all imported goods at a rate of 5%, with no exemptions.

 

When I purchase items I receive a receipt which lists the name of all the items and their price (including tax), finishing with the total cost of the items, and the total amounts of sales taxes paid. The rounding rules for sales tax are that for a tax rate of n%, a shelf price of p contains (np/100 rounded up to the nearest 0.05) amount of sales tax.

 

Write an application that prints out the receipt details for these shopping baskets...

 

INPUT:

 

Input 1:

1 book at 12.49

1 music CD at 14.99

1 chocolate bar at 0.85

 

Input 2:

1 imported box of chocolates at 10.00

1 imported bottle of perfume at 47.50

 

Input 3:

1 imported bottle of perfume at 27.99

1 bottle of perfume at 18.99

1 packet of headache pills at 9.75

1 box of imported chocolates at 11.25

 

OUTPUT

 

Output 1:

1 book : 12.49

1 music CD: 16.49

1 chocolate bar: 0.85

Sales Taxes: 1.50

Total: 29.83

 

Output 2:

1 imported box of chocolates: 10.50

1 imported bottle of perfume: 54.65

Sales Taxes: 7.65

Total: 65.15

 

Output 3:

1 imported bottle of perfume: 32.19

1 bottle of perfume: 20.89

1 packet of headache pills: 9.75

1 imported box of chocolates: 11.85

Sales Taxes: 6.70

Total: 74.68

 

首先我们看,税种这里有三种:

1. 免消费税;

2. 消费税;

3. 进口税。

则税种组合有以下两种:

1.免消费税+进口税

2.消费税+进口税

因此,我们可以设计一个Tax接口,里头包含一个方法名叫getTax,这个getTax方法作用就是返回纳税值,但是我们需要有哪些类来实现这个接口呢?

1.FixedRateTax,它拥有一个成员变量叫做rate,因此针对不同的实例,它拥有不同的rate,每一个实例对应某一种固定税率,因此其getTax传入的参数便为对应商品价格,返回值即为在此税率之下的相应税收。

2.CompositeTax,它拥有一个成员函数叫做addTax,因此它的作用就是整合某一商品它所包含的所有税收类型,因此其getTax同样传入的对应商品价格作为参数,返回值为某商品其对应的全部税收,事实上了就是一个对于税率类型的遍历,每一种税率类型对应一个FixedRateTax的实例,然后调用FixedRateTaxgetTax方法获得此税率之下的相应税收加入当前税收总和之中,最后返回当前价格下的全部税收总和。

UML图如下:

 

 

对应的代码实现如下:

Tax.java

package main.java.com.thoughtworks.demo.taxes;

import java.math.BigDecimal;

/**
 * This interface provides unified access to different taxation kinds.
 * 
 */
public interface Tax {
	
	/**
	 * Calculates the tax value for the given price.
	 * @param price the price
	 * @return the tax value
	 */
	BigDecimal getTax(BigDecimal price);

}
FixedRateTax.java
package main.java.com.thoughtworks.demo.taxes.impl;

import java.math.BigDecimal;
import java.math.RoundingMode;

import main.java.com.thoughtworks.demo.taxes.Tax;

/**
 * A fixed rate implementation of the {@link Tax} interface. It rounds taxes up
 * to the nearest 0.05.
 * 
 */
public class FixedRateTax implements Tax {
	
	private static final BigDecimal TICK_SIZE = new BigDecimal("0.05");
	
	private final BigDecimal rate;
	
	/**
	 * Creates a tax with the specified rate.
	 * @param rate the tax rate
	 */
	public FixedRateTax(BigDecimal rate) {
		this.rate = rate;
	}

	@Override
	public BigDecimal getTax(BigDecimal price) {
		return roundOff(price.multiply(rate));
	}
	
	private static BigDecimal roundOff(BigDecimal value) {
		return value.divide(TICK_SIZE).setScale(0, RoundingMode.UP).multiply(TICK_SIZE);
	}

}
CompositeTax.java

package main.java.com.thoughtworks.demo.taxes.impl;

import java.math.BigDecimal;
import java.util.LinkedList;
import java.util.List;

import main.java.com.thoughtworks.demo.taxes.Tax;

/**
 * An implementation of the {@link Tax} interface that works as a superposition
 * of multiple taxes.
 * 
 */
public class CompositeTax implements Tax {
	
	private final List<Tax> taxes = new LinkedList<Tax>();
	
	/**
	 * Adds another tax to this composite.
	 * @param tax the tax to add
	 */
	public void addTax(Tax tax) {
		taxes.add(tax);
	}

	@Override
	public BigDecimal getTax(BigDecimal price) {
		BigDecimal result = BigDecimal.ZERO;
		for (Tax tax : taxes) {
			result = result.add(tax.getTax(price));
		}
		return result;
	}

}

说完了税收部分的设计,接下来的重点便是如何设计商品清单,

很显然如上输入所示,不同产品种类的货物对应不同的税率,因此首先我们要想到我们必须创建一个对应不同产品种类的类,使得这个类能够承载不同的产品类别及其对应的税率,这就是ProductCategory的由来。

有了ProductCategory之后,接下来我们需要考虑的就是针对每一件商品,我们都必须给予它一个条目详情,该条目详情包含四个属性,分别为商品ID,商品条目名称,商品价格,商品是否进口以及商品的类别(即为ProductCategory),通过这样的方式,我们就对每一条商品进行了登记,我们称之为CatalogItem

有了CatalogItem还不够,因为CatalogItem只是对商品的总体信息进行了登记,并没有记录用户实际买卖的信息,因此对于用户实际的某一条购买记录,我们创建一个类叫做OrderItem,显然每一条这个记录对应于某一个

▲ 技术先进:以Microsoft Win2000为平台,提供安全、稳定的运行环境;采用大型数据库Microsoft SQLSERVER 2000及复制技术,保证企业数据安全;多层次的分布式网络体系结构设计,很好的支持商业企业的连锁经营模式。 完全的网络化操作各个站点的数据保存即通过网络传递到服务器,相关人员可以随时看到更新的数据,极大的提高了信息传递的速度,使得企业的管理效率更上一层楼。 ▲一体化的功能   百威9000V6商业管理系统集进货、销售、仓库、零售、财务、金卡、连锁、人事工资诸多管理功能于一身,业务与帐务实现一体化的链接。 ▲导航式的界面   WINDOWS界面新颖独特,所想即所见,所见即所想,这就是导航式操作的优点。使用极其方便,前后台操作,几分钟内学。按业务设置菜单,操作性极佳。会众多功能的巧妙安排,缩短了数据传输的流程;帐务的错综复杂体现在系统内部,你的操作依然那么简单,省时又省心。 ▲严密的安全机制:针对于系统所有功能项,可设置多层权限控制(查看/更改/审核);针对于系统数据,可设置数据级的权限控制,在整个系统中,确保每种角色和每个员工只可操作自己权限范围的商品品项;针对于进价敏感问题,可更进一步设置每个员工的进价操作权限;针对于安全监控后备,系统全程记录每个操作员的操作日志,确保防而不漏,有据可查。 ▲满足更全面的商业需求 系统支持多种商业需求,其中包括:商品捆绑销售、商品折包销售、特价、搭赠、时段促销、商品条码定制打印、商品价签定制打印;库存商品上下限报警; ▲多种促销方式,灵活实用 会员促销、团购促销、时段促销、搭赠、有权限控制的前台折扣或折价、捆绑销售、量大从段、限量购买、买100+1促销 ▲灵活价格管理 支持多个门店实施不同的价格体系;在总部可以随时调整门店商品价格;支持商品调价立即生效和在指定日期生效。 ▲一品多商管理 对于一个商品多个供应商的情况,系统会根据先进先出的原则或低价优先的原则处理与供应商的结算 ▲完整的条码体系 系统支持店内码、商品国际码、电子秤打印条码(13位或18位),同时支持一品多码管理。前台销售能够识别所有条码,无论输入何种条码,均可快捷检索到此商品,提高收银效率。 ▲灵活的连锁设置 系统支持多种连锁管理模式,可以由用户灵活设置:总部、配送中心、门店之间数据传输入支持PSTN、ADSL、DDN等多种方式;基础数据、业务数据、销售数据可以 由总部控制全部或部分传输入。 ▲强大的配送中心 配送中心根据门店的要货单据可以实现自动配货,自动产生配货结果,如果库不足,还自动产生采购订货单,配送过程系统智能处理,提高工作效率。 ▲灵活的商品大小包装转换 系统可以方便的设置各种商品的大小包装信息,使商品可以按照不同的包装单位进行采购、验收、调拨、批发、配送及销售,系统自动进行换算,减少工作人员的工作量和失误率。 ▲科学完善的盘点业务 系统提供科技、完善、严格的盘点业务流程,科学的盘点方式,真正实现不停业盘点,提高盘点的效率和准确性;系统支持各种条码采集器进行盘点录入,同时支持前台POS机的盘点功能。 ▲智能补货 系统可以根据库存报警、商品日均销售检索需要补货的商品信息,自动按照不同的供应商生成采购订单;还可以手工输入需补货的商品信息,由系统自动按照不同的供应商生成采购订单。 ▲会员卡管理 融合会员卡、积分卡及储值卡的一卡通消费模式;支持批量发卡;支持跨店、异地消费;卡号软件加密;会员消费跟踪。 ▲强大的查询功能 针对基本档案、业务单据、业务报表,提供相应切近的查询工具;针对于不同性质的业务部门,提供特定需求的查询模块;针对单品,提供全业务跟踪式查询。支 持预先设置报表条件,然后提取满足条件的数据 ▲丰富的报表管理及决策分析 提供常见实用的分析报表,如销售排行、客单分析、库存分析,科学的数据分析为您提供决策的基础;系统还为高级客户提供灵活的自定义报表、直接的SQL查询及外挂特殊格式的报表文件。 ▲稳定的前台POS收银系统 采用最新的通讯监控手段,后台可以实时监控前台的收银状况和设态 ▲系统维护灵活方便 系统随时监控收银机的工作状态;可向前台发送消息下达通知及帮助解决故障;软件具备自动升级功能,保证软件自动及时更新,方便维护,节省成本。 ▲全能的报表查询   报表中心提供了有关进货,销售,库存,成本、往来、帐务、固定资产、人事工资等一系列报表,覆盖面广,统计方法科学,数据准确。所有的报表和基本资料均可导入EXCEL中进行分析加工,以满足用户的更高的要求。 ▲友好的在线交流   领导布置工作不一定要通过开会了, 同事之间的配合也不一定要面对面的交流。信息广播功能可以对所有的用户或特定用户发送信息, 系统所有的用户都可以通过内部短信进行交流。 ▲
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值