Recentemente, estava tentando uma empresa 'x'. Eles me enviaram algumas perguntas e me disseram para resolver apenas uma.
O problema é assim -
O imposto básico sobre vendas é aplicável a uma alíquota de 10% sobre todas as mercadorias, exceto livros, alimentos e produtos médicos que estão isentos.
O direito de importação é um imposto adicional sobre vendas aplicável a todas as mercadorias importadas, à alíquota de 5%, sem isenções.
Quando compro itens, recebo um recibo que lista o nome de todos os itens e seu preço (incluindo impostos), finalizando com o custo total dos itens e os valores totais de impostos sobre vendas pagos.
As regras de arredondamento para imposto sobre vendas são que, para uma taxa de imposto de n%, um preço de prateleira de p contém (np / 100 arredondado para o 0,05 mais próximo) valor de imposto sobre vendas.
“Eles me disseram que estão interessados no aspecto de design da sua solução e gostariam de avaliar minhas habilidades de programação orientada a objetos .”
Isso é o que eles disseram em suas próprias palavras
- Para a solução, gostaríamos que você usasse Java, Ruby ou C #.
- Estamos interessados no ASPECTO DE DESIGN da sua solução e gostaríamos de avaliar suas habilidades de programação orientada a objetos .
- Você pode usar bibliotecas ou ferramentas externas para fins de construção ou teste. Especificamente, você pode usar bibliotecas de teste de unidade ou ferramentas de construção disponíveis para o idioma escolhido (por exemplo, JUnit, Ant, NUnit, NAnt, Test :: Unit, Rake etc.)
- Opcionalmente, você também pode incluir uma breve explicação de seu design e suposições junto com seu código.
- Observe que NÃO esperamos um aplicativo baseado na web ou uma interface do usuário abrangente. Em vez disso, esperamos um aplicativo simples baseado em console e interessado em seu código-fonte.
Então, eu forneci o código abaixo - você pode simplesmente copiar, colar o código e executar no 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
}
}
você pode descompactar a entrada e executar para entradas diferentes.
Eu forneci a solução, mas fui rejeitado.
"Eles disseram que não podem me considerar para nossas posições em aberto porque a solução de código não é satisfatória."
Por favor me guie o que está faltando aqui. Esta solução não é uma boa solução OOAD.
Como posso melhorar minhas habilidades OOAD.
Meus idosos também dizem que o aplicativo OOAD perfeito também não funcionará na prática.
obrigado