package class06;
import java.util.Scanner;
//객체 배열
class Student {
static int studentNum=1001;
int num; // PK 값은 사용자가 부여 xxx
String name;
int score;
char grade;
Student(String name){
this(name,0);
}
Student(String name,int score){
this.num=Student.studentNum++;
this.name=name;
this.score=score;
this.setGrade();
System.out.println("학생 정보 생성 완료!");
}
void printInfo() {
System.out.println("번호 : "+this.num);
System.out.println("이름 : "+this.name);
System.out.println("점수 : "+this.score);
System.out.println("등급 : "+this.grade);
}
void changeScore(int score) {
this.score=score;
this.setGrade();
System.out.println("학생 정보 변경 완료!");
}
void setGrade() {
this.grade='C';
if(60<=this.score && this.score<80) {
this.grade='B';
}
else if(80<=this.score) {
this.grade='A';
}
}
}
public class Test01 {
// '학생(객체)'와 무관한 기능 --->> 함수
public static boolean isFull(int cnt,Student[] datas) {
if( cnt>=datas.length ) {
return true;
}
return false;
}
// 성적 입력 유효성 검사 --->> 함수 ===>> VIEW
public static void printMenu() {
System.out.println("1. 전체출력");
System.out.println("2. 번호로 학생 검색");
System.out.println("3. 학생추가");
System.out.println("4. 성적변경");
System.out.println("5. 등급으로 학생 검색");
System.out.println("6. 이름으로 학생 검색");
System.out.println("0. 프로그램 종료");
System.out.print(">> ");
}
public static char inputGrade() {
Scanner sc=new Scanner(System.in);
System.out.print("검색할 학생의 등급을 입력하세요>>");
char grade=sc.next().charAt(0);
return grade;
}
public static void hasGrade(int cnt, Student[] datas, char grade) {
int i; //scope 이슈
boolean flag=false;
for(i=0;i<cnt;i++) {
if(grade==datas[i].grade) {
datas[i].printInfo();
flag=true;
}
}
if(!flag) {
printErr();
}
}
public static void hasName(Student[] datas, int cnt, String name) {
boolean flag = false;
int i;
for(i = 0; i < cnt; i++) {
if(datas[i].name.contains(name)) {
System.out.println("해당하는 학생 정보 출력");
datas[i].printInfo();
flag = true;
}
}
if(!flag) {
printErr();
}
}
public static String inputName() {
Scanner sc=new Scanner(System.in);
System.out.print("이름으로 학생을 검색합니다. 이름을 입력해주세요!>>");
String name = sc.next();
return name;
}
public static void printErr() {
System.out.println("해당하는 학생이 없습니다");
}
public static int inputNum() {
Scanner sc=new Scanner(System.in);
System.out.print("번호입력 >> ");
int num=sc.nextInt();
return num;
}
public static void hasNum(int cnt,int num, Student[] datas) {
boolean flag=false;
for(int i=0;i<cnt;i++) {
if(num == datas[i].num) {
datas[i].printInfo();
flag=true;
break;
}
}
if(!flag) {
printErr();
}
}
public static void main(String[] args) {
Student[] datas=new Student[3];
datas[0]=new Student("티모");
datas[1]=new Student("모르가나",68);
// 샘플 데이터
int cnt=2;
Scanner sc=new Scanner(System.in);
while(true) {
printMenu();
int menu=sc.nextInt();
if(menu==0) {
break;
}
else if(menu==1) {
for(int i=0;i<cnt;i++) {
datas[i].printInfo();
}
}
else if(menu==2) {
int num=inputNum();
// datas == 배열 == 학생부
// datas[i] == 배열[인덱스번호] == 배열의 요소 == 학생 == 학생 객체
// datas[i].num == 학생.번호 == 학생 객체.멤버변수
hasNum(cnt, num, datas);
}
else if(menu==3) {
if(isFull(cnt,datas)) {
System.out.println("학생부 데이터에 저장공간이 없습니다!");
continue;
}
System.out.print("이름 입력 >> ");
String name=sc.next();
System.out.print("성적을 입력하시겠습니까? Y/N >> ");
String ans=sc.next();
if(ans.equals("Y")) {
System.out.print("성적 입력 >> ");
int score=sc.nextInt();
datas[cnt++]=new Student(name,score);
}
else {
datas[cnt++]=new Student(name);
}
}
else if(menu==4) { // 성적변경 R -> U // 누구를 바꿀지, 뭐로 바꿀지 결정
int num=inputNum();
// datas == 배열 == 학생부
// datas[i] == 배열[인덱스번호] == 배열의 요소 == 학생 == 학생 객체
// datas[i].num == 학생.번호 == 학생 객체.멤버변수
boolean flag=false;
int i; // scope 이슈 해결
for(i=0;i<cnt;i++) {
if(num == datas[i].num) {
datas[i].printInfo();
flag=true;
break;
}
}
if(!flag) {
printErr();
continue;
}
System.out.print("변경할 점수입력 >> ");
int score=sc.nextInt();
datas[i].changeScore(score);
} else if(menu == 5) { // 등급으로 학생 검색
char grade=inputGrade();
grade = Character.toUpperCase(grade);
hasGrade(cnt, datas, grade);
}
else if(menu == 6) { // 이름으로 학생 검색
/*이름 검색 >> 출력
* 이름 문자열로 입력받음
*
* 해당 글자가 들어가는 학생들을 모두 출력합니다! 출력
* 해당 글자 들어가는 모든 학생 출력
* */
String name=inputName();
hasName(datas,cnt, name);
}
}
}
}
<코드리뷰>
※ inputGrade() :유효성 검사 필요 // uppercase가 이 안에 있으면 좋을듯
inputName() : 유효성 검사 !!
grade = Character.toUpperCase(grade); 가 char grade=inputGrade(); 안에 들어가는게 좋음.
- 함수이름도 has~~면 반환값이 boolean임(T?f?)
- 함수명 변경하기 : printGrade()/ printName()
'JAVA > 코드' 카테고리의 다른 글
| TEAM과제 -삼중상속 (0) | 2025.01.18 |
|---|---|
| 포켓몬을 잡아라- 객체배열 (0) | 2025.01.16 |
| 객체 배열- 학생부 프로그램 (0) | 2025.01.13 |
| 코드리뷰 ②- 학생부 프로그램 함수화 -V&M (0) | 2025.01.10 |
| 코드리뷰 ①- 선택정렬 (0) | 2025.01.09 |