본문 바로가기
문제 풀이/Java

[Java] 메소드(method)를 사용하여 학생관리프로그램 만들기

by 찐코딩 2021. 8. 16.

[문제]

처리조건

• 1. 데이터구조 : 이름(String),학번(int),학과(String),전화번호(String)

• 2. 학생수 결정 : 키보드로 입력 받는다.

• 3. 메뉴 선택 : 다음 메뉴를 구성하여 프로그램을 관리핚다.

 

[메뉴 구성]

• 1. 학생등록 : 키보드로 학생정보 입력 -> 배열저장

• 2. 전체출력 : 등록학생 전체출력

• 3. 학생조회 : 학번 입력 -> 이름, 학번, 학과, 전화번호 출력

• 4. 정보수정 : 학번 입력 -> 학과와 전화번호 수정

• 5. 프로그램 종료 : 프로그램을 종료하시겠습니다?(y/n) y입력-> 종료, n입력 -> 프로그램 반복

 

위 5개의 메뉴는 별도의 메서드로 정의해 놓고, 메뉴 선택 시 해당 메서드가 호출되어 실행되도록 하시오.

 

import java.util.Scanner;

public class Exam01 {
	
	public static void menu1(Scanner sc, String[] name, int[] id, String[] dep, String[] num) {

		// 학생 정보 등록
		int i=0; 
		boolean result=true;
        
		while(i<name.length) {
			System.out.print("학번 입력 : ");
			id[i] = sc.nextInt();
			
			if(i==0) {  // 첫번째로 등록한 학생은 일전에 등록한 학번이 없으니 그냥 등록
				System.out.print("이름 입력 : ");
				name[i] = sc.next();
				System.out.print("학과 입력 : ");
				dep[i] = sc.next();
				System.out.print("전화번호 입력 : ");
				num[i] = sc.next();
				System.out.println(":::::::::::::::::");
				i++;
			}else {  // 두번째 학생부터는 학번 비교 하면서 등록하기
				for(int j=(i-1); j>=0; j--) {
					if(id[i]==id[j]) {
						System.out.println("[동일한 학번입니다. 다시 입력하세요.]");
						result=false;
						break;		// break 탈출로 인해 가장 가까운 반복문 for문을 탈출
						}
					result= true;
				} //for문 종료
				if(result) {
					System.out.print("이름 입력 : ");
					name[i] = sc.next();
					System.out.print("학 과 입력 : ");
					dep[i] = sc.next();
					System.out.print("전화번호 입력 : ");
					num[i] = sc.next();
					System.out.println(":::::::::::::::::");
					i++;
					}
			}
		}	
		System.out.println("학생 등록이 완료되었습니다.");
		System.out.println("초기 메뉴로 넘어갑니다.");
		System.out.println();
	}
	
	//2. 전체 출력
	public static void menu2(String name[], int[] id, String[] dep, String[] num) {
		for(int i=0; i<name.length; i++) {
			System.out.println("이      름 : " + name[i]);
			System.out.println("학      번 : " + id[i]);
			System.out.println("학      과 : " + dep[i]);
			System.out.println("전화번호 : " + num[i]);
			System.out.println("----------------------");
			System.out.println("초기 메뉴로 넘어갑니다.");
			System.out.println();
		}
	}
	
	//3. 학생조회
	public static void menu3(int serch, String name[], int[] id, String[] dep, String[] num) {
		for(int i=0; i<name.length; i++) {
			if(id[i] == serch) {
				System.out.println("이  름:" + name[i]);
				System.out.println("학  번:" + id[i]);
				System.out.println("학  과:" + dep[i]);
				System.out.println("연락처: " + num[i]);
				System.out.println("----------------------");
				break;
			}else {
				System.out.println("[일치하는 학번이 없습니다.]");
			}
		}
		System.out.println("초기 메뉴로 넘어갑니다.");
		System.out.println();
	}
	//4. 정보수정
		public static void menu4(Scanner sc, int serch, String name[], int[] id, String[] dep, String[] num) {
			for(int i=0; i<name.length; i++) {
				if(id[i] == serch) {
					System.out.println("이     름 : " + name[i]);
					System.out.println("학     번 : " + id[i]);
					System.out.print("변경할 학과를 기입해주세요.  ");
					dep[i]=sc.next();
					System.out.print("변경할 전화번호를 기입해주세요.  ");
					num[i]=sc.next();
					System.out.println("----------------------");
					break;
				}else {
					System.out.println("[일치하는 학번이 없습니다.]");
				}
			}
			System.out.println("초기 메뉴로 넘어갑니다.");
			System.out.println();
		}
		
	// 5. 프로그램 종료
		public static void end(Scanner sc) {
			System.exit(0);
			sc.close();
		}
	
	// 메인 메소드
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.print("학생 수를 입력하세요 >> ");
		String[] name=new String[sc.nextInt()]; // 학생 수 만큼 배열 생성
		
		//순서대로 배열 정의
		int[] id=new int[name.length];  //학번
		String[] dep=new String[name.length]; //학과
		String[] num=new String[name.length]; //전화번호
		
		id[0]=0; //오류 방지 위한 초기값 생성
		
		while(true) {  //무한반복
			System.out.println("**** 학생 관리 프로그램 ****");
			System.out.println("1.학생 등록");
			System.out.println("2.전체 출력");
			System.out.println("3.학생 조회");
			System.out.println("4.정보 수정");
			System.out.println("5.프로그램 종료");
			
			System.out.println(); // 빈줄 삽입
			System.out.print("위 메뉴 중 관리 번호를 입력하세요. : ");
			int select = sc.nextInt();
			System.out.println(":::::::::::::::::::::");
			
			if(select > 5 || select < 0) {
				System.out.println("*잘못된 관리 번호 입니다. 다시 입력 하십시오.*");
			} else {
				switch(select) {
				case 1:
				System.out.println("[학생을 등록합니다.]");
				menu1(sc, name, id, dep, num);
				break;
				
			case 2:
				if(id[0]==0) {
					System.out.println("저장된 학생 정보가 없습니다.");
					System.out.println(":::::::::::::::::::::");
					System.out.println("*학생을 등록합니다.*");
					menu1(sc, name, id, dep, num);
				}else {
					System.out.println("====== 전체 학생 출력 ======");
					menu2(name, id, dep, num);
				}
					break;
				
			case 3:
				if(id[0]==0) {
					System.out.println("저장된 학생 정보가 없습니다.");
					System.out.println(":::::::::::::::::::::");
					System.out.println("*학생을 등록합니다.*");
					menu1(sc, name, id, dep, num);
				}else {
					System.out.println("*학생을 조회 합니다.*");
					System.out.print("학번을 입력하십시오. : ");
					menu3(sc.nextInt(), name, id, dep, num);
				}
				break;
				
			case 4:
				if(id[0]==0) {
					System.out.println("저장된 학생 정보가 없습니다.");
					System.out.println(":::::::::::::::::::::");
					System.out.println("*학생을 등록합니다.*");
					menu1(sc, name, id, dep, num);
				}else {
					System.out.println("*학생 정보를 수정합니다.*");
					System.out.print("학번을 입력하십시오. : ");
					menu4(sc, sc.nextInt(), name, id, dep, num);
				}
				break;

			default:
				System.out.println("*프로그램을 종료합니다.*");
				end(sc);
				}
			}
		}
	}
}

 

학생 수를 입력 받고 그 수만큼 학생들의 정보를 배열에 저장

==> 학생수 입력받고 배열 생성하기

 

 

또, 해당창에 메뉴가 나타나도록 해야함

 

 

위 창은 결과값과 상관없이 무한반복으로 나타나야되므로?

select라는 변수를 생성하여 메뉴를 선택할 수 있도록 했다.

 

그럼 입력한 선택값에 따라 원하는 메소드를 호출할 수 있도록 코드를 짜야된다.

 

일단 select값은 메뉴 갯수인 5를 벗어나거나 1 미만의 값을 가지면 오류가 생성되도록 해야하므로,

if(select > 5 || select < 0) {
		System.out.println("[잘못된 관리 번호 입니다. 다시 입력 하십시오.]");
}

코드 넣어주고 시작.

그게 아니면~(else)부터 결과가 나올 수 있도록 할 것.

 

숫자로 기입했으니깐 switch 구문을 사용하면 편하겠지?

각 메뉴별로 불러낼 메소드명과 행위를 넣어준다

 

 

 

 

댓글