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 |