Recentemente stavo cercando una società "x". Mi hanno inviato alcune serie di domande e mi hanno detto di risolverne solo una.
Il problema è così:
L'imposta di base sulle vendite è applicabile con un'aliquota del 10% su tutti i beni, ad eccezione di libri, cibo e prodotti medici che sono esenti.
Il dazio all'importazione è un'imposta aggiuntiva sulle vendite applicabile a tutte le merci importate con un'aliquota del 5%, senza esenzioni.
Quando acquisto gli articoli ricevo una ricevuta che elenca il nome di tutti gli articoli e il loro prezzo (tasse incluse), terminando con il costo totale degli articoli e gli importi totali delle imposte sulle vendite pagate.
Le regole di arrotondamento per l'imposta sulle vendite sono che per un'aliquota fiscale di n%, un prezzo di scaffale di p contiene (np / 100 arrotondato allo 0,05 più vicino) importo dell'imposta sulle vendite.
"Mi hanno detto che sono interessati all'aspetto progettuale della tua soluzione e vorrebbero valutare le mie capacità di programmazione orientata agli oggetti ."
Questo è ciò che hanno detto con le loro stesse parole
- Per la soluzione, vorremmo utilizzare Java, Ruby o C #.
- Siamo interessati all'ASPETTO PROGETTUALE della vostra soluzione e vorremmo valutare le vostre capacità di programmazione orientata agli oggetti .
- È possibile utilizzare librerie o strumenti esterni per scopi di creazione o test. In particolare, puoi utilizzare le librerie di unit test o creare strumenti disponibili per la lingua scelta (ad esempio, JUnit, Ant, NUnit, NAnt, Test :: Unit, Rake ecc.)
- Facoltativamente, puoi anche includere una breve spiegazione del tuo design e dei tuoi presupposti insieme al tuo codice.
- Si prega di notare che NON ci aspettiamo un'applicazione basata sul Web o un'interfaccia utente completa. Piuttosto, ci aspettiamo una semplice applicazione basata su console e interessati al tuo codice sorgente.
Quindi ho fornito il codice di seguito: puoi semplicemente copiare il codice incolla ed eseguire in 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
}
}
è possibile rimuovere l'input dalla rete ed eseguire per diversi input.
Ho fornito la soluzione ma sono stato rifiutato.
"Hanno detto che non possono considerarmi per le nostre attuali posizioni aperte perché la soluzione del codice non è soddisfacente".
Per favore, guidami cosa manca qui. Questa soluzione non è una buona soluzione OOAD.
Come posso migliorare le mie abilità OOAD.
I miei anziani dicono anche che una perfetta applicazione OOAD non funzionerà praticamente.
Grazie