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 |