Gần đây tôi đã cố gắng cho một công ty 'x'. Họ gửi cho tôi một số câu hỏi và bảo tôi chỉ giải một câu.
Vấn đề là như thế này -
Thuế bán hàng cơ bản được áp dụng với thuế suất 10% đối với tất cả hàng hóa, ngoại trừ sách, thực phẩm và các sản phẩm y tế được miễn thuế.
Thuế nhập khẩu là loại thuế bán hàng bổ sung áp dụng đối với tất cả hàng hóa nhập khẩu với thuế suất 5%, không được miễn trừ.
Khi tôi mua các mặt hàng, tôi nhận được một biên lai ghi tên của tất cả các mặt hàng và giá của chúng (bao gồm cả thuế), trong đó có tổng chi phí của các mặt hàng và tổng số thuế bán hàng đã trả.
Các quy tắc làm tròn đối với thuế bán hàng là đối với thuế suất n%, giá bán của p chứa (np / 100 làm tròn đến 0,05 gần nhất) thuế bán hàng.
“Họ nói với tôi rằng họ quan tâm đến Khía cạnh thiết kế của giải pháp của bạn và muốn đánh giá Kỹ năng lập trình hướng đối tượng của tôi .”
Đây là những gì họ đã nói bằng lời của họ
- Đối với giải pháp, chúng tôi muốn bạn sử dụng Java, Ruby hoặc C #.
- Chúng tôi quan tâm đến HOÀN THÀNH THIẾT KẾ của giải pháp của bạn và muốn đánh giá Kỹ năng lập trình hướng đối tượng của bạn .
- Bạn có thể sử dụng các thư viện hoặc công cụ bên ngoài cho mục đích xây dựng hoặc thử nghiệm. Cụ thể, bạn có thể sử dụng các thư viện kiểm thử đơn vị hoặc xây dựng các công cụ có sẵn cho ngôn ngữ bạn đã chọn (ví dụ: JUnit, Ant, NUnit, NAnt, Test :: Unit, Rake, v.v.)
- Theo tùy chọn, bạn cũng có thể bao gồm giải thích ngắn gọn về thiết kế và các giả định cùng với mã của bạn.
- Vui lòng lưu ý rằng chúng tôi KHÔNG mong đợi một ứng dụng dựa trên web hoặc một giao diện người dùng toàn diện. Thay vào đó, chúng tôi đang mong đợi một ứng dụng đơn giản, dựa trên bảng điều khiển và quan tâm đến mã nguồn của bạn.
Vì vậy, tôi đã cung cấp mã bên dưới - bạn chỉ có thể sao chép mã dán và chạy trong 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
}
}
bạn có thể bỏ đầu vào mạng và chạy cho các đầu vào khác nhau.
Tôi đã cung cấp giải pháp nhưng tôi đã bị từ chối.
"Họ nói rằng họ không thể xem xét tôi cho các vị trí mở hiện tại của chúng tôi vì giải pháp mã không thỏa đáng."
Xin vui lòng hướng dẫn tôi những gì còn thiếu ở đây. Giải pháp này không phải là một giải pháp OOAD tốt.
Tôi có thể cải thiện kỹ năng OOAD của mình bằng cách nào.
Các tiền bối của tôi cũng nói rằng ứng dụng OOAD hoàn hảo cũng sẽ không hoạt động thực tế.
Cảm ơn