배열을 이용하여 만들어 본 성적 관리 프로그램을 HashMap을 이용하여 만들어보았다.
클래스 다이어그램은 아래와 같다
Main Class
import java.util.HashMap;
import java.util.Scanner;
//OO
public class Main {
// 로그인
private Login login;
private Login teacherLogin;
// 데이터 클래스
private HashMap<Integer,ClassInfo> hashClass;
// 데이터 관리 클래스
private StudentforAdmin sMode;//학생모드
private Teacher tMode;//선생님모드
private AllStudentforTeacher all;//선생님모드에서 전체학생관리
private ClassStudentforTeacher clas;//선생님모드에서 반학생관리
private EachStudentforTeacher stu;//선생님모드에서 한 학생관리
// constructor
public Main() {
// 로그인
login = new Login();
// 교사(관리자)의 아이디
teacherLogin = new Login("admin",1234);
// 데이터 클래스 객체 생성
hashClass = new HashMap<>();
// 학생 모드 객체 생성
sMode = new StudentforAdmin(hashClass);
// 교사 모드 참조변수만 생성
tMode = null;
// 교사 모드 객체 생성
// 전체 단위
all = new AllStudentforTeacher(hashClass);
// 반 단위
clas = new ClassStudentforTeacher(hashClass);
// 학생 단위
stu = new EachStudentforTeacher(hashClass);
}
// main method
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 입력받는 숫자
int num;
// Main 객체 생성
Main my = new Main();
System.out.println("학생 성적 처리 프로그램");
// 전체 프로그램 무한루트
while(true) {
System.out.println("로그인 해주세요.");
// 로그인 후 관리 모드 설정
// true => 학생 false => 교사 (관리자)
// 학생
if(my.login(sc)) {
// sMode
System.out.println("학생 로그인에 성공했습니다.");
System.out.println("학생 정보를 출력합니다.");
// 로그인 시 입력받은 학번 으로 학생 검색 후 학생 점수 출력
my.sMode.searchOneStu(my.login.getPw());
my.sMode.printOneStu();
}
// 교사
else {
// tMode
System.out.println("교사 로그인에 성공했습니다.");
while(true) {
System.out.println("관리 단위를 입력해주세요.");
System.out.println("1.전체 2.반 3.학생 0.로그아웃");
num=sc.nextInt();
// 전체 단위 관리
if(num == 1) {my.tMode = my.all;}
// 반 단위 관리
else if(num == 2) {my.tMode = my.clas;}
// 학생 단위 관리
else if(num == 3) {my.tMode = my.stu;}
// 로그아웃
else if(num == 0) {
System.out.println("로그아웃 합니다.");
break;
}
// 잘못된 입력
else {
System.out.println("잘못된 입력입니다.");
continue;
}
// 동작할 기능 선택
while(true) {
System.out.println("동작할 기능을 선택하세요.");
System.out.println("1.등록 2.검색 0.뒤로가기");
num = sc.nextInt();
// 등록
if(num == 1) {my.tMode.register(sc);}
// 검색
else if(num == 2) {
// 검색을 통해 인덱스 번호 찾기
my.tMode.search(sc);
// 검색된 것을 출력/수정/삭제
while(true) {
System.out.println("검색 후 이어갈 기능을 선택하세요.");
System.out.println("1.출력 2.수정 3.삭제 0.뒤로가기");
num = sc.nextInt();
// 출력
if(num == 1) {my.tMode.print(sc);}
// 수정
else if(num == 2) {my.tMode.modify(sc);}
// 삭제
else if(num == 3) {my.tMode.remove();}
// 뒤로가기
else if(num == 0) {System.out.println("기능 선택 페이지로 이동합니다.\n");}
// 잘못된 입력
else {
System.out.println("잘못된 입력입니다.");
continue;
}
break;
}
if(num==0) continue;
}
// 뒤로가기
else if(num == 0) {
System.out.println("처음 화면을 이동합니다.\n");
break;
}
// 잘못된 입력
else {
System.out.println("잘못된 입력입니다.");
continue;
}
}
}
}
}
}
// method
// login
public boolean login(Scanner sc) {
while(true) {
System.out.println("아이디와 비밀번호를 입력해주세요.");
this.login.setIdPw(sc.next(), sc.nextInt());
// 교사
if(login.getId().equals(teacherLogin.getId()) && login.getPw() == teacherLogin.getPw()) {
return false;
}
// 학생
else {
// 이름 학번을 데이터에서 비교
if(this.sMode.searchOneStu(login.getPw()) && this.sMode.getOnestu().getStudentName().equals(login.getId())) {
return true;
}
}
// 로그인 실패 시
System.out.println("로그인에 실패했습니다.");
}
}
}
데이터 클래스
-StudentInfo
import java.util.HashMap;
//학생정보클래스
class StudentInfo {
private String studentName;//이름
private int studentNum;//학번
private Score score;
public StudentInfo() {
studentName = new String();
studentNum = 0;
score = new Score();
}
public StudentInfo(String name,int studentNum,Score score) {
studentName = new String(name);
this.studentNum = studentNum;
this.score = new Score();
this.score = score;
}
public void printInfo() {
System.out.println("이름: "+this.getStudentName());
System.out.println("학번: "+this.getStudentNum());
System.out.println("점수:"+this.getScore().getAvg());
}
public void printNameNum() {
System.out.println("이름: "+this.getStudentName());
System.out.println("학번: "+this.getStudentNum());
}
public void setInfo(String name, Score score, int num) {
this.score=score;
this.studentName=name;
this.studentNum=num;
}
//getter/ setter
public String getStudentName() {return studentName;}
public void setStudentName(String studentName) {this.studentName=studentName;}
public int getStudentNum() {return studentNum;}
public void setStudentNum(int studentNum) {
this.studentNum=studentNum;
}
public Score getScore() {return score;}
public void setScore(Score score) {
this.score=score;
}
public void setScore(int kor, int eng, int mat) {
this.score.setKor(kor);
this.score.setEng(eng);
this.score.setMat(mat);
this.score.setSumAvg();
}
}
-ClassInfo
import java.util.HashMap;
//oO
class ClassInfo {
private int classNum;
private HashMap<Integer,StudentInfo> hash;
public ClassInfo() {
classNum = 0;
hash= new HashMap<>();
}
public ClassInfo(int classNum) {
this.classNum = classNum;
this.hash= new HashMap<>();
}
public int getClassNum() {
return classNum;
}
public void setClassNum(int classNum) {
this.classNum = classNum;
hash = new HashMap<>();
}
public HashMap<Integer,StudentInfo> getHash() {
return hash;
}
public HashMap<Integer,StudentInfo> getMapStudent() {return hash;}
}
-ScoreInfo
import java.util.Scanner;
//0o
public class Score {
private int kor;
private int eng;
private int mat;
private int sum;
private int avg;
public Score() {
kor = 0;
eng = 0;
mat = 0;
sum = 0;
avg = 0;
}
public Score( int kor, int eng, int mat) {
this.kor = kor;
this.eng = eng;
this.mat = mat;
this.setSumAvg();
}
public void setScore(int kor, int eng,int mat) {
this.kor = kor;
this.eng = eng;
this.mat = mat;
this.setSumAvg();
}
public void scScore(Scanner sc) {
System.out.println("점수를 입력합니다.");
System.out.print("국어 : ");
setKor(sc.nextInt());
System.out.print("영어 : ");
setEng(sc.nextInt());
System.out.print("수학 : ");
setMat(sc.nextInt());
}
public void setSumAvg() {
sum = kor+eng+mat;
avg = sum/3;
}
public void printScore() {
System.out.println("국어점수: "+kor);
System.out.println("영어점수: "+eng);
System.out.println("수학점수: "+mat);
System.out.println("총 점수: "+sum);
System.out.println("평균점수: "+avg);
}
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 getTotal() {
return sum;
}
public int getAvg() {
return avg;
}
}
데이터 관리 클래스
-Admin
import java.util.HashMap;
import java.util.Scanner;
import java.util.Iterator;
//데이터 관리클래스
public abstract class Admin {
protected HashMap<Integer, ClassInfo> hashClass;
// 검색된 student를 저장할 변수
protected StudentInfo stuInfo;
// 검색된 class를 저장할 변수
protected ClassInfo claInfo;
// class Key 값을 위한 카운트
protected int classCnt;
public Admin(HashMap<Integer,ClassInfo> hashClass) {
this.hashClass = hashClass;
}
public boolean searchOneStu(int studentNum) {
for(int i = 0;i<hashClass.size();i++) {
claInfo = hashClass.get(i);//검색된 클래스에 저장할변수 =
//학번에 맞는 학생이 이반에 있다면
if(claInfo.getMapStudent().containsKey(studentNum)) {
stuInfo = claInfo.getMapStudent().get(studentNum);
return true;
}
}
return false;
}
// 한 학생의 정보 출력
public void printOneStu() {
stuInfo.printInfo();
}
// 한 학생 클래스 getter
public StudentInfo getOnestu() {
return stuInfo;
}
}
-Teacher
import java.util.HashMap;
import java.util.Scanner;
//0o
//관리클래스 교사버전
public abstract class Teacher extends Admin{
public Teacher(HashMap<Integer,ClassInfo> hashClass) {
super(hashClass);
}
//추상메서드
//등록
public abstract void register(Scanner sc);
//검색
public abstract void search(Scanner sc);
//수정
public abstract void modify(Scanner sc);
//삭제
public abstract void remove();
//출력
public abstract void print(Scanner sc);
//상속받은메서드
//한학생의 정보출력
//한학생의 정보검색
//한학생클래스 getter
}
-AllStudentforTeacher
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
//전체학생관리클래스O
public class AllStudentforTeacher extends Teacher {
public AllStudentforTeacher(HashMap<Integer, ClassInfo> hashClass) {
super(hashClass);
}
@Override
public void register(Scanner sc) {
System.out.println("다른단위로 해주세요");
}
//검색
@Override
public void search(Scanner sc) {
System.out.println("다른단위로 해주세요");
}
//수정
@Override
public void modify(Scanner sc) {
System.out.println("다른단위로 해주세요");
}
//삭제
@Override
public void remove() {
System.out.println("다른단위로 해주세요");
}
//출력
@Override
public void print(Scanner sc) {
System.out.println("클래스를 출력합니다.");
for(int i=0;i<hashClass.size();i++) {
claInfo = hashClass.get(i);
for(Integer intt:claInfo.getMapStudent().keySet()) {
stuInfo = claInfo.getMapStudent().get(intt);
stuInfo.printInfo();
}
}
}
}
-ClassStudentforTeacher
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
//반학생 관리 클래스 for teacherO
public class ClassStudentforTeacher extends Teacher{
public ClassStudentforTeacher(HashMap<Integer,ClassInfo> hashClass) {
super(hashClass);
}
@Override
public void register(Scanner sc) {
hashClass.put(classCnt, new ClassInfo(hashClass.size()));
System.out.println(hashClass.size()-1+"반 등록 완료");
classCnt ++;
}
//검색
@Override
public void search(Scanner sc) {
int classNum;
int i;
while(true) {
System.out.println("검색할 class 번호를 입력하세요.");
classNum = sc.nextInt();
if(hashClass.containsKey(classNum)) {
claInfo = hashClass.get(classNum);
}
else {
System.out.println("해당 반은 없습니다.");
}
}
}
//수정
@Override
public void modify(Scanner sc) {
Score score = new Score();
System.out.println("class내의 모든학생점수를 수정합니다");
/*while(iteratorClass.hasNext()) {
score.setScore(sc.nextInt(),sc.nextInt(),sc.nextInt());
stuInfo.setScore(score);
}*/
for(Integer intt : claInfo.getMapStudent().keySet()) {
stuInfo = claInfo.getMapStudent().get(intt);
System.out.println(stuInfo.getStudentName());
score.scScore(sc);
stuInfo.setScore(score);
System.out.println();
}
}
//삭제
@Override
public void remove() {
//Key값을 이용해 삭제
claInfo.getMapStudent().remove(claInfo.getClassNum());
System.out.println("삭제했습니다");
}
//출력
@Override
public void print(Scanner sc) {
while(true) {
System.out.println("클래스를 출력합니다.");
System.out.println("1.전체 2.이름 / 학번");
int num = sc.nextInt();
//모든학생정보출력
if(num==1) {
for(Integer intt:claInfo.getMapStudent().keySet()) {
stuInfo = claInfo.getMapStudent().get(intt);
stuInfo.printInfo();
}
}
else if(num == 2) {
for(Integer intt:claInfo.getMapStudent().keySet()) {
stuInfo = claInfo.getMapStudent().get(intt);
stuInfo.printNameNum();
}
}
else {
System.out.println("잘못된 입력입니다");
continue;
}
break;
}
}
}
-EachStudentforTeacher
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
//O
public class EachStudentforTeacher extends Teacher {
public EachStudentforTeacher(HashMap<Integer, ClassInfo> hashClass) {
super(hashClass);
}
@Override
public void register(Scanner sc) {
int classNum;
int i;
while(true) {
System.out.println("검색할 class 번호를 입력하세요.");
classNum = sc.nextInt();
if(hashClass.containsKey(classNum)) {
}
else {
System.out.println("해당 반은 없습니다.");
continue;
}
break;
}
System.out.println("등록할 학생정보 입력");
Score score = new Score();
String name = new String();
int num;
System.out.print("이름을 입력하세요:");
name = sc.next();
System.out.print("학번을 입력하세요:");
num = sc.nextInt();
System.out.print("점수를 입력하세요:");
score.setScore(sc.nextInt(), sc.nextInt(), sc.nextInt());
//등록하기
claInfo.getMapStudent().get(num).setInfo(name,score,num);
}
//검색
@Override
public void search(Scanner sc) {
while(true) {
System.out.println("검색할 학생의 학번을 입력해주세요");
if(searchOneStu(sc.nextInt()))break;
else {
System.out.println("다시");
continue;
}
}
}
//수정
@Override
public void modify(Scanner sc) {
System.out.println("다시등록합니다");
Score score = new Score();
System.out.println(stuInfo.getStudentName()+"학생의 점수를 수정합니다");
score.scScore(sc);
stuInfo.setScore(score);
}
//삭제
@Override
public void remove() {
//학번으로 삭제
claInfo.getMapStudent().remove(stuInfo.getStudentNum());
System.out.println("삭제되었습니다");
}
//출력
@Override
public void print(Scanner sc) {
printOneStu();
}
}
-StudentforAdmin
// 학생데이터 관리클래스o
import java.util.HashMap;
public class StudentforAdmin extends Admin{
public StudentforAdmin(HashMap<Integer, ClassInfo> hashClass) {
super(hashClass);
}
}
-Login
//0
public class Login {
String id;
int pw;
public Login() {
id = new String();
pw=0;
}
public Login(String id, int pw) {
this.id = id;
this.pw = pw;
}
//getter/ setter
public String getId() {return id;}
public void setId (String id) {this.id = id;}
public int getPw() {return pw;}
public void setPw(int pw) {this.pw = pw;}
public void setIdPw(String id, int pw) {
this.id = id;
this.pw=pw;
}
public Login getIdPw() {
return this;
}
}
'Java' 카테고리의 다른 글
숫자를 입력 받아 교차하여 가장 작은 수 출력하기 2 (0) | 2022.07.12 |
---|---|
100~9999999 범위를 갖는 변수 X와 X~9999999 범위를 갖는 변수 Y를 입력 받아 X와Y 사이의 모든 정돈된 수와 전체 개수를 출력하는 프로그램을 작성해라 (0) | 2022.07.11 |
숫자를 입력 받아 교차하여 가장 작은 수 출력하기 (0) | 2022.07.11 |
로또 번호를 생성한 후 등수에 따라 경우의 수 출력하기 (0) | 2022.07.11 |
성적 관리 프로그램(Arraylist 이용) (0) | 2022.07.08 |