본문 바로가기

컴퓨터언어/JAVA(자바)

[JAVA강좌] 36강 ArrayList를 이용한 학생 관리

728x90
반응형

 

 

 

 

 

- 지난번 강좌인 자바객체배열에서 학생성적관리 프로그램을 한 적이 있습니다.

https://ossam5.tistory.com/648

 

[JAVA] 33강 자바 객체 배열 - 학생 성적 관리

- 이번 강좌에서는 객체 배열을 이용해서 학생 성적관리하는 프로그램을 만들어보겠습니다. - 아직은 학생을 추가하는 것이 아닌 배열을 통해 7명의 학생을 생성하고, 성적을 조회 및 수정하는

ossam5.tistory.com

- 이때는 일반 배열을 선택하다 보니 학생 7명을 미리 등록하고 시작을 했습니다.

- 더 추가하려면 배열을 복제해 개수를 추가하는 복잡한 방법을 사용했어야 하나, ArrayList를 사용하면 편합니다. 

- 이번에는 학생을 추가, 조회하는 것을 해서 배열 개수와 관계없이 ArrayList를 활용해 보겠습니다. 

 

 

 

 

 

 

 

 

 

 

1. 학생 클래스 생성


- 학생 클래스를 Student.java로 생성합니다.

- 이때 main() 함수를 처리하지 않습니다.

- 멤버변수는 학년, 반, 번호, 이름, 국어점수, 영어점수, 수학점수로 처리하겠습니다.

- 이때 학년과 반은 1학년 1반으로 처리하겠습니다. 

- 메서드는 학생 정보를 출력하는 메서드를 만들도록 하겠습니다.

- 게터/세터도 만들어서 국어, 영어, 점수 데이터를 관리하겠습니다. 

- 추후에 이름과 번호로 가져다 쓸거라 게터로 처리하겠습니다. 

 

 

 

## Student.java

package ch18_array;

public class Student {
	private static int serialNum = 0;
	private int studentId;
	private int grade;
	private int classNum;
	private String name;
	private int kor, eng, math;
	
	//생성자 - 이름으로만 생성, 아이디만 증가, 나머지 고정 처리
	//점수는 기본 값인 0으로 모두 처리
	public Student(String name) {
		this.grade = 1;
		this.classNum = 1;
		serialNum++;
		this.studentId = serialNum;
		this.name = name;
	}
	
	//학생 정보 출력 메서드
	public void printInfo() {
		System.out.print(grade + "학년 ");
		System.out.print(classNum + "반 ");
		System.out.print(studentId + "번, ");
		System.out.print("이름 : " + name + ", ");
		System.out.print("국어성적 : " + kor + ", ");
		System.out.print("영어성적 : " + eng + ", ");
		System.out.println("수학성적 : " + math);
	}

	//게터세터
	public int getStudentId() {
		return studentId;
	}
	public String getName() {
		return name;
	}
	
	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 getMath() {
		return math;
	}

	public void setMath(int math) {
		this.math = math;
	}
}

- 지난 강좌에서 만든 것과 다르지 않습니다. 

- 출력 printInfo() 메서드만 한줄로 출력되도록 처리했습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. 학생 성적관리 프로그램 제작


- StudentArrayMain.java로 생성합니다.

- 이때 main() 함수를 처리합니다. 

- 이번에는 ArrayList를 통해 객체를 제작합니다. 

- 큰 메뉴는 학생추가, 학생조회로 나누겠습니다.

- 큰 틀만 먼저 제작을 해보겠습니다. 

 

 

## StudentArrayMain.java

package ch18_array;

import java.util.ArrayList;
import java.util.Scanner;

public class StudentArrayMain {
	//외부 메서드들도 사용하기 때문에 static으로 처리
	public static Scanner scan = new Scanner(System.in); //스캐너 출력
	
	//학생들을 담을 배열 - 외부 메서드들도 사용하기 때문에 static으로 처리
	//몇명이 담길지 모르기 때문에 ArrayList사용
	public static ArrayList<Student> stds = new ArrayList<Student>();

	public static void main(String[] args) {
		int menu; //메뉴 번호를 받을 변수
		
		//프로그램을 종료하기 전까지 계속 실행할 반복문
		do {
			//첫 메뉴 출력
			printMenu();
			
			//메뉴를 입력받을 변수 처리
			menu = scan.nextInt();
			
			//입력한 번호에 따른 명령 처리
			switch(menu) {
			case 1:
				//학생추가
				addStudent();
				
				break;
			case 2:
				//학생조회
				viewStudent();
				
				break;
			case 3:
				System.out.println("프로그램을 종료합니다.");
				break;
			default:
				System.out.println("1~3사이의 정수를 입력하세요.");
				break; //입력하지 않아도 마지막이라 처리 잘됨
			}
		}while(menu != 3); //menu가 3가 아니면 계속 반복

	}

	//첫 메뉴 출력
	public static void printMenu() {
		
	}

	//학생추가
	public static void addStudent() {
		
	}

	//학생조회
	public static void viewStudent() {
		
	}

}

- 스캐너를 다른 메서드에서도 사용할 거라 static으로 선언했습니다.

- 학생을 담을 배열은 다른 메서드에서도 사용할 거라 static으로 선언하고, 몇 명 일지 알 수 없기 때문에 ArrayList를 사용했습니다. 

- 큰 메뉴출력을 후 각각 메뉴에 대한 명령을 메서드로 처리를 했습니다.

- 아직 메서드는 담지 않은 상태입니다. 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 각각 메서드 명령 처리


- 이제 각각 메서드로 분리해놓은 곳에 명령을 처리해 보도록 하겠습니다.

 

 

 

1) 큰 메뉴 출력

- 이제부터는 메서드 부분만 코드로 처리하고 마지막에 전체 코드를 첨부하겠습니다. 

 

## StudentArrayMain.java -  printMenu() - 코드

	...
    //첫 메뉴 출력
	public static void printMenu() {
		System.out.println("=======메뉴=======");
		System.out.println("1. 학생추가");
		System.out.println("2. 성적수정");
		System.out.println("3. 학생삭제");
		System.out.println("4. 학생조회");
		System.out.println("5. 프로그램종료");
		
		System.out.print("메뉴 선택 : ");	
	}
    ...

 

- 단순하게 메뉴를 출력하도록 처리했습니다. 

 

 

## StudentArrayMain.java -  printMenu() - 결과

- 아직 1~4번의 메뉴를 선택하면 기능이 없어서 반복해서 다시 메뉴가 뜹니다.

- 1~5번이 아닌 정수를 누르면 1~5사이 정수를 입력하라고 뜹니다.

- 5를 누르면 반복문이 종료되는 것을 확인할 수 있습니다. 

 

 

 


 

 

 

 

2) 학생 추가 메뉴

- 이번에는 학생을 추가하는 addStudent() 메서드 부분을 처리하겠습니다. 

 

## StudentArrayMain.java -  addStudent()  - 코드

...
	//학생추가
	public static void addStudent() {
		//메뉴선택으로 인한 입력버퍼에 남아 있는 엔터 제거
		scan.nextLine();
		
		//생성자가 이름만 처리하므로 이름만 받음
		System.out.print("추가할 학생이름 : ");
		
		//입력한 이름을 담는 변수
		String name = scan.nextLine(); //이름에 공백이 있을지도 모르기 때문
		
		//학생배열에 새로운 인스턴스 생성 - 입력받은 이름으로 생성
		stds.add(new Student(name));
		
		//배열 학생수 담는 변수 - 방금 추가된 학생의 위치 찾으려고 사용
		int size = stds.size();
		
		//현재 추가된 학생만 담기
		Student std = stds.get(size - 1); //마지막 인덱스번호는 개수보다 1개 작음
		
		//학생정보 출력
		System.out.println("=====추가된 학생정보=====");
		std.printInfo();
	}
 ...

- 처음 메뉴 선택했을 때 nextInt()로 정수만 받아와서 입력버퍼에 엔터가 남아있습니다.

- 그래서 [ scan.nextLine(); ] 를 처음에 입력해서 엔터를 없애지 않으면 학생이름을 추가할 수가 없습니다. 

- 한번 코드를 삭제해서 비교해보시길 바랍니다.

- 추가할 학생의 이름을 받고, add()메서드로 ArrayList에 새로운 인스턴스를 추가해 줍니다. 

- 그리고 현재 추가된 학생은 마지막 학생이므로 학생수를 받는 size() 메서드를 통해 마지막 인덱스번호를 구합니다.

- 그리고 현재 추가된 학생만 얻는 get() 메서드를 사용해서 학생 정보를 출력받습니다. 

 

 

 

## StudentArrayMain.java -  addStudent()  - 결과

- 학생을 2명 추가해 봤습니다. 

- 그럼 번호는 자동으로 배정되는 것을 확인할 수 있습니다.

- 국어, 영어, 수학성적은 기본값인 0이 들어갑니다.

- 현재 성적 수정은 하지 않겠습니다. 

 

 

 

 


 

 

 

 

3) 학생 조회 메뉴

- 이번에는 학생 전체를 조회하는 viewStudent() 메서드 부분을 처리하겠습니다. 

- 학생이 한명도 없는 경우와 있는 경우를 나눠서 처리해야 합니다. 

 

 

## StudentArrayMain.java -  viewStudent()  - 코드

...
    //학생조회
	//학생조회
	public static void viewStudent() {
		//학생 배열의 개수를 담는 변수
		int size = stds.size();
		
		//등록된 개수가 없다면 해당 코드 출력
		if(size == 0) {
			System.out.println("등록된 학생이 없습니다.");
			return; //메서드 벗어나기
		}
		
		System.out.println("=====1학년 1반 모든 학생 정보=====");
		//향상된 for문 통한 모든 학생 출력
		for(Student std : stds) {
			std.printInfo();
		}
	}
...

 

- 이번에는 등록된 배열이 없는 경우와 있는 경우를 나눠서 처리합니다.

- 배열이 있으면 여러 배열일 수 있으므로 향상된 for문 통해 출력해 줍니다. 

 

 

 

 

## StudentArrayMain.java -  viewStudent()  - 결과

- 처음부터 학생 조회를 하면 학생정보가 없다고 뜹니다.

- 학생추가 후 조회를 하면 학생 전부를 확인할 수 있습니다. 

- 아직은 간단하게 ArrayList를 단순하게 배웠기 때문에 추후에 제너릭에 대해 더 배우고 자세한 기능들을 해보는 시간을 갖겠습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형