zoukankan      html  css  js  c++  java
  • 一个面试题引发的血案

      今天去奥博的天(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");
                    }
                }

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

  • 相关阅读:
    调用Android中的软键盘
    EditText图文混排
    android开源框架
    Android 菜单(OptionMenu)
    onRetainNonConfigurationInstance和getLastNonConfigurationInstance
    Android HttpClient基本使用方法
    Eclipse中文注释乱码解决
    mysql怎么定义外键
    javaproject积累——java 反射 invoke
    Floodlight 启动过程分析
  • 原文地址:https://www.cnblogs.com/manuosex/p/2685816.html
Copyright © 2011-2022 走看看