본문 바로가기
개발일지/C#

회계 관리 프로그램 예제

by 태운콩즙 2024. 11. 9.
728x90
반응형

기업에서는 돈을 자산, 부채, 자본 ,수익 , 비용으로 분석하여 관리한다 계정 종류는 아래와 같다

분류 계정

자산 현금,매출 채권,미수 금,건물,기계장치
부채 매입 채무, 차입금, 미지급 금
자본 자본금 , 자본 잉여금 ,이익 잉여금
수익 매출액, 건물 임대료, 이자 수익
비용 매출 원가, 임차료, 급여, 광고 선전 비

기업에서는 기업의 활동을 계정의 변화로 기록하는데 이를 전표 등록이라고 한다 본 실습에서는 단순하게 일 별 계정 변동을 조정 하는 기능을 개발 해보려고 한다 또한 회계 분석 기능으로 재무 상태 표 와 손익 계산서를 사용한다 재무 상태 표는 기업의 자산 부채 자본의 현재 상태를 정리해서 보여주고 손익 계산서는 특정 기간 동안의 수익과 비용의 발생을 정리하는 분석 표다 저장되어있는 데이터를 계정별 로 정리하는 기능을 개발해보자

<코드 구조>

using System.Collections;

namespace Account
{
    // 계정 정보
    struct slip
    {
        
    }
    class Program
    {
        // 계정금액 변동 등록
        static void AddSlip(slip[] s)
        {

        }
        // 계정별로 정리하여 Hashtable을 만듦
        static Hashtable AccountSummary(slip[] s, int type)
        {
        
        }
        // 계정 유형별로 정리하여 출력
        static void PrintAccountSummary(slip[] s, int type, string typename)
        {
        
        }
        // 재무상태표 출력
        static void StatementFinancialPosition(slip[] s)
        {
        
        }
        // 손익 계산서 출력
        static void StatementComprehensiveIncome(slip[] s)
        {

        }
        // 메뉴를 입력받아서 필요한 메소드를 호출하는 메인 메소드 정의
        static void Main(string[] args)
        {
            slip[] data = new slip[31];
            while (true)
            {
            
            }
        }
    }
}

<구조체>

 struct slip
 {
     public int type; // 자산(1), 부채(2), 자본(3), 수익(4), 비용(5)
     public string account;
     public int amount;
 }

Main() 메소드는 사용자의 선택의 따라 전표 등록, 재무 상태 표, 손익 계산서를 출력한다

<Main>

        // 메뉴를 입력받아서 필요한 메소드를 호출하는 메인 메소드 정의
        static void Main(string[] args)
        {
            slip[] data = new slip[31];
            while (true)
            {
                Console.WriteLine();
                Console.WriteLine("# 1 = 전표 등록, 2 = 재무상태 표, 3 = 손익 계산서, 0 = 종료");
                Console.Write("원하는 작업을 선택 하세요 -->");
                int command = int.Parse(Console.ReadLine());
                if (command == 0)
                {
                    break;
                    Console.WriteLine();
                }switch (command)
                {
                    case 1:
                        {
                            AddSlip(data); // 전표등록 실행
                            break;
                        }
                    case 2:
                        {
                            Console.WriteLine("#### 재무 상태표 ####");
                            StatementFinancialPosition(data); // 재무 상태표 출력
                            break;
                        }
                    case 3:
                        {
                            Console.WriteLine("#### 손익 계산서 ####");
                            StatementComprehensiveIncome(data);
                            break;
                        }
                }
            }
        }
    }
}

전표 등록 메서드 에서는 사전의 등록된 계정 유형 및 계정을 선택 하도록 하였다 금액은 amount 변수에 저장

<AddSlip>

 // 계정금액 변동 등록
 static void AddSlip(slip[] s)
 {
     string[] names1 = { "현금", "매출채권", "미수금", "건물", "기계장치" }; // 자산
     string[] names2 = { "매입 채무", "차입금", "미지급금" }; // 부채
     string[] names3 = { "자본금", "자본 잉여금", "이익 잉여금" }; // 자본
     string[] names4 = { "매출액", "건물 입대료", "이자수익" }; // 수익
     string[] names5 = { "매출 원가", "임차료", "급여", "광고선전비" }; //비용
     Console.Write("날짜를 입력해 주세요(1~31)");
     int n = int.Parse(Console.ReadLine());
     Console.Write("계정유형을 입력하세요 자산 = 1, 부채 = 2, 자본 = 3, 수익 = 4, 비용 = 5> ");
     s[n].type = int.Parse(Console.ReadLine());
     switch (s[n].type)
     {
         case 1:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names1.Length; i++)
                 {
                     Console.Write("{0} + {1}", names1[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names1[i];
                 }
                 break;
             }
         case 2:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names2.Length; i++)
                 {
                     Console.Write("{0} + {1}", names2[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names2[i];
                 }
                 break;
             }
         case 3:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names3.Length; i++)
                 {
                     Console.Write("{0} + {1}", names3[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names3[i];
                 }
                 break;
             }
         case 4:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names4.Length; i++)
                 {
                     Console.Write("{0} + {1}", names4[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names4[i];
                 }
                 break;
             }
         case 5:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names5.Length; i++)
                 {
                     Console.Write("{0} + {1}", names5[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names5[i];
                 }
                 break;
             }
     }
         Console.Write("금액을 입력하세요 >");
    s[n].amount = int.Parse(Console.ReadLine());
}

AccountSummary 메서드는 분석 기능에서 공통으로 필요한 함수이다 데이터를 계정 별로 정리해서 Hashtable을 만들어 준다 모든 계정을 정리 하는 것이 아니라 입력된 계정 유형에 해당되는 계정만 정리한다 type은 계정 유형을 받아오는 인자이다

<AccountSummary>

// 계정별로 정리하여 Hashtable을 만듦
static Hashtable AccountSummary(slip[] s, int type)
{
    Hashtable summary =new Hashtable();
    for (int i = 0; i < 31; i++)
    {
        if (s[i].account != null && s[i].type == type)
        {
            string key = s[i].account;
            if (summary.ContainsKey(key))
            {
                summary[key] = (int)summary[key] + s[i].amount;
            }
            else
            {
                summary.Add(key, s[i].amount);
            }
        }
    }
        return summary;
}

PrintAccountSummary 는 재무 상태 표와 손익 계산서에서 공통으로 필요 하는 함수이다 계정별 로 정리된 금액을 출력하고 총 합을 계산해서 출력해준다

 static void PrintAccountSummary(slip[] s, int type, string typename)
 {
     Hashtable summary = AccountSummary(s, type); // 계정별로 정리한다
     int sum = 0;
     foreach (DictionaryEntry cs in summary)
     {
         string account = (string)cs.Key;
         int total = (int)cs.Value;
         Console.WriteLine("{0} = {1}",account, total); // 계정이름과 금액 출력
         sum = sum + total;
     }
     Console.WriteLine(" ** {0}총합 = {1}", typename, sum); // 전체 합을 출력
 }

재무 상태표 는 자산, 부채 ,자본을 정리한 표이다

StatementFinancialPosition 메서드를 사용한다

 // 재무상태표 출력
 static void StatementFinancialPosition(slip[] s)
 {
     PrintAccountSummary(s, 1, "자산");
     PrintAccountSummary(s, 2, "부채");
     PrintAccountSummary(s, 3, "자본");
 }

순익 계산서는 수익과 비용을 정리한다

StatementComprehensiveIncome 메서드를 사용한다

// 손익 계산서 출력
static void StatementComprehensiveIncome(slip[] s)
{
    PrintAccountSummary(s, 4, "수익");
    PrintAccountSummary(s, 5, "비용");

}

<전체 코드>

using System;
using System.Collections;

namespace Account
{
    // 계정 정보
    struct slip
    {
        public int type; // 자산(1), 부채(2), 자본(3), 수익(4), 비용(5)
        public string account;
        public int amount;
    }
    class Program
    {
        // 계정금액 변동 등록
        static void AddSlip(slip[] s)
        {
            string[] names1 = { "현금", "매출채권", "미수금", "건물", "기계장치" }; // 자산
            string[] names2 = { "매입 채무", "차입금", "미지급금" }; // 부채
            string[] names3 = { "자본금", "자본 잉여금", "이익 잉여금" }; // 자본
            string[] names4 = { "매출액", "건물 입대료", "이자수익" }; // 수익
            string[] names5 = { "매출 원가", "임차료", "급여", "광고선전비" }; //비용
            Console.Write("날짜를 입력해 주세요(1~31)");
            int n = int.Parse(Console.ReadLine());
            Console.Write("계정유형을 입력하세요 자산 = 1, 부채 = 2, 자본 = 3, 수익 = 4, 비용 = 5> ");
            s[n].type = int.Parse(Console.ReadLine());
            switch (s[n].type)
            {
                case 1:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names1.Length; i++)
                        {
                            Console.Write("{0} + {1}", names1[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names1[i];
                        }
                        break;
                    }
                case 2:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names2.Length; i++)
                        {
                            Console.Write("{0} + {1}", names2[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names2[i];
                        }
                        break;
                    }
                case 3:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names3.Length; i++)
                        {
                            Console.Write("{0} + {1}", names3[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names3[i];
                        }
                        break;
                    }
                case 4:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names4.Length; i++)
                        {
                            Console.Write("{0} + {1}", names4[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names4[i];
                        }
                        break;
                    }
                case 5:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names5.Length; i++)
                        {
                            Console.Write("{0} + {1}", names5[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names5[i];
                        }
                        break;
                    }
            }
            Console.Write("금액을 입력하세요 >");
            s[n].amount = int.Parse(Console.ReadLine());
        }
        // 계정별로 정리하여 Hashtable을 만듦
        static Hashtable AccountSummary(slip[] s, int type)
        {
            Hashtable summary =new Hashtable();
            for (int i = 0; i < 31; i++)
            {
                if (s[i].account != null && s[i].type == type)
                {
                    string key = s[i].account;
                    if (summary.ContainsKey(key))
                    {
                        summary[key] = (int)summary[key] + s[i].amount;
                    }
                    else
                    {
                        summary.Add(key, s[i].amount);
                    }
                }
            }
                return summary;
        }
        // 계정 유형별로 정리하여 출력
        static void PrintAccountSummary(slip[] s, int type, string typename)
        {
            Hashtable summary = AccountSummary(s, type); // 계정별로 정리한다
            int sum = 0;
            foreach (DictionaryEntry cs in summary)
            {
                string account = (string)cs.Key;
                int total = (int)cs.Value;
                Console.WriteLine("{0} = {1}",account, total); // 계정이름과 금액 출력
                sum = sum + total;
            }
            Console.WriteLine(" ** {0}총합 = {1}", typename, sum); // 전체 합을 출력
        }
        // 재무상태표 출력
        static void StatementFinancialPosition(slip[] s)
        {
            PrintAccountSummary(s, 1, "자산");
            PrintAccountSummary(s, 2, "부채");
            PrintAccountSummary(s, 3, "자본");
        }
        // 손익 계산서 출력
        static void StatementComprehensiveIncome(slip[] s)
        {
            PrintAccountSummary(s, 4, "수익");
            PrintAccountSummary(s, 5, "비용");

        }
        // 메뉴를 입력받아서 필요한 메소드를 호출하는 메인 메소드 정의
        static void Main(string[] args)
        {
            slip[] data = new slip[31];
            while (true)
            {
                Console.WriteLine();
                Console.WriteLine("# 1 = 전표 등록, 2 = 재무상태 표, 3 = 손익 계산서, 0 = 종료");
                Console.Write("원하는 작업을 선택 하세요 -->");
                int command = int.Parse(Console.ReadLine());
                if (command == 0)
                {
                    break;
                    Console.WriteLine();
                }switch (command)
                {
                    case 1:
                        {
                            AddSlip(data); // 전표등록 실행
                            break;
                        }
                    case 2:
                        {
                            Console.WriteLine("#### 재무 상태표 ####");
                            StatementFinancialPosition(data); // 재무 상태표 출력
                            break;
                        }
                    case 3:
                        {
                            Console.WriteLine("#### 손익 계산서 ####");
                            StatementComprehensiveIncome(data);
                            break;
                        }
                }
            }
        }
    }
}

기업에서는 돈을 자산, 부채, 자본 ,수익 , 비용으로 분석하여 관리한다 계정 종류는 아래와 같다

분류 계정

자산 현금,매출 채권,미수 금,건물,기계장치
부채 매입 채무, 차입금, 미지급 금
자본 자본금 , 자본 잉여금 ,이익 잉여금
수익 매출액, 건물 임대료, 이자 수익
비용 매출 원가, 임차료, 급여, 광고 선전 비

기업에서는 기업의 활동을 계정의 변화로 기록하는데 이를 전표 등록이라고 한다 본 실습에서는 단순하게 일 별 계정 변동을 조정 하는 기능을 개발 해보려고 한다 또한 회계 분석 기능으로 재무 상태 표 와 손익 계산서를 사용한다 재무 상태 표는 기업의 자산 부채 자본의 현재 상태를 정리해서 보여주고 손익 계산서는 특정 기간 동안의 수익과 비용의 발생을 정리하는 분석 표다 저장되어있는 데이터를 계정별 로 정리하는 기능을 개발해보자

<코드 구조>

using System.Collections;

namespace Account
{
    // 계정 정보
    struct slip
    {
        
    }
    class Program
    {
        // 계정금액 변동 등록
        static void AddSlip(slip[] s)
        {

        }
        // 계정별로 정리하여 Hashtable을 만듦
        static Hashtable AccountSummary(slip[] s, int type)
        {
        
        }
        // 계정 유형별로 정리하여 출력
        static void PrintAccountSummary(slip[] s, int type, string typename)
        {
        
        }
        // 재무상태표 출력
        static void StatementFinancialPosition(slip[] s)
        {
        
        }
        // 손익 계산서 출력
        static void StatementComprehensiveIncome(slip[] s)
        {

        }
        // 메뉴를 입력받아서 필요한 메소드를 호출하는 메인 메소드 정의
        static void Main(string[] args)
        {
            slip[] data = new slip[31];
            while (true)
            {
            
            }
        }
    }
}

<구조체>

 struct slip
 {
     public int type; // 자산(1), 부채(2), 자본(3), 수익(4), 비용(5)
     public string account;
     public int amount;
 }

Main() 메소드는 사용자의 선택의 따라 전표 등록, 재무 상태 표, 손익 계산서를 출력한다

<Main>

        // 메뉴를 입력받아서 필요한 메소드를 호출하는 메인 메소드 정의
        static void Main(string[] args)
        {
            slip[] data = new slip[31];
            while (true)
            {
                Console.WriteLine();
                Console.WriteLine("# 1 = 전표 등록, 2 = 재무상태 표, 3 = 손익 계산서, 0 = 종료");
                Console.Write("원하는 작업을 선택 하세요 -->");
                int command = int.Parse(Console.ReadLine());
                if (command == 0)
                {
                    break;
                    Console.WriteLine();
                }switch (command)
                {
                    case 1:
                        {
                            AddSlip(data); // 전표등록 실행
                            break;
                        }
                    case 2:
                        {
                            Console.WriteLine("#### 재무 상태표 ####");
                            StatementFinancialPosition(data); // 재무 상태표 출력
                            break;
                        }
                    case 3:
                        {
                            Console.WriteLine("#### 손익 계산서 ####");
                            StatementComprehensiveIncome(data);
                            break;
                        }
                }
            }
        }
    }
}

전표 등록 메서드 에서는 사전의 등록된 계정 유형 및 계정을 선택 하도록 하였다 금액은 amount 변수에 저장

<AddSlip>

 // 계정금액 변동 등록
 static void AddSlip(slip[] s)
 {
     string[] names1 = { "현금", "매출채권", "미수금", "건물", "기계장치" }; // 자산
     string[] names2 = { "매입 채무", "차입금", "미지급금" }; // 부채
     string[] names3 = { "자본금", "자본 잉여금", "이익 잉여금" }; // 자본
     string[] names4 = { "매출액", "건물 입대료", "이자수익" }; // 수익
     string[] names5 = { "매출 원가", "임차료", "급여", "광고선전비" }; //비용
     Console.Write("날짜를 입력해 주세요(1~31)");
     int n = int.Parse(Console.ReadLine());
     Console.Write("계정유형을 입력하세요 자산 = 1, 부채 = 2, 자본 = 3, 수익 = 4, 비용 = 5> ");
     s[n].type = int.Parse(Console.ReadLine());
     switch (s[n].type)
     {
         case 1:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names1.Length; i++)
                 {
                     Console.Write("{0} + {1}", names1[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names1[i];
                 }
                 break;
             }
         case 2:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names2.Length; i++)
                 {
                     Console.Write("{0} + {1}", names2[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names2[i];
                 }
                 break;
             }
         case 3:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names3.Length; i++)
                 {
                     Console.Write("{0} + {1}", names3[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names3[i];
                 }
                 break;
             }
         case 4:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names4.Length; i++)
                 {
                     Console.Write("{0} + {1}", names4[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names4[i];
                 }
                 break;
             }
         case 5:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names5.Length; i++)
                 {
                     Console.Write("{0} + {1}", names5[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names5[i];
                 }
                 break;
             }
     }
         Console.Write("금액을 입력하세요 >");
    s[n].amount = int.Parse(Console.ReadLine());
}

AccountSummary 메서드는 분석 기능에서 공통으로 필요한 함수이다 데이터를 계정 별로 정리해서 Hashtable을 만들어 준다 모든 계정을 정리 하는 것이 아니라 입력된 계정 유형에 해당되는 계정만 정리한다 type은 계정 유형을 받아오는 인자이다

<AccountSummary>

// 계정별로 정리하여 Hashtable을 만듦
static Hashtable AccountSummary(slip[] s, int type)
{
    Hashtable summary =new Hashtable();
    for (int i = 0; i < 31; i++)
    {
        if (s[i].account != null && s[i].type == type)
        {
            string key = s[i].account;
            if (summary.ContainsKey(key))
            {
                summary[key] = (int)summary[key] + s[i].amount;
            }
            else
            {
                summary.Add(key, s[i].amount);
            }
        }
    }
        return summary;
}

PrintAccountSummary 는 재무 상태 표와 손익 계산서에서 공통으로 필요 하는 함수이다 계정별 로 정리된 금액을 출력하고 총 합을 계산해서 출력해준다

 static void PrintAccountSummary(slip[] s, int type, string typename)
 {
     Hashtable summary = AccountSummary(s, type); // 계정별로 정리한다
     int sum = 0;
     foreach (DictionaryEntry cs in summary)
     {
         string account = (string)cs.Key;
         int total = (int)cs.Value;
         Console.WriteLine("{0} = {1}",account, total); // 계정이름과 금액 출력
         sum = sum + total;
     }
     Console.WriteLine(" ** {0}총합 = {1}", typename, sum); // 전체 합을 출력
 }

재무 상태표 는 자산, 부채 ,자본을 정리한 표이다

StatementFinancialPosition 메서드를 사용한다

 // 재무상태표 출력
 static void StatementFinancialPosition(slip[] s)
 {
     PrintAccountSummary(s, 1, "자산");
     PrintAccountSummary(s, 2, "부채");
     PrintAccountSummary(s, 3, "자본");
 }

순익 계산서는 수익과 비용을 정리한다

StatementComprehensiveIncome 메서드를 사용한다

// 손익 계산서 출력
static void StatementComprehensiveIncome(slip[] s)
{
    PrintAccountSummary(s, 4, "수익");
    PrintAccountSummary(s, 5, "비용");

}

<전체 코드>

using System;
using System.Collections;

namespace Account
{
    // 계정 정보
    struct slip
    {
        public int type; // 자산(1), 부채(2), 자본(3), 수익(4), 비용(5)
        public string account;
        public int amount;
    }
    class Program
    {
        // 계정금액 변동 등록
        static void AddSlip(slip[] s)
        {
            string[] names1 = { "현금", "매출채권", "미수금", "건물", "기계장치" }; // 자산
            string[] names2 = { "매입 채무", "차입금", "미지급금" }; // 부채
            string[] names3 = { "자본금", "자본 잉여금", "이익 잉여금" }; // 자본
            string[] names4 = { "매출액", "건물 입대료", "이자수익" }; // 수익
            string[] names5 = { "매출 원가", "임차료", "급여", "광고선전비" }; //비용
            Console.Write("날짜를 입력해 주세요(1~31)");
            int n = int.Parse(Console.ReadLine());
            Console.Write("계정유형을 입력하세요 자산 = 1, 부채 = 2, 자본 = 3, 수익 = 4, 비용 = 5> ");
            s[n].type = int.Parse(Console.ReadLine());
            switch (s[n].type)
            {
                case 1:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names1.Length; i++)
                        {
                            Console.Write("{0} + {1}", names1[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names1[i];
                        }
                        break;
                    }
                case 2:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names2.Length; i++)
                        {
                            Console.Write("{0} + {1}", names2[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names2[i];
                        }
                        break;
                    }
                case 3:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names3.Length; i++)
                        {
                            Console.Write("{0} + {1}", names3[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names3[i];
                        }
                        break;
                    }
                case 4:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names4.Length; i++)
                        {
                            Console.Write("{0} + {1}", names4[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names4[i];
                        }
                        break;
                    }
                case 5:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names5.Length; i++)
                        {
                            Console.Write("{0} + {1}", names5[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names5[i];
                        }
                        break;
                    }
            }
            Console.Write("금액을 입력하세요 >");
            s[n].amount = int.Parse(Console.ReadLine());
        }
        // 계정별로 정리하여 Hashtable을 만듦
        static Hashtable AccountSummary(slip[] s, int type)
        {
            Hashtable summary =new Hashtable();
            for (int i = 0; i < 31; i++)
            {
                if (s[i].account != null && s[i].type == type)
                {
                    string key = s[i].account;
                    if (summary.ContainsKey(key))
                    {
                        summary[key] = (int)summary[key] + s[i].amount;
                    }
                    else
                    {
                        summary.Add(key, s[i].amount);
                    }
                }
            }
                return summary;
        }
        // 계정 유형별로 정리하여 출력
        static void PrintAccountSummary(slip[] s, int type, string typename)
        {
            Hashtable summary = AccountSummary(s, type); // 계정별로 정리한다
            int sum = 0;
            foreach (DictionaryEntry cs in summary)
            {
                string account = (string)cs.Key;
                int total = (int)cs.Value;
                Console.WriteLine("{0} = {1}",account, total); // 계정이름과 금액 출력
                sum = sum + total;
            }
            Console.WriteLine(" ** {0}총합 = {1}", typename, sum); // 전체 합을 출력
        }
        // 재무상태표 출력
        static void StatementFinancialPosition(slip[] s)
        {
            PrintAccountSummary(s, 1, "자산");
            PrintAccountSummary(s, 2, "부채");
            PrintAccountSummary(s, 3, "자본");
        }
        // 손익 계산서 출력
        static void StatementComprehensiveIncome(slip[] s)
        {
            PrintAccountSummary(s, 4, "수익");
            PrintAccountSummary(s, 5, "비용");

        }
        // 메뉴를 입력받아서 필요한 메소드를 호출하는 메인 메소드 정의
        static void Main(string[] args)
        {
            slip[] data = new slip[31];
            while (true)
            {
                Console.WriteLine();
                Console.WriteLine("# 1 = 전표 등록, 2 = 재무상태 표, 3 = 손익 계산서, 0 = 종료");
                Console.Write("원하는 작업을 선택 하세요 -->");
                int command = int.Parse(Console.ReadLine());
                if (command == 0)
                {
                    break;
                    Console.WriteLine();
                }switch (command)
                {
                    case 1:
                        {
                            AddSlip(data); // 전표등록 실행
                            break;
                        }
                    case 2:
                        {
                            Console.WriteLine("#### 재무 상태표 ####");
                            StatementFinancialPosition(data); // 재무 상태표 출력
                            break;
                        }
                    case 3:
                        {
                            Console.WriteLine("#### 손익 계산서 ####");
                            StatementComprehensiveIncome(data);
                            break;
                        }
                }
            }
        }
    }
}

기업에서는 돈을 자산, 부채, 자본 ,수익 , 비용으로 분석하여 관리한다 계정 종류는 아래와 같다

분류 계정

자산 현금,매출 채권,미수 금,건물,기계장치
부채 매입 채무, 차입금, 미지급 금
자본 자본금 , 자본 잉여금 ,이익 잉여금
수익 매출액, 건물 임대료, 이자 수익
비용 매출 원가, 임차료, 급여, 광고 선전 비

기업에서는 기업의 활동을 계정의 변화로 기록하는데 이를 전표 등록이라고 한다 본 실습에서는 단순하게 일 별 계정 변동을 조정 하는 기능을 개발 해보려고 한다 또한 회계 분석 기능으로 재무 상태 표 와 손익 계산서를 사용한다 재무 상태 표는 기업의 자산 부채 자본의 현재 상태를 정리해서 보여주고 손익 계산서는 특정 기간 동안의 수익과 비용의 발생을 정리하는 분석 표다 저장되어있는 데이터를 계정별 로 정리하는 기능을 개발해보자

<코드 구조>

using System.Collections;

namespace Account
{
    // 계정 정보
    struct slip
    {
        
    }
    class Program
    {
        // 계정금액 변동 등록
        static void AddSlip(slip[] s)
        {

        }
        // 계정별로 정리하여 Hashtable을 만듦
        static Hashtable AccountSummary(slip[] s, int type)
        {
        
        }
        // 계정 유형별로 정리하여 출력
        static void PrintAccountSummary(slip[] s, int type, string typename)
        {
        
        }
        // 재무상태표 출력
        static void StatementFinancialPosition(slip[] s)
        {
        
        }
        // 손익 계산서 출력
        static void StatementComprehensiveIncome(slip[] s)
        {

        }
        // 메뉴를 입력받아서 필요한 메소드를 호출하는 메인 메소드 정의
        static void Main(string[] args)
        {
            slip[] data = new slip[31];
            while (true)
            {
            
            }
        }
    }
}

<구조체>

 struct slip
 {
     public int type; // 자산(1), 부채(2), 자본(3), 수익(4), 비용(5)
     public string account;
     public int amount;
 }

Main() 메소드는 사용자의 선택의 따라 전표 등록, 재무 상태 표, 손익 계산서를 출력한다

<Main>

        // 메뉴를 입력받아서 필요한 메소드를 호출하는 메인 메소드 정의
        static void Main(string[] args)
        {
            slip[] data = new slip[31];
            while (true)
            {
                Console.WriteLine();
                Console.WriteLine("# 1 = 전표 등록, 2 = 재무상태 표, 3 = 손익 계산서, 0 = 종료");
                Console.Write("원하는 작업을 선택 하세요 -->");
                int command = int.Parse(Console.ReadLine());
                if (command == 0)
                {
                    break;
                    Console.WriteLine();
                }switch (command)
                {
                    case 1:
                        {
                            AddSlip(data); // 전표등록 실행
                            break;
                        }
                    case 2:
                        {
                            Console.WriteLine("#### 재무 상태표 ####");
                            StatementFinancialPosition(data); // 재무 상태표 출력
                            break;
                        }
                    case 3:
                        {
                            Console.WriteLine("#### 손익 계산서 ####");
                            StatementComprehensiveIncome(data);
                            break;
                        }
                }
            }
        }
    }
}

전표 등록 메서드 에서는 사전의 등록된 계정 유형 및 계정을 선택 하도록 하였다 금액은 amount 변수에 저장

<AddSlip>

 // 계정금액 변동 등록
 static void AddSlip(slip[] s)
 {
     string[] names1 = { "현금", "매출채권", "미수금", "건물", "기계장치" }; // 자산
     string[] names2 = { "매입 채무", "차입금", "미지급금" }; // 부채
     string[] names3 = { "자본금", "자본 잉여금", "이익 잉여금" }; // 자본
     string[] names4 = { "매출액", "건물 입대료", "이자수익" }; // 수익
     string[] names5 = { "매출 원가", "임차료", "급여", "광고선전비" }; //비용
     Console.Write("날짜를 입력해 주세요(1~31)");
     int n = int.Parse(Console.ReadLine());
     Console.Write("계정유형을 입력하세요 자산 = 1, 부채 = 2, 자본 = 3, 수익 = 4, 비용 = 5> ");
     s[n].type = int.Parse(Console.ReadLine());
     switch (s[n].type)
     {
         case 1:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names1.Length; i++)
                 {
                     Console.Write("{0} + {1}", names1[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names1[i];
                 }
                 break;
             }
         case 2:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names2.Length; i++)
                 {
                     Console.Write("{0} + {1}", names2[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names2[i];
                 }
                 break;
             }
         case 3:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names3.Length; i++)
                 {
                     Console.Write("{0} + {1}", names3[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names3[i];
                 }
                 break;
             }
         case 4:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names4.Length; i++)
                 {
                     Console.Write("{0} + {1}", names4[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names4[i];
                 }
                 break;
             }
         case 5:
             {
                 Console.Write("계정을 입력하세요");
                 for (int i = 0; i < names5.Length; i++)
                 {
                     Console.Write("{0} + {1}", names5[i], i + 1);
                     Console.Write(">");
                     int id = int.Parse(Console.ReadLine());
                     s[n].account = names5[i];
                 }
                 break;
             }
     }
         Console.Write("금액을 입력하세요 >");
    s[n].amount = int.Parse(Console.ReadLine());
}

AccountSummary 메서드는 분석 기능에서 공통으로 필요한 함수이다 데이터를 계정 별로 정리해서 Hashtable을 만들어 준다 모든 계정을 정리 하는 것이 아니라 입력된 계정 유형에 해당되는 계정만 정리한다 type은 계정 유형을 받아오는 인자이다

<AccountSummary>

// 계정별로 정리하여 Hashtable을 만듦
static Hashtable AccountSummary(slip[] s, int type)
{
    Hashtable summary =new Hashtable();
    for (int i = 0; i < 31; i++)
    {
        if (s[i].account != null && s[i].type == type)
        {
            string key = s[i].account;
            if (summary.ContainsKey(key))
            {
                summary[key] = (int)summary[key] + s[i].amount;
            }
            else
            {
                summary.Add(key, s[i].amount);
            }
        }
    }
        return summary;
}

PrintAccountSummary 는 재무 상태 표와 손익 계산서에서 공통으로 필요 하는 함수이다 계정별 로 정리된 금액을 출력하고 총 합을 계산해서 출력해준다

 static void PrintAccountSummary(slip[] s, int type, string typename)
 {
     Hashtable summary = AccountSummary(s, type); // 계정별로 정리한다
     int sum = 0;
     foreach (DictionaryEntry cs in summary)
     {
         string account = (string)cs.Key;
         int total = (int)cs.Value;
         Console.WriteLine("{0} = {1}",account, total); // 계정이름과 금액 출력
         sum = sum + total;
     }
     Console.WriteLine(" ** {0}총합 = {1}", typename, sum); // 전체 합을 출력
 }

재무 상태표 는 자산, 부채 ,자본을 정리한 표이다

StatementFinancialPosition 메서드를 사용한다

 // 재무상태표 출력
 static void StatementFinancialPosition(slip[] s)
 {
     PrintAccountSummary(s, 1, "자산");
     PrintAccountSummary(s, 2, "부채");
     PrintAccountSummary(s, 3, "자본");
 }

순익 계산서는 수익과 비용을 정리한다

StatementComprehensiveIncome 메서드를 사용한다

// 손익 계산서 출력
static void StatementComprehensiveIncome(slip[] s)
{
    PrintAccountSummary(s, 4, "수익");
    PrintAccountSummary(s, 5, "비용");

}

<전체 코드>

using System;
using System.Collections;

namespace Account
{
    // 계정 정보
    struct slip
    {
        public int type; // 자산(1), 부채(2), 자본(3), 수익(4), 비용(5)
        public string account;
        public int amount;
    }
    class Program
    {
        // 계정금액 변동 등록
        static void AddSlip(slip[] s)
        {
            string[] names1 = { "현금", "매출채권", "미수금", "건물", "기계장치" }; // 자산
            string[] names2 = { "매입 채무", "차입금", "미지급금" }; // 부채
            string[] names3 = { "자본금", "자본 잉여금", "이익 잉여금" }; // 자본
            string[] names4 = { "매출액", "건물 입대료", "이자수익" }; // 수익
            string[] names5 = { "매출 원가", "임차료", "급여", "광고선전비" }; //비용
            Console.Write("날짜를 입력해 주세요(1~31)");
            int n = int.Parse(Console.ReadLine());
            Console.Write("계정유형을 입력하세요 자산 = 1, 부채 = 2, 자본 = 3, 수익 = 4, 비용 = 5> ");
            s[n].type = int.Parse(Console.ReadLine());
            switch (s[n].type)
            {
                case 1:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names1.Length; i++)
                        {
                            Console.Write("{0} + {1}", names1[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names1[i];
                        }
                        break;
                    }
                case 2:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names2.Length; i++)
                        {
                            Console.Write("{0} + {1}", names2[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names2[i];
                        }
                        break;
                    }
                case 3:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names3.Length; i++)
                        {
                            Console.Write("{0} + {1}", names3[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names3[i];
                        }
                        break;
                    }
                case 4:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names4.Length; i++)
                        {
                            Console.Write("{0} + {1}", names4[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names4[i];
                        }
                        break;
                    }
                case 5:
                    {
                        Console.Write("계정을 입력하세요");
                        for (int i = 0; i < names5.Length; i++)
                        {
                            Console.Write("{0} + {1}", names5[i], i + 1);
                            Console.Write(">");
                            int id = int.Parse(Console.ReadLine());
                            s[n].account = names5[i];
                        }
                        break;
                    }
            }
            Console.Write("금액을 입력하세요 >");
            s[n].amount = int.Parse(Console.ReadLine());
        }
        // 계정별로 정리하여 Hashtable을 만듦
        static Hashtable AccountSummary(slip[] s, int type)
        {
            Hashtable summary =new Hashtable();
            for (int i = 0; i < 31; i++)
            {
                if (s[i].account != null && s[i].type == type)
                {
                    string key = s[i].account;
                    if (summary.ContainsKey(key))
                    {
                        summary[key] = (int)summary[key] + s[i].amount;
                    }
                    else
                    {
                        summary.Add(key, s[i].amount);
                    }
                }
            }
                return summary;
        }
        // 계정 유형별로 정리하여 출력
        static void PrintAccountSummary(slip[] s, int type, string typename)
        {
            Hashtable summary = AccountSummary(s, type); // 계정별로 정리한다
            int sum = 0;
            foreach (DictionaryEntry cs in summary)
            {
                string account = (string)cs.Key;
                int total = (int)cs.Value;
                Console.WriteLine("{0} = {1}",account, total); // 계정이름과 금액 출력
                sum = sum + total;
            }
            Console.WriteLine(" ** {0}총합 = {1}", typename, sum); // 전체 합을 출력
        }
        // 재무상태표 출력
        static void StatementFinancialPosition(slip[] s)
        {
            PrintAccountSummary(s, 1, "자산");
            PrintAccountSummary(s, 2, "부채");
            PrintAccountSummary(s, 3, "자본");
        }
        // 손익 계산서 출력
        static void StatementComprehensiveIncome(slip[] s)
        {
            PrintAccountSummary(s, 4, "수익");
            PrintAccountSummary(s, 5, "비용");

        }
        // 메뉴를 입력받아서 필요한 메소드를 호출하는 메인 메소드 정의
        static void Main(string[] args)
        {
            slip[] data = new slip[31];
            while (true)
            {
                Console.WriteLine();
                Console.WriteLine("# 1 = 전표 등록, 2 = 재무상태 표, 3 = 손익 계산서, 0 = 종료");
                Console.Write("원하는 작업을 선택 하세요 -->");
                int command = int.Parse(Console.ReadLine());
                if (command == 0)
                {
                    break;
                    Console.WriteLine();
                }switch (command)
                {
                    case 1:
                        {
                            AddSlip(data); // 전표등록 실행
                            break;
                        }
                    case 2:
                        {
                            Console.WriteLine("#### 재무 상태표 ####");
                            StatementFinancialPosition(data); // 재무 상태표 출력
                            break;
                        }
                    case 3:
                        {
                            Console.WriteLine("#### 손익 계산서 ####");
                            StatementComprehensiveIncome(data);
                            break;
                        }
                }
            }
        }
    }
}

728x90
반응형

'개발일지 > C#' 카테고리의 다른 글

텍스트 형태의 파일 입출력 예제  (0) 2024.11.12
파일 파싱 예제  (0) 2024.11.11
인사 급여 관리 프로그램 예제  (0) 2024.11.08
C# Delegate  (2) 2024.10.02
C# Indexer  (0) 2024.10.02