一个面试题引发的血案

  今天去奥博的天(objectival)面试遇到了这样的 一道的机试题

      题干大致如下:

             有关税率的问题: 一般的商品要交的消费税,单除了 医药,书籍,食品之外 不交税,他的税率是10%, 还有的就是 进口税 ,进口税 税率是5%,  .

             测试用例通过xml来存放数据,

            要求 本面试题完全使用了面向对象的方式来实现。 来计算商品的税收,并且商品税收是进行舍入0.05的操作,如13.14舍入是13.15, 60.00舍入是60.00,

13.151舍入是13.20     并且要求增加更多的税收以后或者 消费税增加更多的免税商品品种以后, 要求改更少的的源代码,最好只通过 配置文件。    

           基本的源代码:

             我们 需要 税率的 基类

 /// <summary>     /// 基本的税率的基类 任何税率继承 此类     /// </summary>    

public abstract class baseTaxes    

{         public decimal Rate;

        public baseTaxes(decimal Rate)      

   {             this.Rate = Rate;         }    

  }

          //进行舍入的0,05 操作

             /// <summary>
    /// 计算的帮助类 任何税类计算都 进行 舍入的0.05 操作
    /// </summary>
   public static class CalcHelper
    {
         public static  decimal Calc(decimal value)
         {
             return Math.Ceiling(value/0.05m)*0.05m;
         }
    }        

   进口关税继承与他

  /// <summary>
    /// 进口的关税
    /// </summary>
   public class importedTaxes:baseTaxes
    {
       public importedTaxes(decimal Rate):base(Rate)
       {
      
       }
    }

     由于不会直接操作xml文件 

   /// <summary>
    /// 进行xml文件路径的拼接
    /// </summary>
     public  class StringHelper
     {
         public static readonly string strTaxes = "Test";
        
         public  static  List<string> TList()
         {
             return new List<string> { "case1.xml", "case2.xml", "case3.xml", "case4.xml" };
         }
     }

  此消费税也是继承与基本税的借口

   ///消费税

   public class Taxes:baseTaxes
    {
         public Taxes(decimal Rate):base(Rate)
         {
         }
    }

 /// <summary>
    /// 消费税的那些的种类  由于会自动增加免消费税的种类 所以写了这个 类自动的添加
    /// </summary>
    public class TaxesCategory
    {
        public  static  List<string> GetCategory()
        {
            return new List<string> {"food", "medical", "book"};
        }
    }

  //计算 总额和税收的结果的类 

 /// <summary>     /// 计算 总额和税收的结果的类     /// </summary>      public class MyResult      {          public decimal Total { get; set; }

         public decimal Taxes { get; set; }          }

  ///通过税收工厂产生不同的税收 

 public class taxesFactory      {          private static baseTaxes _baseTaxes = null;            public static  baseTaxes CreateTaxes(taxesType type)            {                switch (type)                {                       case taxesType.based:_baseTaxes=new Taxes(0.1m);break;                        case taxesType.imported:_baseTaxes=new importedTaxes(0.05m);break;                }                return _baseTaxes;            }

    }

     //进行xml文件操作与正规的测试用例
            static void Test()
            {
                MyResult result = null;
                try
                {
                    List<string> strs = StringHelper.TList();
                    foreach (string str in strs)
                    {
                        string newstring =Path.Combine(StringHelper.strTaxes,str) ;
                        XmlDocument xmlDocument=new XmlDocument();
                        xmlDocument.Load(@"C:\Users\admin\Documents\Visual Studio 2010\Projects\Objectival.Interview.Test\Objectival.Interview.Test\"+newstring);
                        XmlNode xmlNode = xmlDocument.SelectSingleNode("TestCase");
                        XmlNode xmlTopNode = xmlNode.SelectSingleNode("Name");
                        Console.WriteLine(xmlNode.Value);
                        XmlNode xmlsecondNode = xmlNode.SelectSingleNode("Items");
                        foreach (XmlNode childNode in xmlsecondNode.SelectNodes("Item"))
                        {
                            Console.WriteLine("Name:" + childNode.Attributes["Name"].Value.ToString() + ",Count:" + childNode.Attributes["Count"].Value + ",Unit:" + childNode.Attributes["Unit"].Value.ToString() + ",Type:" + childNode.Attributes["Type"].Value.ToString() + ",IsImported:" + childNode.Attributes["IsImported"].Value.ToString());
                        }
                        result = NewResult(xmlDocument);
                        XmlNode xmlThirdNode = xmlNode.SelectSingleNode("Result");
                        decimal tax = Convert.ToDecimal(xmlThirdNode.Attributes["tax"].Value);
                        decimal total = Convert.ToDecimal(xmlThirdNode.Attributes["total"].Value);
                        bool isTaxPassed = result.Taxes == tax;
                        bool isTotal = result.Total == total;
                    }
                  
                    Console.WriteLine();
                }
                catch (Exception)
                {
                    Console.WriteLine("this is a exception");
                }
            }

    总结 项目经理说着不是真的面向对象,当增加一个类以后怎么办啊,我郁闷啊,你自己加一个类 继承与 基类   当 操作的时候,你在后面增加源代码。 这不是达到了修改关闭,增加开放面向对象的高级的原则吗

上一篇:c语言之cgi实例


下一篇:程序员的假期总结——竹子(一)