Java

성적 관리 프로그램(Arraylist 이용)

충 민 2022. 7. 8. 18:55

#ArrayList #성적관리프로그램 #Java #HashSet #HashMap

배열을 이용해 만들었던 성적 관리 프로그램을 ArrayList를 이용해 만들어보았다.

 

 

MainClass

데이터 클래스 3개

데이터 관리 클래스 6개

클래스는 총 11개로 구성하였고  아래 <그림 1>과 같이 구성이되어있다.

<그림 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;
	}
}