JAVA를 잡아라!...

JAVA_MVC_#2_학생부.ver2 본문

JAVA/JAVA_복습문제

JAVA_MVC_#2_학생부.ver2

onivv 2023. 12. 12. 23:55

[ update < 점수변경, 이름변경 ]
점수변경에서 추가로 이름도 변경하고 싶을 때....

 

[ 점수 검색 ]
if(성적으로 검색하는 상황이라면?)
조건에 맞는 학생 배열을 따로 만들어서 그 학생을 추가하기!
전체목록중에서~
보고있는애 성적이 받아온값보다 크거나 같니? ㅇㅇ
반환할 목록에 추가하기
반환할 목록에 저장된 배열 자체를 return (여기서 반환할 목록은 점수 이상인 학생만 반환할 목록)
그게 아니라면 this.datas 전체 목록(==DB==학생부 그 자체)

[ 이름 검색 ]
이릅입력 >> 홍길동
전체 데이터 중에
홍길동이라는 이름가진 사람들을 전부 뽑아서
반환할 배열에 저장
위의 배열을 반환
View에서 받은 배열을 출력
if(datas사이즈가 <= 0)
어?없는데?
검색결과가 없습니다.

 

model > StudentDTO.java

package model;

public class StudentDTO {
	private int num;
	private String name;
	private int score;
	private String searchCondition;
	
	public StudentDTO(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;
	}
	public String getSearchCondition() {
		return searchCondition;
	}
	public void setSearchCondition(String searchCondition) {
		this.searchCondition = searchCondition;
	}
	
	@Override
	public String toString() {
		return "번호: " + this.num + ", 이름: " + this.name + ", 성적: " + this.score;
	}
}

 

model > StudentDAO.java

package model;

import java.util.ArrayList;

public class StudentDAO {
	//DB 만들기
	private ArrayList<StudentDTO> datas;
	//생성자 만들기(초기화)
	public StudentDAO() {
		this.datas = new ArrayList<StudentDTO>(); //datas에 객체배열 넣기
		this.datas.add(new StudentDTO(1001, "홍길동", 20));
		this.datas.add(new StudentDTO(1002, "홍석천", 40));
		//객체를 새로 추가할때마다 new 붙이기 <-- 생성자를 새로 불러오는거니까
	}
	//R - selectAll
	//setSearchCondition에 "~검색"저장된 객체 받아오기
	public ArrayList<StudentDTO> selectAll(StudentDTO studentDTO){
		//반환해줄 빈 ArrayList<>만들기
		ArrayList<StudentDTO> studentDatas = new ArrayList<StudentDTO>();
		//[점수검색]
		//객체에 setSearchCondition에 "점수검색"이 저장되있으면
		if(studentDTO.getSearchCondition().equals("점수검색")) {
			//그 객체와 일치하는 점수를 가진 객체를 새로운 배열에 저장
			for(int i = 0; i < datas.size(); i++) {
				if(studentDTO.getScore() == this.datas.get(i).getScore()) {
					studentDatas.add(this.datas.get(i));
				}
			}
			//새로 저장된 배열 반환
			return studentDatas;
		}
		//[이름검색]
		else if(studentDTO.getSearchCondition().equals("이름검색")) {
			//그 객체와 일치하는 이름을 가진 객체를 새로운 배열에 저장
			for(int i = 0; i < datas.size(); i++) {
				if(studentDTO.getName().equals(datas.get(i).getName())) {
					studentDatas.add(this.datas.get(i));
				}
			}
			//새로 저장된 배열 반환
			return studentDatas;
		}
		//[전체검색]
		else {
			return this.datas;
		}
	}
	//R - selectOne
	//객체를 인자로 받아 객체를 output
	public StudentDTO selectOne(StudentDTO studentDTO) {
		//인자로 받은 객체의 PK가 datas의 PK번호가 같은 객체가 있으면
		boolean flag = false;
		int i;
		for(i = 0; i < this.datas.size(); i++) {
			if(studentDTO.getNum() == datas.get(i).getNum()) {
				flag = true;
				break;
			}
		}
		if(!flag) {
			return null;
		}
		//PK일치하는 객체를 반환
		return datas.get(i);
	}
	//C - insert
	//View에서 만든 객체를 받아와서 배열에 저장
	public boolean insert(StudentDTO studentDTO) {
		this.datas.add(studentDTO);
		return true;
	}
	//U - update : 객체배열의 값을 수정
	public boolean update(StudentDTO studentDTO) {
		boolean flag = false;
		//사용자에게 받은 studentDTO의 PK와 배열에 있는 객체의 PK와 비교
		int i;
		for(i = 0; i < datas.size(); i++) {
			//배열의 PK == studentDTO객체의 PK
			if(datas.get(i).getNum() == studentDTO.getNum()) {
				flag = true;
				break; //break안걸어주면 i가 ++되서 마지막 i는 배열의 길이보다 큰 값나옴
			}
		}
		if(!flag) {
			return false; //PK가 일치하는 객체가 없으면 메소드 탈출
		}
		//[이름 update]
		if(studentDTO.getName() != null) { //이름이 있는 객체라면
			datas.get(i).setName(studentDTO.getName());
		}
		//[점수 update]
		else {
			datas.get(i).setScore(studentDTO.getScore());
		}
		return true;
	}
	//D - delete : 객체배열의 객체를 삭제
	public boolean delete(StudentDTO studentDTO) {
		boolean flag = false;
		int i;
		for(i = 0; i < datas.size(); i++) {
			if(datas.get(i).getNum() == studentDTO.getNum()) {
				flag = true;
				break;
			}
		}
		if(!flag) {
			return false;
		}
		datas.remove(i);
		return true;
	}
}

 

view > StudentView.java

package view;

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

import model.StudentDTO;

public class StudentView {
	private Scanner sc;
	public StudentView() {
		this.sc = new Scanner(System.in);
	}
	public 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.println("6. 점수로 학생들 검색");
		System.out.println("7. 이름으로 학생들 검색");
		System.out.println("0. 종료");
	}
	public int inputAction() {
		System.out.println("번호 입력 >> ");
		int num = sc.nextInt();
		return num;
	}
	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() {
		System.out.println("학생 번호 입력 >> ");
		int num = sc.nextInt();
		return num;
	}
	public void printTrue() {
		System.out.println("기능 수행 완료");
	}
	public void printFalse() {
		System.out.println("기능 수행 실패");
	}
	public void printUpdateMenu() {
		System.out.println("1. 성적변경");
		System.out.println("2. 이름변경");
	}
	public void printData(StudentDTO studentDTO) {
		System.out.println(studentDTO);
	}
	public void printDatas(ArrayList<StudentDTO> datas) {
		for(StudentDTO data : datas) {
			System.out.println(data);
		}
	}
}

 

controller > StudentCtrl

package controller;

import java.util.ArrayList;

import model.StudentDAO;
import model.StudentDTO;
import view.StudentView;

public class StudentCtrl {
	private StudentView view;
	private StudentDAO model;
	public StudentCtrl() {
		this.view = new StudentView();
		this.model = new StudentDAO();
	}
	
	public void startApp() {
		int PK = 1003;
		while(true) {
			view.printMenu();
			int action = view.inputAction();
			if(action == 0) {
				System.out.println("프로그램 종료");
				break;
			}
			else if(action == 1) {
				//번호 / 이름줘, 점수줘, --> 받아오기
				//사용자가 입력한것을 각각 저장
				//저장한걸 객체에 넣기
				String name = view.inputName();
				int score = view.inputScore();
				StudentDTO data = new StudentDTO(PK++, name, score);
				//만든 객체를 저장시켜주기
				boolean flag = model.insert(data);
				//저장 성공여부 확인
				if(flag) {
					view.printTrue();
				}
				else {
					view.printFalse();
				}
			}
			else if(action == 2) {
				//빈 객체 생성
				StudentDTO studentDTO = new StudentDTO(0, null, 0);
				//객체의 searchCondition에 "전체검색"저장
				studentDTO.setSearchCondition("전체검색");
				//사용자에게 전체목록 출력
				view.printDatas(model.selectAll(studentDTO));
			}
			else if(action == 3) {
				//사용자에게 검색할 객체의 PK번호 받아오기
				int num = view.inputNum();
				//PK번호를 가진 객체 생성
				StudentDTO studentDTO = new StudentDTO(num, null, 0);
				//객체배열에서 PK번호가 일치하는 객체 찾기
				StudentDTO data = model.selectOne(studentDTO);
				//찾은 객체가 없으면
				if(data == null) {
					view.printFalse();
					continue; //아래 코드가 읽히면 안되니까 while문 처음으로
				}
				//찾은 객체가 있으면
				view.printData(data);
			}
			else if(action == 4) {
				//성적or이름 뭘 변경할래?
				view.printUpdateMenu();
				//1or2 사용자에게 받기
				action = view.inputAction();
				//사용자에게 변경할 객체의 PK를 받아옴 view.inputNum
				int num = view.inputNum();
				boolean flag;
				if(action == 1) {
					int score = view.inputScore();
					StudentDTO studentDTO = new StudentDTO(num, null, score);
					flag = model.update(studentDTO);
				}
				else {
					String name = view.inputName();
					StudentDTO studentDTO = new StudentDTO(num, name, 0);
					flag = model.update(studentDTO);
				}
				if(flag) {
					view.printTrue();
				}
				else {
					view.printFalse();
				}
			}
			else if(action == 5) {
				//사용자에게 삭제할 객체의 PK를 받아옴 view.inputNum
				int num = view.inputNum();
				//PK만 있는 객체를 생성
				StudentDTO studentDTO = new StudentDTO(num, null, 0);
				//이 객체를 배열객체와 비교해 맞으면 삭제!
				boolean flag = model.delete(studentDTO);
				if(flag) {
					view.printTrue();
				}
				else {
					view.printFalse();
				}
			}
			else if(action == 6) {
				//점수만 들어간 객체를 생성
				int score = view.inputScore();
				StudentDTO studentDTO = new StudentDTO(0, null, score);
				//객체의 searchCondition에 "점수검색"저장
				studentDTO.setSearchCondition("점수검색");
				ArrayList<StudentDTO> datas = model.selectAll(studentDTO);
				view.printDatas(datas);
			}
			else if(action == 7) {
				//이름 들어간 객체를 생성
				String name = view.inputName();
				StudentDTO studentDTO = new StudentDTO(0, name, 0);
				//객체의 searchCondition에 "이름검색"저장
				studentDTO.setSearchCondition("이름검색");
				view.printDatas(model.selectAll(studentDTO));
			}
		}
		//while end
	}
}

 

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_자판기.ver2 (DAO,DTO 2개)  (1) 2023.12.17
JAVA_MVC_#3_자판기.ver1 (DAO,DTO 1개)  (0) 2023.12.14
JAVA_MVC_#2_학생부.ver1  (1) 2023.12.11
JAVA_MVC_#1_계산기  (0) 2023.12.11
JAVA_예외처리(Exception)_#2  (0) 2023.12.08