⊙ AmsField
package ams;
public class AmsField {
// Key
// 항공사, 항공기번호, 최대승객수, 출발지, 도착지
String[][] arrPlane = new String[100][5];
int insertCnt;
int updateIndex;
// 추가
// 2차원 배열에 5개의 정보를 담기
void insert(String[] arPlane) {
arrPlane[insertCnt] = arPlane;
insertCnt++;
}
// 수정
void update(int index, String newValue) {
boolean updateCheck = true;
//항공사, 항공기번호, 승객수, 출발지, 도착지
//0 1 2 3 4
//index : 0, 1
arrPlane[updateIndex][index+3] = newValue;
}
// 삭제
void delete() {
}
// 검색
String select(int index, String keyword) {
int[] arIndex = null;
int searchCnt = 0;
String result = "";
updateIndex = -1;
for (int i = 0; i < insertCnt; i++) {
if (keyword.equals(arrPlane[i][index])) {
// i >> 행번호 : 검색할 비행기 번호
searchCnt++;
updateIndex = i;
//바로 int배열에 담을 수 없기 때문에(검색 건수를 모르기 때문)
//문자열에 검색된 행번호를 연결시켜 담는다.(", "는 구분점이다.)
//구분점이 있어야지만 밑에서 각 값을 나눌 수 있기 때문이다.
result += i + ", ";
}
}
//검색 건수를 for문이 끝난 후에 알 수 있기 때문에
//for문 밑에서 new 해준다.
arIndex = new int[searchCnt];
for (int i = 0; i < arIndex.length; i++) {
// result는 문자열이고 split() 사용시
//전체를 배열로 보기 때문에 그 뒤에 바로 []를 사용할 수 있다.
arIndex[i] = Integer.parseInt(result.split(", ")[i]);
}
//list(int[] arIndex)메서드에 값을 전달하고 list(int[] arIndex)에서 리턴된
//결과값을 select()에서 리턴한다.
return list(arIndex);
}
// 목록
String list() {
String result = "항공사, 항공기번호, 최대승객수(명), 출발지, 도착지\n";
for (int i = 0; i < insertCnt; i++) {
result += "♥";
for (int j = 0; j < arrPlane[0].length; j++) {
result += arrPlane[i][j];
result += j == arrPlane[0].length - 1 ? "" : ", ";
}
result += "\n";
}
if (insertCnt == 0)
result = "목록 없음";
return result;
}
String list(int[] arIndex) {
String result = "항공사, 항공기번호, 최대승객수(명), 출발지, 도착지\n";
for (int i = 0; i < arIndex.length; i++) {
result += "♥";
for (int j = 0; j < arrPlane[0].length; j++) {
result += arrPlane[arIndex[i]][j];
result += j == arrPlane[0].length - 1 ? "" : ", ";
}
result += "\n";
}
if (arIndex.length == 0)
result = "검색 결과 없음";
return result;
}
}
⊙ AmsMain
package ams;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
public class AmsMain {
public static void main(String[] args) {
String title = "항공기 관리 프로그램";
String[] menu = {"추가하기", "검색하기", "수정하기", "삭제하기", "목록보기"};
String[] updateMenu = {"출발지 수정", "도착지 수정"};
String[] updateMsg = {"출발지", "도착지"};
AmsField af = new AmsField();
ImageIcon icon = new ImageIcon("src/img/main.gif");
int choice = 0;
String[] arPlane = new String[5];
String keyword = "";
while(true) {
choice = JOptionPane.showOptionDialog(null, "", title, JOptionPane.DEFAULT_OPTION,
JOptionPane.PLAIN_MESSAGE, icon, menu, null);
if(choice == -1) break;
switch(choice) {
//추가
//항공사, 항공기번호, 최대승객수(명), 출발지, 도착지
case 0:
//5개의 값을 ", "로 구분하여 한번에 입력하기
//split("구분점")은 리턴타입이 문자열 배열이다.
//구분점이 있다는 것은 최소한 값이 2개 이상이기 때문에 배열로 리턴한다.
arPlane = ("" + JOptionPane.showInputDialog(null,
"항공사, 항공기번호, 최대승객수(명), 출발지, 도착지", title, JOptionPane.PLAIN_MESSAGE,
icon, null, null)).split(", ");
af.insert(arPlane);
break;
//검색
case 1:
break;
//수정
case 2:
String newValue = "";
choice =JOptionPane.showOptionDialog(null, "", title, JOptionPane.DEFAULT_OPTION,
JOptionPane.PLAIN_MESSAGE, icon, updateMenu, null);
if(choice == -1) break;
keyword = "" + JOptionPane.showInputDialog(null,
"수정하실 항공기 번호를 입력하세요", title, JOptionPane.PLAIN_MESSAGE,
icon, null, null);
if(af.select(1, keyword).equals("검색 결과 없음")) {
JOptionPane.showMessageDialog(null, "수정 실패");
}else {
newValue = "" + JOptionPane.showInputDialog(null,
"새로운 " + updateMsg[choice] + "를 입력하세요", title, JOptionPane.PLAIN_MESSAGE,
icon, null, null);
af.update(choice, newValue);
JOptionPane.showMessageDialog(null, "수정 성공");
}
break;
//삭제
case 3:
break;
//목록
case 4:
JOptionPane.showMessageDialog(null, af.list());
break;
}
}
}
}
'🌈 > JAVA Programming' 카테고리의 다른 글
[모던 자바 인 액션] ch11. null 대신 Optional 클래스 (0) | 2021.11.26 |
---|---|
2019.08.31 day07 생성자, 오버 로딩 (Car , Road) (0) | 2019.10.01 |
eclipse 단축키나 알아두면 좋은 녀석들~ (0) | 2019.09.21 |