반응형
[C# 실습] 반도체 장비 관리 프로그램 - 1. 단일체 패턴 표현
[C# 실습] 반도체 장비 관리 프로그램 - 2. 프로토 타이핑
Equipment.cs
using System;
namespace 반도체_월드
{
internal class Equipment
{
string name;//장비명
readonly int seqno;//일련번호
int mcnt;//재료개수
int mpcnt;//생산개수
int pcnt;//테스트 완료 제품 개수
int scnt;//판매 개수
static int last_seqno;//가장 최근에 부여한 일련번호
internal int SeqNo
{
get
{
return seqno;
}
}
internal int MCnt
{
get
{
return mcnt;
}
}
internal int MPCnt
{
get
{
return mpcnt;
}
}
internal int PCnt
{
get
{
return pcnt;
}
}
internal int SCnt
{
get
{
return scnt;
}
}
internal Equipment(string name)
{
this.name = name;
last_seqno++;
seqno = last_seqno;
}
public override string ToString()
{
return string.Format("{0}:{1}", seqno, name);
}
internal void Buy(int mcnt)
{
this.mcnt += mcnt;
}
internal int Making(int mpcnt)
{
if (mpcnt > mcnt)
{
mpcnt = mcnt;
}
this.mpcnt += mpcnt;
mcnt -= mpcnt;
return mpcnt;
}
internal int Testing(int pcnt)
{
if (pcnt > mpcnt)
{
pcnt = mpcnt;
}
this.pcnt += pcnt;
mpcnt -= pcnt;
return pcnt;
}
internal int Sale(int scnt)
{
if (scnt > pcnt)
{
scnt = pcnt;
}
this.scnt += scnt;
pcnt -= scnt;
return scnt;
}
}
}
EWorld.cs
using System;
using System.Collections.Generic;
namespace 반도체_월드
{
class EWorld
{
#region 단일체 패턴
//1. 생성자의 보호 수준을 private로 지정
//멤버의 디폴트 가시성은 private
EWorld()
{
Console.WriteLine("EWorld 생성자");
}
//2. 정적 멤버로 단일체를 참조할 변수 선언
static EWorld eworld = null;
//3.정적 생성자에서 단일체 생성
static EWorld()
{
Console.WriteLine("정적 EWorld 생성자");
eworld = new EWorld();
}
//4.다른 곳에서 단일체에 접근할 수 있게 속성 제공
static internal EWorld EW
{
get
{
return eworld;
}
}
#endregion
Dictionary<int, Equipment> edic = new Dictionary<int, Equipment>();
internal void Run()
{
ConsoleKey key = ConsoleKey.NoName;
while((key = SelectMenu())!=ConsoleKey.Escape)
{
switch(key)
{
case ConsoleKey.F1: Making(); break;
case ConsoleKey.F2: Control(); break;
case ConsoleKey.F3: ViewAll(); break;
default: Console.WriteLine("잘못 선택하였습니다."); break;
}
Console.WriteLine("아무 키나 누르세요.");
Console.ReadKey(true);
}
}
private void ViewAll()
{
Console.WriteLine(" F3: 전체 보기");
foreach(Equipment equipment in edic.Values)
{
Console.WriteLine("=== {0}",equipment);
//Console.WriteLine(" 재료 개수:{0}", equipment.MCnt);
//Console.WriteLine(" 생산 개수:{0}", equipment.MPCnt);
//Console.WriteLine(" 제품 개수:{0}", equipment.PCnt);
//Console.WriteLine(" 판매 개수:{0}", equipment.SCnt);
}
}
private void Control()
{
Console.Clear();
Console.WriteLine(" F2: 장비 제어");
ViewAll();
int seqno = 0;
Console.Write("장비 일련 번호:");
int.TryParse(Console.ReadLine(), out seqno);
if(edic.ContainsKey(seqno)==false)
{
Console.WriteLine("존재하지 않는 일련 번호입니다.");
return;
}
Equipment equipment = null;
equipment = edic[seqno];
ConsoleKey key = ConsoleKey.Escape;
while((key = SelectControlMenu())!=ConsoleKey.Escape)
{
switch(key)
{
case ConsoleKey.F1: BuyMeterial(equipment); break;
case ConsoleKey.F2: MakingSemiconductor(equipment);break;
case ConsoleKey.F3: TestSemiconductor(equipment); break;
case ConsoleKey.F4: SaleSemiconductor(equipment); break;
case ConsoleKey.F5: ViewStates(equipment); break;
default: Console.WriteLine("잘못 선택하였습니다."); break;
}
Console.WriteLine("아무 키나 누르세요.");
Console.ReadKey(true);
}
}
private void ViewStates(Equipment equipment)
{
Console.WriteLine("F5:현황확인");
Console.WriteLine("=== {0}", equipment);
Console.WriteLine(" 재료 개수:{0}", equipment.MCnt);
Console.WriteLine(" 생산 개수:{0}", equipment.MPCnt);
Console.WriteLine(" 제품 개수:{0}", equipment.PCnt);
Console.WriteLine(" 판매 개수:{0}", equipment.SCnt);
}
private void SaleSemiconductor(Equipment equipment)
{
Console.WriteLine("F4:반도체판매");
if (equipment.PCnt == 0)
{
Console.WriteLine("판매할 반도체가 없습니다.");
return;
}
int scnt = 0;
Console.Write("판매할 수량(1~{0}):", equipment.PCnt);
int.TryParse(Console.ReadLine(), out scnt);
scnt = equipment.Sale(scnt);
Console.WriteLine("{0}개 판매하였습니다.",scnt);
}
private void TestSemiconductor(Equipment equipment)
{
Console.WriteLine("F3:반도체테스트");
if (equipment.MPCnt == 0)
{
Console.WriteLine("테스트할 반도체가 없습니다.");
return;
}
int pcnt = 0;
Console.Write("테스트할 수량(1~{0}):", equipment.MPCnt);
int.TryParse(Console.ReadLine(), out pcnt);
pcnt = equipment.Testing(pcnt);
Console.WriteLine("{0}개 테스트 하였습니다.",pcnt);
}
private void MakingSemiconductor(Equipment equipment)
{
Console.WriteLine("F2:반도체생산");
if(equipment.MCnt==0)
{
Console.WriteLine("생산할 재료가 없습니다.");
return;
}
int pmcnt = 0;
Console.Write("생산할 수량(1~{0}):",equipment.MCnt);
int.TryParse(Console.ReadLine(), out pmcnt);
pmcnt = equipment.Making(pmcnt);
Console.WriteLine("{0}개를 생산하였습니다.",pmcnt);
}
private void BuyMeterial(Equipment equipment)
{
Console.WriteLine("F1: 재료구입");
int mcnt = 0;
Console.Write("구입할 수량:");
int.TryParse(Console.ReadLine(), out mcnt);
equipment.Buy(mcnt);
//equipment.MCnt += mcnt; MCnt 속성에 set블럭을 정의했을 때
}
private ConsoleKey SelectControlMenu()
{
Console.Clear();
Console.WriteLine("=== 반도체 장비 제어 메뉴 ===");
Console.WriteLine("F1: 재료구입");
Console.WriteLine("F2:반도체생산");
Console.WriteLine("F3:반도체테스트");
Console.WriteLine("F4:반도체판매");
Console.WriteLine("F5:현황확인");
Console.WriteLine("메뉴를 선택 (ESC:메인 메뉴로)☞");
return Console.ReadKey(true).Key;
}
private void Making()
{
Console.WriteLine(" F1: 장비 생산");
string name;
Console.Write("장비 이름:");
name = Console.ReadLine();
Equipment equipment = new Equipment(name);
int seqno = equipment.SeqNo;
edic[seqno] = equipment;
}
private ConsoleKey SelectMenu()
{
Console.Clear();
Console.WriteLine("=== 반도체 월드 메인 메뉴 ===");
Console.WriteLine(" F1: 장비 생산");
Console.WriteLine(" F2: 장비 제어");
Console.WriteLine(" F3: 전체 보기");
Console.WriteLine("메뉴를 선택 ☞");
return Console.ReadKey(true).Key;
}
}
}
Program.cs
namespace 반도체_월드
{
class Program
{
static void Main(string[] args)
{
EWorld ew = EWorld.EW;
ew.Run();
}
}
}
반응형
'언어 자료구조 알고리즘 > 프로그래밍 실습' 카테고리의 다른 글
[C# 실습] 레코드 코팅 - 기계 구현(Windows Forms) (0) | 2020.10.07 |
---|---|
[C# 실습, 사용자 정의 컨트롤 제작 예광탄] 레코드 코팅 (0) | 2020.10.06 |
[C# 실습] 레코드 코팅 - 더블 버퍼링 가능한 Panel 정의하기 (0) | 2020.10.06 |
[C# 실습, 예광탄 소스] 레코드 코팅 (0) | 2020.10.06 |
[C# 실습 시나리오] 레코드 코팅 - 반도체 장비 및 제어시스템 개발자 양성 과정 (0) | 2020.10.06 |
[C# 실습] 반도체 장비 관리 프로그램 - 2. 프로토 타이핑 (0) | 2020.09.21 |
[C# 실습] 반도체 장비 관리 프로그램 - 1. 단일체 패턴 표현 (0) | 2020.09.21 |
[C# 실습] 반도체 장비 관리 프로그램 (0) | 2020.09.21 |
[C#] 컬렉션(Dictionary) 실습 - 도서 관리 프로그램 (0) | 2019.08.10 |
[C#] 상속과 다형성, 인터페이스 실습 - 도형 (0) | 2019.08.10 |