OOP - 获取同一类别的另一个属性中的一个属性的总和

时间:2013-11-07 10:03:56

标签: c# oop

我有一张excel表需要转换成C#类。这里的想法是,对于excel表中的每一行,我将创建一个类的实例,它将Product Id和Period id作为参数传递给构造函数。因此,对于该特定时期内的每个产品,将创建一个实例 这个类有几个属性。一个属性要求是在其公式中,要调用另一个属性的Total。

例如,我的表格是这样的:

enter image description here

我需要在每个实例中获得生产百分比。

如果我的类被称为clsProduction,那么一旦创建了这个类的实例,我怎么能填充它的属性'ProductionPerc'?

任何想法都将受到高度赞赏。

我的代码在这里

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data;
using System.Data.SqlClient;

namespace IMS
{
    public class clsProduction
    {

        public clsProduction() { }
        public clsProduction(clsCostOfCrudeMVG obj, int _PeriodId, int _ProductId)
        {
            _clsCostOfCrudeMVG = obj;
            PeriodId = _PeriodId;
            ProductId = _ProductId;
            GetQuantity();

        }


        public int ProductionPerc
        {
            get { return _ProductionPerc; }
            set { _ProductionPerc= value; }
        }

}
}

2 个答案:

答案 0 :(得分:1)

你班级的每个实例都只知道自己。它不知道“人口”,因此无法计算该值代表的总人口百分比。

您需要一个类来实际进行这些计算(就像Excel'Application'根据单元格的内容进行计算一样)。

试试这个:

Class ProductionManager
{
  List<ProductionItem> _ProductionItems

  AddProductionItem(ProductionItem)
  {
    // Add the production items to _ProductionItems List

    // Now 
    // 1) enumerate the current collection of _ProductionItems
    // 2) keep running totals
    // 3) now re-enumerate the current collection of _ProductionItems
    //    updating each item with its respective percentage of the totals 
    //    you calculated in step 2.
    // and populate each ProductionItem with the respective percentages
  }
}

答案 1 :(得分:1)

你必须使用2个类,因为生产存在于细节之外,你应该这样做。

public class productionDetail 
{
  public string ProductName {get;set;}
  public int ProductionQuantity {get;set;}
  public double ProductionPercentage  {get;set;}

  public productionDetail(string productName, int productQuantity)
  {
    ProductName = productName;
    ProductionQuantity = productQuantity;
    ProductionPercentage = 0; // This will change later on
  }
}

public class Production
{
  public List<productionDetail> Details {get;set;}
  public int TotalProduction {get;set;}

  public production (List<productionDetail> myDetails)
  {
    Details = myDetails;
    RecalculatePercentage();
  }
  //Here the total will be calculated
  public void MakeTotal()
  {
    var totalProduction = 0;
    foreach(productionDetail d in Details )
    {
      totalProduction += d.ProductionQuantity;
    }
    TotalProduction = totalProduction;
  }
  public void RecalculatePercentage()
  {   
    MakeTotal();
    //Here you will update the detail records for the percentage.
    foreach(productionDetail d in Details )
    {
      d.ProductionPercentage = Convert.ToDouble(d.ProductionQuantity) / Convert.ToDouble(TotalProduction) * 100;
    }
  }
  public void AddDetail(productionDetail detail)
  {
    Details.Add(detail);
    RecalculatePercentage();
  }
}