Недавно пробовал для компании "х". Они прислали мне несколько вопросов и сказали, что нужно решить только один.
Проблема такая -
Базовый налог с продаж применяется по ставке 10% на все товары, за исключением книг, продуктов питания и медицинских изделий, которые не облагаются налогом.
Ввозная пошлина - это дополнительный налог с продаж, применяемый ко всем импортируемым товарам по ставке 5% без каких-либо исключений.
Когда я покупаю товары, я получаю квитанцию, в которой указаны названия всех товаров и их цена (включая налоги), в конце указана общая стоимость товаров и общая сумма уплаченных налогов с продаж.
Правила округления для налога с продаж заключаются в том, что для ставки налога n% полочная цена p содержит (np / 100, округленное до ближайших 0,05) сумму налога с продаж.
«Они сказали мне, что им интересен аспект дизайна вашего решения, и они хотели бы оценить мои навыки объектно-ориентированного программирования ».
Это то, что они рассказали своими словами
- В качестве решения мы хотели бы, чтобы вы использовали Java, Ruby или C #.
- Нас интересует ДИЗАЙН-АСПЕКТ вашего решения, и мы хотели бы оценить ваши навыки объектно-ориентированного программирования .
- Вы можете использовать внешние библиотеки или инструменты для создания или тестирования. В частности, вы можете использовать библиотеки модульного тестирования или инструменты сборки, доступные для выбранного вами языка (например, JUnit, Ant, NUnit, NAnt, Test :: Unit, Rake и т. Д.)
- При желании вы также можете включить краткое объяснение вашего дизайна и предположений вместе с вашим кодом.
- Обратите внимание, что мы НЕ ожидаем веб-приложения или всеобъемлющего пользовательского интерфейса. Скорее, мы ожидаем простого консольного приложения и заинтересованы в вашем исходном коде.
Итак, я предоставил код ниже - вы можете просто скопировать код вставки и запустить в 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
}
}
вы можете отключить ввод и запустить его для разных вводов.
Я предложил решение, но мне отказали.
«Они сказали, что не могут рассматривать меня по нашим текущим открытым вакансиям, потому что кодовое решение не является удовлетворительным».
Пожалуйста, объясните мне, чего здесь не хватает. Разве это решение не является хорошим решением OOAD.
Как я могу улучшить свои навыки работы с OOAD.
Мои старшие тоже говорят, что идеальное приложение OOAD тоже практически не работает.
Спасибо