Kürzlich habe ich versucht, eine Firma 'x'. Sie schickten mir einige Fragen und sagten mir, ich solle nur eine lösen.
Das Problem ist wie folgt:
Die Grundumsatzsteuer beträgt 10% für alle Waren, ausgenommen Bücher, Lebensmittel und Medizinprodukte, die davon ausgenommen sind.
Der Einfuhrzoll ist eine zusätzliche Umsatzsteuer, die auf alle eingeführten Waren in Höhe von 5% ohne Ausnahmen erhoben wird.
Wenn ich Artikel kaufe, erhalte ich eine Quittung, in der der Name aller Artikel und deren Preis (einschließlich Steuern) aufgeführt sind, die mit den Gesamtkosten der Artikel und den Gesamtbeträgen der gezahlten Umsatzsteuern endet.
Die Rundungsregeln für die Umsatzsteuer lauten, dass bei einem Steuersatz von n% ein Regalpreis von p (np / 100 auf die nächste 0,05 aufgerundet) Umsatzsteuerbetrag enthält.
"Sie sagten mir, sie interessieren sich für den Designaspekt Ihrer Lösung und möchten meine objektorientierten Programmierkenntnisse bewerten ."
Das sagten sie in ihren eigenen Worten
- Für die Lösung möchten wir, dass Sie entweder Java, Ruby oder C # verwenden.
- Wir interessieren uns für den DESIGN-ASPEKT Ihrer Lösung und möchten Ihre objektorientierten Programmierkenntnisse bewerten .
- Sie können externe Bibliotheken oder Tools zum Erstellen oder Testen verwenden. Insbesondere können Sie Unit-Test-Bibliotheken verwenden oder Tools erstellen, die für die von Ihnen ausgewählte Sprache verfügbar sind (z. B. JUnit, Ant, NUnit, NAnt, Test :: Unit, Rake usw.).
- Optional können Sie Ihrem Code auch eine kurze Erläuterung Ihres Designs und Ihrer Annahmen hinzufügen.
- Bitte beachten Sie, dass wir KEINE webbasierte Anwendung oder eine umfassende Benutzeroberfläche erwarten. Vielmehr erwarten wir eine einfache, konsolenbasierte Anwendung, die sich für Ihren Quellcode interessiert.
Also habe ich unten Code bereitgestellt - Sie können einfach Code einfügen und in VS ausführen.
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
}
}
Sie können die Eingabe trennen und für verschiedene Eingaben ausführen.
Ich lieferte die Lösung, wurde aber abgelehnt.
"Sie sagten, sie können mich nicht für unsere derzeit offenen Positionen in Betracht ziehen, weil die Codelösung nicht zufriedenstellend ist."
Bitte leiten Sie mich, was hier fehlt. Ist diese Lösung keine gute OOAD-Lösung?
Wie kann ich meine OOAD-Fähigkeiten verbessern?
Meine Senioren sagen auch, dass eine perfekte OOAD-Anwendung auch praktisch nicht funktioniert.
Vielen Dank