Нещодавно я намагався створити компанію "х". Вони надіслали мені кілька запитань і сказали вирішити лише одне.
Проблема така -
Основний податок з продажу застосовується за ставкою 10% на всі товари, крім книг, продуктів харчування та медичних виробів, які не звільняються.
Ввізне мито - це додатковий податок з продажу, що застосовується до всіх імпортних товарів за ставкою 5%, без виключень.
Купуючи товари, я отримую квитанцію, в якій перераховано найменування всіх предметів та їх ціну (включаючи податок), закінчуючи загальною вартістю предметів та загальною сумою сплаченого податку з продажу.
Правила округлення податку з продажу полягають у тому, що для податкової ставки у розмірі n% ціна на полиці p містить (н.п. / 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 також не працюватиме практично.
Дякую