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 |