Ostatnio starałem się o firmę „x”. Przysłali mi kilka pytań i kazali rozwiązać tylko jedno.
Problem jest taki -
Podstawowy podatek od sprzedaży wynosi 10% na wszystkie towary, z wyjątkiem książek, żywności i produktów medycznych, które są zwolnione.
Cło przywozowe to dodatkowy podatek od sprzedaży, który ma zastosowanie do wszystkich importowanych towarów i wynosi 5%, bez zwolnień.
Kiedy kupuję przedmioty, otrzymuję pokwitowanie, które zawiera nazwę wszystkich pozycji i ich cenę (wraz z podatkiem), kończąc na całkowitym koszcie towarów i łącznej kwocie zapłaconego podatku od sprzedaży.
Zasady zaokrąglania podatku od sprzedaży są takie, że dla stawki podatku n% cena półkowa p zawiera (np / 100 zaokrągloną w górę do najbliższej 0,05) kwotę podatku od sprzedaży.
„Powiedzieli mi, że są zainteresowani aspektem projektowym Twojego rozwiązania i chcieliby ocenić moje umiejętności programowania obiektowego ”.
Oto, co powiedzieli własnymi słowami
- Do rozwiązania chcielibyśmy, abyś użył języka Java, Ruby lub C #.
- Jesteśmy zainteresowani ASPEKTEM PROJEKTOWYM Twojego rozwiązania i chcielibyśmy ocenić Twoje umiejętności programowania obiektowego .
- Możesz używać zewnętrznych bibliotek lub narzędzi do celów budowania lub testowania. W szczególności możesz użyć bibliotek testów jednostkowych lub narzędzi do budowania dostępnych dla wybranego języka (np. JUnit, Ant, NUnit, NAnt, Test :: Unit, Rake itp.)
- Opcjonalnie możesz również dołączyć krótkie wyjaśnienie projektu i założeń wraz z kodem.
- Prosimy pamiętać, że NIE oczekujemy aplikacji internetowej ani wszechstronnego interfejsu użytkownika. Spodziewamy się raczej prostej, opartej na konsoli aplikacji i interesuje nas Twój kod źródłowy.
Więc podałem poniższy kod - możesz po prostu skopiować kod wklej i uruchomić w 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
}
}
możesz rozpakować wejście i uruchomić dla różnych wejść.
Podałem rozwiązanie, ale zostałem odrzucony.
„Powiedzieli, że nie mogą brać pod uwagę moich obecnych otwartych pozycji, ponieważ kod nie jest zadowalający”.
Proszę, prowadź mnie, czego tu brakuje. Czy to rozwiązanie nie jest dobrym rozwiązaniem OOAD.
Jak mogę poprawić swoje umiejętności OOAD.
Moi seniorzy również mówią, że idealna aplikacja OOAD również nie zadziała praktycznie.
Dzięki