[java]class에 모든 기능을 구현해서 출력
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();
}