해쉬맵 예제 : 학생 정보 검색 프로그램 해쉬맵으로 다시 작성하라

 





//학생마다 Student 객체를 생성하고 4명의 학생 정보를 HashMap<String, Student> 컬렉션에 저장한 후에,
//HashMap<String, Student>의 모든 학생(4명) 정보를 출력하고 
//학생 이름을 입력 받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하라.
//
//학생 이름, 학과, 학번, 학점평균 입력하세요.
//>> 황기태, 모바일, 1, 4.1
//>> 이재문, 안드로이드, 2, 3.9
//>> 김남윤, 웹공학, 3, 3.5
//>> 최찬미, 빅데이터, 4, 4.25
//----------------------------------
//이름: 황기태
//학과: 모바일
//학번: 1
//학점평균: 4.1
//----------------------------------
//이름: 이재문
//학과: 안드로이드
//학번: 2
//학점평균: 3.9
//----------------------------------
//이름: 김남윤
//학과: 웹공학
//학번: 3
//학점평균: 3.5
//----------------------------------
//이름: 최찬미
//학과: 빅데이터
//학번: 4
//학점평균: 4.25
//----------------------------------
//학생 이름 >> 최찬미
//최찬미, 빅데이터, 4, 4.25
//학생 이름 >> 이재문
//이재문, 안드로이드, 2, 3.9
//학생 이름 >> 그만
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Blog {
	public static void main(String[] args) {
		new Byul();
	}
}
class Byul {
	private static Scanner sc;
	private static StringBuilder sb;
	private static Map<String, Student> map;
	private static StringTokenizer st;
	public Byul() {
		sc = new Scanner(System.in);
		sb = new StringBuilder();
		map = new HashMap<>();
		main();
		sc.close();
	}
	private static final void main() {
		setStudent();
		System.out.println("----------------------------------");
		getAllStudent();
		searchStudent();
	}
	private static final void setStudent() {
		String[] tokens = new String[4];
		System.out.println("학생 이름, 학과, 학번, 학점평균 입력하세요.");
		while (map.size() < 4) {
			System.out.print(">> ");
			st = new StringTokenizer(sc.nextLine().trim(), ", ");
			if (st.countTokens() != 4) {
				System.out.println("띄어쓰기 또는 쉼표로 구분해서 입력해주세요");
				continue;
			}	
			int i = 0;
			while (st.hasMoreTokens()) {
				tokens[i++] = st.nextToken();
			}
			if (validateInput(tokens)) {
				map.put(tokens[0], new Student(tokens[0], tokens[1], tokens[2], Double.parseDouble(tokens[3]), sb));
			}
		}
	}
	private static final void getAllStudent() {
		for (Student s : map.values()) {
			System.out.println(s);
		}
	}
	private static final void searchStudent() {
		while (true) {
			System.out.print("학생 이름 >> ");
			String s = sc.nextLine().trim();
			if (s.contains("그만"))
				break;
			boolean noResult = false;
			for (Student st : map.values()) {
				if (s.contains(st.getName())) {
					sb.append(st.getName() + ", ");
					sb.append(st.getProgram() + ", ");
					sb.append(st.getID() + ", ");
					sb.append(st.getAvgGrade());
					System.out.println(sb);
					sb.setLength(0);
					if (!noResult)
						noResult = true;
				}
			}
			if (!noResult)
				System.out.println("없는 이름입니다.");
		}
	}
	private static final boolean validateInput(String[] s) {
		boolean b = true;
		if (isNum(s[0]))
			b = false;
		if (isNum(s[1]))
			b = false;
		if (!isNum(s[2]))
			b = false;
		if (!isNum(s[3]))
			b = false;
		return b;
	}
	private static final boolean isNum(String s) {
		try {
			Double.parseDouble(s);
			return true;
		} catch (Exception e) {
			return false;
		}
	}
}
class Student {
	private final StringBuilder sb;
	private String name;
	private String program;
	private String ID;
	private double avgGrade;
	public Student(String name, String program, String ID, double avgGrade, StringBuilder sb) {
		this.name = name;
		this.program = program;
		this.ID = ID;
		this.avgGrade = avgGrade;
		this.sb = sb;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getProgram() {
		return program;
	}
	public void setProgram(String program) {
		this.program = program;
	}
	public String getID() {
		return ID;
	}
	public void setID(String ID) {
		this.ID = ID;
	}
	public double getAvgGrade() {
		return avgGrade;
	}
	public void setAvgGrade(double avgGrade) {
		this.avgGrade = avgGrade;
	}
	@Override
	public String toString() {
		sb.append("이름: " + name);
		sb.append("\n학과: " + program);
		sb.append("\n학번: " + ID);
		sb.append("\n학점평균: " + avgGrade);
		sb.append("\n----------------------------------");
		String s = sb.toString();
		sb.setLength(0);
		return s;
	}
}

댓글

이 블로그의 인기 게시물

substring 예제: 문자열을 입력 받아 한 글자씩 회전시켜 모두 출력하는 프로그램을 작성하라

단체 채팅 구현