Recientemente estuve intentando para una empresa 'x'. Me enviaron una serie de preguntas y me dijeron que resolviera solo una.
El problema es así:
El impuesto básico sobre las ventas se aplica a una tasa del 10% sobre todos los bienes, excepto libros, alimentos y productos médicos que están exentos.
Los derechos de importación son un impuesto sobre las ventas adicional que se aplica a todos los productos importados a una tasa del 5%, sin exenciones.
Cuando compro artículos, recibo un recibo que enumera el nombre de todos los artículos y su precio (impuestos incluidos), terminando con el costo total de los artículos y las cantidades totales de impuestos sobre las ventas pagados.
Las reglas de redondeo para el impuesto a las ventas son que para una tasa impositiva de n%, un precio de venta libre de p contiene (np / 100 redondeado al 0.05 más cercano) la cantidad de impuesto a las ventas.
"Me dijeron que están interesados en el aspecto de diseño de su solución y les gustaría evaluar mis habilidades de programación orientada a objetos ".
Esto es lo que dijeron con sus propias palabras
- Para la solución, queremos que use Java, Ruby o C #.
- Estamos interesados en el ASPECTO DE DISEÑO de su solución y nos gustaría evaluar sus habilidades de programación orientada a objetos .
- Puede utilizar bibliotecas o herramientas externas con fines de creación o prueba. Específicamente, puede usar bibliotecas de pruebas unitarias o herramientas de compilación disponibles para su idioma elegido (por ejemplo, JUnit, Ant, NUnit, NAnt, Test :: Unit, Rake, etc.)
- Opcionalmente, también puede incluir una breve explicación de su diseño y suposiciones junto con su código.
- Tenga en cuenta que NO esperamos una aplicación basada en web o una interfaz de usuario completa. Más bien, estamos esperando una aplicación simple basada en consola e interesada en su código fuente.
Así que proporcioné el siguiente código: puede copiar, pegar el código y ejecutarlo en 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
}
}
puede descomprimir la entrada y ejecutarla para diferentes entradas.
Di la solución, pero me rechazaron.
"Dijeron que no pueden considerarme para nuestras posiciones abiertas actuales porque la solución del código no es satisfactoria".
Por favor, guíame lo que falta aquí. ¿Esta solución no es una buena solución OOAD?
¿Cómo puedo mejorar mis habilidades OOAD?
Mis personas mayores también dicen que la aplicación OOAD perfecta tampoco funcionará de manera práctica.
Gracias