经典面试题SALES TAXES思路分析和源码分享

题目:

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 
除书籍 食品 药品外其他商品基本税为10%。进口税附加5%,不免税。
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, exp:7.125 -> 7.15; 6.66 -> 6.7) 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 chocolcate 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

C#实现代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace SalesTaxes
{
public class TestCaseResult
{
public decimal Taxes { get; set; } //税合计
public decimal TotalPrice { get; set; } //总计含税
public TestCaseResult(decimal Taxes, decimal TotalPrice)
{
this.Taxes = Taxes;
this.TotalPrice = TotalPrice;
}
}
public class Test
{
//Test case1
public TestCaseResult GetResultForCasee1()
{
List<Goods> goods = new List<Goods>(); //第一批物品
goods.Add(new Goods("book", 1, false, (int)Enum_GoodType.Book, 12.49m));
goods.Add(new Goods("music CD", 1, false, (int)Enum_GoodType.Other, 14.99m));
goods.Add(new Goods("chocolcate bar", 1, false, (int)Enum_GoodType.Food, 0.85m));
return GetTestResult(goods);
}
public TestCaseResult GetResultForCasee2()
{
List<Goods> goods = new List<Goods>(); //第二批物品
goods.Add(new Goods("book", 1, true, (int)Enum_GoodType.Book, 10.0m));
goods.Add(new Goods("perfume", 1, true, (int)Enum_GoodType.Other, 47.5m));
return GetTestResult(goods);
}
public TestCaseResult GetResultForCasee3()
{
List<Goods> goods = new List<Goods>(); //第三批物品
goods.Add(new Goods("perfume", 1, true, (int)Enum_GoodType.Other, 27.99m));
goods.Add(new Goods("perfume", 1, false, (int)Enum_GoodType.Other, 18.99m));
goods.Add(new Goods("headache pills", 1, false, (int)Enum_GoodType.Drug, 9.75m));
goods.Add(new Goods("chocolates", 1, true, (int)Enum_GoodType.Food, 11.25m));
return GetTestResult(goods);
}
/// <summary>
/// 获取测试结果
/// </summary>
/// <param name="goods"></param>
/// <returns></returns>
private TestCaseResult GetTestResult(List<Goods> goods)
{
decimal totalGoods = 0;         //总价不含税
decimal totalGoodsByTax = 0;    //总价含税
for (int i = 0; i < goods.Count; i++)
{
totalGoods += goods[i].Price * goods[i].Count;
totalGoodsByTax += Goods.GetGoodsPriceByTax(goods[i]);
}
return new TestCaseResult(totalGoodsByTax - totalGoods, totalGoodsByTax);
}
}
class Program
{
static void Main(string[] args)
{
//Test case 1
var test = new Test();
var result = test.GetResultForCasee1();
Assert.AreEqual(1.50m, result.Taxes);
Assert.AreEqual(29.83m, result.TotalPrice);
//Test case 2
result = test.GetResultForCasee2();
Assert.AreEqual(7.65m, result.Taxes);
Assert.AreEqual(65.15m, result.TotalPrice);
//Test case 3
result = test.GetResultForCasee3();
Assert.AreEqual(6.70m, result.Taxes);
Assert.AreEqual(74.68m, result.TotalPrice);
}
}
/// <summary>
/// 商品名称
/// </summary>
class Goods
{
/// <summary>
/// 构造函数,初始化商品名称
/// </summary>
public Goods(string Name, int Count, bool Import, int GoodsType, decimal Price)
{
this.Name = Name;
this.Count = Count;
this.Import = Import;
this.GoodsType = GoodsType;
this.Price = Price;
}
/// <summary>
/// 商品名称
/// </summary>
public string Name { set; get; }
/// <summary>
/// 商品数量
/// </summary>
public int Count { set; get; }
/// <summary>
/// 是否进口(true=>进口)
/// </summary>
public bool Import { set; get; }
/// <summary>
/// 商品类型 对应枚举 Enum_GoodType
/// </summary>
public int GoodsType { set; get; }
/// <summary>
/// 单价
/// </summary>
public decimal Price { set; get; }
/// <summary>
/// 基本税
/// </summary>
const decimal BasicDuty = 0.1m;
/// <summary>
/// 进口附加税
/// </summary>
const decimal ImportSurtax = 0.05m;
/// <summary>
/// 计算商品的价格
/// </summary>
/// <param name="goods">商品</param>
/// <returns>商品最终价格</returns>
public static decimal GetGoodsPriceByTax(Goods goods)
{
decimal result = 0;
if (null != goods)
{
if (goods.Import)
{ //进口物品,添加附加税
decimal appTax = goods.Price * goods.Count * ImportSurtax; 
result += GetMathResult(appTax);
}
if (goods.GoodsType == 4)
{//不是书籍、食品、药品 需要征收基础税,上面也可以写成(goods.GoodsType==(int)Enum_GoodType.Book ||...)
decimal baseTax = goods.Price * goods.Count * BasicDuty;
result += GetMathResult(baseTax);
}
result += goods.Price * goods.Count;
}
return result;
}
/// <summary>
/// 计算0.05舍弃值,核心代码
/// </summary>
/// <returns></returns>
private static decimal GetMathResult(decimal tax)
{
if ((tax / 0.05m).ToString().IndexOf(".") != -1)
{ //rounded up to the nearest 0.05
tax = Math.Round(tax, 1, MidpointRounding.AwayFromZero);
}
return tax;
}
}
/// <summary>
/// 商品类型
/// 备注:书籍、食品、药品 可分为一个枚举就是免基本税的,这样细分,考虑后期扩展
/// </summary>
enum Enum_GoodType
{
Book = 1,   //书籍
Food = 2,   //食品
Drug = 3,   //药品
Other = 4   //其他
    }
}
View Code

分析:

这道题考察的点有两个,一个是对业务的理解能力;二是编码能力的考量,封装继承以及写代码功底如何;

编码能力每个人有不同的风格和书写方式,尽量遵循代码设计模式轻耦合,模块化是最好的,而这道题的业务中有一个核心点,就是对税收不能被0.05整除要四舍五入到小数点后一位x.x,详见代码。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Snipaste在Window运行后遇到提示计算机中丢失 api-ms-win-crt-runtime-l1-1-0.dll 错误

故障排除 以下为运行 Snipaste 可能遇到的错误及其解决方案。 Windows 运行后遇到提示计算机中丢失 api-ms-win-crt-runtime-l1-1-0.dll 错误 请根据你操作系统的版本&#xff08;32位/64位&#xff09;&#xff0c;下载并安装相应的微软 Visual C 2015 可再发行组件包: 32…

Windows10安装ubuntu18.04双系统教程

Windows10安装ubuntu18.04双系统教程 写在前面&#xff1a;本教程为windows10安装ubuntu18.04&#xff08;64位&#xff09;双系统教程&#xff0c;是我多次安装双系统的经验总结&#xff0c;安装方法同样适用于ubuntu16.04&#xff08;64位&#xff09;。为了直观和易于理解&…

ReactNative实现图集功能

需求描述&#xff1a;  图片缩放、拖动、长按保存等基础图片查看的功能&#xff1b; 展示每张图片文本描述&#xff1b; 实现效果&#xff0c;如图&#xff1a; 实现步骤 使用第三方插件&#xff1a;react-native-image-zoom-viewer 插件GitHub地址&#xff1a;https://git…

C++或C 实现AES ECB模式加密解密,支持官方验证

本文主要介绍 AES 算法的加解密方法。本文使用的语言为 C&#xff0c;调用的 AES 库为&#xff1a;cryptopp。 1 概述 AES 加密算法的介绍如下&#xff08;摘自 WikiPedia&#xff09;&#xff1a; 高级加密标准&#xff08;英语&#xff1a;Advanced Encryption Standard&am…

Kali Linux 2019.4用U盘安装以及解决Kali Linux 2019.4中文乱码问题

一、利用Win32 Disk Imager 实现U盘刻录ISO 1.Kali Linux官网下载 2.Win32 Disk Imager官网下载地址 3.打开Win32 Disk Imager软件&#xff0c;添加下载的镜像文件&#xff0c;选择制作镜像的U盘&#xff0c;点击“”“写入”&#xff0c;等待写入成功完成&#xff01; 二、…

Javascript实现AES加密解密(ECB/CBC)

环境配置 js文件https://code.google.com/archive/p/crypto-js/downloads在线AES加密解密地址在线AES加密解密、AES在线加密解密、AES encryption and decryption--查错网下载完成后在页面中引入 rollups/aes.jscomponents/mode-ecb.jscomponents/pad-nopadding.js引入后页面 …

在PHP中利用wsdl创建标准webservice

参照整理&#xff1a; http://bbs.php100.com/read-htm-tid-95228.htmlhttp://www.ieliwb.com/wsdl-create-soapdiscovery/ 说明&#xff1a; 非标准的webservice&#xff0c;可能只能PHP才能访问 标准的webservice&#xff0c;就必须要使用wsdl在这里我只介绍标准的webserv…

Kali-Linux2019.04设置中文输入法

1.打开超级终端&#xff0c;输入 apt-get install fcitx 首先安装输入法框架 2.输入apt-get install fcitx-googlepinyin 然后安装google输入法 3.如下图&#xff0c;打开fcitx输入法配置 4.通过左下角的“”“”添加&#xff0c;选择刚才安装的google中文输入法&#xff0c…

C语言实现AES加密解密

AES加密是美国联邦政府采用的一种块加密标准&#xff0c;如今已经被全世界广为使用。嵌入式开发中我们也经常会用到加密解密算法&#xff0c;如果没有硬件模块来实现&#xff0c;就需要用到C代码软件实现。下面介绍调用mbedTLS中的AES加密解密函数实现AES算法。 mbedTLS是一个…

react-native绑定优酷SDK-附效果图和源码

ReactNative绑定优酷SDK需要用到两部分知识&#xff1a; 优酷本身的sdk绑定&#xff1b;RN与原生界面的交互&#xff1b; 效果&#xff1a; RN版本&#xff1a;0.49.3 代码更新日期&#xff1a;2017.10.26 下文也根据绑定需要分为两部分&#xff1a; 一、优酷sdk绑定&#…

我的nginx iis 负载均衡学习(环境搭建)

1&#xff0c;下载并安装nginx 比较简单 2&#xff0c;进行网站的配置 我使用了我的IIS 站点中已经拥有的两个站点 3&#xff0c;进行nginx 的配置 配置如下&#xff1a; 在server 节点之前添加如下的配置&#xff1a; upstream www.dalong.com { server 127.0.0.1; …

Kali-Linux-2019.04虚拟机与物理机实现复制粘贴功能

**1.打开虚拟机VM15&#xff0c;启动进入Kali系统&#xff0c;在虚拟机菜单栏&#xff0c;“虚拟机”->安装VMware Tool&#xff0c;弹出框选择“是”。*在Kali系统桌面出现光盘状态的VMware Tool。 1.在超级终端内操作 cd /media/cdrom0 2.复制VMwareTools文件到tmp目录&…

宝塔LNMP使用步骤nginx+php 7.2

安装BT面板 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh 安装LAMP / LNMP 推荐 PHP7.3(最低要求7.0) MySQL5.7(最低要求5.5) PHP 5.6.x即将停止安全支持 面板新建网站 进入面板, 网站, 新建…

react-native多图选择、图片裁剪(支持ad/ios图片个数控制)

前言&#xff1a; 目前关于rn比较知名并且封装好的图片选择控件很多&#xff0c;不过能同时支持多图片上传&#xff0c;个数控制兼容iOS/Ad的却寥寥无几&#xff0c;而今天介绍的这款框架可以实现&#xff1a;图片裁剪、最大图片个数限制、拍照、本地相册等功能。 效果&#x…

QT5主界面“关闭窗口”按钮设置弹出提示询问信息

QT5主界面为“关闭窗体”按钮和其action添加关闭窗口事件&#xff0c;可以询问是否退出 1.在信号与槽函数中&#xff0c;actQuit关联信号与槽函数&#xff0c;如下&#xff1a; 2.在mainwindow.h文件MainWindow类中添加关闭窗口事件closeEvent 3.在mainwindow.cpp文件添加vo…

Pytorch torchvision完成Faster-rcnn目标检测demo及源码详解

Torchvision更新到0.3.0后支持了更多的功能&#xff0c;其中新增模块detection中实现了整个faster-rcnn的功能。本博客主要讲述如何通过torchvision和pytorch使用faster-rcnn&#xff0c;并提供一个demo和对应代码及解析注释。 目录 如果你不想深入了解原理和训练&#xff0c…

Hadoop安装配置

1、集群部署介绍 1.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统&#xff08;HDFS&#xff0c;Hadoop Distributed Filesystem&#xff09;和MapReduce&#xff08;Google MapReduce的开源实现&#xff09;为核心的Hadoop为用户…

iOS设置拍照retake和use按钮为中文简体

iOS设置拍照retake和use按钮为中文简体&#xff0c;设置有两种方式一个是代码直接控制&#xff0c;第二就是xcode配置本机国际化为“china”&#xff08;简体中文&#xff09;。 本文重点要说的是第二种&#xff0c;这样配置有两个好处&#xff0c;一是操作比较简单&#xff0…

QT5 QSqlQuery的SELECT INSERT UPDATE DELETE命令用法

1.QSqlQuery的SELECT查询记录用法&#xff1a; QSqlQuery q("SELECT * FROM departments");QSqlRecord rec q.record();int idCol rec.indexOf("departID"); // index of the field "departID"int nameColrec.indexOf("department")…

实时手势识别 【手部跟踪】Mediapipe中的hand

参考链接&#xff1a; 1&#xff09;github代码链接&#xff1a;https://github.com/google/mediapipe 2&#xff09;说明文档&#xff1a;https://google.github.io/mediapipe 3&#xff09;python环境配置文档&#xff1a;https://google.github.io/mediapipe/getting_sta…