무룩 공부방

[Java02] 컬렉션 프레임 워크 (8) List/map 응용(Eclipse) 본문

IT/Java02_Intermediate

[Java02] 컬렉션 프레임 워크 (8) List/map 응용(Eclipse)

moo_look 2023. 9. 28. 17:38

# 이전에 작성했던 성적처리 프로그램을 ArrayList안에 HashMap으로 코드를 수정


<Student.java>

package java02_intermediate.ArrayListScoreMapinlist.copy;

public class Student {

	private int num;
	private String name;
	private int kor;
	private int eng;
	private int mat;
	private int tot;
	private double avg;
	private String hak;
	private int rank;
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getKor() {
		return kor;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public int getEng() {
		return eng;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public int getMat() {
		return mat;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}
	public int getTot() {
		return tot;
	}
	public void setTot(int tot) {
		this.tot = tot;
	}
	public double getAvg() {
		return avg;
	}
	public void setAvg(double avg) {
		this.avg = avg;
	}
	public String getHak() {
		return hak;
	}
	public void setHak(String hak) {
		this.hak = hak;
	}
	public int getRank() {
		return rank;
	}
	public void setRank(int rank) {
		this.rank = rank;
	}
	
}

<StudentMethod>

package java02_intermediate.ArrayListScoreMapinlist.copy;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class StudentMethod {

	Scanner sc = new Scanner(System.in);
	
	List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
	
	public void insertView() {
		
		Map<String, Object> map = new HashMap<String, Object>();
		
		System.out.print("번호 이름 국어 영어 수학 입력 >> ");
		int num = sc.nextInt();
		String name = sc.next();
		int kor = sc.nextInt();
		int eng = sc.nextInt();
		int mat = sc.nextInt();
		
		map.put("num", num);
		map.put("name", name);
		map.put("kor", kor);
		map.put("eng", eng);
		map.put("mat", mat);
		
		map = totAvgHakPro(map);
		
		list.add(map);
		rankPro();

	}
	
	
	// 총점, 평균, 학점
	public Map<String, Object> totAvgHakPro(Map<String, Object> map) {
		
		int tot = (int)map.get("kor") + (int)map.get("eng") + (int)map.get("mat");
		double avg = tot / 3.;
		String hak = " ";
		if(avg >= 80) hak = "합격";
		else hak = "불합격";
		
		map.put("tot", tot);
		map.put("avg", avg);
		map.put("hak", hak);
		map.put("rank", 1);
		
		return map;
		
	}
	
	
	// 등수구하기
	public void rankPro() {
		
		for(Map<String, Object> i : list) {
			int rank = 1;
			for(Map<String, Object> j : list) {
				if((double)i.get("avg") < (double)j.get("avg")) {
					++rank;
					i.put("rank", rank);
				}
			}
		}
	}
	
	// 타이틀 출력
	public void print() {
		System.out.println("\t\t성적표");
		System.out.println("번호\t이름\t국어\t영어\t수학\t총점\t평균\t학점\t등수");
	}
	
	// 레코드 출력
	public void ptintRecord() {
		
		for(Map<String, Object> i : list) {
			
			System.out.print(i.get("num")+"\t");
			System.out.print(i.get("name")+"\t");
			System.out.print(i.get("kor")+"\t");
			System.out.print(i.get("eng")+"\t");
			System.out.print(i.get("mat")+"\t");
			System.out.print(i.get("tot")+"\t");
			System.out.print(i.get("avg")+"\t");
			System.out.print(i.get("hak")+"\t");
			System.out.print(i.get("rank")+"\n");
		}
		
		System.out.println("가변배열의 길이 >> "+list.size());
	}
	
	
	// 검색
	public String search(int numBun) {
		for(Map<String, Object> i : list) {
			if(numBun == (int)i.get("num")) {
				
				print();
				
				System.out.println(i.get("num")+"\t"+i.get("name")+"\t"+i.get("kor")+"\t"+i.get("eng")+"\t"+
								i.get("mat")+"\t"+i.get("tot")+"\t"+i.get("avg")+"\t"+i.get("hak")+"\t"+i.get("rank"));
				
				return "[검색완료!]";
			}
			
		}
		return "[일치하는 번호가 없습니다.]";
	}
	
	
	// 삭제
	public boolean delete(int numBun) {
		for(Map<String, Object> i : list) {
			if(numBun == (int)i.get("num")) {
				list.remove(i); 
				rankPro();
				return true;
			}
		}
		return false;
	}
	
	
	//수정
	public int update(int numBun) {
		for(Map<String, Object> i : list) {
			if(numBun == (int)i.get("num")) {
				
				System.out.print("수정할 "+numBun+"번 이름 국어 영어 수학 입력 >> ");
				String name = sc.next();
				int kor = sc.nextInt();
				int eng = sc.nextInt();
				int mat = sc.nextInt();
				
				System.out.print("입력한 데이터로 수정하시겠습니까? [Y / N] >> ");
				String check = sc.next();
				
				if(check.equalsIgnoreCase("Y")) {
					
					i.put("name", name);
					i.put("kor", kor);
					i.put("eng", eng);
					i.put("mat", mat);
					
					totAvgHakPro(i);
					
					rankPro();
					
					return 1;
					
				}else {
					return 2;
				}
			}
		}
		return 3;
	}
	
} //class

<StudentMain>

package java02_intermediate.ArrayListScoreMapinlist.copy;

import java.util.Scanner;

public class StudentMain { 

	public static void main(String[] args) {
		
		// 메뉴
		
		Scanner sc = new Scanner(System.in);
		
		StudentMethod sm = new StudentMethod();
		
		boolean chk = true;
		
		while(chk) {
			
			System.out.println("작업선택");
			System.out.print("[1]입력 [2]출력 [3]검색 [4]삭제 [5]수정 [6]종료 >> ");
			int menu = sc.nextInt();
			
			switch(menu) {
				case 1 : 
					sm.insertView();
					break;
				case 2 : 
					sm.print();
					sm.ptintRecord();
					break;
				case 3 : 
					System.out.print("검색하고자 하는 번호 입력 >> ");
					int num = sc.nextInt();
					String searchCheck = sm.search(num);
					System.out.println(searchCheck);
					break;
				case 4 : 
					System.out.print("삭제하고자 하는 번호 입력 >> ");
					num = sc.nextInt();
					boolean boolCheck = sm.delete(num);
					if(boolCheck == true) System.out.println("[레코드 삭제완료!]");
					else System.out.println("[삭제하고자 하는 레코드 없음.]");
					break;
				case 5 : 
					System.out.print("수정하고자 하는 번호 입력 >> ");
					num = sc.nextInt();
					int updateCheck = sm.update(num);
					if(updateCheck == 1) {
						System.out.println("수정되었습니다!");
					}
					else if(updateCheck == 2){
						System.out.println("수정 취소 되었습니다.");
					}else{
						System.out.println("[수정하고자 하는 레코드 없음.]");
					}
					break;
				case 6 : 
					chk = false;
					System.out.println("프로그램 종료");
					break;
			}
		}
		sc.close();

	}

}