728x90
학생부 프로그램
프로그램 구조
Model
package model;
import java.util.ArrayList;
// CRUD(비즈니스 메서드,핵심 로직)
// : 일반적으로 output이 boolean 타입입니다!!! ★★★★★★
// 로그들만 syso() 가능 -> 나중에 로그는 주석으로 제거함!
// 나머지 syso() -------> VIEW의 기능!
// dao 메소드명은 insert, selectAll, selectOne, update, delete 고정
// => 기능이 많으면 오버로딩
public class StudentDAO {
private ArrayList<StudentVO> datas;
private static int PK=1001;
/*
PK는 사용자로부터 입력받으면 안됨!!!!!
ID를 입력받을수는있으나, "중복검사"를 함!
시스템에서 int값을 부여해야함!!!!!
*/
public StudentDAO(){
this.datas=new ArrayList<StudentVO>();
this.datas.add(new StudentVO(PK++,"홍길동",85));
this.datas.add(new StudentVO(PK++,"아무무",92));
this.datas.add(new StudentVO(PK++,"티모",51));
}
// C
public boolean insert(String name,int score) {
this.datas.add(new StudentVO(PK++,name,score));
return true;
}
// R : 목록 출력
public ArrayList<StudentVO> selectAll() {
return this.datas;
}
// R : 1개 출력
public StudentVO selectOne(int num) { // PK를 받아서,
for(int i=0;i<this.datas.size();i++) {
if(this.datas.get(i).getNum()==num) {
return this.datas.get(i);
}
} // -> 향상된 for문(forEach문)
System.out.println(" 로그: model: StudentDAO: selectOne(): 반환할 학생이 없습니다!");
return null; // 해당 PK를 가진 학생이 없는 상태
}
// U
public boolean update(int num,int score) {
for(int i=0;i<this.datas.size();i++) {
if(this.datas.get(i).getNum()==num) {
this.datas.get(i).setScore(score);
return true;
}
}
System.out.println(" 로그: model: StudentDAO: update(): 성적변경할 학생이 없습니다!");
return false;
}
// D
public boolean delete(int num) {
for(int i=0;i<this.datas.size();i++) {
if(this.datas.get(i).getNum()==num) {
this.datas.remove(i);
return true;
}
}
System.out.println(" 로그: model: StudentDAO: delete(): 제거할 학생이 없습니다!");
return false;
}
}
package model;
// 학생 데이터 그 자체를 의미함
// 멤버변수+getter,setter
// toString() 오버라이딩
// 생성자(오버로딩)
public class StudentVO {
private int num;
private String name;
private int score;
StudentVO(int num,String name,int score){
this.num=num;
this.name=name;
this.score=score;
System.out.println(this.name+" 학생 생성완료!");
}
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 this.num+"번 학생 "+this.name+" ["+this.score+"점]";
}
}
View
package view;
import java.util.ArrayList;
import java.util.Scanner;
import model.StudentVO;
// MVC중에서 V를 담당하는 클래스로,
// main()을 동작시키는것이 목표가아님!
public class StudentView {
private static final int maxMenuNum=6;
// 높은 응집도를 가진 코드를 구현하기위함!
private static Scanner sc=new Scanner(System.in);
// 메뉴를 안내해주는 기능
// 1. 학생목록출력
// 2. 학생검색
// 3. 학생정보변경
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. 프로그램 종료");
}
// 사용자의 입력을 저장하는 기능
// + 유효성 검사
public int getMenuNum() {
while(true) {
try {
System.out.print("입력) ");
int menuNum=sc.nextInt();
if(1<=menuNum && menuNum<=maxMenuNum) {
return menuNum;
}
}
catch(Exception e) {
sc.nextLine();
System.out.println("정수로 입력해주세요!");
}
}
}
// 학생목록을 출력하는 기능
public void printStudentList(ArrayList<StudentVO> datas) {
System.out.println("===학생 목록 출력===");
for(StudentVO v:datas) {
System.out.println(v);
}
}
// 검색한 학생의 정보를 출력하는 기능
public void printStudent(StudentVO data) {
System.out.println("===학생 출력===");
System.out.println(data);
}
// 사용자가 입력한 번호를 저장하는 기능
public int getStudentNum() {
System.out.print("학생번호입력) ");
int num=sc.nextInt();
return num;
}
// 사용자가 입력한 점수를 저장하는 기능
public int getStudentScore() {
System.out.print("학생점수입력) ");
int score=sc.nextInt();
return score;
}
// 변경완료를 안내해주는 기능
public void printInfo() {
System.out.println("학생정보변경완료!");
}
// 학생추가시 안내멘트
public void printInfo_C_Start() {
System.out.println("학생추가를 시작합니다.");
}
// 이름 입력받기
public String getStudentName() {
System.out.print("이름입력) ");
String name=sc.next();
return name;
}
// 학생추가완료를 안내해주는 기능
public void printInfo_C_End() {
System.out.println("학생추가완료!");
}
// 학생삭제시 안내멘트
public void printInfo_D_Start() {
System.out.println("학생삭제를 시작합니다.");
}
// 학생삭제완료를 안내해주는 기능
public void printInfo_D_End() {
System.out.println("학생삭제완료!");
}
// 프로그램 종료 안내해주는 기능
public void printEnd() {
System.out.println("프로그램 종료 .....");
}
public void printFalse() {
System.out.println("서비스 수행 실패.....");
}
}
Controller
package controller;
import java.util.ArrayList;
import model.StudentDAO;
import model.StudentVO;
import view.StudentView;
public class StudentCtrl {
private StudentView view;
private StudentDAO dao; // model
public StudentCtrl(){
this.view=new StudentView();
this.dao=new StudentDAO();
}
public void startApp() {
while(true) {
// 사용자한테 메뉴보여줘!
view.printMenu();
// 사용자가 뭐 할지 입력받아봐
int menuNum=view.getMenuNum();
if(menuNum==1) {
// 목록출력해
ArrayList<StudentVO> datas=dao.selectAll();
view.printStudentList(datas);
}
else if(menuNum==2) {
// 1명출력해
int num=view.getStudentNum();
StudentVO data=dao.selectOne(num);
view.printStudent(data);
}
else if(menuNum==3) {
// 변경해
int num=view.getStudentNum();
int score=view.getStudentScore();
dao.update(num, score);
view.printInfo();
}
else if(menuNum==4) {
// 추가해
view.printInfo_C_Start();
String name=view.getStudentName();
int score=view.getStudentScore();
dao.insert(name, score);
view.printInfo_C_End();
}
else if(menuNum==5) {
// 제거해
view.printInfo_D_Start();
int num=view.getStudentNum();
if (dao.delete(num)) {
view.printInfo_D_End();
} else {
view.printFalse();
}
// CRUD(비즈니스 메서드,핵심 로직)이 성공했는지,실패했는지를 알아야함!!!!!
}
else if(menuNum==6) {
view.printEnd();
break;
}
}
}
}
Client
package client;
import controller.StudentCtrl;
public class Client {
public static void main(String[] args) {
StudentCtrl app=new StudentCtrl();
app.startApp();
}
}
GitHub
https://github.com/Qkrwnsgus0522/Java
728x90