JAVA를 잡아라!...
JAVA_MVC_#2_학생부.ver1 본문
[ 학생부 프로그램 ]
LP, UF, 데이터(ERD) 고민부터 하기!
LP(CRUD)
1. 추가
학생이름입력 >> 홍길동
학생점수입력 >> 50
학생추가가 완료되었습니다! :D
2. 목록
학생목록
1001번 xxx학생 xx점
3. 검색
학생번호입력 >> 1001
1001번 xxx학생 xx점
or
해당 번호의 학생은 없습니다...
4. 변경
학생번호입력 >> 1001
학생점수입력 >> 60
완료되었습니다! :D
or
해당 번호의 학생은 없습니다...
5. 삭제
학생번호입력 >> 1001
완료되었습니다! :D
or
해당 번호의 학생은 없습니다...
0. 종료
UF
학생추가
학생목록출력
학생검색
학생정보변경
학생삭제
데이터(ERD)
PK 1001
model > Student.java
package model;
/*
고유 객체(Student)의 속성만 모아두기
객체만 따로 저장하는 class
Control에서도 Student를 불러와서 사용해야되기 때문에...
*/
public class Student {
private int num; // PK
private String name;
private int score;
public Student(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;
}
@Override
public String toString() {
return num + "번" + name + "학생" + score + "점";
}
}
model > StudentModel.java
package model;
/*
Model에서 CRUD를 담당!
CUD : 진행했을때 성공할수도?실패할수도? 있기때문에 대부분 boolean으로 리턴
(ex) 해당 번호의 학생은없습니다..., 메모리가 가득차서 추가가 어렵습니다...,
RR : 출력결과가 1개인 R, 출력결과가 여러개인 R
--> CRRUD : 만약 메소드가 5개보다 적거나 많으면 이상감지해야함... 대부분 5개임
Student객체를 다른 class에 따로 저장.
그 객체를 불러와서 data를 Model에서 수정.
*/
import java.util.ArrayList;
public class StudentModel {
// Student형의 ArrayList를 선언
private ArrayList<Student> datas;
// datas에 힙 메모리가 있는 ArrayList<S> 저장
public StudentModel() {
datas = new ArrayList<Student>();
datas.add(new Student(1001, "홍길동", 50)); //샘플데이터
}
/*
[ R1, R2 ]
2명 이상 출력될 수 있는 액션은 전부 All()
- 성이 김씨인 학생 출력 -> selectAll()
- 1002번 학생 출력 --> selectOne()
- 1등 출력 -> selectAll()
*/
public ArrayList<Student> selectAll() {
return datas;
}
public Student selectOne(int num) { //PK가 아니면 selectOne잘안함
for(Student data : datas) {
if(data.getNum() == num) {
return data;
}
}
return null; //검색할 학생이 없다면, null이 반환됨 (굳이 boolean을 쓰지 않아도됨)
}
// [C]
public boolean insert(int num, String name, int score) {
datas.add(new Student(num, name, score));
System.out.println("[로--그] insert 메서드 수행"); //코드 익숙하지 않으면 로그 넣어서 진행상황 보기
return true;
}
/*
// [U]
- score는 View에서 체크 가능
view에서 유효성 검사해주니 점수 이상한거 입력해도 ㄱㅊㄱㅊ model에선 생각 안해도됨
- num 유효성은 데이터를 봐야지만 알 수 있음
num PK : 1001번부터 학생 번호가 시작
번호 입력 >> 10000000004564321 (view에서 검사)
번호 입력 >> -200 (view에서 검사)
번호 입력 >> 1002 전학갔을수도 있으니...정상적으로 입력한거임...(이런걸 model에서 잡음)
*/
public boolean update(int num, int score) {
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;
}
// [D]
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;
break;
}
}
if(!flag) {
System.out.println("[로--그] delete 메서드 실패");
return false;
}
datas.remove(i);
System.out.println("[로--그] delete 메서드 성공");
return true;
}
}
view > StudentView.java
package view;
import java.util.ArrayList;
import java.util.Scanner;
import model.Student;
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("0. 종료");
}
//입력 받는 메소드4 이상한 번호 입력하면 유효성검사하는 코드를 view에서 작성
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 inputNum() { //다른곳도 유효성검사 ㄱㄱ
int num;
while(true) {
System.out.println("학생번호입력 >> ");
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<Student> datas) {
System.out.println("==== 학 생 목 록 ====");
for(Student data:datas) {
System.out.println(data);
}
System.out.println("===================");
}
public void printStudentData(Student data) {
System.out.println("==== 학 생 출 력 ====");
System.out.println(data);
System.out.println("===================");
}
}
controller > StudentCtrl
package controller;
import java.util.ArrayList;
import model.Student;
import model.StudentModel;
import view.StudentView;
public class StudentCtrl {
private StudentModel model;
private StudentView view;
public StudentCtrl() {
this.model = new StudentModel();
this.view = new StudentView();
}
public void startApp() {
int PK = 1002;
while(true) {
view.printMenu();
int action = view.inputAction();
if(action == 0) {
break;
}
else if(action == 1) {
String name = view.inputName();
int score = view.inputScore();
boolean flag = model.insert(PK++, name, action);
if(flag) {
view.printTrue();
}
else {
view.printFalse();
}
}
else if(action == 2) {
ArrayList<Student> datas=model.selectAll();
view.printStudentDatas(datas);
}
else if(action == 3) {
int num=view.inputNum();
Student data=model.selectOne(num);
if(data!=null) {
view.printStudentData(data);
}
else {
view.printFalse();
}
}
else if(action == 4) {
int num = view.inputNum();
int score = view.inputScore();
boolean flag = model.update(num, score);
if(flag) {
view.printTrue();
}
else {
view.printFalse();
}
}
else if(action == 5) {
int num = view.inputNum();
boolean flag = model.delete(num);
if(flag) {
view.printTrue();
}
else {
view.printFalse();
}
}
}
}
}
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_자판기.ver1 (DAO,DTO 1개) (0) | 2023.12.14 |
---|---|
JAVA_MVC_#2_학생부.ver2 (0) | 2023.12.12 |
JAVA_MVC_#1_계산기 (0) | 2023.12.11 |
JAVA_예외처리(Exception)_#2 (0) | 2023.12.08 |
JAVA_예외처리(Exception)_#1 (0) | 2023.12.08 |