WinForms DataGrid를 사용하여 손익분기점 분석 계산기를 빌드하는 방법 > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

WinForms DataGrid를 사용하여 손익분기점 분석 계산기를 빌드하는 방법

페이지 정보

작성자 GrapeCity 작성일 21-12-02 13:47 조회 305회 댓글 0건

본문

첨부파일

비즈니스를 시작하는 데에는 위험이 따릅니다. "돈을 벌기 위해서는 투자를 해야 한다"라는 유명한 말이 있습니다. 이 말이 늘 맞는 것은 아니지만 위험을 줄이기 위한 한 가지 좋은 방법은 손익분기점을 평가하는 것입니다.


손익분기점 분석은 수익을 내기 위해 필요한 최소 판매 개수 및 판매량을 계산합니다.


분석 결과는 이익도 손실도 아니며 모든 변동 및 고정 비용을 회수하는 데 필요한 판매량을 확인합니다. 비즈니스 소유자는 손익분기점 분석 도구를 사용하여 비즈니스가 손익분기점에 도달하는 시점과 수익을 내기 시작하는 시점을 확인할 수 있습니다.

손익분기점


이 블로그에서는 WinForms 응용 프로그램에서 FlexChartFlexGrid 컨트롤을 사용하여 단위 수량의 고정된 간격에 대한 자세한 계산을 표시하는 계산기를 개발합니다.


ComponentOne Studio Enterprise 최신 버전 다운로드 


ComponentOne for WinForms의 2021 v2 릴리스에서 FlexChart는 여러 단위 수량에서 손익분기점에 대한 수익과 손실을 보여 주기 위해 비용과 수익 간 관계를 보여 주는 특수 차트 유형인 BreakEven 차트를 도입했습니다.


원가 수량 수익 차트라고도 합니다. 시각적 출력을 표시하기 위해 새로 추가된 차트 유형을 사용하여 응용 프로그램에 손익분기점을 표시하려고 합니다.


각 간격에 대한 자세한 표 데이터를 표시하기 위해 판매 및 총비용을 계산하는 사용자 정의 함수를 사용한 다음 C1FlexGrid Column 클래스의 Expression 속성을 사용하여 구매 시점에서 수익 또는 손실을 계산합니다.


이해를 돕기 위해 프로세스를 아래 단계로 구분해 보겠습니다.



입력 양식 만들기


기본 단계는 데이터를 확인하기 위한 고정 비용, 판매 단가, 개당 변동 비용, 여러 가지 단위 반복 등 필요한 정보를 가져오는 입력 양식을 만드는 것입니다.


C1TextBox, C1NumberEdit, C1Label, C1Button 등과 같은 ComponentOne WinForms 입력 컨트롤을 사용합니다. 또한 C1ThemeController를 사용하여 C1의 "Material Dark" 테마를 응용 프로그램에 적용합니다.


최근에 "Revolution 2.0"이라는 새로운 신발 에디션을 출시한 신발 회사를 예로 들어 약 $100,000의 총 투자 비용을 회수하기 위해 판매해야 할 최소 수량을 계산해 보겠습니다.


이 회사는 "Revolution 2.0"의 판매가를 $450로 책정하고 한 켤레당 변동 비용은 약 $50입니다. 이러한 값을 입력한 후 양식은 다음과 같습니다.


입력 양식


필요한 입력값을 모두 채운 다음 해당 값을 손익분기점 수식에 넣고 판매 후 순수익도 순손실도 없는 최소 판매 수량을 가져옵니다.

Break even Point = Fixed costs / (Sales price per unit – Variable cost per unit)
Break even Point = 100000/(450-50) = 250 units


손익분기점



FlexChart를 통해 손익분기점 표시


차트는 데이터를 표시하는 가장 효율적인 방법으로, 빅 데이터를 이해하기 쉬운 간결한 형식으로 표시하고 많은 데이터 집합을 찾아보지 않아도 보기를 쉽게 나타낼 수 있습니다. WinForms용 FlexChart는 사용자에게 80개가 넘는 차트 유형을 구성하는 데 쉽게 사용할 수 있는 강력한 API를 제공합니다.


손익분기점을 표시하기 위해 FlexChart에 손익분기점 차트를 추가해 보겠습니다. 이 작업을 위해 새로운 BreakEven 개체를 사용하고, 이 개체의 기본 속성(SalesPrice, FixedCost, VariableCost) 값을 설정하고, FlexChart.Series 컬렉션에 추가하여 시간의 흐름에 따른 수익 예상을 보여 줘야 합니다.


또한 수익이 비용을 넘어서는 손익분기점에 도달하는 데 걸리는 시간을 시각화할 수도 있습니다. 속성 값을 설정한 후 코드는 다음과 같습니다.

//Clear Existing Series
flexChart1.Series.Clear();
flexChart1.Series.Add(new BreakEven() { SalesPrice =400, FixedCost = 100000, VariableCost = 50 });
flexChart1.Legend.Position = Position.Right;
flexChart1.AxisX.Title = "Number Of Units";
flexChart1.AxisY.Title = "Fixed Cost";


X 축에 데이터를 표시하기 위한 단위 간격을 설정하려면 AxisX 클래스 FlexChart의 MajorUnit 및 MinorUnit 속성을 설정해야 합니다.

flexChart1.AxisX.MinorUnit = 40;
flexChart1.AxisX.MajorUnit = 40;


위 코드를 모두 추가한 후 차트 출력은 다음과 같습니다.

차트



FlexGrid를 통해 손익분기점 표시


C1FlexGrid 컨트롤은 모든 기능을 갖춘 강력한 그리드입니다. 셀 병합, 다중 열 정렬, 자동 데이터 집계와 같은 고급 기능 이외에 모든 기본 기능을 제공합니다. 바인딩 모드에서 사용하여 .NET 데이터 소스의 데이터를 표시할 수 있고 바인딩 해제 모드에서는 그리드가 직접 데이터를 관리합니다.


이 샘플에서는 자세한 계산 내용을 표 형식으로 표시하기 위해 BreakEvenPoint 클래스를 만들고, 클래스의 개체 목록을 그리드의 DataSource로 할당합니다.


여러 단위 수량에서 매출과 총비용을 계산하기 위해 FlexChart의 BreakEven 클래스 개체와 단위 수량을 매개 변수로 사용하는 사용자 정의 메서드인 GetTotalCost 및 GetSalesRevenue를 만들었습니다. 데이터 목록 생성 및 계산에서 그리드에 할당까지 전체 코드의 모양은 다음과 같습니다.


public class BreakEvenPoint
  {
      int unitSold, sales, totalCost;
      public BreakEvenPoint(int unitSold, int sales, int totalCost)
      {
          this.unitSold = unitSold;
          this.sales = sales;
          this.totalCost = totalCost;
      }
      public int UnitSold
      {
          get
          { return unitSold; }
          set
          { unitSold = value; }
      }
      public int Sales
      {
          get
          { return sales; }
          set
          { sales = value; }
      }
      public int TotalCost
      {
          get
          { return totalCost; }
          set
          { totalCost = value; }
      }
  }
List<BreakEvenPoint> breakEvenList = new List<BreakEvenPoint>();
BreakEven breakEvenChart = flexChart1.Series[1] as BreakEven;
int units = 0, sales = 0, totalCost = (int)fixedCost, iteration = 0;
//Calculate data for particular interval of units and add it into the list
breakEvenList.Add(new BreakEvenPoint(units, sales, totalCost));
while ((sales - totalCost) <= 0)
    {
      units = units + unit;
      sales = (int)GetSalesRevenue(breakEvenChart, units);
      totalCost = (int)GetTotalCost(breakEvenChart, units);
      iteration = iteration + 1;
      breakEvenList.Add(new BreakEvenPoint(units, sales, totalCost));
    }
while (iteration > 0)
  {
      units = units + unit;
      sales = (int)GetSalesRevenue(breakEvenChart, units);
      totalCost = (int)GetTotalCost(breakEvenChart, units);
      iteration = iteration - 1;
      breakEvenList.Add(new BreakEvenPoint(units, sales, totalCost));
  }
//Assign the list of data as the datasource of the grid
c1FlexGrid1.DataSource = breakEvenList;


여러 단위 수량에 수익과 손실을 표시하기 위해 그리드에 "수익/손실" 열을 추가하고 열의 Expression 속성을 사용하여 그 값을 계산합니다.


이 속성에 액세스하려면 C1.Win.ExpressionEditor.XX.dll 어셈블리에 참조를 추가해야 합니다. FlexGrid의 CellStyle 클래스를 사용하여 손실은 빨간색으로, 수익은 녹색으로 표시하도록 이 열에 스타일을 적용합니다. 다음은 이 열 추가부터 스타일 적용까지를 모두 보여 주는 코드입니다.

//Add a new Column to the Grid to show the Profit/Loss after selling particular units
Column columnProfitLoss = c1FlexGrid1.Cols.Add();
columnProfitLoss.Name = columnProfitLoss.Caption = "Profit/Loss";
columnProfitLoss.AllowExpressionEditing = true;
//Add Expression to calculate the values based on existing columns' data
columnProfitLoss.Expression = "[Sales] - [TotalCost]";
//Add CellStyle to show the loss
CellStyle cs = c1FlexGrid1.Styles.Add("Loss");
cs.ForeColor = Color.FromArgb(255, 51, 51);
//Add CellStyle to show the Profit
CellStyle cs1 = c1FlexGrid1.Styles.Add("Profit");
cs1.ForeColor = Color.FromArgb(102, 204, 0);
//Assing the CellStyle to particular cell based on its value
for (int i = 1; i < c1FlexGrid1.Rows.Count; i++)
  {
    if (Convert.ToInt32(c1FlexGrid1[i, 4]) > 0)
        {
          c1FlexGrid1.SetCellStyle(i, 4, cs1);
        }
  else
        {
          c1FlexGrid1.SetCellStyle(i, 4, cs);
        }
  }


위 코드를 모두 추가한 후 C1FlexGrid의 최종 출력은 다음과 같습니다.

componentone


이렇게 하면 FlexChart 및 FlexGrid 컨트롤을 사용하여 차트에 손익분기점을 매핑하고 여러 단위 수량의 전체 매출 및 수익 데이터를 표시할 수 있습니다. 이에 따라 매출을 늘리기 위한 업무를 계획하고 우선순위를 지정해 보세요.


차트와 그리드로 구성된 최종 출력 양식은 아래와 같습니다.

분석 출력


전체 샘플은 여기에서 찾아볼 수 있습니다.






지금 바로 ComponentOne을 다운로드하여 직접 테스트해보세요!

c1.png

 



  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그

그레이프시티 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@grapecity.com | 전화 : 1670-0583 | 경기도 안양시 동안구 시민대로 230, B-703(관양동, 아크로타워) 그레이프시티(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 Copyright ⓒ 2022 GrapeCity inc.