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