JAVA를 잡아라!...

JAVA_MVC_#2_학생부.ver1 본문

JAVA/JAVA_복습문제

JAVA_MVC_#2_학생부.ver1

onivv 2023. 12. 11. 23:12

[ 학생부 프로그램 ]

LP, UF, 데이터(ERD) 고민부터 하기!

 

LP(CRUD)

1. 추가
     학생이름입력 >> 홍길동
      학생점수입력 >> 50
      학생추가가 완료되었습니다! :D
2. 목록
      학생목록
      1001번 xxx학생 xx점
3. 검색
      학생번호입력 >> 1001
      1001번 xxx학생 xx점
      or
      해당 번호의 학생은 없습니다...
4. 변경
      학생번호입력 >> 1001
      학생점수입력 >> 60
      완료되었습니다! :D
      or
      해당 번호의 학생은 없습니다...
5. 삭제
      학생번호입력 >> 1001
      완료되었습니다! :D
      or
      해당 번호의 학생은 없습니다...
0. 종료

 

UF

학생추가
학생목록출력
학생검색
학생정보변경
학생삭제

 

데이터(ERD)

PK 1001

 

 

model > Student.java

package model;

	/*
	고유 객체(Student)의 속성만 모아두기
	객체만 따로 저장하는 class
	Control에서도 Student를 불러와서 사용해야되기 때문에...
	*/

public class Student {
	private int num; // PK
	private String name;
	private int score;

	public Student(int num, String name, int score) { // 학생은 번호,이름,점수 무조건 있
		this.num = num;
		this.name = name;
		this.score = score;
	}

	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getScore() {
		return score;
	}
	public void setScore(int score) {
		this.score = score;
	}

	@Override
	public String toString() {
		return num + "번" + name + "학생" + score + "점";
	}
}

 

model > StudentModel.java

package model;

	/*
	Model에서 CRUD를 담당!
	CUD	: 진행했을때 성공할수도?실패할수도? 있기때문에 대부분 boolean으로 리턴
			(ex) 해당 번호의 학생은없습니다..., 메모리가 가득차서 추가가 어렵습니다...,
	RR	: 출력결과가 1개인 R, 출력결과가 여러개인 R
	--> CRRUD : 만약 메소드가 5개보다 적거나 많으면 이상감지해야함... 대부분 5개임
	
	Student객체를 다른 class에 따로 저장.
	그 객체를 불러와서 data를 Model에서 수정.
	 */
     
import java.util.ArrayList;

public class StudentModel {
	
	// Student형의 ArrayList를 선언
	private ArrayList<Student> datas;
	
	// datas에 힙 메모리가 있는 ArrayList<S> 저장
	public StudentModel() {
		datas = new ArrayList<Student>();
		datas.add(new Student(1001, "홍길동", 50)); //샘플데이터
	}
	
	/*	
		[ R1, R2 ]
		2명 이상 출력될 수 있는 액션은 전부 All()
		- 성이 김씨인 학생 출력 -> selectAll()
		- 1002번 학생 출력 --> selectOne()
		- 1등 출력 ->  selectAll()
	 */
	public ArrayList<Student> selectAll() {
		return datas;
	}
	public Student selectOne(int num) { //PK가 아니면 selectOne잘안함
		for(Student data : datas) {
			if(data.getNum() == num) {
				return data;
			}
		}
		return null; //검색할 학생이 없다면, null이 반환됨 (굳이 boolean을 쓰지 않아도됨)
	}
	
	// [C]
	public boolean insert(int num, String name, int score) {
		datas.add(new Student(num, name, score));
		System.out.println("[로--그] insert 메서드 수행"); //코드 익숙하지 않으면 로그 넣어서 진행상황 보기
		return true;
	}
	
	/*
	// [U]
	- score는 View에서 체크 가능
		view에서 유효성 검사해주니 점수 이상한거 입력해도 ㄱㅊㄱㅊ model에선 생각 안해도됨
	- num 유효성은 데이터를 봐야지만 알 수 있음
		num PK : 1001번부터 학생 번호가 시작
		번호 입력 >> 10000000004564321 (view에서 검사)
		번호 입력 >> -200 (view에서 검사)
		번호 입력 >> 1002 전학갔을수도 있으니...정상적으로 입력한거임...(이런걸 model에서 잡음)
	*/
	public boolean update(int num, int score) {
		boolean flag = false;
		int i;
		for(i = 0; i < datas.size(); i++) {
			if(datas.get(i).getNum() == num) {
				flag = true;
				break;
			}
		}
		if(!flag) {
			System.out.println("[로--그] update 메서드 실패");
			return false;
		}
		datas.get(i).setScore(score);;
		System.out.println("[로--그] update 메서드 성공");
		return true;
	}
	
	// [D]
	public boolean delete(int num) {
		boolean flag = false;
		int i;
		for(i = 0; i < datas.size(); i++) {
			if(datas.get(i).getNum() == num) {
				flag = true;
				break;
			}
		}
		if(!flag) {
			System.out.println("[로--그] delete 메서드 실패");
			return false;
		}
		datas.remove(i);
		System.out.println("[로--그] delete 메서드 성공");
		return true;
	}
	
}

 

view > StudentView.java

package view;

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

import model.Student;

public class StudentView {
	private Scanner sc;
	public StudentView() {
		sc = new Scanner(System.in);
	}
	//목록 보여주는 메소드
	public void printMenu() {
		System.out.println("1. 추가");
		System.out.println("2. 목록");
		System.out.println("3. 검색");
		System.out.println("4. 변경");
		System.out.println("5. 삭제");
		System.out.println("0. 종료");
	}
	
	//입력 받는 메소드4 이상한 번호 입력하면 유효성검사하는 코드를 view에서 작성
	public int inputAction() {
		System.out.println("입력 >> ");
		int action = sc.nextInt();
		return action;
	}
	public String inputName() {
		System.out.println("학생이름입력 >> ");
		String name = sc.next();
		return name;
	}
	public int inputScore() {
		System.out.println("학생점수입력 >> ");
		int score = sc.nextInt();
		return score;
	}
	public int inputNum() { //다른곳도 유효성검사 ㄱㄱ
		int num;
		while(true) {
			System.out.println("학생번호입력 >> ");
			num = sc.nextInt();
			if(1000<num && num<2000) {
				break;
			}
			System.out.println("[로--그] 번호입력이 올바르지않습니다...");
		}
		return num;
	}
	
	public void printTrue() {
		System.out.println("완료되었습니다! :D");
	}
	public void printFalse() {
		System.out.println("해당 번호의 학생은 없습니다...");
	}
	public void printStudentDatas(ArrayList<Student> datas) {
		System.out.println("==== 학 생 목 록 ====");
		for(Student data:datas) {
			System.out.println(data);
		}
		System.out.println("===================");
	}
	public void printStudentData(Student data) {
		System.out.println("==== 학 생 출 력 ====");
		System.out.println(data);
		System.out.println("===================");
	}
	
}

 

controller > StudentCtrl

package controller;

import java.util.ArrayList;

import model.Student;
import model.StudentModel;
import view.StudentView;

public class StudentCtrl {
	private StudentModel model;
	private StudentView view;
	public StudentCtrl() {
		this.model = new StudentModel();
		this.view = new StudentView();
	}
	
	public void startApp() {
		int PK = 1002;
		while(true) {
			view.printMenu();
			int action = view.inputAction();
			if(action == 0) {
				break;
			}
			else if(action == 1) {
				String name = view.inputName();
				int score = view.inputScore();
				boolean flag = model.insert(PK++, name, action);
				if(flag) {
					view.printTrue();
				}
				else {
					view.printFalse();
				}
			}
			else if(action == 2) {
				ArrayList<Student> datas=model.selectAll();
				view.printStudentDatas(datas);
			}
			else if(action == 3) {
				int num=view.inputNum();
				Student data=model.selectOne(num);
				if(data!=null) {
					view.printStudentData(data);
				}
				else {
					view.printFalse();
				}
			}
			else if(action == 4) {
				int num = view.inputNum();
				int score = view.inputScore();
				boolean flag = model.update(num, score);
				if(flag) {
					view.printTrue();
				}
				else {
					view.printFalse();
				}	
			}
			else if(action == 5) {
				int num = view.inputNum();
				boolean flag = model.delete(num);
				if(flag) {
					view.printTrue();
				}
				else {
					view.printFalse();
				}	
			}
		}
	}
}

 

client - Test.java

package client;

import controller.StudentCtrl;

public class Test {
	public static void main(String[] args) {
		
		StudentCtrl app = new StudentCtrl();
		app.startApp();

	}
}

 

'JAVA > JAVA_복습문제' 카테고리의 다른 글

JAVA_MVC_#3_자판기.ver1 (DAO,DTO 1개)  (0) 2023.12.14
JAVA_MVC_#2_학생부.ver2  (0) 2023.12.12
JAVA_MVC_#1_계산기  (0) 2023.12.11
JAVA_예외처리(Exception)_#2  (0) 2023.12.08
JAVA_예외처리(Exception)_#1  (0) 2023.12.08