코딩항해기
[과제/JAVA] 학생부 프로그램 함수화 (+풀이 0701) 본문
기존 실습 때 진행했던 학생부 프로그램 코드를 메소드를 활용한 방식으로 디벨롭 시켜보자.
240701 풀이 추가
코드는 실습때 작성한 코드 말고, 풀이 때 작성한 코드로 진행할 예정이다.
[풀이 코드]
더보기
package class06;
import java.util.Scanner;
public class StudentMethodVer {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("학생부 프로그램");
String[] datas = new String[5];
int cnt = 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("0. 프로그램 종료");
System.out.println("==============");
System.out.print("메뉴 입력 >> ");
int menu = sc.nextInt();
if (menu == 0) {
break;
}
else if (menu == 1) {
if(cnt >= datas.length) {//저장할 수 있는 최대로 이미 저장이 되어있는 경우라면
System.out.println("더 이상 데이터를 저장할 수 없습니다!");
continue;
}
String name;
while(true) {
System.out.print("저장하고 싶은 학생의 이름을 입력해주세요 >> ");
name = sc.next();
System.out.print("정말 "+name+"(으)로 하시겠습니까? (Y/N) >> ");
String answer = sc.next();
if(answer.equals("Y")) {//제대로 입력했다면
boolean flag = false;//학생부에 name이 없는 상태
for(int i = 0; i< cnt; i++) {
if(name.equals(datas[i])) {
flag = true;
}
}
if(!flag) {//!이미저장되어있다면
break;
}
}
}
datas[cnt]=name;
cnt++;
System.out.println(name + "이(가) 저장되었습니다.");
} //else if (menu == 1)
else if (menu == 2) {
if(cnt <= 0) { //보여줄 데이터가 없다면 == 저장된 데이터가 없음
System.out.println("보여줄 학생 데이터가 없습니다.");
continue;
}
System.out.println("**학생목록**");
for(int i = 0; i<cnt; i++) {
System.out.println((i+1)+"번 학생 : "+datas[i]);
}
System.out.println("**********");
} //else if (menu == 2)
else if (menu == 3) {// 이름으로 검색
System.out.print("검색어 입력 >> ");
String searchContent = sc.next(); //searchKeyword도 많이 사용함
System.out.println("===================");
boolean flag = false;
for(int i = 0; i<cnt; i++) {
if(datas[i].contains(searchContent)) {
System.out.println(datas[i]);
flag = true;
}
}
//검색 결과가 없다면, 없다고 알려주기
if(!flag) {//만약에 검색결과가 없다면
System.out.println("검색결과가 없습니다.");
}
System.out.println("===================");
} //else if (menu == 3)
else if (menu == 4) {
if(cnt<=0) {
System.out.println("검색할 학생 데이터가 없습니다!");
continue;
}
int num;
while(true) {
System.out.print("검색할 학생의 번호 입력 >> ");
num = sc.nextInt();
if(1<=num && num<=cnt) {
break;
}
System.out.println("올바른 번호를 입력해주세요!");
}
System.out.println(num + "번 학생의 이름은" + datas[num-1] + "입니다!");
}//else if (menu == 4)
else if (menu == 5) { // 이름변경
if(cnt<=0) {
System.out.println("검색할 학생 데이터가 없습니다!");
continue;
}
int num;
while(true) {
System.out.print("변경할 학생의 번호 입력 >> ");
num = sc.nextInt();
if(1<=num && num<=cnt) {
break;
}
System.out.println("올바른 번호를 입력해주세요!");
}
System.out.println(num+"번 학생의 이름은 "+datas[num-1]+"입니다.");
String name;
while(true) {
System.out.print("변경할 이름을 입력해주세요 >> ");
//이미 있는 이름과 변경 전 이름과 동일할 때 경우 멘트를 분리해주면 좋다
name = sc.next();
System.out.print("정말 "+name+"(으)로 하시겠습니까? (Y/N) >> ");
String answer = sc.next();
if(answer.equals("Y")) {//제대로 입력했다면
boolean flag = false;//학생부에 name이 없는 상태
for(int i = 0; i< cnt; i++) {
if(name.equals(datas[i])) {
flag = true;
if(name.equals(datas[num-1])) {//내 이전이름이면
//이전이름이라 안됨
System.out.println("변경 전 이름과 동일하여 변경이 불가합니다.");
}
else {//사용중인이름이라 안됨
System.out.println("이미 존재하는 이름입니다.");
}
}
}
if(!flag) {//!이미저장되어있다면
break;
}
}
}
datas[num-1]=name;
}
else { // 유효성 검사
System.out.println("제대로 입력해주세요~~");
}
}
}//main
}//class
[기능분석]
메소드로 분리하기 위해 기능 단위로 파트를 나누어보았다.
//>>>>> (시작) 기능 / 반환값
////////// (종료)
더보기
package class06;
import java.util.Scanner;
public class StudentMethodVer {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("학생부 프로그램");
String[] datas = new String[5];
int cnt = 0;
while (true) {
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> menu출력 / void
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("0. 프로그램 종료");
System.out.println("==============");
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> menu입력 받아 /menu
System.out.print("메뉴 입력 >> ");
int menu = sc.nextInt();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (menu == 0) {
break;
}
else if (menu == 1) {
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 학생이 다 차있는지 확인 /boolean
if(cnt >= datas.length) {//저장할 수 있는 최대로 이미 저장이 되어있는 경우라면
System.out.println("더 이상 데이터를 저장할 수 없습니다!");
continue;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>이름을 입력받아 저장하는 (저장기능을 빼면 /name)
String name;
while(true) {
System.out.print("저장하고 싶은 학생의 이름을 입력해주세요 >> ");
name = sc.next();
System.out.print("정말 "+name+"(으)로 하시겠습니까? (Y/N) >> ");
String answer = sc.next();
if(answer.equals("Y")) {//제대로 입력했다면
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>학생부에 이름이 있는지 확인 /boolean
boolean flag = false;//학생부에 name이 없는 상태
for(int i = 0; i< cnt; i++) {
if(name.equals(datas[i])) {
flag = true;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(!flag) {//!이미저장되어있다면
break;
}
}
}
datas[cnt]=name;
cnt++;
System.out.println(name + "이(가) 저장되었습니다.");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
} //else if (menu == 1)
else if (menu == 2) {
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>학생부가 비어있는지 확인 /boolean
if(cnt <= 0) { //보여줄 데이터가 없다면 == 저장된 데이터가 없음
System.out.println("보여줄 학생 데이터가 없습니다.");
continue;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>학생 전체 출력 /void
System.out.println("**학생목록**");
for(int i = 0; i<cnt; i++) {
System.out.println((i+1)+"번 학생 : "+datas[i]);
}
System.out.println("**********");
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
} //else if (menu == 2)
else if (menu == 3) {// 이름으로 검색
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>입력받기 /searchContent
System.out.print("검색어 입력 >> ");
String searchContent = sc.next(); //searchKeyword도 많이 사용함
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>검색결과 출력 /void
System.out.println("===================");
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>검색결과 출력+검색결과 있는지 확인 /boolean
boolean flag = false;
for(int i = 0; i<cnt; i++) {
if(datas[i].contains(searchContent)) {
System.out.println(datas[i]);
flag = true;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//검색 결과가 없다면, 없다고 알려주기
if(!flag) {//만약에 검색결과가 없다면
System.out.println("검색결과가 없습니다.");
}
System.out.println("===================");
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
} //else if (menu == 3)
else if (menu == 4) {
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>학생부가 비었는지 확인 /boolean
if(cnt<=0) {
System.out.println("검색할 학생 데이터가 없습니다!");
continue;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>번호 입력받아 검증 /num
int num;
while(true) {
System.out.print("검색할 학생의 번호 입력 >> ");
num = sc.nextInt();
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>저장된 범위인지 확인/boolean
if(1<=num && num<=cnt) {
break;
}
System.out.println("올바른 번호를 입력해주세요!");
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>출력하기 /void
System.out.println(num + "번 학생의 이름은" + datas[num-1] + "입니다!");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
}//else if (menu == 4)
else if (menu == 5) { // 이름변경
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>학생부가 비었는지 확인 /boolean
if(cnt<=0) {
System.out.println("검색할 학생 데이터가 없습니다!");
continue;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>번호 입력받고 범위검증+결과출력 /void
int num;
while(true) {
System.out.print("변경할 학생의 번호 입력 >> ");
num = sc.nextInt();
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>저장된 범위인지 확인/boolean
if(1<=num && num<=cnt) {
break;
}
System.out.println("올바른 번호를 입력해주세요!");
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
System.out.println(num+"번 학생의 이름은 "+datas[num-1]+"입니다.");
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>이름을 받아 저장함 (저장을 빼면 name)
String name;
while(true) {
System.out.print("변경할 이름을 입력해주세요 >> ");
//이미 있는 이름과 변경 전 이름과 동일할 때 경우 멘트를 분리해주면 좋다
name = sc.next();
System.out.print("정말 "+name+"(으)로 하시겠습니까? (Y/N) >> ");
String answer = sc.next();
if(answer.equals("Y")) {//제대로 입력했다면
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>학생부에 이름이 있는지 확인하고/boolean 변경전이름과 같은지 아닌지 확인
boolean flag = false;//학생부에 name이 없는 상태
for(int i = 0; i< cnt; i++) {
if(name.equals(datas[i])) {
flag = true;
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>변경전이름과 같은지 아닌지 출력 / void
if(name.equals(datas[num-1])) {//내 이전이름이면
//이전이름이라 안됨
System.out.println("변경 전 이름과 동일하여 변경이 불가합니다.");
}
else {//사용중인이름이라 안됨
System.out.println("이미 존재하는 이름입니다.");
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(!flag) {//!이미저장되어있다면
break;
}
}
}
datas[num-1]=name;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
else { // 유효성 검사
System.out.println("제대로 입력해주세요~~");
}
}
}//main
}//class
[메소드 적용된 코드]
package class06;
import java.util.Scanner;
public class StudentMethodVer {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StudentMethodVer st = new StudentMethodVer();
System.out.println("학생부 프로그램");
String[] datas = new String[5];
int cnt = 0;
while (true) {
int menu = st.insertMenu();
if (menu == 0) {
break;
}
else if (menu == 1) {
//T:저장가능 F:저장불가
if(!st.checkStuFull(cnt, datas)) {
continue;
}
st.insertName("저장", cnt, datas, 0); //num<1이라면 checkundo 변경전이름동일은 줄력되지 않음
} //else if (menu == 1)
else if (menu == 2) {
//T:학생부에 값이 있음 //F:학생부에 값이 없음
if(!st.checkStuNull(cnt)) {
continue;
}
st.selectAll(cnt, datas);
} //else if (menu == 2)
else if (menu == 3) {// 이름으로 검색
st.searchName(cnt, datas, st.insertSearchCont());
} //else if (menu == 3)
else if (menu == 4) {// 번호로 검색
//T:학생부에 값이 있음 //F:학생부에 값이 없음
if(!st.checkStuNull(cnt)) {
continue;
}
int num = st.searchNum("검색", cnt, datas);
}//else if (menu == 4)
else if (menu == 5) { // 이름변경
//T:학생부에 값이 있음 //F:학생부에 값이 없음
if(!st.checkStuNull(cnt)) {
continue;
}
int num = st.searchNum("저장", cnt, datas);
st.insertName("변경", cnt, datas, num);
} //else if (menu == 5)
else { // 유효성 검사
System.out.println("제대로 입력해주세요~~");
}
}
}//main
//메뉴 선택 입력받기 /menu
public int insertMenu() {
Scanner sc = new Scanner(System.in);
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("0. 프로그램 종료");
System.out.println("==============");
System.out.print("메뉴 입력 >> ");
return sc.nextInt();
}
//학생 전체 출력 /void
public void selectAll(int cnt, String[] datas) {
System.out.println("**학생목록**");
for(int i = 0; i<cnt; i++) {
System.out.println((i+1)+"번 학생 : "+datas[i]);
}
System.out.println("**********");
}
//입력받기 /searchContent
public String insertSearchCont() {
Scanner sc = new Scanner(System.in);
System.out.print("검색어 입력 >> ");
return sc.next(); //searchKeyword도 많이 사용함
}
//이름으로 검색 출력
public void searchName(int cnt, String[] datas, String searchContent) {
System.out.println("===================");
boolean flag = false;
for(int i = 0; i<cnt; i++) {
if(datas[i].contains(searchContent)) {
System.out.println(datas[i]);
flag = true;
}
}
if(!flag) {//만약에 검색결과가 없다면
System.out.println("검색결과가 없습니다.");
}
System.out.println("===================");
}
//학생부가 비었는지 확인 /boolean
public boolean checkStuNull(int cnt) { //T:학생부에 값이 있음 //F:학생부에 값이 없음
if(cnt<=0) {
System.out.println("검색할 학생 데이터가 없습니다!");
return false; //continue
}
return true;
}
//학생부가 전부 찼는지 확인
public boolean checkStuFull(int cnt, String[] datas) {//T:저장가능 F:저장불가
if(cnt >= datas.length) {//저장할 수 있는 최대로 이미 저장이 되어있는 경우라면
System.out.println("더 이상 데이터를 저장할 수 없습니다!");
return false; //continue
}
return true;
}
//저장된 범위인지 확인/boolean
public boolean checkStuRange(int cnt, int num) { //T:범위안의 값 F:범위밖의 값
if(1<=num && num<=cnt) {
return true;
}
System.out.println("올바른 번호를 입력해주세요!");
return false;
}
//번호 입력받고 범위검증+결과출력 /num
public int searchNum(String division, int cnt, String[] datas) {//division => 검색/저장
Scanner sc = new Scanner(System.in);
int num;
while(true) {
System.out.print(division+"할 학생의 번호 입력 >> ");
num = sc.nextInt();
//public boolean checkStuRange(int cnt, int num) { //T:범위안의 값 F:범위밖의 값
if(checkStuRange(cnt, num)) {
break;
}
}
System.out.println(num+"번 학생의 이름은 "+datas[num-1]+"입니다.");
return num;
}
//변경전이름과 같은지 아닌지 출력 /void
public void checkUndo(String name, String[] datas, int num) {
if(!(num<1)&&name.equals(datas[num-1])) {//내 이전이름이면
//이전이름이라 안됨
System.out.println("변경 전 이름과 동일하여 변경이 불가합니다.");
}
else {//사용중인이름이라 안됨
System.out.println("이미 존재하는 이름입니다.");
}
}
//학생부에 이름이 있는지 확인하고/boolean 변경전이름과 같은지 아닌지 확인
public boolean checkName(int cnt, String name, String[] datas, int num) { //num<1이라면 checkundo 변경전이름동일은 줄력되지 않음
for(int i = 0; i< cnt; i++) {
if(name.equals(datas[i])) {
//변경전이름과 같은지 아닌지 출력 /void
//checkUndo(String name, String[] datas, int num)
checkUndo(name, datas, num);
return true;
}
}
return false;
}
//이름을 받아 검증 후 저장
public void insertName(String division, int cnt, String[] datas, int num) {//division => 저장/변경
Scanner sc = new Scanner(System.in);
String name;
while(true) {
System.out.print(division+"할 이름을 입력해주세요 >> ");
name = sc.next();
System.out.print("정말 "+name+"(으)로 하시겠습니까? (Y/N) >> ");
String answer = sc.next();
if(answer.equals("Y")) {//제대로 입력했다면
if(!checkName(cnt, name, datas, num)) {//!이미저장되어있다면
break;
}
}
}
if(division.equals("저장")) {
datas[cnt]=name;
cnt++;
}
else { //변경
datas[num-1]=name;
}
System.out.println(name+"(으)로 "+division+"되었습니다.");
}
}//class
[풀이]
(아직 객체를 배우지 않아 static으로 선언됨)
더보기
package class02;
import java.util.Scanner;
public class Test01 {
public static int sample(String[] datas) {
// 학생부 배열에 샘플 데이터를 저장해주고,
// 몇명이 저장되었는지 반환해주는 함수
datas[0]="티모";
datas[1]="아리";
datas[2]="모르가나"; // 배열은 call by reference ▶ 반환 x
int cnt=3; // 원시타입 ▶ 반환 o
return cnt;
}
public static int printMenu() {
// 메뉴를 출력해주고,
// 사용자로부터 메뉴번호로 입력받은 값을 반환해주는 함수
Scanner sc=new Scanner(System.in);
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("0. 프로그램 종료");
System.out.println("===============");
System.out.print("메뉴 입력 >> ");
int menu=sc.nextInt();
return menu;
}
public static boolean isFull(int cnt,String[] datas) {
// 더 이상 학생 데이터를 저장할 수 없을때
if(cnt >= datas.length) {
System.out.println("더이상 데이터를 저장할수없습니다!");
return true;
}
return false;
}
public static boolean isEmpty(int cnt) {
// 아직 저장된 학생 데이터가 전혀 없을때
if(cnt<=0) {
System.out.println("저장된 학생 데이터가 없습니다.");
return true;
}
return false;
}
public static String inputName(int cnt,String[] datas) {
// 사용자가 이름을 입력하면 그 이름 값을 반환하는 함수
Scanner sc=new Scanner(System.in);
String name;
while(true) {
System.out.print("변경할 이름을 입력해주세요. >> ");
name=sc.next();
System.out.print("정말 "+name+"(으)로 하시겠습니까? (Y/N) >> ");
String answer=sc.next();
if(answer.equals("Y")) {
boolean flag=false;
for(int i=0;i<cnt;i++) {
if(name.equals(datas[i])) {
flag=true;
System.out.println(name+"은(는) 이미 존재하는 이름입니다...");
}
}
if(!flag) {
break;
}
}
}
return name;
}
// 학생부 전체 출력 담당하는 기능의 함수
// input, output 먼저 생각해보기!!!!!!!!!!
// input : 학생부 데이터, 현재 저장된 학생의 수
// output : x
public static void printStudents(String[] datas,int cnt) {
System.out.println("=== 학생 목록 ===");
for(int i=0;i<cnt;i++) {
System.out.println((i+1)+"번 학생 "+datas[i]);
}
System.out.println("====================");
}
public static boolean isRight(int num,int cnt) {
if(1<=num && num<=cnt) {
return true;
}
return false;
}
// 학생 번호로 검색
// input : 학생부 데이터, 현재 저장된 학생의 수
// output : x (대체적으로 출력(select,read,R)기능은 output이 없음)
public static int selectOne(String[] datas,int cnt) {
Scanner sc=new Scanner(System.in);
int num;
while(true) {
System.out.print("검색할 번호 입력 >> ");
num=sc.nextInt();
if(isRight(num,cnt)) {
break;
}
}
System.out.println(num+"번 학생은 "+datas[num-1]+"입니다.");
return num;
}
public static void main(String[] args) {
String[] datas = new String[5];
Scanner sc=new Scanner(System.in);
System.out.println("학생부 프로그램");
int cnt=sample(datas);
while(true) {
int menu=printMenu();
if(menu==0) {
System.out.println("프로그램이 종료됩니다.");
break;
}
else if(menu==1) { // 학생추가
if(isFull(cnt,datas)) {
continue;
}
String name=inputName(cnt, datas);
datas[cnt]=name;
cnt++;
System.out.println(name+"이(가) 저장되었습니다!");
}
else if(menu==2) { // 학생부 전체출력
if(isEmpty(cnt)) {
continue;
}
printStudents(datas,cnt);
}
else if(menu==3) { // 이름으로 검색
System.out.print("검색어 입력 >> ");
String searchContent=sc.next(); // searchKeyword
boolean flag=false; // 검색결과가 없는 상태로 시작
// 학생부를 하나하나 확인하면서
System.out.println("===============");
for(int i=0;i<cnt;i++) {
if(datas[i].contains(searchContent)) {
System.out.println(datas[i]);
flag=true; // 검색결과를 찾은 상태
}
}
if(!flag) { // 검색결과가 없다면
System.out.println("검색결과가 없습니다...");
}
System.out.println("===============");
}
else if(menu==4) { // 번호로 검색 => PK로 검색 == selectOne(getOne)
if(isEmpty(cnt)) {
continue;
}
selectOne(datas,cnt);
}
else if(menu==5) { // 이름변경
if(isEmpty(cnt)) {
continue;
}
int num=selectOne(datas,cnt);
datas[num-1]=inputName(cnt, datas);
}
else { // 유효성 검사
System.out.println("제대로 입력해주세요~~");
}
}
}
}
[아쉬웠던 부분]
너무 메소드를 남발했던 부분이 있는 것 같다. 중복되는 부분을 메소드로 변경할 것.
그리고 변수명을 지을 때 일반적으로 잘 사용되는 규칙을 따를 것.
(boolean 타입 반환이라면 is나 has로 시작되게끔)
그리고 cnt는 원시타입인데 반환을 하지 않아 값이 제대로 반영되지 않고 있었다...!
>>코드를 변경하면 꼼꼼하고 세세하게 테스트해보는 습관을 길러야겠다!
'problem solving > 과제&실습 코딩' 카테고리의 다른 글
[실습/JAVA] Car class로 오버로딩 연습 (+풀이 0702) (0) | 2024.07.02 |
---|---|
[실습/JAVA] 학생으로 클래스 연습하기 (+풀이 0701) (0) | 2024.07.01 |
[과제/코드업/JAVA] 1362 : 숫자 피라미드 3 (0) | 2024.06.29 |
[과제/코드업/JAVA] 1360 : 숫자 피라미드 2 (0) | 2024.06.28 |
[과제/JAVA] 별찍기 추가 (0) | 2024.06.28 |