Adventure Time - Finn 3
본문 바로가기
JAVA/프로그램 설계 및 제작

MVC var.3

by hyun9_9 2023. 12. 12.

2023.12.13 추가

웹 개발에서는 
기본생성자를 사용하는 것을 원칙으로 한다!!
: new 할때 생성자의 인자로 넣는 값중에서
어떤 값이 정말 유효한 값인지 파악하는 시간을 줄이기위함

 

모델 : 응집도를 높이기 위해 같은메서드에 만든다 

 

client

public class Client {
	public static void main(String[] args) {

		StudentCtrl app=new StudentCtrl();//설치
		app.startApp();//실행
	}
}

 

model

package model;

public class StudentDTO {
	private int num; // PK
	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 String getSearchCondition() {
		return searchCondition;
	}
	public void setSearchCondition(String searchCondition) {
		this.searchCondition = searchCondition;
	}
	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 + "점";
	}
}

 

 

package model;

import java.util.ArrayList;

public class StudentDAO {

	// CRRUD
	// 만약 메서드가 5개보다 적거나 많으면 어라...?? 이상감지해야함

	private ArrayList<StudentDTO> datas;

	public StudentDAO() {//명함집 생성
		datas=new ArrayList<StudentDTO>();
		datas.add(new StudentDTO(1001,"홍길동",50));
		datas.add(new StudentDTO(1002,"홍길동1",50));
		datas.add(new StudentDTO(1003,"홍길동2",50));
		datas.add(new StudentDTO(1004,"홍길동3",50));
		datas.add(new StudentDTO(1005,"나",60));
	}
	
	public ArrayList<StudentDTO> selectAll(StudentDTO studentDTO) {//명함 모두보기
		if(studentDTO.getSearchCondition().equals("점수검색")) {//성적으로 검색하는 상황이라면?
			ArrayList<StudentDTO>datas=new ArrayList<StudentDTO>();
			for(int i=0;i<this.datas.size();i++) {//전체목록중에서~
				if(this.datas.get(i).getScore()>=studentDTO.getScore()) {//성적이 받아온 값보다 크가나 같니?
					datas.add(this.datas.get(i));//반환할 목록에 추가하기
				}
			}
			
			return datas;//반환할 목록에 저장된 배열 자체를 return
			
		}else if(studentDTO.getSearchCondition().equals("이름검색")) {
			ArrayList<StudentDTO>datas=new ArrayList<StudentDTO>();
			for(int i=0;i<this.datas.size();i++) {//전체목록중에서~
				if(this.datas.get(i).getName().contains(studentDTO.getName())) {//받아온 문자열을 포함한 단어
					datas.add(this.datas.get(i));//반환할 목록에 추가하기
				}
			}		
			return datas;//반환할 목록에 저장된 배열 자체를 return			
		}
		else if(studentDTO.getSearchCondition().equals("정확한이름검색")) {
			ArrayList<StudentDTO>datas=new ArrayList<StudentDTO>();
			for(int i=0;i<this.datas.size();i++) {//전체목록중에서~
				if(this.datas.get(i).getName().equals(studentDTO.getName())) {//받아온 문자열 비교
					datas.add(this.datas.get(i));//반환할 목록에 추가하기
				}
			}		
			return datas;//반환할 목록에 저장된 배열 자체를 return			
		}
		else {
			return this.datas;//전체 목록 ==DB==학생부 그 자체
		}
	}
	public StudentDTO selectOne(StudentDTO studentDTO) {//명함 찾아보기
		for(StudentDTO data:datas) {
			if(data.getNum()==studentDTO.getNum()) {
				return data;
			}
		}
		return null; // 검색할 학생이 없다면, null이 반환됨
	}
	// Q1. 성이 김씨인 학생 출력 -> selectAll()
	// Q2. 1002번 학생 출력 -> selectOne()
	// Q3. 1등 출력 -> selectAll() : 2명이상일수도있는 액션은 전부 All()

	public boolean insert(StudentDTO studentDTO) {//명함 넣기
		datas.add(new StudentDTO(studentDTO.getNum(),studentDTO.getName(),studentDTO.getScore()));
		System.out.println("   [로그] insert 메서드 수행");
		return true;
	}
	public boolean update(StudentDTO studentDTO) {//명함 바꾸기
		// num 유효성은 데이터를 봐야지만 알수있음
		// score는 VIEW에서 체크가능
		boolean flag=false;
		int i;
		for(i=0;i<datas.size();i++) {
			if(datas.get(i).getNum()==studentDTO.getNum()) {
				flag=true;
				break;
			}
		}
		if(!flag) {
			System.out.println("   [로그] update 메서드 실패");
			return false;
		}
		if(studentDTO.getName()!=null) {//name 인자에 값을 부여했다면,변경을 하고싶었던것
			datas.get(i).setName(studentDTO.getName());
			System.out.println("   [로그] update 이름 변경 성공");
		}else {
			datas.get(i).setScore(studentDTO.getScore());
			System.out.println("   [로그] update 성적 변경 성공");
		}
		
		
		return true;
	}
//	public boolean update(int num,String name) {
//		//오버로딩으로 해결
//		//변경시 놓칠확률이 높음
//		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).setName(name);
//		System.out.println("   [로그] update 메서드 성공");
//		return true;
//	}
	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) {
			System.out.println("   [로그] delete 메서드 실패");
			return false;
		}
		
		datas.remove(i);
		System.out.println("   [로그] delete 메서드 성공");
		return true;
	}
}

 

 

 

 

 

view

package view;

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

import model.StudentDTO;

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("6. 점수로 학생 검색");
		System.out.println("7. 이름으로 학생 검색");
		System.out.println("8. 정확한 이름으로 학생 검색");
		System.out.println("0. 종료");
	}
	public int inputAction() {
		System.out.print("입력 >> ");
		int action=sc.nextInt();
		return action;
	}
	public String inputName() {
		System.out.print("학생이름입력 >> ");
		String name=sc.next();
		return name;
	}
	public int inputScore() {
		System.out.print("학생점수입력 >> ");
		int score=sc.nextInt();
		return score;
	}
	public int inputNum() {
		int num;
		while(true) {
			System.out.print("학생번호입력 >> ");
			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<StudentDTO> datas) {
		System.out.println("==== 학 생 목 록 ====");
		for(StudentDTO data:datas) {
			System.out.println(data);
		}
		System.out.println("===================");
	}
	public void printStudentData(StudentDTO data) {
		System.out.println("==== 학 생 출 력 ====");
		System.out.println(data);
		System.out.println("===================");
	}
	

	public void printUpdateMenu() {
		System.out.println("===변경중..===");
		System.out.println("1. 성적변경");
		System.out.println("2. 이름변경");
	}
	
}

 

 

'JAVA > 프로그램 설계 및 제작' 카테고리의 다른 글

MVC - 자판기 프로그램 (var.2)  (0) 2023.12.14
MVC - 자판기 프로그램 (var.1)  (0) 2023.12.13
서점 - 배스트셀러 추가  (0) 2023.12.10
서점 - 배스트 셀러 미완  (0) 2023.12.10
서점 - Update  (0) 2023.12.10