JAVA

[java]class에 모든 기능을 구현해서 출력

라텐느 2024. 8. 22. 22:20
반응형

20240821수업

제품 정보를 입력받고 결과값을 출력하는 코드

인터페이스와 클래스 정의

interface Ipo {
    void input();
    void process();
    void output();	
}

class Product {
    private int num;
    private String pcode;
    private double amount;
    private double price;
    private String pname;
    private double charge;

    // 생성자
    public Product() {}
    public Product(int num, String pcode, double amount, double price) {
        this.num = num;
        this.pcode = pcode;
        this.amount = amount;
        this.price = price;
    }

    // Getter/Setter
    // ... (생략)

    @Override
    public String toString() {
        return "Product [num=" + num + ", pcode=" + pcode + ", amount=" + amount + ", price=" + price + ", pname=" + pname + ", charge=" + charge + "]";
    }
}

제품 처리 클래스

class Productprocess implements Ipo {
    private Product prod;

    @Override
    public void input() {
        Scanner in = new Scanner(System.in);
        System.out.println("입력:번호,제품코드,수량,단가");
        String line = in.nextLine();
        String[] li = line.trim().split(",");
        
        // 입력된 값 parsing
        int num = Integer.parseInt(li[0].trim());
        String pcode = li[1].trim();
        double amount = Double.parseDouble(li[2].trim());
        double price = Double.parseDouble(li[3].trim());

        prod = new Product(); 
        prod.setNum(num);
        prod.setPcode(pcode);
        prod.setAmount(amount);
        prod.setPrice(price);
        System.out.println(prod);
    }

    @Override
    public void process() {
        String pname = "";
        String pcode = prod.getPcode();
        switch (pcode) {
            case "P01": pname = "새우깡"; break;
            case "P02": pname = "빅파이"; break;
            case "P03": pname = "짱구"; break;
            case "P04": pname = "초코파이"; break;
            case "P05": pname = "수박맛초코파이"; break;
        }
        prod.setPname(pname);
        prod.setCharge(prod.getAmount() * prod.getPrice());
    }

    @Override
    public void output() {
        String title = "\n번호,제품명,수량,단가,금액(수량*단가) \n";
        String fmt = title + "%d %s %.2f %.2f %.2f ";
        String msg = String.format(fmt, prod.getNum(), prod.getPname(), prod.getAmount(), prod.getPrice(), prod.getCharge());
        System.out.println(msg);
    }
}

메인 클래스

public class TestProduct {
    public static void main(String[] args) {
        Productprocess pp = new Productprocess();
        pp.input();
        pp.process();
        pp.output();
    }
}

요약

  • 인터페이스 Ipo: 입력, 처리, 출력 메서드를 정의.
  • Product 클래스: 제품 정보를 저장하고 관리.
  • Productprocess 클래스: 제품 정보를 입력받고, 처리하고, 출력하는 로직을 구현.
  • TestProduct 클래스: 프로그램의 진입점으로, 입력, 처리, 출력을 순차적으로 수행.
  • 이러한 구성으로 사용자가 입력한 제품 정보를 처리하고 결과를 출력하는 기능을 제공한다.

사원 정보를 입력받고 출력하기

1. Emp 클래스

속성: 사번, 이름, 입사일, 월급, 부서번호 등의 속성을 포함.
메서드: Getter/Setter 메서드를 통해 속성에 접근 및 수정.

2. Ipo 인터페이스

메서드 정의: input(), process(), output() 메서드를 정의하여 구현 클래스에서 이 메서드들을 반드시 구현하도록 강제.

class EmpProcess implements Ipo {

private Emp emp;

3. EmpProcess 클래스

입력 (input() 메서드):

사용자가 입력한 데이터를 parse하여 Emp 객체에 설정.

@Override

public void input() {

// 키보드로 입력

Scanner in = new Scanner(System.in);

System.out.println("사번,이름,입사일,월급,부서번호");

// line: 300,정연,20091003,250.0,30

String line = in.nextLine(); // nextline은 엔터까지 포함

String[] li = line.trim().split(",");

int empId = Integer.parseInt(li[0].trim()); // li[0]의 앞뒤 공백 삭제

String name = li[1].trim();

String hiredate = li[2].trim();

double sal = Double.parseDouble(li[3].trim());

String deptId = li[4].trim();

emp = new Emp();

emp.setEmpId(empId);

emp.setName(name);

emp.setHiredate(hiredate);

emp.setSal(sal);

emp.setDeptId(deptId);

System.out.println(emp);

}

계산(output()메서드):

현재 연도와 입사 연도를 비교하여 근무 연수를 계산.

보너스, 수령액, 부서명 구하기

@Override

public void process() {

// 금액은 소수이하 두자리로 반올림

// 보너스 = 군무연수에 따라 월급의 0.5% 로 계산한다

// =years*0.005

// bonus, pay, dname;

LocalDate now = LocalDate.now();

int thisyear = now.getYear(); // 2024

String inyear = emp.getHiredate().substring(0, 4);

int hireyear = Integer.parseInt(inyear);

int years = thisyear - hireyear;

double sal = emp.getSal();

double bonus = (double) years + emp.getSal() * 0.005;

emp.setBonus(bonus);

// 수령액 = 월급 + 보너스

double pay = emp.getSal() + bonus;

emp.setPay(pay);

// 부서명 = 10:인사,20:자재,30:총무,40:연구개발,50:생산,60:서비스

// Hash Map<Key,Value> map

// 데이터 저장 map.put(key, value);

// 불러오기 value=map.get(key);

HashMap<Integer, String> map = new HashMap<>();// generic 안에들어가는것은 인트대신 인티저

map.put(10, "인사");

map.put(20, "자재");

map.put(30, "총무");

map.put(40, "연구개발");

map.put(50, "생산");

map.put(60, "서비스");

int deptId = Integer.parseInt(emp.getDeptId());

String dname = map.get(deptId);

emp.setDname(dname);

System.out.println(emp);

}

4. 출력 (output() 메서드)

최종 결과를 포맷하여 출력:

@Override

public void output() {

String title = "\n사번,이름,입사일,월급,보너스,수령액,부서명";

String fmt = title;

fmt = "%d %s %s %.2f %.2f %.2f %s";

String msg = String.format(fmt, emp.getEmpId(), emp.getDname(), emp.getHiredate(), emp.getSal(), emp.getBonus(),

emp.getPay(), emp.getDname());

 

System.out.println(title);

System.out.println(msg);

}

5. main 메서드

public static void main(String[] args) {

EmpProcess ep = new EmpProcess();

// EmpProcess는 뉴를 해줘야 변수로 설정가능 >>class EmpProcess 전체를 갖는다.

ep.input();

ep.process();

ep.output();

}

 

반응형