Récemment, j'essayais une entreprise «x». Ils m'ont envoyé une série de questions et m'ont dit de n'en résoudre qu'une.
Le problème est comme ça -
La taxe de vente de base est applicable à un taux de 10% sur tous les produits, à l'exception des livres, de la nourriture et des produits médicaux qui sont exonérés.
Le droit d'importation est une taxe de vente supplémentaire applicable sur toutes les marchandises importées au taux de 5%, sans exonération.
Lorsque j'achète des articles, je reçois un reçu indiquant le nom de tous les articles et leur prix (taxes comprises), en terminant par le coût total des articles et le montant total des taxes de vente payées.
Les règles d'arrondi pour la taxe de vente sont que pour un taux de taxe de n%, un prix de vente de p contient (np / 100 arrondi au 0,05 le plus proche) le montant de la taxe de vente.
«Ils m'ont dit qu'ils étaient intéressés par l' aspect conception de votre solution et qu'ils aimeraient évaluer mes compétences en programmation orientée objet .»
C'est ce qu'ils ont dit dans leurs propres mots
- Pour la solution, nous voudrions que vous utilisiez Java, Ruby ou C #.
- Nous sommes intéressés par l'ASPECT DE CONCEPTION de votre solution et souhaitons évaluer vos compétences en programmation orientée objet .
- Vous pouvez utiliser des bibliothèques ou des outils externes à des fins de création ou de test. Plus précisément, vous pouvez utiliser des bibliothèques de tests unitaires ou créer des outils disponibles pour la langue de votre choix (par exemple, JUnit, Ant, NUnit, NAnt, Test :: Unit, Rake, etc.)
- Si vous le souhaitez, vous pouvez également inclure une brève explication de votre conception et de vos hypothèses avec votre code.
- Veuillez noter que nous n'attendons PAS une application Web ou une interface utilisateur complète. Nous attendons plutôt une application simple, basée sur une console et intéressé par votre code source.
J'ai donc fourni le code ci-dessous - vous pouvez simplement copier du code et l'exécuter dans 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
}
}
vous pouvez désactiver l'entrée et l'exécuter pour différentes entrées.
J'ai fourni la solution mais j'ai été rejeté.
"Ils ont dit qu'ils ne pouvaient pas me considérer pour nos positions ouvertes actuelles parce que la solution de code n'est pas satisfaisante."
Veuillez me guider ce qui manque ici. Cette solution n'est-elle pas une bonne solution OOAD.
Comment puis-je améliorer mes compétences OOAD.
Mes aînés disent également qu'une application OOAD parfaite ne fonctionnera pas non plus pratiquement.
Merci