본문 바로가기
Java기초

[Java] 성적처리 프로그램심화(array이해하기

by jackypark 2022. 6. 24.

1번을누르면. 입력
몇반에 입력 하겠습니까?
몇반 누구 국영수 추가 후 다시 1 번 2번 물음으로 


2번을 누르면. 출력
1.전체 출력-성적순출력 2. 반출력

3번 검색
1.이름으로 검색(동명이은도 검색)
2. 성적으로 검색 (1.국2.영3.수4.총)
1. 다음 점수를 입력 그러면 국어 90점입력하면 90점이상인 사람들 출력

4.종료SYSTEM.EXIT

import java.util.Scanner;

public class Day4Task {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String [][]name; //name
		int [][][]score; //kor eng math total
		float [][]avg;
		
		String []subject= {"국어","영어","수학","총점"};
		
		System.out.println("학교에 몇반있습니까?");
		int num=sc.nextInt(); // class 개수입력
		name=new String[num][50];
		score=new int[num][50][4];		
		avg=new float[num][50];
	
		for(;;) {//무한루프
			System.out.println("1.입력 2.출력 3. 검색4. 종료");
			int c=sc.nextInt(); // 번호 선택 
			if(c==1) {//입력
				System.out.println("몇반에 정보를 추가할것입니까?");
				int n=sc.nextInt()-1;// 어떤반에 정보를 입력할껀지 입력	 배열은0반부터 시작하기때문 -1함
				for(int i=0;i<name[n].length;i++) {
					if(name[n][i]==null) {
						System.out.println("이름입력");
						name[n][i]=sc.next();
						System.out.println("국어성적 입력");
						score[n][i][0]=sc.nextInt();
						System.out.println("영어성적 입력");
						score[n][i][1]=sc.nextInt();
						System.out.println("수학성적 입력");
						score[n][i][2]=sc.nextInt();
						score[n][i][3]=score[n][i][0]+score[n][i][1]+score[n][i][2]; //총점
						avg[n][i]=score[n][i][3]/3.f;//평균
						break;
					}					
				}
			}else if(c==2) {//출력
				System.out.println("1.전체출력 2. 반출력");
				int c1=sc.nextInt();
				if(c1==1) {// 전체출력
					for(int i=0;i<name.length;i++) {
						System.out.println(i+1+"반");
						for(int j=0;j<name[i].length;j++) {
							for(int k=j+1;k<name[i].length;k++) {
								if(avg[i][k]>avg[i][j]) {//성적 높은순 정렬 bubble sort
									String str=name[i][j];
									name[i][j]=name[i][k];
									name[i][k]=str;
									//국어성적 
									int temp=score[i][j][0];
									score[i][j][0]=score[i][k][0];
									score[i][k][0]=temp;
									//영어성적
									temp=score[i][j][1];
									score[i][j][1]=score[i][k][1];
									score[i][k][1]=temp;
									//수학성적
									temp=score[i][j][2];
									score[i][j][2]=score[i][k][2];
									score[i][k][2]=temp;
									//총점
									temp=score[i][j][3];
									score[i][j][3]=score[i][k][3];
									score[i][k][3]=temp;
									//평균
									float trash=avg[i][j];
									avg[i][j]=avg[i][k];
									avg[i][k]=trash;								
								}
							}
							if(name[i][j]!=null) {													
								System.out.print(name[i][j]+": ");
								for(int k=0;k<score[i][j].length;k++) {
									System.out.print(subject[k]+": "+score[i][j][k]+":점\t");
								}
								System.out.println("평균: "+avg[i][j]+":점");
							}
						}						
					}
				}else if(c1==2) {// 반출력
					System.out.println("몇반 출력?");
					int wCl=sc.nextInt()-1;// 배열은 0부터시작하는걸 생각해서 -1
					for(int i=0;i<name[wCl].length;i++) {
						if(name[wCl][i]!=null) {													
							System.out.print(name[wCl][i]+": ");
							for(int k=0;k<score[wCl][i].length;k++) {
								System.out.print(subject[k]+": "+score[wCl][i][k]+":점\t");
							}
							System.out.println("평균: "+avg[wCl][i]+":점");
						}
					}
				}
			}else if(c==3) {//검색
				System.out.println("1.이름검색 2.성적검색");
				int c1=sc.nextInt();
				if(c1==1) {//이름검색
					System.out.println("이름을 검색하시오");
					String findName=sc.next();
					for(int i=0;i<name.length;i++) {
						for(int j=0;j<name[i].length;j++) {
							if(findName.equals(name[i][j])) {//입력한 이름과 name[i]에있는 이름들을 비교해서 있으면 출력
								System.out.print(name[i][j]+": ");
								for(int k=0;k<score[i][j].length;k++) {
									System.out.print(subject[k]+": "+score[i][j][k]+":점\t");
								}
								System.out.println("평균: "+avg[i][j]+":점");
							}
						}					
					}
				}else if(c1==2) {//성적검색
					System.out.println("1.국어 2. 영어 3. 수학 4.총점");
					int c2=sc.nextInt()-1; //배열저장햇을때는 국어가 0 영어가 1 수학2 총점 3 이기때문 -1함
					System.out.println("몇점 이상성적만 검색할거니?");
					int findScore=sc.nextInt();
					for(int i=0;i<name.length;i++) {
						for(int j=0;j<name[i].length;j++) {
							if(name[i][j]!=null&&findScore<=score[i][j][c2]) {// 이름에 값이 있어야하고 그리고 내가 찾고싶은 점수와 성적들을 비교한다
								System.out.print(name[i][j]+": ");
								System.out.print(score[i][j][c2]+":점\t");
							}
						}
					}
					System.out.println();
				}
			}else if(c==4) {// 프로그램 종료
				System.exit(-1);
			}	
		}
	}
}

아래는 콘솔로 실행한 결과이다.

학교에 몇반있습니까?
3
1.입력 2.출력 3. 검색4. 종료
1
몇반에 정보를 추가할것입니까?
1
이름입력
박종현
국어성적 입력
40
영어성적 입력
30
수학성적 입력
20
1.입력 2.출력 3. 검색4. 종료
1
몇반에 정보를 추가할것입니까?
1
이름입력
김김김
국어성적 입력
50
영어성적 입력
60
수학성적 입력
60
1.입력 2.출력 3. 검색4. 종료
1
몇반에 정보를 추가할것입니까?
2
이름입력
류류류
국어성적 입력
30
영어성적 입력
40
수학성적 입력
20
1.입력 2.출력 3. 검색4. 종료
1
몇반에 정보를 추가할것입니까?
3
이름입력
다
국어성적 입력
50
영어성적 입력
40
수학성적 입력
40
1.입력 2.출력 3. 검색4. 종료
2
1.전체출력 2. 반출력
1
1반
김김김: 국어: 50:점	영어: 60:점	수학: 60:점	총점: 170:점	평균: 56.666668:점
박종현: 국어: 40:점	영어: 30:점	수학: 20:점	총점: 90:점	평균: 30.0:점
2반
류류류: 국어: 30:점	영어: 40:점	수학: 20:점	총점: 90:점	평균: 30.0:점
3반
다: 국어: 50:점	영어: 40:점	수학: 40:점	총점: 130:점	평균: 43.333332:점
1.입력 2.출력 3. 검색4. 종료
2
1.전체출력 2. 반출력
2
몇반 출력?
2
류류류: 국어: 30:점	영어: 40:점	수학: 20:점	총점: 90:점	평균: 30.0:점
1.입력 2.출력 3. 검색4. 종료
3
1.이름검색 2.성적검색
1
이름을 검색하시오
박종현
박종현: 국어: 40:점	영어: 30:점	수학: 20:점	총점: 90:점	평균: 30.0:점
1.입력 2.출력 3. 검색4. 종료
3
1.이름검색 2.성적검색
2
1.국어 2. 영어 3. 수학 4.총점
1
몇점 이상성적만 검색할거니?
40
김김김: 50:점	박종현: 40:점	다: 50:점	
1.입력 2.출력 3. 검색4. 종료
4

몰입형 4일차.. 너무 힘들다. 기초가 탄탄해지는 느낌이다.

 

***수정 삭제 기능 추가

import java.util.Scanner;

public class Day4Task {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		String [][]name; //name
		int [][][]score; //kor eng math total
		float [][]avg;
		
		String []subject= {"국어","영어","수학","총점"};
		
		System.out.println("학교에 몇반있습니까?");
		int num=sc.nextInt(); // class 개수입력
		name=new String[num][50];
		score=new int[num][50][4];		
		avg=new float[num][50];
	
		for(;;) {//무한루프
			System.out.println("1.입력 2.출력 3. 검색4. 삭제 5. 종료");
			int c=sc.nextInt(); // 번호 선택 
			if(c==1) {//입력
				System.out.println("몇반에 정보를 추가할것입니까?");
				int n=sc.nextInt()-1;// 어떤반에 정보를 입력할껀지 입력	 배열은0반부터 시작하기때문 -1함
				for(int i=0;i<name[n].length;i++) {
					if(name[n][i]==null) {
						System.out.println("이름입력");
						name[n][i]=sc.next();
						System.out.println("국어성적 입력");
						score[n][i][0]=sc.nextInt();
						System.out.println("영어성적 입력");
						score[n][i][1]=sc.nextInt();
						System.out.println("수학성적 입력");
						score[n][i][2]=sc.nextInt();
						score[n][i][3]=score[n][i][0]+score[n][i][1]+score[n][i][2]; //총점
						avg[n][i]=score[n][i][3]/3.f;//평균
						break;
					}					
				}
			}else if(c==2) {//출력
				System.out.println("1.전체출력 2. 반출력");
				int c1=sc.nextInt();
				if(c1==1) {// 전체출력
					for(int i=0;i<name.length;i++) {
						System.out.println(i+1+"반");
						for(int j=0;j<name[i].length;j++) {
							for(int k=j+1;k<name[i].length;k++) {
								if(avg[i][k]>avg[i][j]) {//성적 높은순 정렬 bubble sort
									String str=name[i][j];
									name[i][j]=name[i][k];
									name[i][k]=str;
									//국어성적 
									int temp=score[i][j][0];
									score[i][j][0]=score[i][k][0];
									score[i][k][0]=temp;
									//영어성적
									temp=score[i][j][1];
									score[i][j][1]=score[i][k][1];
									score[i][k][1]=temp;
									//수학성적
									temp=score[i][j][2];
									score[i][j][2]=score[i][k][2];
									score[i][k][2]=temp;
									//총점
									temp=score[i][j][3];
									score[i][j][3]=score[i][k][3];
									score[i][k][3]=temp;
									//평균
									float trash=avg[i][j];
									avg[i][j]=avg[i][k];
									avg[i][k]=trash;								
								}
							}
							if(name[i][j]!=null) {													
								System.out.print(name[i][j]+": ");
								for(int k=0;k<score[i][j].length;k++) {
									System.out.print(subject[k]+": "+score[i][j][k]+":점\t");
								}
								System.out.println("평균: "+avg[i][j]+":점");
							}
						}						
					}
				}else if(c1==2) {// 반출력
					System.out.println("몇반 출력?");
					int wCl=sc.nextInt()-1;// 배열은 0부터시작하는걸 생각해서 -1
					for(int i=0;i<name[wCl].length;i++) {
						if(name[wCl][i]!=null) {													
							System.out.print(name[wCl][i]+": ");
							for(int k=0;k<score[wCl][i].length;k++) {
								System.out.print(subject[k]+": "+score[wCl][i][k]+":점\t");
							}
							System.out.println("평균: "+avg[wCl][i]+":점");
						}
					}
				}
			}else if(c==3) {//검색
				System.out.println("1.이름검색 2.성적검색");
				int c1=sc.nextInt();
				if(c1==1) {//이름검색
					System.out.println("이름을 검색하시오");
					String findName=sc.next();
					for(int i=0;i<name.length;i++) {
						for(int j=0;j<name[i].length;j++) {
							if(findName.equals(name[i][j])) {//입력한 이름과 name[i]에있는 이름들을 비교해서 있으면 출력
								System.out.print(name[i][j]+": ");
								for(int k=0;k<score[i][j].length;k++) {
									System.out.print(subject[k]+": "+score[i][j][k]+":점\t");
								}
								System.out.println("평균: "+avg[i][j]+":점");
							}
						}					
					}
				}else if(c1==2) {//성적검색
					System.out.println("1.국어 2. 영어 3. 수학 4.총점");
					int c2=sc.nextInt()-1; //배열저장햇을때는 국어가 0 영어가 1 수학2 총점 3 이기때문 -1함
					System.out.println("몇점 이상성적만 검색할거니?");
					int findScore=sc.nextInt();
					for(int i=0;i<name.length;i++) {
						for(int j=0;j<name[i].length;j++) {
							if(name[i][j]!=null&&findScore<=score[i][j][c2]) {// 이름에 값이 있어야하고 그리고 내가 찾고싶은 점수와 성적들을 비교한다
								System.out.print(name[i][j]+": ");
								System.out.print(score[i][j][c2]+":점\t");
							}
						}
					}
					System.out.println();
				}
			}else if(c==4) {// 삭제
				System.out.println("삭제할 이름을 입력하시오");
				String findName=sc.next();
				for(int i=0;i<name.length;i++) {
					for(int j=0;j<name[i].length;j++) {
						if(findName.equals(name[i][j])) {//입력한 이름과 name[i]에있는 이름들을 비교
							name[i][j]=null;
							for(int k=0;k<score[i][j].length;k++) {
								score[i][j][k]=0;
							}
							avg[i][j]=0;
						}
					}					
				}
				
			}else if(c==5) {// 프로그램 종료
				System.exit(-1);
			}	
		}
	}
}

댓글