메인Class
import java.util.ArrayList;
import java.util.*;
public class ScoreManager {
ArrayList<Student> arr=new ArrayList<Student>();
public static void main(String[] args) {
ScoreManager sm=new ScoreManager();
Scanner sc=new Scanner(System.in);
for(;;) {
System.out.println("1. 입력 2. 출력 3. 검색 4. 삭제 5. 수정 0. 종료");
int num=sc.nextInt();
if(num==1) {
sm.input(sc); // 입력메소드 실행
}else if (num==2) {
sm.output(sc); // 출력 메소드 실행
}else if(num==3) {
sm.searchInfo(sc);// 검색 메소드 실행
}else if(num==4) {
sm.deleteInfo(sc);// 삭제 메소드 실행
}else if(num==5) {
sm.modifyInfo(sc);// 수정 메소드 실행
}else if(num==0) {
System.exit(0);
}else {
System.out.println("잘못입력하셨습니다");
}
}
}
public void input(Scanner sc) {// 데이터 입력
System.out.println("학생 이름을 입력하시오");
String name=sc.next(); //이름 입력
System.out.println("학과 를 입력하시오");
String department=sc.next(); //학과 입력
String studentNum=null;
int flag=0; //중복 확인 true false를 알기위해 flag변수 생성
for(;;) { // 학번 중복이면 안되니깐 중복된값 입력 불가
flag=0;
System.out.println("학번을 입력하시오");
studentNum=sc.next();//학번입력
for(int i=0;i<arr.size();i++) {
if(arr.get(i).getStudentNum().equals(studentNum)) {// 만약에 입력한 학번과 같은 학번이 있으면
System.out.println(studentNum+"학번은 중복된 학번이라 입력을 다시해주세요.");
flag=1;//중복된 학번이있으면 1
break;
}
}
if(flag==1) {
continue;// 중복된 학번이있엇던거니깐 포문으로 다시돌아가서 학번 다시입력해
}else if(flag==0) {
break;// 중복된 학번없음
}
}
System.out.println("국어 성적입력");
int kor=sc.nextInt();//국어 성적입력
System.out.println("수학 성적입력");
int math=sc.nextInt();// 수학 성적 입력
System.out.println("영어 성적입력");
int eng=sc.nextInt();//영어 성적 입력
Student stu=new Student(department,name,studentNum,kor,eng,math); //stu 객체 생성
arr.add(stu); //stu객체 arraylist에 저장
}
public void output(Scanner sc) {//데이터 전체출력
System.out.println("-----------출력------------");
System.out.println("1. 성적순 출력 2. 이름순 출력");
int num=sc.nextInt();// 선택 숫자 입력
if(num==1) {
System.out.println("----------------성적순 출력----------------------");
Collections.sort(arr,new ScoreComparator().reversed());//arraylist 성적내림차순정렬
for(int i=0;i<arr.size();i++) {// arraylist 사이즈만큼 출력
System.out.println(arr.get(i).toString());
}
}else if(num==2) {
System.out.println("----------------이름순 출력----------------------");
Collections.sort(arr,new NameComparator());//성적높은순 정렬
for(int i=0;i<arr.size();i++) {//arraylist 사이즈만큼 출력
System.out.println(arr.get(i).toString());
}
}else {
System.out.println("입력오류");
}
}
public void searchInfo(Scanner sc) {
for(;;) {
int flag=0; //검색할 데이터가있엇는지 확인을 위해
System.out.println("1. 이름검색 2. 학과검색 3.학번검색 4.성적 검색 0. 검색종료");
int n=sc.nextInt();
if(n==1) {// 이름검색
System.out.println("검색하실 이름을 입력해주세요");
String name=sc.next();
for(int i=0;i<arr.size();i++) {
if(arr.get(i).getName().equals(name)) {//찾는 이름이 리스트에 있으면 참
infoDisp(i);//해당 인덱스값가진 사람 정보출력
flag=1;
}
}
}else if(n==2) { //학과 검색
System.out.println("검색하실 학과를 입력해주세요");
String dep=sc.next();
for(int i=0;i<arr.size();i++) {
if(arr.get(i).getDepartment().equals(dep)) {// 찾는 학과가 리스트에 있으면 참
infoDisp(i);// 해당 인덱스 값 가진 사람 정보 출력
flag=1;
}
}
}else if(n==3) {//학번 검색
System.out.println("검색하실 학번를 입력해주세요");
String stuNum=sc.next();
for(int i=0;i<arr.size();i++) {
if(arr.get(i).getStudentNum().equals(stuNum)) { // 찾는 학번이 리스트에 있으면 참
infoDisp(i); //해당 인덱스 값 가진 사람 정보 출력
flag=1;
}
}
}else if(n==4) {//성적 검색
System.out.println("어떤 성적을 검색?");
System.out.println("1.국어 성적 2. 영어 성적 3. 수학 성적 ");
int c=sc.nextInt();
if(c==1) {//국어 성적 검색
System.out.println("몇점이상 검색?");
int score=sc.nextInt();
Collections.sort(arr,new Comparator<Student>(){ //국어 성적순으로 정렬 익명클래스
@Override
public int compare(Student stu1,Student stu2) {
if(stu1.getKor()<stu2.getKor()) {
return 1; // stu1점수가 stu2 점수보다 작을시 위치 바꿈 내림차순이니깐
}else if(stu1.getKor()>stu2.getKor()) {
return -1;// 이동없음
}
return 0;//같으면 이동없음
}
});
for(int i=0;i<arr.size();i++) {
if(arr.get(i).getKor()>=score) {// 찾고자하는 성적 이상일시 출력
infoDisp(i);
flag=1;
}
}
}else if(c==2) {
Collections.sort(arr,new Comparator<Student>(){ //영어 성적순으로 정렬 익명클래스
@Override
public int compare(Student stu1,Student stu2) { //두객체 비교
if(stu1.getEng()<stu2.getEng()) {
return 1;
}else if(stu1.getEng()>stu2.getEng()) {
return -1;
}
return 0;
}
});
System.out.println("몇점이상 검색?");
int score=sc.nextInt();
for(int i=0;i<arr.size();i++) {
if(arr.get(i).getEng()>=score) {
infoDisp(i);
flag=1;
}
}
}else if(n==3) {
Collections.sort(arr,new Comparator<Student>(){ //영어 성적순으로 정렬 익명클래스
@Override
public int compare(Student stu1,Student stu2) {
if(stu1.getMath()<stu2.getMath()) {
return 1;
}else if(stu1.getMath()>stu2.getMath()) {
return -1;
}
return 0;
}
});
System.out.println("몇점이상 검색?");
int score=sc.nextInt();
for(int i=0;i<arr.size();i++) {
if(arr.get(i).getMath()>=score) {
infoDisp(i);
flag=1;
}
}
}
}else if(n==0) {//검색종료
break;
}
if(flag==0) {//flag가 0이면 찾는 값이없는것이다.
System.out.println("찾는 data가 존재 하지않습니다.");
continue;
}else {
break;
}
}
}
public void infoDisp(int index) {//찾고하는 사람 인덱스 받아서 그사람만 출력
System.out.println(arr.get(index).toString());
}
public void deleteInfo(Scanner sc) {//data 삭제
for(;;) {
int flag=0;
System.out.println("삭제할 학번을 입력하세요 0.삭제종료");
String stuNum=sc.next();
for(int i=0;i<arr.size();i++) {
if(arr.get(i).getStudentNum().equals(stuNum)) {// 리스트에 해당 학번이있으면 참
infoDisp(i); //해당인덱스 사람 정보값 출력
flag=1;
for(;;) {
System.out.println("위 학생의 정보를 삭제하시겠습니까? 1.예 2. 아니오");
int n=sc.nextInt();
if(n==1) {
arr.remove(i); //i 정보 삭제
System.out.println("삭제완료");
break;
}else if(n==2){
break;
}else {
System.out.println("잘못된값 입력");
continue;
}
}
break;
}
}
if(flag==0) {//flag가 0이면 찾는 값이없는것이다.
System.out.println("삭제할 학번이 존재 하지않습니다.");
continue;
}else if(stuNum.charAt(0)=='0'){// 삭제종료
break;
}else {
break;
}
}
}
public void modifyInfo(Scanner sc) {//data 수정
for(;;) {
int flag=0;
System.out.println("수정할 학번을 입력하세요 0.변경종료");
String stuNum=sc.next();
for(int i=0;i<arr.size();i++) {
if(arr.get(i).getStudentNum().equals(stuNum)) {//수정할 학번이 존재하는지 확인
infoDisp(i); // 해당 인덱스 정보 출력
flag=1;
for(;;) {
System.out.println("1.이름변경 2. 학과변경 3. 성적변경 0.뒤로가기");
int n=sc.nextInt();
if(n==1) {
System.out.println("이름 입력: ");
String name=sc.next();// 이름 입력
System.out.println(arr.get(i).getName()+"을 "+name+"으로 변경완료");
arr.get(i).setName(name);// 해당배열에 name값 set
break;
}else if(n==2){
System.out.println("전과할 학과 입력: ");
String dep=sc.next();// 학과 입력
System.out.println(arr.get(i).getDepartment()+"을 "+dep+"으로 변경완료");
arr.get(i).setDepartment(dep);// 해당배열에 입력한 학과 set
break;
}else if(n==3){
System.out.println("어떤 성적을 변경?");
System.out.println("1.국어 성적 2. 영어 성적 3. 수학 성적 ");
int s=sc.nextInt();
int score=0;
switch(s) {
case 1:
System.out.println("변경된 국어 성적 입력");
score=sc.nextInt();
arr.get(i).setKor(score);//입력한 성적으로 set
break;
case 2:
System.out.println("변경된 영어 성적 입력");
score=sc.nextInt();
arr.get(i).setEng(score);//입력한 성적으로 set
break;
case 3:
System.out.println("변경된 수학 성적 입력");
score=sc.nextInt();
arr.get(i).setMath(score);//입력한 성적으로 set
break;
}
break;
}else if(n==0) {
System.out.println("뒤로가기");
break;
}else {
System.out.println("잘못된값 입력");
continue;
}
}
break;
}
}
if(flag==0) {//flag가 0이면 찾는 값이없는것이다.
System.out.println("수정할 학번이 존재 하지않습니다.");
continue;
}else if(stuNum.charAt(0)=='0'){// 변경종료
break;
}else {
break;
}
}
}
}
public class Student{
private String name,studentNum,department; //이름 학번 학과
private Subject kor,math,eng;
private float avg; //평균
private int total;// 총점
public Student() {
kor=new Subject();
math=new Subject();
eng=new Subject();
}
public Student(String department,String name,String studentNum,int kor,int eng,int math) {
this.name=name;
this.department=department;
this.studentNum=studentNum;
this.kor=new Subject(kor);
this.eng=new Subject(eng);
this.math=new Subject(math);
total=this.getKor()+this.getEng()+this.getMath();
avg=total/3.f;
}
void setDepartment(String dep) {
this.department=dep;
}
public String getDepartment() {
return department;
}
void setName(String name) {
this.name=name;
}
public String getName() {
return name;
}
void setStudentNum(String stn) {
this.studentNum=stn;
}
public String getStudentNum() {
return studentNum;
}
public int getKor() {
return kor.getScore();
}
public void setKor(int kor) {
this.kor.setScore(kor);
}
public int getMath() {
return math.getScore();
}
public void setMath(int math) {
this.math.setScore(math);
}
public int getEng() {
return eng.getScore();
}
public void setEng(int eng) {
this.eng.setScore(eng);
}
public float getAvg() {
return avg=getTotal()/3.f; // == total/3.0f;
}
public void setAvg(float avg) {
this.avg = avg;
}
public int getTotal() {
return total=kor.getScore()+eng.getScore()+math.getScore();
}
@Override
public String toString() {// 출력 형식
return "이름: "+this.name+"\t"+" 학과: "+this.department+"\t"+" 학번: "+this.studentNum+"\t"+" 국어: "+getKor()+ "\t"+" 영어: "+getEng()
+"\t"+" 수학: "+getMath()+"\t"+" 총점: "+getTotal()+"\t"+" 평균: "+getAvg();
}
}
public class Subject {
private int score;
public Subject() {}
public Subject(int score) {this.score=score;}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
성적비교 + 이름순 비교 클래스
import java.util.Comparator;
public class ScoreComparator implements Comparator<Student>{// 성적비교
@Override
public int compare(Student stu1,Student stu2) {
if(stu1.getTotal()>stu2.getTotal()) {
return 1;
}else if(stu1.getTotal()<stu2.getTotal()) {
return -1;
}
return 0;
}
}
import java.util.*;
public class NameComparator implements Comparator<Student>{// 이름 비교
@Override
public int compare(Student stu1, Student stu2) {
return stu1.getName().compareTo(stu2.getName());
}
}
다음은 Set<E>로 성적관리 차례이다
'Java기초' 카테고리의 다른 글
| [Java]Map<E> 성적관리 (0) | 2022.07.07 |
|---|---|
| [Java]Set<E> 성적관리 (0) | 2022.07.07 |
| [Java] Interface and Inner Class (0) | 2022.07.05 |
| [Java]동적바인딩 정적바인딩 (0) | 2022.07.05 |
| [JAVA] Class 관계 (has~ a) 포함오브젝트 활용 (0) | 2022.06.30 |
댓글