【问题标题】:trying to use an object to populate a list <> and grab attributes for calculations尝试使用对象填充列表 <> 并获取属性以进行计算
【发布时间】:2014-03-05 21:00:46
【问题描述】:

所以我的任务是创建一个带有简单按钮的 Windows 表单来处理点击事件以计算订单总额并使用单独的类显示它,以及一个点击事件用于显示当天的总订单详细信息(提示使用私人arraylistlist&lt;&gt;)。

该程序是比萨店的简单销售点环境。我有三个文本框供用户输入

(int numberOfCokes, int numberOfPizzas, double cashGiven). 

我有一个“计算总计”按钮,它实例化 PizzaOrder 类的一个对象(我称之为 order)并使用方法来计算它并将所有输出扔回 gui 端的消息框.这已经成功了。

我现在的问题是我有一个DisplaySummary 课程,它应该合计当天的订单总数、售出的比萨饼的总数 # AND 美元金额以及售出的可乐总数 # AND 美元金额。

我正在尝试使用List &lt;PizzaOrder&gt; OrderList = new List&lt;PizzaOrder&gt;() 作为存储订单对象的方式,但我不知道如何获取和计算每个对象的属性。我应该在此类中至少使用三种方法,并将输出传递到多行文本框,以便在单击“显示摘要”按钮时使用。

非常感谢您的指导!

【问题讨论】:

    标签: c# arrays winforms list object


    【解决方案1】:

    所以我只是给你一些建议,让你完成细节。

         List<PizzaOrder> orders = new List<PizzaOrder>(); // in summary class 
    
         // in onclick handler for Calc total
         orders.Add(newInstance);
    
         // in the display part of summary class
         int totalCokes = orders.Aggregate((c, n) => c.numberOfCokes + n.numberOfCokes);
         int cokeRevenue = totalCokes * PriceOfACoke;
          //ect
    

    所以基本上,我建议您列出PizzaOrder 类型的列表。每次收到新订单时,您都会将其添加到列表中。当用户想要查看摘要时,遍历列表或使用 LINQ 查询(如我上面的聚合查询)来获取总数并将它们显示给用户。一个简单的foreach 会比我拥有的更容易。在类中,您可以拥有totalcokes 的这些属性,将每个对象的值添加到循环主体中,然后在循环之外导出总美元(我称之为cokeRevenue)。有一种方法来计算总数,另一种方法适用于您的显示层(在文本框中设置值或其他)。

    【讨论】:

      【解决方案2】:

      我不确定您的 PizzaOrder 类中有哪些方法和字段,但假设您在其中有比萨饼的成本和可乐的成本,您可以为订单数量添加一个静态字段每次实例化此类的新对象时,它都会递增,比萨的总成本静态字段,可乐成本的静态字段。

      类似:

      class PizzaOrder(){
          private static int totalOrders=0;
          private static double totalPizza=0;
          private static double totalCokes=0;
          public PizzaOrder(){
          totalOrders++;
          //Other stuffs
          }
          public static int GetTotalOrders(){
          return totalOrders;
          }
          public void AddPizza(double costOfPizza){
          totalPizza+=costOfPizza;
          }
          public static double GetTotalPizza(){
          return totalPizza;
          }
          //Something similar for cokes
      
      }
      

      当然,您可以对单个属性使用 setter 和 getter,但由于您似乎才刚刚开始,我认为这样对您来说会更容易。

      【讨论】:

      • OP 说他们应该使用 List&lt;T&gt;,这只是通过廉价的 hack 来规避问题(将总计作为静态字段保留在类中,而不是将实例放在容器中并对其进行操作)。
      • 没有读到(在未经编辑的版本中)这是一项要求。考虑到他才刚刚开始,我想用他肯定已经研究过的结构来暗示他一个更简单的解决方案。
      猜你喜欢
      • 2020-05-11
      • 1970-01-01
      • 2020-02-04
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      相关资源
      最近更新 更多