본문 바로가기
CLASS/JAVA

#17 / remind3

by eungSe__ 2024. 5. 24.
⚡ abstract

/*
 [응용문제 1] 추상클래스 응용 - ex_ab.java
 해당 프로세서를 실행시 현재 날짜와 시간이 출력되는 코드를 작성하시오.
 단, 해당 날짜와 시간은 abstract에서 return 받아서 출력되도록 합니다.
 결과 : 2024-05-24 09:45:22
 */
public class exam20 {
	public static void main(String[] args) {
		new ex20_box();
	}
}

class ex20_box extends ex_ab{
	public ex20_box() {
		System.out.println(this.ex20_abs("yyyy-MM-dd hh:mm:ss"));
		System.out.println(this.ex20_abs("yyyy-MM-dd"));
	}

	@Override
	protected String ex20_abs(String part) {
		return super.ex20_abs(part);
	}
}

/////////////-- 외부 abstract파일 --/////////////
public abstract class ex_ab {
	//*--  응용1
	private Date day = null;
	protected String ex20_abs(String part) {
		day = new Date(); //new는 안에 : 딱 submit하는 순간의 시간으로 측정
        
		//그때그때 다른 타입으로 출력 가능 - 사용성 good
		SimpleDateFormat sim = new SimpleDateFormat(part);
		return sim.format(day);
	}   
}

 

/*
 [응용문제 2] - t
 String a = ["유재석","신동엽","정상훈","아이유","한지민"];
 Scanner 이용 - 추상클래스
 출력형태 - 유재석 이체금액 : .. 한지민 이체금액 : 
 금액 다 합한값 출력 
 */

public class exam21 {
	public static void main(String[] args) {
		 new exam21_box();
	}
}

class exam21_box extends ex_ab {
	private String member[] = {"유재석","신동엽","정상훈","아이유","한지민","박세은"};
	private int total = 0;	
	public exam21_box() {
		int w=0;
		while(w<member.length) {
			total += super.ex21_abs(member[w]);
			w++;
		}
		
		super.sc.close();
		System.out.println("총 이체 금액 : " + this.total + "원");
	}
	
	@Override
	protected int ex21_abs(String user) {
		return super.ex21_abs(user);
	}	
}

/*--- 외부 파일 ----*/
public abstract class ex_ab {
    private int money = 0;
    Scanner sc = null;
    protected int ex21_abs(String user) {
        try {
            this.sc = new Scanner(System.in);
            System.out.println(user + "의 이체금액 : ");
            money = sc.nextInt();	
        }catch(Exception e) {
            System.out.println("숫자로입력");
            ex21_abs(user);
        }

        return money;
    }
}

 

/*
 [응용문제 3] - t
 상품 추가 프로세서 제작
 "추가할 상품명을 입력하세요 : 선풍기" 입력
 "추가할 상품명을 입력하세요 : 선풍기 날개" 입력
 "추가할 상품명을 입력하세요 : 종료" 입력
 
 결과 : [선풍기 , 선풍기 날개] 
 */
public class exam22 {
	public static void main(String[] args) {
		new exam22_box().product();
	}
}

class exam22_box extends ex_ab {
	public void product() {
		ArrayList<String> result = new ArrayList<String>();
        
		//그때그때 받고싶은 값 변경 가능
		result = ex22_abs("추가할 상품명을 입력하세요 : ");
		System.out.println(result);
	}

	@Override
	protected ArrayList<String> ex22_abs(String qa) {
		// TODO Auto-generated method stub
		return super.ex22_abs(qa);
	}
}

/////////////-- 외부 abstract파일 --/////////////
public abstract class ex_ab {
	ArrayList<String> prdlist = null;
    
	protected ArrayList<String> ex22_abs(String qa) {
		prdlist = new ArrayList<String>(); //입력한 내용 받는 배열
		this.sc = new Scanner(System.in);
		while(true){
			System.out.println(qa);		
			String product = sc.nextLine();
			if(product.equals("종료")) {
				this.sc.close();
				break;
			}else {
				prdlist.add(product);
			}
		}
		return prdlist;
	}
}

 

⚡ interface

package exam;
//menu_interface.java와 연계
/*
 [응용문제 4]
 메뉴 주문하는 프로세서 interface로 제작
 
 메뉴를 선택해주세요 : [1.돈까스 , 2.함박스테이크, 3.냉면, 4.콩국수]
 해당메뉴 외의 숫자 입력시 "메뉴에 없는 코드입니다" 출력 후 프로세서 강제 종료 system.exit(0);
 
 1 선택 : 
 [결과]
 메뉴설명 출력
 돈까스     - 9000원, 약간매운맛, 우동
 함박스테이크 - 14500, 담백한맛, 야채튀김
 냉면 - 10000원, 새콤달콤한맛
 콩국수 - 4800원, 달콤한맛, 서리태콩국수  
 
 */

import java.util.Scanner;

public class exam24 {
	public static void main(String[] args) {
		menuinter resultbox = new menuinter();
		inter_name in = new inter_name();
		inter_int ii = new inter_int();
		resultbox.menuinter_box(in,ii);
	}
}

//-- 실제 class
class menuinter { 
	Scanner sc = null;
	String menulist[] = {"돈까스","함박스테이크","냉면","콩국수"};
	String menuint[] = {"9000원, 약간매운맛, 우동","14500, 담백한맛, 야채튀김","10000원, 새콤달콤한맛","4800원, 달콤한맛, 서리태콩국수"};
	
	public void menuinter_box(menu_interface mi_n,menu_interface mi_i) {
		String allmenulist = this.menuQa(); //하단 메뉴판 출력 class에서 가져온 메뉴판
	
		this.sc = new Scanner(System.in);
		System.out.println("메뉴를 선택해 주세요 : " + allmenulist); //메뉴판 출력
		int mynum = this.sc.nextInt();
		
		if(mynum <= menulist.length && mynum > 0) {
			System.out.println(mi_n.getmenu(mynum-1) + "를 고르셧군요 ^___^");
			System.out.println(mi_n.getmenu(mynum-1) +" : "+mi_i.getmenu(mynum-1)+"입니다");
			
			sc.close();
		}else {
			System.out.println("메뉴에 없는 코드입니다.");
			System.exit(0);
		}	
	}
	
	public String menuQa() { //메뉴판 출력
		String allmenu = "";
		int f;
		for(f=0; f<menulist.length; f++) {
			allmenu += (f+1)+ "." + menulist[f] + " ";
		}
		
		return allmenu;
	}
}


//-----implements
class inter_name implements menu_interface {
	menuinter i_mi = new menuinter();
	
	@Override
	public String getmenu(int a) {
		String choice_name = this.i_mi.menulist[a]; 
		
		return choice_name;
	}
	
}

class inter_int implements menu_interface {
	menuinter i_mi = new menuinter();

	@Override
	public String getmenu(int a) {
		String choice_int = this.i_mi.menuint[a];
		
		return choice_int;
	}
	
}


//interface 외부파일

package exam;
//메뉴에 맞는 interface
public interface menu_interface {
	public String getmenu(int a);
}


interface 정통 방식 참고 : https://dev-eunse.tistory.com/97

 

⚡ IO,Network
/*
 [응용문제]
 "이동할 URL을 입력하세요 : "
 사용자가 도메인 명을 입력합니다 ex) http://www.naver.com
 해당 입력된 모든 내용은 url.txt로 저장되도록 합니다.
 이동할 URL을 입력하는 부분은 무한loop, 단 "종료" 라고 입력하면 더이상 질문하지 않습니다.
 
 저장 : d:\\url.txt
 - 로그 기록
 */

public class exam25_t {
	public static void main(String[] args) {
		new ex25t_box().file_write("D:\\", "url.txt");
	}
}

class ex25t_box extends ex_ab {
	@Override
	protected void file_write(String src, String file) {
		super.file_write(src, file);
		System.out.println("입력된 내용이 정상적으로 저장 되었습니다.");
	}	
}


- abstact 파일

//ex25 - url.txt에 입력(파일 쓰기 기능)
private Date times = null;
OutputStream os = null;
String url = ""; //경로
String filename = ""; //파일명
private byte[] allbyte = null;
protected void file_write(String src,String file){
    this.url = src;
    this.filename = file;
    try {
        this.os = new FileOutputStream(this.url+this.filename , true);
        this.sc = new Scanner(System.in);
        while(true) {
            System.out.println("이동할 url을 입력하세요 : ");
            String msg = this.sc.nextLine() + "\n";
            if(msg.equals("종료")) {
                break;
            }
            this.allbyte = msg.getBytes();
            this.os.write(this.allbyte);
            this.os.flush();
        }
    }catch(Exception e) {
        System.out.println("해당 파일을 찾을 수 없습니다");
    }finally {
        this.sc.close();
        try {
            this.os.close();				
        }catch(Exception e) {
            System.out.println("강제 종료 실패");
        }
    }
}



sc에서 nextByte는 키보드 특정 key를 막거나 할때 주로 사용(배열x 글자 하나만 받음 - char랑 비슷)

 

'CLASS > JAVA' 카테고리의 다른 글

#18-2 / Thread를 이용한 멀티 서버  (0) 2024.05.27
#18-1 / 서버 - UDP  (0) 2024.05.27
#16-2 / 서버 - TCP  (0) 2024.05.23
#16-1 / network 🔥  (0) 2024.05.23
#15-3 / csv 데이터 저장  (0) 2024.05.22