#ArrayList #성적관리프로그램 #Java #HashSet #HashMap
배열을 이용해 만들었던 성적 관리 프로그램을 ArrayList를 이용해 만들어보았다.
MainClass
데이터 클래스 3개
데이터 관리 클래스 6개
클래스는 총 11개로 구성하였고 아래 <그림 1>과 같이 구성이되어있다.
코딩은 이렇다
MainClass
import java.util.ArrayList;
import java.util.Scanner;
//O
public class Main {
// 로그인
private Login login;
private Login teacherLogin;
// 데이터 클래스
private ArrayList<ClassInfo> arrayClass;
// 데이터 관리 클래스
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);
// 데이터 클래스 객체 생성
arrayClass = new ArrayList<>();
// 학생 모드 객체 생성
sMode = new StudentforAdmin(arrayClass);
// 교사 모드 참조변수만 생성
tMode = null;
// 교사 모드 객체 생성
// 전체 단위
all = new AllStudentforTeacher(arrayClass);
// 반 단위
clas = new ClassStudentforTeacher(arrayClass);
// 학생 단위
stu = new EachStudentforTeacher(arrayClass);
}
// 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("로그인에 실패했습니다.");
}
}
}
데이터 클래스
-학생 데이터
import java.util.ArrayList;
//02
//학생정보클래스
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,Score score, int studentNum) {
studentName = new String();
this.studentNum = studentNum;
score = new Score();
}
public void printInfo() {
System.out.println("이름: "+this.getStudentName());
System.out.println("학번: "+this.getStudentNum());
}
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 score() {return score;}
public void setScore(Score score) {
this.score=score;
}
}
-반 데이터
import java.util.ArrayList;
//o
class ClassInfo {
private int classNum;
private ArrayList<StudentInfo> arr;
public ClassInfo() {
classNum = 0;
arr= new ArrayList<>();
}
public ClassInfo(int classNum) {
this.classNum = classNum;
this.arr= new ArrayList<>();
}
public int getClassNum() {
return classNum;
}
public void setClassNum(int classNum) {
this.classNum = classNum;
arr = new ArrayList<>();
}
public ArrayList<StudentInfo> getArr() {
return arr;
}
}
-점수 데이터
//0
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 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.ArrayList;
import java.util.Scanner;
//데이터 관리클래스O
public abstract class Admin {
protected ArrayList<ClassInfo> arrayClass;
protected int indexI;
protected int indexJ;
public Admin(ArrayList<ClassInfo> arrayClass) {
indexI = 0;
indexJ = 0;
this.arrayClass = arrayClass;
}
public boolean searchOneStu(int studentNum) {
for(int i=0;i<arrayClass.size();i++) {
for(int j=0;j<arrayClass.get(i).getArr().size();j++) {
//동일한 학번을 찾으면 인덱스 번호 저장
if(arrayClass.get(i).getArr().get(j).getStudentNum()==studentNum) {
indexI=i;
indexJ=j;
return true;
}
}
}
return false;
}
// 한 학생의 정보 출력
public void printOneStu() {
arrayClass.get(indexI).getArr().get(indexJ).printInfo();
}
// 한 학생 클래스 getter
public StudentInfo getOnestu() {
return arrayClass.get(indexI).getArr().get(indexJ);
}
}
-teacherClass
import java.util.ArrayList;
import java.util.Scanner;
//0
//관리클래스 교사버전
public abstract class Teacher extends Admin{
public Teacher(ArrayList<ClassInfo> arrayClass) {
super(arrayClass);
}
//추상메서드
//등록
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
}
-전체학생관리클래스
import java.util.ArrayList;
import java.util.Scanner;
//전체학생관리클래스O
public class AllStudentforTeacher extends Teacher {
public AllStudentforTeacher(ArrayList<ClassInfo> arrayClass) {
super(arrayClass);
}
@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<arrayClass.size();i++) {
System.out.println(arrayClass.get(i).getClassNum()+"반");
for(int j=0;j<arrayClass.get(i).getArr().size();j++) {
arrayClass.get(i).getArr().get(j).printInfo();
}
}
}
}
-반 관리 클래스
import java.util.ArrayList;
import java.util.Scanner;
//반학생 관리 클래스 for teacherO
public class ClassStudentforTeacher extends Teacher{
public ClassStudentforTeacher(ArrayList<ClassInfo> arrayClass) {
super(arrayClass);
}
@Override
public void register(Scanner sc) {
arrayClass.add(new ClassInfo(arrayClass.size()));
System.out.println(arrayClass.size()-1+"반 등록 완료");
}
//검색
@Override
public void search(Scanner sc) {
int classNum;
int i;
while(true) {
System.out.println("검색할 class 번호를 입력하세요.");
classNum = sc.nextInt();
for(i=0;i<arrayClass.size();i++) {
if(arrayClass.get(i).getClassNum() == classNum) {
indexI = i;
break;
}
}
if(i==arrayClass.size()) {
System.out.println("클래스를 찾지 못했습니다.");
continue;
}
else break;
}
}
//수정
@Override
public void modify(Scanner sc) {
Score score = new Score();
System.out.println("class내의 모든학생점수를 수정합니다");
for(StudentInfo stuInfo : arrayClass.get(indexI).getArr()) {
score.setScore(sc.nextInt(),sc.nextInt(),sc.nextInt());
stuInfo.setScore(score);
}
}
//삭제
@Override
public void remove() {
arrayClass.remove(indexI);
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(StudentInfo stuInfo : arrayClass.get(indexI).getArr()) {
stuInfo.printInfo();
}
}
else if(num == 2) {
for(StudentInfo stuInfo : arrayClass.get(indexI).getArr()) {
stuInfo.printNameNum();
}
}
else {
System.out.println("잘못된 입력입니다");
continue;
}
break;
}
}
}
-한 학생 관리 클래스
import java.util.ArrayList;
import java.util.Scanner;
//O
public class EachStudentforTeacher extends Teacher {
public EachStudentforTeacher(ArrayList<ClassInfo> arrayClass) {
super(arrayClass);
}
@Override
public void register(Scanner sc) {
System.out.println("등록할 학생의 반을 지정해주세요");
int classNum;
int i;
while(true) {
System.out.println("검색할 class번호를 입력하세요");
classNum = sc.nextInt();
for(i=0;i<arrayClass.size();i++) {
if(arrayClass.get(i).getClassNum()==classNum) {
indexI=i;
break;
}
}
if(i==arrayClass.size()) {
System.out.println("클래스를 찾지 못했습니다");
continue;
}
else break;
}
System.out.println("등록할 학생정보를 입력하세요");
Score score = new Score();
String name = new String();
int num;
System.out.println("이름을 입력하세요");
name = sc.next();
System.out.println("점수을 입력하세요");
score.setScore(sc.nextInt(),sc.nextInt(),sc.nextInt());
System.out.println("학번을 입력하세요");
num = sc.nextInt();
arrayClass.get(indexI).getArr().add(new StudentInfo());
arrayClass.get(indexI).getArr().get(arrayClass.get(indexI).getArr().size()-1).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(arrayClass.get(indexI).getArr().get(indexJ).getStudentName()+"학생점수를 수정합니다");
Score score = new Score();
score.setScore(sc.nextInt(),sc.nextInt(),sc.nextInt());
arrayClass.get(indexI).getArr().get(indexJ).setScore(score);
}
//삭제
@Override
public void remove() {
arrayClass.get(indexI).getArr().remove(indexJ);
System.out.println("삭제되었습니다");
}
//출력
@Override
public void print(Scanner sc) {
printOneStu();
}
}
학생 데이터관리 클래스
// 학생데이터 관리클래스
import java.util.ArrayList;
public class StudentforAdmin extends Admin{
public StudentforAdmin(ArrayList<ClassInfo> arrayClass) {
super(arrayClass);
}
}
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 |
성적 관리 프로그램 (HashMap 이용) (0) | 2022.07.10 |