반응형
배열리스트까지의 내용을 활용하여 학생관리시스템을 구현할 수 있다.
1. 출석부 출력
2. 학생 등록
3. 학생 정보 출력
4. 학생 정보 변경
5. 학생 삭제
6. 1등 학생 조회
7. 프로그램 종료 와 같은 기능들로 구성된 시스템이다.
package class05;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;
class Student {
//멤버변수
static Scanner sc = new Scanner(System.in);
private int pk; //학번 : 접근에 주의
int score; //점수
String name; //학생이름
public int getPk() {
return pk;
}
public void setPk(int pk) {
this.pk = pk;
}
public Student(int pk, String name) {
this(pk, 0 , name);
}
public Student(int pk, int score, String name) {
this.pk = pk;
this.score = score;
this.name = name;
}
public void show() { //학생정보출력메서드
System.out.println(pk +" | " + score+"점 | "+ name);
System.out.println();
}
@Override
public String toString() { //출석부
return pk +" | "+name;
}
}
public class Test05 {
private static Scanner sc;
public static void main(String[] args) {
sc = new Scanner(System.in);
Random r = new Random();
String mainMsg = "1. 출석부 출력 \n2. 학생 등록 \n3. 학생 정보 출력 \n4. 학생 정보 변경 \n5. 학생 삭제 \n6. 1등 학생 조회 \n7. 프로그램 종료";
ArrayList <Student> data = new ArrayList <Student> ();
int choice; // main에서의 사용자 선택
int num; // 입력받는 학번
int topIndex = 0; // 1등 학생 index
int pk = 2022000; // 학번의 시작번호
String errMsg = "해당 학번의 학생은 존재하지 않습니다"; //유효성검사멘트
String missMsg = "잘못된 범위입니다"; //경계값검사멘트
//기초데이터
data.add(new Student(++pk, 73, "고길동"));
data.add(new Student(++pk, 85, "곽나리"));
while(true) {
//main화면 출력
System.out.println("======화면======");
System.out.println(mainMsg);
System.out.println("===============");
//사용자에게 받을 입력
System.out.println(">>");
choice = sc.nextInt();
// 종료조건
if(choice==7) {
System.out.println("프로그램 종료");
break;
//출석부 출력
} else if(choice==1){
Iterator <Student> itr = data.iterator();
while(itr.hasNext()) {
System.out.println(itr.next() + " ");
}
//학생 등록
} else if (choice==2) {
System.out.println("등록할 학생 이름 : ");
String name = sc.next(); // name = 입력받은 이름
int score = r.nextInt(101); // score = 랜덤생성
data.add(new Student(++pk, score, name));
//학생정보출력
} else if (choice==3) {
while(true) {
System.out.println("조회할 학생의 학번 : ");
num = sc.nextInt();
if(2022000<num && num<2023000) {
break; //잘 입력됐으면 종료!
}
System.out.println(missMsg);
}
boolean flag = false; // 학번존재 : true / 미존재 : false
for(int i=0; i<data.size(); i++) {
if(num==data.get(i).getPk()) {
flag=true;
data.get(i).show();
break;
}
}
if(!flag) {
System.out.println(errMsg);
}
//학생정보변경
} else if (choice==4) {
while(true) {
System.out.println("변경할 학생의 학번 : ");
num = sc.nextInt();
if(2022000<num && num<2023000) {
break; //잘 입력됐으면 종료!
}
System.out.println(missMsg);
}
boolean flag = false; // 학번존재 : true / 미존재 : false
for(int i=0; i<data.size(); i++) {
if(num==data.get(i).getPk()) {
flag=true;
System.out.println("변경할 점수 : ");
int newScore = sc.nextInt();
if(newScore>=0 && newScore<=100) { //입력이 0~100사이면
data.get(i).score=newScore;
System.out.println("수정 완료");
} else { // 0~100이외의 값이 입력되면
System.out.println("잘못된 점수입니다.");
}
break;
}
}
if(!flag) {
System.out.println(errMsg);
}
//학생삭제
} else if (choice==5) {
while(true) {
System.out.println("삭제할 학생의 학번 : ");
num = sc.nextInt();
if(2022000<num && num<2023000) {
break; //잘 입력됐으면 종료!
}
System.out.println(missMsg);
}
boolean flag = false; // 학번존재 : true / 미존재 : false
for(int i=0; i<data.size(); i++) {
if(num==data.get(i).getPk()) {
flag=true;
data.remove(i);
System.out.println("삭제 완료");
System.out.println();
break;
}
}
if(!flag) {
System.out.println(errMsg);
}
//1등 학생 조회
} else if(choice==6){
//점수의 최대값 조회
topIndex = 0;
for(int i=1;i<data.size();i++) {
if(topIndex<data.get(i).score) {
topIndex=data.get(i).score;
}
}
//최대값을 가진 학생들을 출력
for(int i=0;i<data.size();i++) {
if(topIndex==data.get(i).score) {
data.get(i).show();
}
}
} else { // 유효성 검사
System.out.println("잘못된 입력입니다");
}
}
}
}
메서드를 잘 활용하여 main 부분을 최대한 간략하게 만드는 로직도 고려해보면 좋을 것 같다.
반응형
'JAVA' 카테고리의 다른 글
[MVC] 계산기 : 예제 (0) | 2022.01.18 |
---|---|
[MVC] 학생관리시스템 : 예제 (0) | 2022.01.17 |
[MVC] MVC개념 & DAO·VO (0) | 2022.01.15 |
[파일 입출력] TXT & 이미지형식 (+Wrapper Class) (0) | 2022.01.14 |
[Thread] 블록 & 동기화 (0) | 2022.01.13 |