본문 바로가기
개발일지

구매 관리 프로그램 예제

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

월간 구매 계획 및 입고량을 관리할수있는 프로그램을 작성해보자 저장할 데이터는 구매처,구매품목,구매량,입고여부이다 분석에서는 한달동안 품목별 구매 계획량과 입고량을 볼수 있도록 한다 프로그램 전체 구조는 다음과 같다

 

<프로그램 전체 구조>

namespace buyinfo_ex
{
    struct buy
    {
    
    }
    class Program
    {
        
        // 일별 구매계획 등록
        static void BuySlip(buy[] s) 
        {
        
        }
        // 특정 구매건에 대해 입고되었음을 저장
        static void CompleteProcess(buy[] s) 
        { 
        
        }
        //품목별로 구매계획과 입고량을 화면에 출력
        static void ItemBuySummary(buy[] s)
        {
        
        }
        static void Main(string[] args)
        {
            
        }
    }
}

 

<구매정보>

struct buy
{
    public string company; // 구매처
    public string item; // 구매품목
    public int qty; // 구매량
    public bool complete; // 입고 여부
}

complete 을 입고여부를 저장하는 bool 타입 이며 처음에 false 로 저장되었다가 차후 구매품이 입고되면 true로 변경된다

 

<Main 메소드>

        static void Main(string[] args)
        {
            buy[] buydata = new buy[31];
            while (true)
            {
                Console.WriteLine("#1=구매계획입력, 2=입고입력, 3=품목별구매분석, 0=프로그램종료#)");
                Console.Write("원하는 작업을 입력하세요");
                int command = int.Parse(Console.ReadLine());
                if (command == 0)
                {
                    break;
                }
                switch (command)
                {
                    case 1:
                        {
                            BuySlip(buydata); // 1번 선택시 구매 계획
                            Console.WriteLine();
                            break;
                        }
                    case 2:
                        {
                            CompleteProcess(buydata); // 2번 선택시 입고업무 진행
                            Console.WriteLine();
                            break;
                        }
                    case 3:
                        {
                            ItemBuySummary(buydata); // 3번 선택시 걔획과 입고량 정리
                            Console.WriteLine();
                            break;
                        }
                }
            }
                
        }
    }
}

한달 동안 일별 구매 계획은 buydata에 배열로 저장된다

 

<일별 구매 계획 등록 로직>

 static void BuySlip(buy[] s) 
 {
     Console.Write("날짜를 입력하세요 (1~31");
     int day = int.Parse(Console.ReadLine());
     if (0 < day && day < 32)
     {
         Console.Write("구매처를 입력하세요");
         s[day - 1].company = Console.ReadLine();
         Console.Write("구매 품목을 입력하세요");
         s[day - 1].item = Console.ReadLine();
         Console.Write("구매량을 입력하세요");
         s[day - 1].qty = int.Parse(Console.ReadLine());
         s[day - 1].complete = false;
     }
     else
     {
         Console.WriteLine("잘못된 날짜 입력입니다");
     }
 }

등록된 구매 계획건이 실제 입고된경우 CompleteProcess 에서 처리한다 입고 계획이 있는 날짜를 출력해주고 사용자가 특정 날짜를 입력하면 해당 날짜의 입고 계획 데이터의 입고 여부를 true로 바꿔준다.

 

<CompleteProcess>

// 특정 구매건에 대해 입고되었음을 저장
static void CompleteProcess(buy[] s) 
{
    Console.Write("구매계획이 입력된 날짜는");
    for (int i = 0; i < 31; i++)
    {
        if (s[i].qty > 0 && s[i].complete == false)
        {
            Console.Write("{0},", i + 1); // 아직 입고되지않은 계획건의 날짜를 출력
        }
        Console.WriteLine("입니다");
        Console.WriteLine("입고된 구매건에 대한 입고 여부를 입력하세요 (0~31)");
        int day = int.Parse(Console.ReadLine());
        if (0 < day && day < 32)
        {
            s[day - 1].complete = true; // 입고건 여부를 true로 설정
        }
        else
        {
            Console.WriteLine("잘못된 입력입니다");
        }
    }
        
}

 

<ItemBuySummary>

 //품목별로 구매계획과 입고량을 화면에 출력
 static void ItemBuySummary(buy[] s)
 {
     Hashtable itemPlan = new Hashtable(); // 품목별 구매 계획량을 저장한다
     for (int i = 0; i < 31; i++)
     {
         string key = s[i].item;
         if (key == null)
         {
             continue;
         }
         else if (itemPlan.ContainsKey(key))
         { // 품목이 있으면 기존수량에 추가
             int newQty = (int)itemPlan[key] + s[i].qty;
             itemPlan[key] = newQty;
         }
         else
         {
             itemPlan.Add(s[i].item, s[i].qty); // 품목이 없으면 구매 계획 수량에 등록
         }
     }
     Hashtable  itemComplete = new Hashtable();
     for (int i = 0; i < 31; i++)
     {
         string key = s[i].item;
         if (key == null)
         {
             continue;
         }
         else if (s[i].complete == false)
         {
             continue;
         }
         else if (itemComplete.ContainsKey(key)) // 품목의 입고량이 있으면 수량 추가
         {
             int newQty = (int)itemComplete[key] + s[i].qty;
             itemComplete[key] = newQty;
         }
         else
         {
             itemComplete.Add(s[i].item, s[i].qty); // 품목이 없으면 품목 입고량 등록
         }
     }
     foreach (DictionaryEntry cs in itemPlan) // 품목별 구매 계획량을 꺼내서 반복
     {
         string item = (string)cs.Key; // cs의 key 값을 품목 이름으로 가져옴
         int planQty = (int)cs.Value; // cs의 value를 품목 구매 계획량으로 가져옴
         int completeQty = 0; // 입고량은 0으로 초기화
         if (itemComplete.ContainsKey(item))
         {
             completeQty = (int)itemComplete[item]; // 입고량이 있으면 변경
         }
         Console.WriteLine("{0} 품목 구매 계획량 = {1}, 입고량 = {2}", item,planQty, completeQty); // 품목별 입고량을 출력한다
     }
 }

 

<실행 화면>

 

<전체 코드>

using System.Collections;

namespace buyinfo_ex
{
    struct buy
    {
        public string company; // 구매처
        public string item; // 구매품목
        public int qty; // 구매량
        public bool complete; // 입고 여부
    }
    class Program
    {
        // 일별 구매계획 등록
        static void BuySlip(buy[] s) 
        {
            Console.Write("날짜를 입력하세요 (1~31)");
            int day = int.Parse(Console.ReadLine());
            if (0 < day && day < 32)
            {
                Console.Write("구매처를 입력하세요");
                s[day - 1].company = Console.ReadLine();
                Console.Write("구매 품목을 입력하세요");
                s[day - 1].item = Console.ReadLine();
                Console.Write("구매량을 입력하세요");
                s[day - 1].qty = int.Parse(Console.ReadLine());
                s[day - 1].complete = false;
            }
            else
            {
                Console.WriteLine("잘못된 날짜 입력입니다");
            }
        }
        // 특정 구매건에 대해 입고되었음을 저장
        static void CompleteProcess(buy[] s) 
        {
            Console.Write("구매계획이 입력된 날짜는");
            for (int i = 0; i < 31; i++)
            {
                if (s[i].qty > 0 && s[i].complete == false)
                {
                    Console.Write("{0},", i + 1); // 아직 입고되지않은 계획건의 날짜를 출력
                }
                Console.WriteLine("입니다");
                Console.WriteLine("입고된 구매건에 대한 입고 여부를 입력하세요 (0~31)");
                int day = int.Parse(Console.ReadLine());
                if (0 < day && day < 32)
                {
                    s[day - 1].complete = true; // 입고건 여부를 true로 설정
                }
                else
                {
                    Console.WriteLine("잘못된 입력입니다");
                }
            }
                
        }
        //품목별로 구매계획과 입고량을 화면에 출력
        static void ItemBuySummary(buy[] s)
        {
            Hashtable itemPlan = new Hashtable(); // 품목별 구매 계획량을 저장한다
            for (int i = 0; i < 31; i++)
            {
                string key = s[i].item;
                if (key == null)
                {
                    continue;
                }
                else if (itemPlan.ContainsKey(key))
                { // 품목이 있으면 기존수량에 추가
                    int newQty = (int)itemPlan[key] + s[i].qty;
                    itemPlan[key] = newQty;
                }
                else
                {
                    itemPlan.Add(s[i].item, s[i].qty); // 품목이 없으면 구매 계획 수량에 등록
                }
            }
            Hashtable  itemComplete = new Hashtable();
            for (int i = 0; i < 31; i++)
            {
                string key = s[i].item;
                if (key == null)
                {
                    continue;
                }
                else if (s[i].complete == false)
                {
                    continue;
                }
                else if (itemComplete.ContainsKey(key)) // 품목의 입고량이 있으면 수량 추가
                {
                    int newQty = (int)itemComplete[key] + s[i].qty;
                    itemComplete[key] = newQty;
                }
                else
                {
                    itemComplete.Add(s[i].item, s[i].qty); // 품목이 없으면 품목 입고량 등록
                }
            }
            foreach (DictionaryEntry cs in itemPlan) // 품목별 구매 계획량을 꺼내서 반복
            {
                string item = (string)cs.Key; // cs의 key 값을 품목 이름으로 가져옴
                int planQty = (int)cs.Value; // cs의 value를 품목 구매 계획량으로 가져옴
                int completeQty = 0; // 입고량은 0으로 초기화
                if (itemComplete.ContainsKey(item))
                {
                    completeQty = (int)itemComplete[item]; // 입고량이 있으면 변경
                }
                Console.WriteLine("{0} 품목 구매 계획량 = {1}, 입고량 = {2}", item,planQty, completeQty); // 품목별 입고량을 출력한다
            }
        }
        static void Main(string[] args)
        {
            buy[] buydata = new buy[31];
            while (true)
            {
                Console.WriteLine("#1=구매계획입력, 2=입고입력, 3=품목별구매분석, 0=프로그램종료#)");
                Console.Write("원하는 작업을 입력하세요");
                int command = int.Parse(Console.ReadLine());
                if (command == 0)
                {
                    break;
                }
                switch (command)
                {
                    case 1:
                        {
                            BuySlip(buydata); // 1번 선택시 구매 계획
                            Console.WriteLine();
                            break;
                        }
                    case 2:
                        {
                            CompleteProcess(buydata); // 2번 선택시 입고업무 진행
                            Console.WriteLine();
                            break;
                        }
                    case 3:
                        {
                            ItemBuySummary(buydata); // 3번 선택시 걔획과 입고량 정리
                            Console.WriteLine();
                            break;
                        }
                }
            }
                
        }
    }
}
728x90
반응형

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

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