최근에 'x'라는 회사에 도전하고있었습니다. 그들은 나에게 몇 가지 질문을 보내고 하나만 해결하라고 말했습니다.
문제는 다음과 같습니다.
기본 판매 세는 면제되는 도서, 식품 및 의료 제품을 제외한 모든 상품에 대해 10 %의 세율이 적용됩니다.
수입 관세는 면제없이 5 %의 세율로 모든 수입 상품에 적용되는 추가 판매 세입니다.
상품을 구매할 때 모든 상품의 이름과 가격 (세금 포함)이 적힌 영수증을 받게되며, 상품의 총 비용과 지불 한 판매 세 총액으로 마무리됩니다.
판매 세에 대한 반올림 규칙은 세율이 n % 인 경우 선반 가격 p에 판매 세가 포함됩니다 (np / 100은 가장 가까운 0.05로 반올림 됨).
"그들은 솔루션 의 디자인 측면 에 관심이 있고 내 객체 지향 프로그래밍 기술 을 평가하고 싶다고 말했습니다 ."
이것은 그들이 자신의 말로 한 것입니다.
- 솔루션의 경우 Java, Ruby 또는 C #을 사용하는 것이 좋습니다.
- 우리는 귀하의 솔루션의 디자인 측면에 관심이 있으며 귀하의 객체 지향 프로그래밍 기술 을 평가하고자합니다 .
- 빌드 또는 테스트 목적으로 외부 라이브러리 또는 도구를 사용할 수 있습니다. 특히, 선택한 언어 (예 : JUnit, Ant, NUnit, NAnt, Test :: Unit, Rake 등)에 사용할 수있는 단위 테스트 라이브러리 또는 빌드 도구를 사용할 수 있습니다.
- 선택적으로 코드와 함께 설계 및 가정에 대한 간략한 설명을 포함 할 수도 있습니다.
- 웹 기반 응용 프로그램이나 포괄적 인 UI를 기대하지 않습니다. 오히려 우리는 단순한 콘솔 기반 애플리케이션을 기대하고 있으며 소스 코드에 관심이 있습니다.
그래서 아래에 코드를 제공했습니다. 붙여 넣기 코드를 복사하고 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
}
}
입력을 해제하고 다른 입력에 대해 실행할 수 있습니다.
해결책을 제공했지만 거절당했습니다.
"그들은 코드 솔루션이 만족스럽지 않기 때문에 우리의 현재 공석으로 나를 고려할 수 없다고 말했습니다."
여기에 빠진 것이 무엇인지 알려주세요. 이 솔루션은 좋은 OOAD 솔루션이 아닙니다.
OOAD 기술을 어떻게 향상시킬 수 있습니까?
선배들은 완벽한 OOAD 응용 프로그램도 실제로 작동하지 않을 것이라고 말합니다.
감사