JAVA/문제풀이

MVC 이용한 학생부 프로그램 1단계

nsh95 2023. 12. 11. 22:39

Controller

 

package studentCtroller;

import java.util.ArrayList;

import studentModel.Student;
import studentModel.StudentModel;
import studentView.StudentView;

public class StudentController {
	private StudentModel model;
	private StudentView view;
	
	public StudentController() {
		this.model = new StudentModel();
		this.view = new StudentView();
	}
	
	public void startApp() {
		int PK = 1002;
		while(true) {
			view.printList();
			int action = view.inputAction();
			if(action==0) {
				break;
			}
			else if(action==1) {	// 1. 학생 추
				String name = view.inputName();
				int score = view.inputScore();
				boolean flag = model.insert(PK++, name, score);
				
				if(flag) {
					view.printTrue();
				}else{
					view.printFalse();
				}
				
				
						
			}else if(action==2) {	// 2 전체 검색
				
				ArrayList<Student> datas= model.selectAll();
				view.printStudentDatas(datas);
			}else if(action==3) {
				int num = view.inputStudentNum();
				Student data = model.selectOne(num);
				if(data!=null) {
					view.printStudentData(data);
				}
				else {
					view.printFalse();
				}
			}else if(action==4) {	// 학생 점수변경 
				int num = view.inputStudentNum();
				int score=view.inputScore();
				boolean flag = model.update(num, score);
				if(flag) {
					view.printTrue();
				}else {
					view.printFalse();
				}
			}else if(action==5) {
				int num = view.inputStudentNum();
				boolean flag = model.delete(num);
				
				if(flag) {
					view.printTrue();
				}else {
					view.printFalse();
				}
					
			}
		}
	}
}

 

 

View

 

package studentView;

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

import studentModel.Student;

public class StudentView {
	private Scanner sc;

	public StudentView() { // 새 객체 생
		sc = new Scanner(System.in);
	}

	// 메서드 만들어 필요한거

	// 사용자한테 보여줄 화면 목록띄워
	// 추가에서 이름이랑 점수 입력받아야 돼
	// 목록에서 숫자 입력받아서 전체목록 추ㅠㄹ력해줘야돼
	// 또 학생 검색 학생 pk를 받아서 출력 받아야돼
	// pk 입력 받고 학생 점수 수정 해야돼
	// pk 입력 받고 학생 삭
	public void printList() {
		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("0. 종료");
	}

	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 inputStudentNum() {
		// 학생 번호 유효성 검사
		int stuNum;
		while (true) {
			System.out.println("학생 번호 입력 >> ");
			stuNum = sc.nextInt();
			if (100 < stuNum && stuNum < 2000) {
				break;
			}
			System.out.println("변경이 올바르지 않습니다.");
		}
		return stuNum;
	}

	
	public void printTrue() {
		// 성공했을 때 출력해주는 메서드
		System.out.println("완료되었습니다.");
	}
	public void printFalse() {
		System.out.println("해당 번호의 학생이 없습니다");
	}
	
	public void printStudentDatas(ArrayList<Student> datas) {
		// student 클래스부터 만들
		System.out.println("학생 목록");
		for(Student data : datas) {
			System.out.println(data);
		}
	}
	public void printStudentData(Student data) {
		System.out.println("==학생출력==");
		System.out.println(data);
		System.out.println("=========");
	}
}

 

 

Model

package studentModel;

import java.util.ArrayList;

public class StudentModel {
	private ArrayList<Student> datas;
	
	public StudentModel() {
		datas= new ArrayList<Student>();
		datas.add(new Student(1001,"노승현",50));	// 왜 빨간줄? Student 클래스에 인자를 안받
	}
	
	public ArrayList<Student> selectAll(){	// 검색해 나오는객체가 다수면 all 사
		return datas;
	}
	public Student selectOne(int num) {	// 학생 하나 검색추출
		for(Student data:datas) {
			if(data.getNum()==num) {
				return data;
			}
		}
		return null;	// 검색할 학생이 없을 땐 null return
	}
	
	
	public boolean insert(int num,String name,int score) {
		datas.add(new Student(num,name,score));
		System.out.println("insert 메서드 실행");
		return true;
	}
	
	public boolean update(int num,int score) {
		// num 유효성은 데이터를 봐야만 알 수 있다.
		// 이용자가 정상적으로 사용했지만, 특수한 상황에선 model에서 유효성 검사
		// score 는 view 에서 관
		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;
	}
	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;
			}
		}
		if(!flag) {
			System.out.println("delete 메서드 실패");
		}
		datas.remove(i);
		System.out.println("delete 성공");
		return true;
	}
}

 

 

 

Main 

 

package studentMain;

import studentCtroller.StudentController;

public class Main {
	public static void main(String[] args) {
		StudentController app = new StudentController();
		
		app.startApp();
	}
}