JAVA를 잡아라!...
JAVA_MVC_#2_학생부.ver2 본문
[ 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 |