最近、「x」という会社を探していました。彼らは私にいくつかの質問を送って、1つだけを解決するように私に言いました。
問題はこのようなものです-
基本消費税は、免除される本、食品、医療製品を除くすべての商品に10%の率で適用されます。
輸入関税とは、すべての輸入品に5%の税率で適用される追加の消費税で、免除はありません。
アイテムを購入すると、すべてのアイテムの名前とその価格(税込)が記載されたレシートが届きます。最後に、アイテムの合計費用と消費税の合計額が支払われます。
消費税の丸めルールは、税率がn%の場合、棚卸価格pに(np / 100を最も近い0.05に切り上げた)金額の消費税が含まれることです。
「彼らは私に言った、彼らはあなたのソリューションのデザインの側面に興味があり、私のオブジェクト指向プログラミングのスキルを評価したいと思っている。」
これは彼らが彼ら自身の言葉で言ったことです
- 解決策としては、Java、Ruby、またはC#のいずれかを使用してください。
- 私たちはあなたのソリューションの設計側面に興味があり、オブジェクト指向プログラミングのスキルを評価したいと思います。
- ビルドまたはテストの目的で外部ライブラリまたはツールを使用できます。具体的には、選択した言語(JUnit、Ant、NUnit、NAnt、Test :: Unit、Rakeなど)で利用可能なユニットテストライブラリまたはビルドツールを使用できます。
- 必要に応じて、コードのほかに、設計と仮定の簡単な説明を含めることもできます。
- 親切に、私たちはWebベースのアプリケーションや包括的な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
}
}
入力をuncommnetして、さまざまな入力に対して実行できます。
解決策を提供しましたが、拒否されました。
「彼らは言った、彼らは私たちの現在のオープンポジションについて私を考慮することができない。なぜならコードソリューションは満足のいくものではないからだ。」
ここで不足しているものを教えてください。このソリューションは良いOOADソリューションではありませんか?
OOADスキルを向上させるにはどうすればよいですか。
私の先輩はまた、完璧なOOADアプリケーションも実際には機能しないと言っています。
ありがとう