728x90
반응형
영업관련 업무 진행과 분석용 기능을 수행하도록 하는 명령어 기반 프로그램을 작성해본다 업무진행은 매출전표를 입력을 사용하고 분석기능은 고객별 월 매출 및 상품별 월매출을 정리하여 화면에 보여주도록 한다
using System;
using System.Collections;
namespace Saleinfo_ex
{
// 구조체
struct saleinfo
{
}
class Program
{
//매출 등록 코드
static void SaleSlip(saleinfo[] s)
{
}
//고객별 매출액 정리
static void CustomerSummary(saleinfo[] s)
{
}
//품목별 매출액 정리
static void ItemSummary(saleinfo[] s)
{
}
static void Main(string[] args)
{
}
}
}
전반적인 구조이다
//구조체
struct saleinfo
{
public string cid; // 고객번호
public int qty; // 판매수량
public int amount; // 판매금액
}
매출 데이터의 저장의 구조체이다
static void Main(string[] args)
{
saleinfo[] saledata = new saleinfo[31];
while (true)
{
Console.WriteLine("#1= 매출 전표 입력, 2=고객별 월 매출, 3=상품별 월 매출, 0=프로그램 종료#");
Console.Write("원하는 작업을 입력 하세요");
int command = int.Parse(Console.ReadLine());//키보드 입력 받기
if (command == 0) break; //입력값이 0이면 종료
switch (command)
{
case 1:
SaleSlip(saledata); // 입력값이 1이면 매출 입력
break;
case 2:
CustomerSummary(saledata); // 입력값이 2 이면 고객별 매출 정리
break;
case 3:
ItemSummary(saledata); // 입력값이 3이면 품목별 매출 정리
break;
}
}
}
Main() 메소드의 기본 설계이다 한달치 매출 데이터는 배열제 저장되고 반복문과 키보드 입력을 통해 원하는 메뉴선택을 하도록 한다
static void SaleSlip(saleinfo[] s)
{
Console.Write("날짜를 입력하세요(1~31)"); // 안내 메세지 출력
int day = int.Parse(Console.ReadLine()); // 날짜 입력 받음
if (0 < day && day < 32)
{ // 날짜 에러 체크
Console.Write("고객명을 입력 하세요");
s[day - 1].cid = Console.ReadLine();
Console.Write("상품명을 입력 하세요");
s[day - 1].pid = Console.ReadLine();
Console.Write("수량을입력 하세요");
s[day - 1].qty = int.Parse(Console.ReadLine());
Console.Write("금액을 입력 하세요");
s[day - 1].amount = int.Parse(Console.ReadLine());
}
else
{
Console.WriteLine("잘못된 날짜 입력입니다");
}
}
매출 전표입력을위한 메소드 구현 입력 받은 데이터는 (day-1) 번째 s 배열에 각 변수에 저장된다
//고객별 매출액 정리
static void CustomerSummary(saleinfo[] s)
{
Hashtable summarytable = new Hashtable();
for (int i = 0; i < 31; i++)
{
string key = s[i].cid;
if (key == null)
{
continue;
}
else if (summarytable.ContainsKey(key)) // 고객 이름이 등록되어있으면 기존 매출에 더함
{
summarytable[key] = (int)summarytable[key] + s[i].amount;
}
else // 고객명이 없으면 현제 고객 명을 key로 하고 매출액을 value로 하여 table에 등록
{
summarytable.Add(s[i].cid, s[i].amount);
}
foreach (DictionaryEntry cs in summarytable)
{
Console.WriteLine("{0}:{1}", cs.Key, cs.Value);
}
}
}
summarytable 에 고객별 매출액을 정리하기 위해서 if 문의 로직이 사용되고
고객별 매출액 정리가 끝나면 foreach 문의 코드가 실행되어 매출액을 화면에 출력한다
foreach 문은 집합에서 요소 하나씩 꺼내어 반복문을 수행하는 코드이다 꺼낸 요소는 DictionaryEntry 객체에 저장되어있다
//품목별 매출액 정리
static void ItemSummary(saleinfo[] s)
{
Hashtable itemtable = new Hashtable();
for (int i = 0; i < 31; i++)
{
string key = s[i].cid;
if (key == null)
{
continue;
}
else if (itemtable.ContainsKey(key))
{
itemtable[key] = (int)itemtable[key] + s[i].amount;
}
else
{
itemtable.Add(s[i].cid, s[i].amount);
}
foreach (DictionaryEntry cs in itemtable)
{
Console.WriteLine("{0}:{1}", cs.Key, cs.Value);
}
}
}
품목별 총액을 정리하는 로직이다 고객별 매출액을 정리하는 로직과 동일하다
실행화면
전체코드
using System;
using System.Collections;
using System.Globalization;
namespace Saleinfo_ex
{
//구조체
struct saleinfo
{
public string cid; // 고객번호
public string pid; // 상품 번호
public int qty; // 판매수량
public int amount; // 판매금액
}
class Program
{
//매출 등록 코드
static void SaleSlip(saleinfo[] s)
{
Console.Write("날짜를 입력하세요(1~31)"); // 안내 메세지 출력
int day = int.Parse(Console.ReadLine()); // 날짜 입력 받음
if (0 < day && day < 32)
{ // 날짜 에러 체크
Console.Write("고객명을 입력 하세요");
s[day - 1].cid = Console.ReadLine();
Console.Write("상품명을 입력 하세요");
s[day - 1].pid = Console.ReadLine();
Console.Write("수량을입력 하세요");
s[day - 1].qty = int.Parse(Console.ReadLine());
Console.Write("금액을 입력 하세요");
s[day - 1].amount = int.Parse(Console.ReadLine());
}
else
{
Console.WriteLine("잘못된 날짜 입력입니다");
}
}
//고객별 매출액 정리
static void CustomerSummary(saleinfo[] s)
{
Hashtable summarytable = new Hashtable();
for (int i = 0; i < 31; i++)
{
string key = s[i].cid;
if (key == null)
{
continue;
}
else if (summarytable.ContainsKey(key)) // 고객 이름이 등록되어있으면 기존 매출에 더함
{
summarytable[key] = (int)summarytable[key] + s[i].amount;
}
else // 고객명이 없으면 현제 고객 명을 key로 하고 매출액을 value로 하여 table에 등록
{
summarytable.Add(s[i].cid, s[i].amount);
}
foreach (DictionaryEntry cs in summarytable)
{
Console.WriteLine("{0}:{1}", cs.Key, cs.Value);
}
}
}
//품목별 매출액 정리
static void ItemSummary(saleinfo[] s)
{
Hashtable itemtable = new Hashtable();
for (int i = 0; i < 31; i++)
{
string key = s[i].cid;
if (key == null)
{
continue;
}
else if (itemtable.ContainsKey(key))
{
itemtable[key] = (int)itemtable[key] + s[i].amount;
}
else
{
itemtable.Add(s[i].cid, s[i].amount);
}
foreach (DictionaryEntry cs in itemtable)
{
Console.WriteLine("{0}:{1}", cs.Key, cs.Value);
}
}
}
static void Main(string[] args)
{
saleinfo[] saledata = new saleinfo[31];
while (true)
{
Console.WriteLine("#1= 매출 전표 입력, 2=고객별 월 매출, 3=상품별 월 매출, 0=프로그램 종료#");
Console.Write("원하는 작업을 입력 하세요");
int command = int.Parse(Console.ReadLine());//키보드 입력 받기
if (command == 0) break; //입력값이 0이면 종료
switch (command)
{
case 1:
SaleSlip(saledata); // 입력값이 1이면 매출 입력
break;
case 2:
CustomerSummary(saledata); // 입력값이 2 이면 고객별 매출 정리
break;
case 3:
ItemSummary(saledata); // 입력값이 3이면 품목별 매출 정리
break;
}
}
}
}
}
728x90
반응형
'개발일지' 카테고리의 다른 글
생산 관리 프로그램 예제 (0) | 2024.11.07 |
---|---|
구매 관리 프로그램 예제 (1) | 2024.11.05 |
DNS (Dns 클래스) (0) | 2024.10.11 |
시리얼 통신(Serial Port) (0) | 2024.10.10 |
SpringLegacy Project -2- (0) | 2024.02.07 |