기본틀 잡기
package ams;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
public class AmsMain {
public static void main(String[] args) {
ImageIcon img = new ImageIcon("src/img/main.gif"); //생성자에 이미지 경로를 알려주기
//절대 경로 : 내 위치가 어디든지 찾아갈 수 있는 경로
//상대 경로: 내 위치에 따라서 변경 되는 경로
String [] menu = {"추가하기", "검색하기", "수정하기", "삭제하기", "목록보기"};
int choice = 0;
while(true) {
choice = JOptionPane.showOptionDialog(null, "AMS Test", "AMS", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, img, menu , null);
if(choice == -1) break;
switch(choice) { //입력이 아닌 버튼형식이므로 마지막의 디폴트는 필요없다
//추가하기
case 0 :
break;
//검색하기
case 1 :
break;
//수정하기
case 2 :
break;
//삭제하기
case 3 :
break;
//목록보기
case 4 :
break;
}
}
}
}
package ams;
//각 기능 메서드 만들기
public class AmsField {
//항공사, 항공기번호, 최대승객수, 출발지, 도착지
//2차원배열[0] = 1차원배열;
//추가하기
String[][] arrPlane = new String[100][5]; //100행 5열
int cnt; // 전역변수는 자동초기화, 프로그램이 끝날때 까지 기억
void insert(String [] arPlane) {
arrPlane[cnt] = arPlane;
cnt++;
}
//검색하기
void search() {
}
//수정하기
void update() {
}
//삭제하기
void delete() {
}
//목록보기
void show() {
}
}
package ams;
//각 기능구현 메서드 만들기
public class AmsField {
//항공사, 항공기번호, 최대승객수, 출발지, 도착지
//2차원배열[0] = 1차원배열;
//추가하기
String[][] arrPlane = new String[100][5]; //100행 5열
int cnt; // 전역변수는 자동초기화, 프로그램이 끝날때 까지 기억
void insert(String [] arPlane) {
arrPlane[cnt] = arPlane;
cnt++;
}
//검색하기
void search() {
}
//수정하기
void update() {
}
//삭제하기
void delete() {
}
//목록보기
//문자열의 결과값을 누적해서 창을 한번만 띄워준다
String show() {
int rLength = arrPlane.length; //행의 길이
int cLength = arrPlane[0].length; //열의 길이 = arrPlane[0]에 한번접근한 후-> 길이
String result = "항공사, 항공기 번호, 최대승객수(명), 출발지, 도착지\n"; //문자열 값
for (int i = 0; i < rLength; i++) { //정적배열이므로 길이가 고정되어있어 무조건 100번씩 나온다
result += "♥"; //처음 시작할때만 나오게 하기
for (int j = 0; j < cLength; j++) {
result += j == cLength-1 ? arrPlane[i][j] : arrPlane[i][j] + ", ";
// arrPlane[i][j] => 한 비행기의 하나의 값!! 입력받은 값들이 항공사, 항공기 번호, ...로 출력되도록
//삼항연산자를 이용하여 마지막 배열값일 때는 쉼표 없이 끝날 수 있게 한다
}
result += "\n";
}
return result;
}
}
package ams;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
public class AmsMain {
public static void main(String[] args) {
AmsField af = new AmsField(); //전역변수는 new를 만나는 순간 메모리에서 해제 된다. 단, Static 변수는 프로그램이 종료될 때 메모리에서 해제된다
ImageIcon img = new ImageIcon("src/img/main.gif"); //생성자에 이미지 경로를 알려주기
String [] arPlane = new String[5]; //정보가 5개 짜리의 배열
//절대 경로 : 내 위치가 어디든지 찾아갈 수 있는 경로
//상대 경로: 내 위치에 따라서 변경 되는 경로
String [] menu = {"추가하기", "검색하기", "수정하기", "삭제하기", "목록보기"};
int choice = 0;
String insertMsg="[추가하실 정보를 그대로 입력하세요(,포함)]\n"
+ "항공사, 항공기번호, 최대승객수, 출발지, 도착지";
while(true) {
choice = JOptionPane.showOptionDialog(null, "", "AMS", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, img, menu , null);
if(choice == -1) break;
switch(choice) { //입력이 아닌 버튼형식이므로 마지막의 디폴트는 필요없다
//추가하기
case 0 :
arPlane=JOptionPane.showInputDialog(insertMsg).split(", "); //문자열을 나눠주기
af.insert(arPlane);
break;
//검색하기
case 1 :
break;
//수정하기
case 2 :
break;
//삭제하기
case 3 :
break;
//목록보기
case 4 :
JOptionPane.showMessageDialog(null, af.show());
break;
}
}
}
}
int rLength = arrPlane.length; //행의 길이
를
int rLength = cnt; 로 변경 //내가 추가한 값 만큼만 출력되도록 한다
기능구현 하나씩 만들기
//검색하기
String search(String keyword) {//항공사만 서치할거라서 행만 이동하고 열은 고정시켜준다
int arIndex[];
String result="";
int searchCnt =0;
for (int i = 0; i < cnt; i++) {
if(keyword.equals(arrPlane[i][0])) {
System.out.println("들어옴");
searchCnt++; //검색 결과가 몇개인지 카운트에 담아두기
result += ""+i+","; //검색한 결과가 있다면, 그 행 번호[i]를 연결하겠다
}
}
arIndex = new int[searchCnt]; //위의 for문 안에서 검색이 다 끝난 다음 cnt만큼 배열칸을 만든다
for (int i = 0; i < arIndex.length; i++) {
arIndex[i] =Integer.parseInt(result.split(",")[i]);
}
return show(arIndex);
}
//목록보기
String show() {
String result = "항공사, 항공기 번호, 최대승객수(명), 출발지, 도착지\n";
for (int i = 0; i < cnt; i++) {
result += "♥";
for (int j = 0; j < cLength; j++) {
result += j == cLength-1 ? arrPlane[i][j] : arrPlane[i][j] + ", ";
// arrPlane[i][j] => 한 비행기의 하나의 값!! 입력받은 값들이 항공사, 항공기 번호, ...로 출력되도록
//삼항연산자를 이용하여 마지막 배열값일 때는 쉼표 없이 끝날 수 있게 한다
}
result += "\n";
}
if(cnt == 0) result = "목록 없음"; //입력한 정보가 없을 때 목록보기 누르면 보여질 문구
return result;
}
//검색 결과 보기
String show(int[] arIndex) {
String result = "항공사, 항공기 번호, 최대승객수(명), 출발지, 도착지\n";
for (int i = 0; i < arIndex.length; i++) {
result += "♥"; //처음 시작할때만 나오게 하기
for (int j = 0; j < cLength; j++) {
result += arrPlane[arIndex[i]][j]; //arIndex[i] 에는 행번호가 들어있다
result += j == cLength - 1 ? "" : ", "; //마지막에는 쉼표 붙이지 않겠다
}
result += "\n";
}
//검색결과 없을 때 조건
if(arIndex.length==0) result = "검색 결과 없음";
return result; //String 검색 결과가 result 에 담김
}
}
삭제하기 만들기
package ams;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
public class AmsMain {
public static void main(String[] args) {
AmsField af = new AmsField(); //전역변수는 new를 만나는 순간 메모리에서 해제 된다. 단, Static 변수는 프로그램이 종료될 때 메모리에서 해제된다
ImageIcon img = new ImageIcon("src/img/main.gif"); //생성자에 이미지 경로를 알려주기
String [] arPlane = new String[5]; //정보가 5개 짜리의 배열
//절대 경로 : 내 위치가 어디든지 찾아갈 수 있는 경로
//상대 경로: 내 위치에 따라서 변경 되는 경로
String keyword="";
String [] menu = {"추가하기", "검색하기", "수정하기", "삭제하기", "목록보기"};
int choice = 0;
String insertMsg="[추가하실 정보를 그대로 입력하세요(,포함)]\n"
+ "항공사, 항공기번호, 최대승객수, 출발지, 도착지";
String searchMsg="검색하실 항공사를 입력하세요\n";
String deleteMsg="검색하실 항공기 번호를 입력하세요\n";
while(true) {
choice = JOptionPane.showOptionDialog(null, "", "AMS", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, img, menu , null);
if(choice == -1) break;
switch(choice) { //입력이 아닌 버튼형식이므로 마지막의 디폴트는 필요없다
//추가하기
case 0 :
arPlane=JOptionPane.showInputDialog(insertMsg).split(", "); //문자열을 나눠주기
af.insert(arPlane);
break;
//검색하기
case 1 :
keyword = JOptionPane.showInputDialog(searchMsg);
JOptionPane.showMessageDialog(null, af.search(keyword));
break;
//수정하기
//출발지 수정, 목적지 수정 버튼 만들기
//JOptionPane.showOptionDialog() 사용하기 => 항공기 번호가 존재할 때
//항공기 번호 입력 받고 해당 항공기의 출발지와 목적지 수정
//출발지와 목적지가 동일하면 수정 실패
case 2 :
break;
//삭제하기
case 3 :
keyword = JOptionPane.showInputDialog(deleteMsg);
if(af.delete(keyword)) {
JOptionPane.showMessageDialog(null, "삭제 완료");
}else {
JOptionPane.showMessageDialog(null, "삭제 실패");
}
break;
//목록보기
case 4 :
JOptionPane.showMessageDialog(null, af.show());
break;
}
}
}
}
package ams;
import java.util.Iterator;
//각 기능구현 메서드 만들기
public class AmsField {
//항공사, 항공기번호, 최대승객수, 출발지, 도착지
//2차원배열[0] = 1차원배열;
//추가하기
String[][] arrPlane = new String[100][5]; //100행 5열
int cnt; // 전역변수는 자동초기화, 프로그램이 끝날때 까지 기억
int showCnt;
int cLength = arrPlane[0].length; //열의 길이 = arrPlane[0]에 한번접근한 후-> 길이
String result = "";
void insert(String [] arPlane) {
arrPlane[cnt] = arPlane;
cnt++;
}
//검색하기
String search(String keyword) {//항공사만 서치할거라서 행만 이동하고 열은 고정시켜준다
int arIndex[];
String result="";
int searchCnt =0;
for (int i = 0; i < cnt; i++) {
if(keyword.equals(arrPlane[i][0])) {
System.out.println("들어옴");
searchCnt++; //검색 결과가 몇개인지 카운트에 담아두기
result += ""+i+","; //검색한 결과가 있다면, 그 행 번호[i]를 연결하겠다
}
}
arIndex = new int[searchCnt]; //위의 for문 안에서 검색이 다 끝난 다음 cnt만큼 배열칸을 만든다
for (int i = 0; i < arIndex.length; i++) {
arIndex[i] =Integer.parseInt(result.split(",")[i]);
}
return show(arIndex);
}
//수정하기
void update() {
}
//삭제하기
boolean delete(String keyword) { //외부에서 받아오는 키워드(삭제할 키워드)
boolean deleteCheck = false; //flag
for (int i = 0; i < cnt; i++) {
//arrPlane[i][1] i행의1열과 키워드가 같으면! 우리가 삭제하고자 하는 정보이다
if(arrPlane[i][1].equals(keyword)) {
//cnt - 1 : 마지막 정보가 담긴 행
//cnt : null이 담긴 행
for (int j = i; j < cnt; j++) { //j=i j를 행번호로 시작하겠다
arrPlane[j] = arrPlane[cnt+1]; //순서대로 밀어준다
}
deleteCheck = true;
break;
}
}
cnt--;
return deleteCheck;
}
//목록보기
String show() {
String result = "항공사, 항공기 번호, 최대승객수(명), 출발지, 도착지\n";
for (int i = 0; i < cnt; i++) {
result += "♥";
for (int j = 0; j < cLength; j++) {
result += j == cLength-1 ? arrPlane[i][j] : arrPlane[i][j] + ", ";
// arrPlane[i][j] => 한 비행기의 하나의 값!! 입력받은 값들이 항공사, 항공기 번호, ...로 출력되도록
//삼항연산자를 이용하여 마지막 배열값일 때는 쉼표 없이 끝날 수 있게 한다
}
result += "\n";
}
if(cnt == 0) result = "목록 없음"; //입력한 정보가 없을 때 목록보기 누르면 보여질 문구
return result;
}
//검색 결과 보기
String show(int[] arIndex) {
String result = "항공사, 항공기 번호, 최대승객수(명), 출발지, 도착지\n";
for (int i = 0; i < arIndex.length; i++) {
result += "♥"; //처음 시작할때만 나오게 하기
for (int j = 0; j < cLength; j++) {
result += arrPlane[arIndex[i]][j]; //arIndex[i] 에는 행번호가 들어있다
result += j == cLength - 1 ? "" : ", "; //마지막에는 쉼표 붙이지 않겠다
}
result += "\n";
}
//검색결과 없을 때 조건
if(arIndex.length==0) result = "검색 결과 없음";
return result; //String 검색 결과가 result 에 담김
}
}
최종코드
package ams;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
public class AmsMain {
public static void main(String[] args) {
AmsField af = new AmsField(); //전역변수는 new를 만나는 순간 메모리에서 해제 된다. 단, Static 변수는 프로그램이 종료될 때 메모리에서 해제된다
ImageIcon img = new ImageIcon("src/img/main.gif"); //생성자에 이미지 경로를 알려주기
String [] arPlane = new String[5]; //정보가 5개 짜리의 배열
//절대 경로 : 내 위치가 어디든지 찾아갈 수 있는 경로
//상대 경로: 내 위치에 따라서 변경 되는 경로
String keyword="";
String [] menu = {"추가하기", "검색하기", "수정하기", "삭제하기", "목록보기"};
String [] searchMenu= {"항공사", "항공기 번호", "최대 승객수", "출발지", "도착지"};
String [] updateMenu = {"출발지 수정", "도착지 수정"};
int choice = 0;
int index = 0;
String insertMsg="[추가하실 정보를 그대로 입력하세요(,포함)]\n"
+ "항공사, 항공기번호, 최대승객수, 출발지, 도착지";
String searchMsg= "검색하실 항공사를 입력하세요\n";
String deleteMsg= "검색하실 항공기 번호를 입력하세요\n";
String updateMsg = "수정하실 항공기 번호를 입력하세요\n";
while(true) {
choice = JOptionPane.showOptionDialog(null, "", "AMS", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, img, menu , null);
if(choice == -1) break;
switch(choice) { //입력이 아닌 버튼형식이므로 마지막의 디폴트는 필요없다
//추가하기
case 0 :
arPlane=JOptionPane.showInputDialog(insertMsg).split(", "); //문자열을 나눠주기
af.insert(arPlane);
break;
//검색하기
case 1 :
index= JOptionPane.showOptionDialog(null, "", "AMS", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, img, searchMenu, null);
//이렇게 통째로를 인덱스 번호로 보면 된다
if(index != -1) {
keyword = JOptionPane.showInputDialog("검색하실 " + searchMenu[index] + "을(를) 입력하세요"); //규칙성을 부여하기 위해 배열 사용
JOptionPane.showMessageDialog(null, af.search(keyword, index));
}
break;
//수정하기
//출발지 수정, 목적지 수정 버튼 만들기
//JOptionPane.showOptionDialog() 사용하기 => 항공기 번호가 존재할 때
//항공기 번호 입력 받고 해당 항공기의 출발지와 목적지 수정
//출발지와 목적지가 동일하면 수정 실패
case 2 :
String planeNum = JOptionPane.showInputDialog(updateMsg); //버튼 만들어주기
String temp = af.search(planeNum, 1); //수정시에는 항공기 번호만 필요하기 때문에 1열로 넘겨준다. 입력한 항공기번호가 1열에 있는지 검사하기
if(temp.equals("검색 결과 없음")) {//1열(항공기 번호)로 검색 해서 검색결과없음 문자열값과 동일하면 검색이 안된것
JOptionPane.showMessageDialog(null, "수정실패");
}else {
index = JOptionPane.showOptionDialog(null, "", "AMS", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, img, updateMenu , null);
//업데이트 메뉴를 버튼으로 만든다
if(index == -1) continue;
if(index != -1) {
String newValue=JOptionPane.showInputDialog("새로운 " + updateMenu[index] + "를 입력하세요");
af.update(index, newValue);
}
}
break;
//삭제하기
case 3 :
keyword = JOptionPane.showInputDialog(deleteMsg);
if(af.delete(keyword)) {
JOptionPane.showMessageDialog(null, "삭제 완료");
}else {
JOptionPane.showMessageDialog(null, "삭제 실패");
}
break;
//목록보기
case 4 :
JOptionPane.showMessageDialog(null, af.show());
break;
}
}
}
}
package ams;
import java.util.Iterator;
import javax.swing.JOptionPane;
//각 기능구현 메서드 만들기
public class AmsField {
//항공사, 항공기번호, 최대승객수, 출발지, 도착지
//2차원배열[0] = 1차원배열;
//추가하기
String[][] arrPlane = new String[100][5]; //100행 5열
int cnt; // 전역변수는 자동초기화, 프로그램이 끝날때 까지 기억
int showCnt;
int cLength = arrPlane[0].length; //열의 길이 = arrPlane[0]에 한번접근한 후-> 길이
String result = "";
int updateIndex;
void insert(String [] arPlane) {
arrPlane[cnt] = arPlane;
cnt++;
}
//검색하기
String search(String keyword, int index) {
int arIndex[];
String result="";
int searchCnt =0;
for (int i = 0; i < cnt; i++) {
if(keyword.equals(arrPlane[i][index])) {
searchCnt++; //검색 결과가 몇개인지 카운트에 담아두기
updateIndex = i; //updateIndex에 검색된 행번호를 담아준다
result += ""+i+","; //검색한 결과가 있다면, 그 행 번호[i]를 연결하겠다
}
}
arIndex = new int[searchCnt]; //위의 for문 안에서 검색이 다 끝난 다음 cnt만큼 배열칸을 만든다
for (int i = 0; i < arIndex.length; i++) {
arIndex[i] =Integer.parseInt(result.split(",")[i]);
}
return show(arIndex);
}
//수정하기
void update(int btnIndex, String newValue) { //외부에서 받아올 값: 항공기 번호, 버튼인덱스, 수정할 값)
arrPlane[updateIndex][btnIndex+3] = newValue;
//btnIndex 는 출발지 : 0 도착지일 때 : 1 버튼 두개이므로
//열 index번호 = 출발지 인덱스번호:3 도착지 인덱스 번호:4
}
//삭제하기
boolean delete(String keyword) { //외부에서 받아오는 키워드(삭제할 키워드)
boolean deleteCheck = false; //flag
for (int i = 0; i < cnt; i++) {
//arrPlane[i][1] i행의1열과 키워드가 같으면! 우리가 삭제하고자 하는 정보이다
if(arrPlane[i][1].equals(keyword)) {
//cnt - 1 : 마지막 정보가 담긴 행
//cnt : null이 담긴 행
for (int j = i; j < cnt; j++) { //j=i j를 행번호로 시작하겠다
arrPlane[j] = arrPlane[cnt+1]; //순서대로 밀어준다
}
deleteCheck = true;
cnt--;
break;
}
}
return deleteCheck;
}
//목록보기
String show() {
String result = "항공사, 항공기 번호, 최대승객수(명), 출발지, 도착지\n";
for (int i = 0; i < cnt; i++) {
result += "♥";
for (int j = 0; j < cLength; j++) {
result += j == cLength-1 ? arrPlane[i][j] : arrPlane[i][j] + ", ";
// arrPlane[i][j] => 한 비행기의 하나의 값!! 입력받은 값들이 항공사, 항공기 번호, ...로 출력되도록
//삼항연산자를 이용하여 마지막 배열값일 때는 쉼표 없이 끝날 수 있게 한다
}
result += "\n";
}
if(cnt == 0) result = "목록 없음"; //입력한 정보가 없을 때 목록보기 누르면 보여질 문구
return result;
}
//검색 결과 보기
String show(int[] arIndex) {
String result = "항공사, 항공기 번호, 최대승객수(명), 출발지, 도착지\n";
for (int i = 0; i < arIndex.length; i++) {
result += "♥"; //처음 시작할때만 나오게 하기
for (int j = 0; j < cLength; j++) {
result += arrPlane[arIndex[i]][j]; //arIndex[i] 에는 행번호가 들어있다
result += j == cLength - 1 ? "" : ", "; //마지막에는 쉼표 붙이지 않겠다
}
result += "\n";
}
//검색결과 없을 때 조건
if(arIndex.length==0) result = "검색 결과 없음";
return result; //String 검색 결과가 result 에 담김
}
}
728x90
'Dev. > java' 카테고리의 다른 글
상속 / 다형성 (0) | 2022.06.07 |
---|---|
지역변수/전역변수/static변수 (0) | 2022.06.06 |
Java :: 접근 권한 제어자 (0) | 2022.05.23 |
Java :: Class(생성자) (0) | 2022.05.23 |
Java :: Class(객체화) (0) | 2022.05.22 |
댓글