웹_프론트_백엔드/단과

[단과_JAVA] 2020.02.07

shine94 2020. 2. 10. 11:06

1. 다형성(Polymorphism) 
1) 오버로딩(Overloading) 
 : 매개변수의 타입 혹은 갯수가 다르면 메소드의 이름은 중복선언이 가능하다.

 


2. 오늘 실습 코드
1) OverLoadingTest

package day18;

public class OverLoadingTest {
	void method() {
		System.out.println("매개변수 없음");
	}
	void method(int data) {
		System.out.println("정수값 한 개 받음");
	}
	void method(int data1, int data2) {
		System.out.println("정수값 두 개 받음");
	}
	void method(double data) {
		System.out.println("실수값 한 개 받음");
	}
	
	public static void main(String[] args) {
		OverLoadingTest o = new OverLoadingTest();
		
		o.method();
		o.method(10);
		o.method(10, 20);
		o.method(5.5);
	}
}

 

2) 항공관리프로그램(AMS)
** AmsField ** 

package ams;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

public class AmsField {
	//항공기번호(PK), 항공사, 최대승객수, 출발지, 도착지
	
	//저장소(DB)
	String[][] arPlane = new String[100][5];
	int insertCnt;
	
	//추가
	boolean insert(String[] plane) {
		boolean check = false;
		
		//항공기 번호가 중복이 있는지 확인 후 없을 때 추가
		if(!checkDup(plane[0])) {
			arPlane[insertCnt] = plane;
			//항공기 추가 완료시 insertCnt 1증가
			insertCnt++;
			//추가 성공시 check를 true로 변경
			check = true;
		}
		
		return check;
	}
    
	//중복검사
	boolean checkDup(String plane_num) {
		//외부에서 항공기 번호를 전달받고 각 항공기별 항공기번호와 검사 후
		//중복이 있으면 true, 없으면 false를 리턴한다.
		boolean check = false;
		
		//추가된 비행기만큼만 반복한다.
		for (int i = 0; i < insertCnt; i++) {
			
			//항공기 번호(0열)만 검색하면 되기 때문에 열번호는 0으로 고정해준다.
			if(arPlane[i][0].equals(plane_num)) {
				check = true;
			}
		}
		return check;
	}
    
	//수정
	boolean update(String plane_num, int idx, String new_value) {
		//출발지 수정과 도착지 수정만 가능하므로 버튼이 2개밖에 없다.
		//idx에 들어올 값으로 출발지는 0, 도착지는 1이다.
		//0을 3열로 변경
		//1을 4열로 변경하려면 3을 더해주어야 한다.
		boolean check = false;
		idx += 3;
		
		//수정할 항공기 번호로 행번호를 가지고 온다.
		int rowNum = getRowNum(plane_num);
		
		//항공기 번호가 존재하지 않으면 rowNum에는 -1이 담긴다.
		if(rowNum != -1) {
			//수정할 항공기가 있으면 들어온다.
			arPlane[rowNum][idx] = new_value;
			check = true;
		}
		return check;
	}
	
	//삭제
	boolean delete(String plane_num) {
		boolean check = false;
        
		//삭제할 항공기 번호로 행 번호를 가지고 온다.
		int rowNum = getRowNum(plane_num); 
        
		//항공기 번호가 존재하지 않으면 rowNum에는 -1이 담긴다.
		if(rowNum != -1) {
			//삭제할 항공기가 있으면 들어온다.
			for (int j = rowNum; j < insertCnt; j++) {
				//삭제할 비행기 행부터 다음 행의 값을 반복해서 덮어 씌워준다.
				arPlane[j] = arPlane[j+1];
			}
			check = true;
			
			//삭제 성공시 비행기 총 대수를 1 감소시킨다.
			insertCnt--;
		}
		return check;
	}
	
	//항공기번호로 행번호 알아내기
	int getRowNum(String plane_num) {
		int rowNum = -1;
		for (int i = 0; i < insertCnt; i++) {
			if(arPlane[i][0].equals(plane_num)) {
				rowNum = i;
				break;
			}
		}
		return rowNum;
	}
	
	//목록
	String selectAll() {
		String data = "";
		int cnt = 0;
		
		data = insertCnt == 0 ? "목록 없음" : "항공기번호/항공사/최대승객수/출발지/도착지\n";
		
		for (int i = 0; i < insertCnt; i++) {
			cnt ++;
			data += cnt + ". ";
			for (int j = 0; j < arPlane[i].length; j++) {
				data += arPlane[i][j] + " / ";
			}
			data += "\n";
		}
		return data;
	}
    
	//검색
	String select(int idx, String keyword) {
		String data = "";
		int cnt = 0;
        
		data = insertCnt == 0 ? "검색 결과 없음" : "항공기번호/항공사/최대승객수/출발지/도착지\n";
        
		for (int i = 0; i < insertCnt; i++) {
			if(arPlane[i][idx].equals(keyword)) {
				cnt++ ;
				data += cnt + ". ";
				for (int j = 0; j < arPlane[i].length; j++) {
					data += arPlane[i][j] + " / ";
				}
				data += "\n";
			}
		}
		return data;
	}
	
	void view() {
		String[] menu = {"추가하기", "수정하기", "검색하기", "삭제하기", "목록보기"};
		String[] searchMenu = {"항공기번호", "항공사", "최대승객수", "출발지", "도착지"};
		String[] updateMenu = {"출발지", "도착지"};
		//절대 경로 : C:\JAVA1_1500_hds\workspace
		//상대 경로 : ..(이전폴더) .(현재폴더)
		ImageIcon icon = new ImageIcon("src/img/main.gif");
		ImageIcon search_icon = new ImageIcon("src/img/search.gif");
		
		int choice = 0;
		String keyword = "";
		
		while(true) {
			choice = JOptionPane.showOptionDialog(null, "", "AMS", 
					JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,
					icon, menu, null);
			
			if(choice == - 1) {
				break;
			}
			
			switch(choice) {
			//추가하기
			case 0:
				String[] plane = ("" + JOptionPane.showInputDialog(null, "[항공기 등록]\n"
						+ "다음과 같이 항공기의 정보를 입력하세요\n"
						+ "항공기번호,항공사,최대승객수,출발지,도착지", "AMS",
						JOptionPane.PLAIN_MESSAGE, icon, null, null)).split(",");
				
				if(plane.length == 5) {
					if(insert(plane)) {
						JOptionPane.showMessageDialog(null, "추가 성공");
					}else {
						JOptionPane.showMessageDialog(null, "추가 실패");
					}
				}else {
					JOptionPane.showMessageDialog(null, "다시 시도해주세요.");
				}
				break;
			//수정하기
			case 1:
				keyword = JOptionPane.showInputDialog("수정하실 항공기 번호를 입력하세요.");
				
				choice = JOptionPane.showOptionDialog(null, "", "AMS", 
						JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,
						icon, updateMenu, null);
				
				String new_value = JOptionPane.showInputDialog("새로운 " + updateMenu[choice] + "를 입력하세요.");
				
				if(update(keyword, choice, new_value)) {
					JOptionPane.showMessageDialog(null, "수정 성공");
				}else {
					JOptionPane.showMessageDialog(null, "수정 실패");
				}
				break;
			//검색하기
			case 2:
				choice = JOptionPane.showOptionDialog(null, "", "AMS", 
						JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,
						search_icon, searchMenu, null);
				
				keyword = JOptionPane.showInputDialog("검색하실" + searchMenu[choice] + "을(를) 입력하세요.");
				JOptionPane.showMessageDialog(null, select(choice, keyword));
				break;
			//삭제하기
			case 3:
				keyword = JOptionPane.showInputDialog("삭제하실 항공기 번호를 입력하세요.");
                
				if(delete(keyword)) {
					JOptionPane.showMessageDialog(null, "삭제 성공");
				}else {
					JOptionPane.showMessageDialog(null, "삭제 실패");
				}
				break;
			//목록보기
			case 4:
				JOptionPane.showMessageDialog(null, selectAll());
				break;
			}
		}
	}
	
	
}

 

** AmsMain(메인메소드) **

package ams;

public class AmsMain {
	public static void main(String[] args) {
		new AmsField().view();
	}
}

 

** src에 img 폴더 만들어서 이미지 추가하기(main.gif, search.gif) **

 

** delete 메소드 추가 설명**

 

** JOptionPane.showOptionDialog **

 

** JOptionPane.showInputDialog **

'웹_프론트_백엔드 > 단과' 카테고리의 다른 글

[단과_JAVA] 2020.02.11  (0) 2020.02.12
[단과_JAVA] 2020.02.10  (0) 2020.02.11
[단과_JAVA] 2020.02.06  (0) 2020.02.06
[단과_JAVA] 2020.02.05  (0) 2020.02.06
[단과_Python] 2020.02.04  (0) 2020.02.05