Small Grey Outline Pointer Java 항공 관리 프로그램
본문 바로가기
Dev./java

Java 항공 관리 프로그램

by sso. 2022. 5. 26.

기본틀 잡기

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;
		}
		
		}
	}
}

정적배열로 길이가 고정되어있어 무조건 100번씩 나온다

 

 

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

댓글