最近,我正在尝试一家公司“ x”。他们向我发送了一些问题,并告诉我仅解决一个。
问题是这样的-
除免税的书籍,食品和医疗产品外,所有商品的基本销售税税率为10%。
进口税是对所有进口商品征收的附加销售税,税率为5%,且无任何豁免。
当我购买物品时,会收到一张收据,上面列出了所有物品的名称及其价格(含税),最后列出了物品的总成本以及所支付的营业税总额。
营业税的四舍五入规则是,对于n%的税率,p的货架价格包含(np / 100四舍五入至最接近的0.05)营业税额。
“他们告诉我,他们对您的解决方案的设计方面很感兴趣,并希望评估我的面向对象编程技能。”
这就是他们用自己的话说的
- 对于该解决方案,我们希望您使用Java,Ruby或C#。
- 我们对您的解决方案的DESIGN ASPECT感兴趣,并希望评估您的面向对象编程技能。
- 您可以使用外部库或工具进行构建或测试。具体来说,您可以使用单元测试库或构建适用于所选语言的工具(例如,JUnit,Ant,NUnit,NAnt,Test :: Unit,Rake等)。
- (可选)您还可以在代码中包含对设计和假设的简短说明。
- 请注意,我们不希望基于Web的应用程序或全面的UI。相反,我们期待一个简单的基于控制台的应用程序,并对您的源代码感兴趣。
因此,我提供了以下代码-您可以复制粘贴代码并在VS中运行。
class Program
{
static void Main(string[] args)
{
try
{
double totalBill = 0, salesTax = 0;
List<Product> productList = getProductList();
foreach (Product prod in productList)
{
double tax = prod.ComputeSalesTax();
salesTax += tax;
totalBill += tax + (prod.Quantity * prod.ProductPrice);
Console.WriteLine(string.Format("Item = {0} : Quantity = {1} : Price = {2} : Tax = {3}", prod.ProductName, prod.Quantity, prod.ProductPrice + tax, tax));
}
Console.WriteLine("Total Tax : " + salesTax);
Console.WriteLine("Total Bill : " + totalBill);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
private static List<Product> getProductList()
{
List<Product> lstProducts = new List<Product>();
//input 1
lstProducts.Add(new Product("Book", 12.49, 1, ProductType.ExemptedProduct, false));
lstProducts.Add(new Product("Music CD", 14.99, 1, ProductType.TaxPaidProduct, false));
lstProducts.Add(new Product("Chocolate Bar", .85, 1, ProductType.ExemptedProduct, false));
//input 2
//lstProducts.Add(new Product("Imported Chocolate", 10, 1, ProductType.ExemptedProduct,true));
//lstProducts.Add(new Product("Imported Perfume", 47.50, 1, ProductType.TaxPaidProduct,true));
//input 3
//lstProducts.Add(new Product("Imported Perfume", 27.99, 1, ProductType.TaxPaidProduct,true));
//lstProducts.Add(new Product("Perfume", 18.99, 1, ProductType.TaxPaidProduct,false));
//lstProducts.Add(new Product("Headache Pills", 9.75, 1, ProductType.ExemptedProduct,false));
//lstProducts.Add(new Product("Imported Chocolate", 11.25, 1, ProductType.ExemptedProduct,true));
return lstProducts;
}
}
public enum ProductType
{
ExemptedProduct=1,
TaxPaidProduct=2,
//ImportedProduct=3
}
class Product
{
private ProductType _typeOfProduct = ProductType.TaxPaidProduct;
private string _productName = string.Empty;
private double _productPrice;
private int _quantity;
private bool _isImportedProduct = false;
public string ProductName { get { return _productName; } }
public double ProductPrice { get { return _productPrice; } }
public int Quantity { get { return _quantity; } }
public Product(string productName, double productPrice,int quantity, ProductType type, bool isImportedProduct)
{
_productName = productName;
_productPrice = productPrice;
_quantity = quantity;
_typeOfProduct = type;
_isImportedProduct = isImportedProduct;
}
public double ComputeSalesTax()
{
double tax = 0;
if(_isImportedProduct) //charge 5% tax directly
tax+=_productPrice*.05;
switch (_typeOfProduct)
{
case ProductType.ExemptedProduct: break;
case ProductType.TaxPaidProduct:
tax += _productPrice * .10;
break;
}
return Math.Round(tax, 2);
//round result before returning
}
}
您可以取消commnet输入并运行其他输入。
我提供了解决方案,但被拒绝了。
“他们说,由于代码解决方案不能令人满意,他们无法考虑我目前的空缺职位。”
请指导我这里缺少什么。是这个解决方案不是一个好的OOAD解决方案。
如何提高我的OOAD技能。
我的前辈们还说,完美的OOAD应用程序实际上也行不通。
谢谢