Java

[Java] Map 성적관리 프로그램

다콩잉 2022. 9. 19. 01:40

Student.java

package Map;
import java.util.TreeMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Scanner;

class Student {
	private int id;
	private String name;
	private LinkedHashMap<String, Integer> subject;
	private int total;
	private float avg;
	private String flag;
	private Scanner scan;

	
	public Student(int id) {
		scan = new Scanner(System.in);
		subject = new LinkedHashMap<String, Integer>();
		
		System.out.println("이름을 입력해주세요");
		name = scan.next();
		
		do {
			this.id = id;
			System.out.println("과목 이름을 입력해주세요");
			String sb = scan.next();
			System.out.println("점수를 입력해주세요");
			int score = scan.nextInt();
			subject.put(sb, score);
			System.out.println("계속 입력하시겠습니까? Y/N");
			flag = scan.next();
			total += score;
		}while(flag.equals("Y") || flag.equals("y"));
		
		avg = (float) total / subject.size();
	}	
	
	public void disp() {
		System.out.println("학번: " + getId());
		System.out.println("이름: " + getName());
		for(String key : subject.keySet()) {
			System.out.println(key + ": "+ subject.get(key) + "점");
		}
		System.out.println("총점: " + getTotal());
		System.out.println("평균: " + getAvg());
		System.out.println();
	}
	
	public LinkedHashMap<String, Integer> getSubject(){
		return subject;
	}
	
	public String[] getSubjectArray() {
		Iterator<String> keys = subject.keySet().iterator();
		String[] sbName = new String[subject.size()];
		int i = 0;
		while(keys.hasNext()) {
			String key = keys.next();
			sbName[i++] = key;
    	}
		
		return sbName;
	}

	public void setSubject(LinkedHashMap<String, Integer> subject) {
		this.subject = subject;
	}
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public float getAvg() {
		return avg;
	}

	public void setAvg(float avg) {
		this.avg = avg;
	}

	public int getTotal() {
		return total;
	}

	public void setTotal(int total) {
		this.total = total;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	
}

 

Main.java

package Map;

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Scanner;

public class Main {
	private LinkedHashMap<Integer ,Student> stu;
	
	public Main() {
		stu = new LinkedHashMap<Integer ,Student>();
	}
	
	public static void main(String[] args) {
		Main m = new Main();
		int index;
		
		Scanner scan = new Scanner(System.in);
		Iterator<Integer> keys;
		int key;
		int score;
		
		Loop1:
		while(true) {
			System.out.println("번호를 입력하세요(1. 입력, 2. 출력, 3. 검색, 4. 삭제, 5. 종료)");
            int num = scan.nextInt();
            keys = m.stu.keySet().iterator();
            
            switch(num) {
            case 1:
            	System.out.println("학번을 입력해주세요");
            	index = scan.nextInt();
            	while(m.stu.containsKey(index)) {
            		System.out.println("이미 존재하는 학번입니다.");
            		continue Loop1;
            	}
            	m.stu.put(index, new Student(index));
            	break;
            case 2:
            	// 전체 출력(학번, 이름, 과목, 점수, 총점, 평균)
            	while(keys.hasNext()) {
            		key = keys.next();
            		m.stu.get(key).disp();
            	}
            	break;
            case 3:
            	System.out.println("1. 학번 검색, 2. 이름 검색, 3. 점수 검색");
            	int inputNum = scan.nextInt();
            	// 학번 검색
            	if(inputNum == 1) {
            		System.out.println("검색하실 학번을 입력해주세요");
            		int id = scan.nextInt();
            		key = keys.next();
            		
            		while(keys.hasNext()) {
            			if(m.stu.containsKey(id)) {
            				m.stu.get(id).disp();
            				break;
                		}
                	}break;
            	}
            	// 이름 검색
            	else if(inputNum == 2) {
            		System.out.println("검색하실 이름을 입력해주세요");
            		String inputName = scan.next();
            		
            		while(keys.hasNext()) {
            			key = keys.next();
            			String searchName = m.stu.get(key).getName();
            			if(searchName.equals(inputName)) {
            				m.stu.get(key).disp();
                		}else if(!searchName.equals(inputName)) {
                			continue;
                		}
                	}
            		break;
            	}
            	// 점수 검색
            	else if(inputNum == 3) {
            		System.out.println("1. 평균, 2. 과목당 검색");
            		int inputN = scan.nextInt();
            		if(inputN == 1) {
            			System.out.println("검색하실 평균을 입력해주세요");
                		int avg = scan.nextInt();
                		// 평균
                		while(keys.hasNext()) {
                			key = keys.next();
                			float searchAvg = m.stu.get(key).getAvg();
                			if(searchAvg >= avg) {
                				m.stu.get(key).disp();
                    		}else if(searchAvg != avg) {
                    			continue;
                    		}
                    	}
            		}else if(inputN == 2) {
            			System.out.println("검색하실 과목을 입력해주세요");
            			String sb = scan.next();
            			int pointer = 0;
            			int searchScore = 0;
            			while(keys.hasNext()) {
            				key = keys.next();
            				String[] subject = m.stu.get(key).getSubjectArray();	// 과목이름 배열 위치값 공유
            				for(int i = 0; i < subject.length; i++) {
            					if(subject[i].equals(sb)) {
            						if(pointer == 0) {
            							System.out.println("점수를 입력해주세요");
                						searchScore = scan.nextInt();
                						pointer++;
            						}
            						score = m.stu.get(key).getSubject().get(sb);
            						if(score >= searchScore) {
            							m.stu.get(key).disp();
            						}
                				}
            				}
            			}
            		}
            		break;
            	}
            case 4:	// 삭제
            	System.out.println("삭제하실 학생의 학번을 입력해주세요");
				int numm = scan.nextInt();
            	while(keys.hasNext()) {
        			key = keys.next();
        			int searchId = m.stu.get(key).getId();
        			if(searchId == numm) {
        				m.stu.remove(key);
        				break;
            		}else if(searchId != numm) {
            			continue;
            		}
            	}
            	break;
            case 5: 
            	System.exit(-1);
            default:
            	System.out.println("다시 입력해주세요");
            }
		}
	}
}
728x90