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 |