본문 바로가기
개발일지

생산 관리 프로그램 예제

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

메뉴 설명

1. 생산 계획 입력 날짜 , 품목 , 작업장 , 생산량을 입력하면 생산 계획을 저장할 수 있다
ProductionPlan() 메소드 사용  
2. 생산 완료 입력 날짜를 입력하면 해당 날짜의 생산 건이 완료 된 것으로 저장된다
Com-pleteProcess() 메소드 사용  
3. 품목 별 생산 실적 분석 품목 별 생산 계획량 , 완료량 진척률을 보여준다
ProductionSummary() 메소드 사용  
4.작업장 별 생산 실적 분석 작업장 별 생산 계획량 완료량 진척률을 보여준다
ProductionSummary() 메소드 사용  
0. 프로그램 종료 프로그램 종료

<전체 코드 구조>

using System;
using System.Collections;

namespace Production_ex
{
    // 생산 관련 데이터 저장
    struct productinfo
    {
        
    }
    class Program
    {
        // 특정일에 생산 계획건 지정
        static void ProductionPlan(productinfo[] p)
        {

        }
        // 특정 생산건을 선택하여 생산완료된것을 지정
        static void CompleteProcess(productinfo[] p)
        {
        
        }
        //생산 계획량 완료량 진척률을 계산해서 보여준다
        static void ProductionSummary(productinfo[] p, int type)
        {
        
        }
        static void Main(string[] args)
        {

        }
    }
}

<구조체>

 struct productinfo
 {
     public string item; // 생산품목
     public string workcenter; // 작업장
     public int qty; // 생산수량
     public bool complete; // 생산 완료 여부
 }

<Main>

        static void Main(string[] args)
        {
            productinfo[] data = new productinfo[31];
            while (true)
            {
                Console.WriteLine("# 1 = 생산 계획 입력 2 = 생산 완료 입력 3 = 품목별 생산 실적 분석 4 = 작업장별 생산 실적 분석 0 = 프로그램 종료 #");
                Console.Write("원하는 작업을 입력하세요");
                int command = int.Parse(Console.ReadLine());
                if (command == 0)
                {
                    break;
                }
                switch (command)
                {
                    case 1:
                        ProductionPlan(data);
                        Console.WriteLine();
                        break;
                    case 2:
                        CompleteProcess(data);
                        Console.WriteLine();
                        break;
                    case 3:
                        ProductionSummary(data, command); // 3번일 경우 품목별 정리
                        Console.WriteLine();
                        break;
                    case 4:
                        ProductionSummary(data, command); // 4번일 경우 작업장별 정리
                        Console.WriteLine();
                        break;
                }
            }
        }
    }
}

<ProductionPlan>

 // 특정일에 생산 계획건 지정
static void ProductionPlan(productinfo[] p)
{
    Console.WriteLine("날짜를 입력하세요(1~31)");
    int day = int.Parse(Console.ReadLine());
    if (0 < day && day < 32)
    {
        Console.Write("생산 품목을 입력하세요");
        p[day - 1].item = Console.ReadLine();
        Console.Write("작업장을 입력하세요");
        p[day - 1].workcenter = Console.ReadLine();
        Console.Write("생산량을 입력하세요");
        p[day - 1].qty = int.Parse(Console.ReadLine());
        p[day - 1].complete = false;
    }
    else
    {
        Console.WriteLine("잘못된 날짜 입력입니다");
    }
}

<CompleteProcess>

// 특정 생산건을 선택하여 생산완료된것을 지정
static void CompleteProcess(productinfo[] p)
{
    Console.Write("생산 계획이 입력된 날짜는");
    for (int i = 0; i < 31; i++)
    {
        if (p[i].qty > 0 && p[i].complete == false)
        {
            Console.Write("{0},", i + 1);
        }
    }
    Console.WriteLine("입니다");
    Console.Write("생산 완료된 생산 계획건 날짜를 입력해 주세요");
    int day = int.Parse(Console.ReadLine());
    if (0 < day && day < 32)
    {
        p[day - 1].complete = true;
    }
    else
    {
        Console.WriteLine("잘못된 날짜입력입니다");
    }
}

생산 완료를 저장하는 CompleteProcess() 메소드 에서는 현재 계획건 날짜를 모두 보여주고 입력한 날짜의 생산 계획 데이터의 complete 변수를 true로 만들어 준다

<ProductionSummary>

static void ProductionSummary(productinfo[] p, int type)
{
    Hashtable plan = new Hashtable(); // 항목별 계획량을 저장
    for (int i = 0; i < 31; i++)
    {
        string key;
        if (type == 3)
        {
            key = p[i].item; // type 가 3인 경우 품목별 정리
        }
        else
        {
            key = p[i].workcenter;
        }
        if (key == null)
        {
            continue;
        }
        else if (plan.ContainsKey(key))
        {
            plan[key] = (int)plan[key] + p[i].qty; // 기존값에 합산
        }
        else
        {
            plan.Add(key, p[i].qty); // 수량 등록
        }
    }
    Hashtable complete = new Hashtable(); // 항목별 완료량 저장
    for (int i = 0; i < 31; i++)
    {
        string key;
        if (type == 3)
        {
            key = p[i].item;
        }
        else
        {
            key = p[i].workcenter;
        }
        if (key == null)
        {
            continue;
        }
        else if (p[i].complete == false)
        {
            continue;
        }
        else if (complete.ContainsKey(key))
        {
            complete[key] = (int)complete[key] + p[i].qty; // 기존값에 합산
        }
        else
        {
            complete.Add(key, p[i].qty); // 수량등록
        }
    }
    foreach (DictionaryEntry cs in plan)
    {
        string name = (string)cs.Key;
        int planQty = (int)cs.Value; // 계획량 가져오기
        int completeQty = 0;
        if (complete.ContainsKey(name))
        {
            completeQty = (int)complete[name]; // 완료량이 있으면 가져오기
        }
        double rate = completeQty * 100.0 / planQty; // 진척률 계산 하기
        if (type == 3)
        {
            Console.WriteLine("{0} 품목 생산 계획량 = {1}, 완료량 ={2}, 진척률 = {3,2:F}%", name, planQty, completeQty, rate);
        }
        else
        {
            Console.WriteLine("{0} 작업장 생산 계획량 = {1}, 완료량 ={2}, 진척률 = {3,2:F}%", name, planQty, completeQty, rate);
        }
    }
}

<전체 코드>

using System;
using System.Collections;

namespace Production_ex
{
    // 생산 관련 데이터 저장
    struct productinfo
    {
        public string item; // 생산품목
        public string workcenter; // 작업장
        public int qty; // 생산수량
        public bool complete; // 생산 완료 여부
    }
    class Program
    {
        // 특정일에 생산 계획건 지정
        static void ProductionPlan(productinfo[] p)
        {
            Console.WriteLine("날짜를 입력하세요(1~31)");
            int day = int.Parse(Console.ReadLine());
            if (0 < day && day < 32)
            {
                Console.Write("생산 품목을 입력하세요");
                p[day - 1].item = Console.ReadLine();
                Console.Write("작업장을 입력하세요");
                p[day - 1].workcenter = Console.ReadLine();
                Console.Write("생산량을 입력하세요");
                p[day - 1].qty = int.Parse(Console.ReadLine());
                p[day - 1].complete = false;
            }
            else
            {
                Console.WriteLine("잘못된 날짜 입력입니다");
            }
        }
        // 특정 생산건을 선택하여 생산완료된것을 지정
        static void CompleteProcess(productinfo[] p)
        {
            Console.Write("생산 계획이 입력된 날짜는");
            for (int i = 0; i < 31; i++)
            {
                if (p[i].qty > 0 && p[i].complete == false)
                {
                    Console.Write("{0},", i + 1);
                }
            }
            Console.WriteLine("입니다");
            Console.Write("생산 완료된 생산 계획건 날짜를 입력해 주세요");
            int day = int.Parse(Console.ReadLine());
            if (0 < day && day < 32)
            {
                p[day - 1].complete = true;
            }
            else
            {
                Console.WriteLine("잘못된 날짜입력입니다");
            }
        }
        //생산 계획량 완료량 진척률을 계산해서 보여준다
        static void ProductionSummary(productinfo[] p, int type)
        {
            Hashtable plan = new Hashtable(); // 항목별 계획량을 저장
            for (int i = 0; i < 31; i++)
            {
                string key;
                if (type == 3)
                {
                    key = p[i].item; // type 가 3인 경우 품목별 정리
                }
                else
                {
                    key = p[i].workcenter;
                }
                if (key == null)
                {
                    continue;
                }
                else if (plan.ContainsKey(key))
                {
                    plan[key] = (int)plan[key] + p[i].qty; // 기존값에 합산
                }
                else
                {
                    plan.Add(key, p[i].qty); // 수량 등록
                }
            }
            Hashtable complete = new Hashtable(); // 항목별 완료량 저장
            for (int i = 0; i < 31; i++)
            {
                string key;
                if (type == 3)
                {
                    key = p[i].item;
                }
                else
                {
                    key = p[i].workcenter;
                }
                if (key == null)
                {
                    continue;
                }
                else if (p[i].complete == false)
                {
                    continue;
                }
                else if (complete.ContainsKey(key))
                {
                    complete[key] = (int)complete[key] + p[i].qty; // 기존값에 합산
                }
                else
                {
                    complete.Add(key, p[i].qty); // 수량등록
                }
            }
            foreach (DictionaryEntry cs in plan)
            {
                string name = (string)cs.Key;
                int planQty = (int)cs.Value; // 계획량 가져오기
                int completeQty = 0;
                if (complete.ContainsKey(name))
                {
                    completeQty = (int)complete[name]; // 완료량이 있으면 가져오기
                }
                double rate = completeQty * 100.0 / planQty; // 진척률 계산 하기
                if (type == 3)
                {
                    Console.WriteLine("{0} 품목 생산 계획량 = {1}, 완료량 ={2}, 진척률 = {3,2:F}%", name, planQty, completeQty, rate);
                }
                else
                {
                    Console.WriteLine("{0} 작업장 생산 계획량 = {1}, 완료량 ={2}, 진척률 = {3,2:F}%", name, planQty, completeQty, rate);
                }
            }
        }
        static void Main(string[] args)
        {
            productinfo[] data = new productinfo[31];
            while (true)
            {
                Console.WriteLine("# 1 = 생산 계획 입력 2 = 생산 완료 입력 3 = 품목별 생산 실적 분석 4 = 작업장별 생산 실적 분석 0 = 프로그램 종료 #");
                Console.Write("원하는 작업을 입력하세요");
                int command = int.Parse(Console.ReadLine());
                if (command == 0)
                {
                    break;
                }
                switch (command)
                {
                    case 1:
                        ProductionPlan(data);
                        Console.WriteLine();
                        break;
                    case 2:
                        CompleteProcess(data);
                        Console.WriteLine();
                        break;
                    case 3:
                        ProductionSummary(data, command); // 3번일 경우 품목별 정리
                        Console.WriteLine();
                        break;
                    case 4:
                        ProductionSummary(data, command); // 4번일 경우 작업장별 정리
                        Console.WriteLine();
                        break;
                }
            }
        }
    }
}

 

<실행 화면>

728x90
반응형

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

구매 관리 프로그램 예제  (1) 2024.11.05
영업 관리 프로그램 예제  (0) 2024.11.05
DNS (Dns 클래스)  (0) 2024.10.11
시리얼 통신(Serial Port)  (0) 2024.10.10
SpringLegacy Project -2-  (0) 2024.02.07