[Java] List와 Map을 활용하여 학생 관리프로그램 만들기개발자가 되기까지 (2023.08.16~2024.04.15)/[Basic] Java2023. 10. 15. 20:33
Table of Contents
import java.util.Scanner;
public interface Program {
/* 1.학생추가 | 2.학생리스트 | 3.학생검색
* 4.학생수정 | 5.학생삭제 | 6.과목추가
* 7.점수수정 | 8.과목삭제 | 9.종료
* */
void addStd(Scanner scan);
void printStd();
void searchStd(Scanner scan);
void modStd(Scanner scan);
void delStd(Scanner scan);
void addSub(Scanner scan);
void modSub(Scanner scan);
void delSub(Scanner scan);
}
import java.util.HashMap;
import java.util.Objects;
public class Student {
// 멤버변수 : 이름, 나이, 전화번호, 합계, 평균, map<과목,점수>
private String name;
private int age;
private String phone;
private HashMap<String, Integer> subject = new HashMap<>();
private int sum = 0;
private double avg =0;
// 생성자 : 객체 생성시 초기값을 결정
public Student() {}
public Student(String name) {
this.name = name;
this.age = 15;
}
public Student(String name, String phone) {
this.name = name;
this.age = 15;
this.phone = phone;
}
public Student(String name, int age, String phone) {
this.name = name;
this.age = age;
this.phone = phone;
}
// 메서드 등록
// 각 학생별 본인의 점수 등록, 출력, 삭제, 수정(삭제->추가)
public void printOne() { // 학생 검색시 나오는 출력화면
System.out.println(name+"("+age+")");
if(phone != null) {
System.out.println(phone);
}
// 수강정보
printSubject();
calc(); // 합계, 평균 계산
// 합계, 평균 출력
if(sum != 0) {
System.out.println("result : "+sum+" ["+avg+"]");
}else {
// 점수가 없으면 없습니다 출력
System.out.println("점수가 없습니다.");
}
System.out.println("----------------------------");
}
// subject 출력 메서드
public void printSubject() {
for(String tmp : subject.keySet()) {
System.out.println(tmp+":"+subject.get(tmp));
}
}
// subject의 점수 합계, 평균 구하는 메서드
public void calc() {
this.sum = 0;
this.avg = 0;
for(String tmp : subject.keySet()) {
sum+= subject.get(tmp);
}
avg = (double)sum / subject.size();
}
// 과목/점수 등록
public void addSubject(String subject, int score) {
this.subject.put(subject, score);
System.out.println("**** 점수 추가 완료 ****");
}
// 과목/점수 삭제
public void delSubject(String subject) {
if(this.subject.remove(subject) == null) {
System.out.println("**** 해당 과목이 없습니다. ****");
return;
}else {
this.subject.remove(subject);
System.out.println("**** 점수삭제 완료 ****");
}
}
// getter/setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public HashMap<String, Integer> getSubject() {
return subject;
}
public void setSubject(HashMap<String, Integer> subject) {
this.subject = subject;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
public double getAvg() {
return avg;
}
public void setAvg(double avg) {
this.avg = avg;
}
@Override
public String toString() {
return name + ", (" + age + ") " +
((phone != null)? phone : "");
}
@Override
public int hashCode() {
return Objects.hash(name);
}
@Override
public boolean equals(Object obj) {
if (this == obj) // 주소일치
return true;
if (obj == null) // 주소일치
return false;
if (getClass() != obj.getClass()) // 주소일치
return false;
Student other = (Student) obj;
return Objects.equals(name, other.name);
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class StudentManager implements Program {
// 멤버변수 Student List
private List<Student> student = new ArrayList<>();
// 이렇게 하면 메인에 add(); 호출 안해도 됨
// 반드시 필요하면 이렇게 하는게 좋고
// 아니면 메인에서 호출하는게 나음
public StudentManager() {
add();
}
// 기본 학생 추가
public void add() {
student.add(new Student("해리", 16, "010-1111-1111"));
student.add(new Student("론", "010-1111-2222"));
student.add(new Student("말포이","010-3333-3333"));
student.add(new Student("헤르미온느", 16, "010-1111-5555"));
student.add(new Student("해그리드"));
}
@Override
public void addStd(Scanner scan) {
System.out.print("추가 학생명> ");
student.add(new Student(scan.next()));
System.out.println("학생등록 완료!!");
}
@Override
public void printStd() {
// 학생 기본정보 출력
System.out.println("--------학생명단--------");
for(int i=0; i<student.size(); i++) {
System.out.println(student.get(i));
}
System.out.println("----------------");
}
@Override
public void searchStd(Scanner scan) {
// 학생명을 입력받아 학생정보를 출력
System.out.print("학생명> ");
String name = scan.next();
for(int i = 0; i < student.size(); i++) {
if(student.get(i).getName().equals(name)) {
student.get(i).printOne();
return;
}
}
System.out.println("검색한 학생을 찾을 수 없습니다.");
}
@Override
public void modStd(Scanner scan) {
// 수정할 정보(이름, 나이, 전화번호)
System.out.print("학생명 > ");
String name = scan.next();
for(int i = 0; i < student.size(); i++) {
if(student.get(i).getName().equals(name)) {
System.out.println("수정할 정보> ");
String op = scan.next();
switch(op) {
case "이름":
System.out.print("수정할 값 > ");
String modName = scan.next();
student.get(i).setName(modName);
System.out.println("*--수정완료--*");
break;
case "나이":
System.out.print("수정할 값 > ");
int modAge = scan.nextInt();
student.get(i).setAge(modAge);
System.out.println("*--수정완료--*");
break;
case "전화번호":
System.out.print("수정할 값 > ");
String modPhone = scan.next();
student.get(i).setPhone(modPhone);
System.out.println("*--수정완료--*");
break;
default :
System.out.println("존재하지 않습니다.");
}
return;
}
}
System.out.println("학생이 존재하지 않습니다.");
}
@Override
public void delStd(Scanner scan) {
// 학생명을 입력받아 일치하는 학생을 삭제
// remove는 index 삭제, remove 삭제가 가능.
System.out.print("학생명 > ");
String name = scan.next();
// remove(object) 삭제 => object 자체로 이름이 일치하면 같은객체
if(!student.remove(new Student(name))) {
System.out.println("학생이 존재하지 않습니다.");
return;
}
student.remove(new Student(name));
}
@Override
public void addSub(Scanner scan) {
// 학생명/과목/점수 입력받아 수강신청 메서드 호출
System.out.print("학생명 > ");
String name = scan.next();
System.out.print("과목 > ");
String sub = scan.next();
System.out.print("점수 > ");
int score = scan.nextInt();
for(int i = 0; i < student.size(); i++) {
if(student.get(i).getName().equals(name)) {
student.get(i).addSubject(sub, score);
return;
}
}
System.out.println("학생이 존재하지 않습니다.");
}
@Override
public void modSub(Scanner scan) {
// 과목/점수 수정
System.out.print("학생명 > ");
String name = scan.next();
System.out.print("과목 > ");
String sub = scan.next();
System.out.print("점수 > ");
int score = scan.nextInt();
for(int i = 0; i < student.size(); i++) {
if(student.get(i).getName().equals(name)) {
student.get(i).delSubject(sub);
student.get(i).addSubject(sub, score);
return;
}
}
System.out.println("학생이 존재하지 않습니다.");
}
@Override
public void delSub(Scanner scan) {
// 학생명과 과목을 입력받아 삭제 메서드 호출
System.out.print("학생명 > ");
String name = scan.next();
System.out.print("과목 > ");
String sub = scan.next();
// index 메소드 활용
int i = index(name);
if(i==-1) {
System.out.println("학생이 없습니다");
} else {
student.get(i).delSubject(sub);
}
}
// 학생명을 주고, 그 학생명의 위치를 리턴하는 메서드
public int index(String name) {
for(int i = 0; i < student.size(); i++) {
if(student.get(i).getName().equals(name)) {
return i;
}
}
return -1; // 0번지 포함이기 때문에 아니면 -1로 리턴.
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
/* 학생관리프로그램 */
Scanner scan = new Scanner(System.in);
StudentManager sm = new StudentManager();
// sm.add(); // 기본 학생 추가
int menu = 0;
do {
System.out.println("--학생관리프로그램--");
System.out.println("1.학생추가 | 2.학생리스트 | 3.학생검색");
System.out.println("4.학생수정 | 5.학생삭제 | 6.과목추가");
System.out.println("7.점수수정 | 8.과목삭제 | 9.종료");
System.out.print("선택>> ");
menu = scan.nextInt();
switch(menu) {
case 1: sm.addStd(scan); break;
case 2: sm.printStd(); break;
case 3: sm.searchStd(scan); break;
case 4: sm.modStd(scan); break;
case 5: sm.delStd(scan); break;
case 6: sm.addSub(scan); break;
case 7: sm.modSub(scan); break;
case 8: sm.delSub(scan); break;
case 9: break;
default :
System.out.println("잘못된 입력입니다.");
}
}while(menu != 9);
System.out.println("프로그램을 종료합니다.");
}
}
[Java] List와 Map을 활용하여 학생 관리프로그램 만들기 끝!
(다음 게시물 예고편)
[Java] BufferedReader, FileReader를 활용하여 합계와 총 인원수 출력
728x90
@rlozlr :: 얼렁뚱땅 개발자
얼렁뚱땅 주니어 개발자
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!