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