[문제]
처리조건
• 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 구문을 사용하면 편하겠지?
각 메뉴별로 불러낼 메소드명과 행위를 넣어준다
'문제 풀이 > Java' 카테고리의 다른 글
[Java] 클래스 응용문제_TV 정보 바꾸기 (0) | 2021.08.23 |
---|---|
[Java] 배열 알고리즘 응용문제 (0) | 2021.08.20 |
[Java] 배열을 통해 값을 무작위로 입력받고, 내림차순으로 재정렬하기 (0) | 2021.08.20 |
[Java] 다중 for문을 응용하여 A~Z 출력하기 (0) | 2021.08.20 |
[Java] 다중 for문을 응용한 별 찍기 문제 (0) | 2021.08.20 |
댓글