- 만들어보기_Student
> 그동안 배운 내용으로 프로그램을 만들어보며 익숙해지는 시간을 가져봤습니다
> 짧은시간안에 익히고 외워야하기 때문에 반복하며 배우는 시간이였습니다
> MAIN에는 크게 사용자에게 틀을 잡아주고
> 각 메뉴와 사용자의 입력정보는 Service메소드를 이용해 가공했습니다
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
StudentService service = new StudentService();
Util util = new Util();
while(true) {
System.out.println("====학사관리====");
System.out.println("1.학생등록 2.리스트 3.학생조회 4.학생수정 5.학생삭제 0.종료");
System.out.print("메뉴 >");
int menu = util.numberCheck();
if(menu == 1) {
service.save();
}else if(menu == 2) {
service.findAll();
}else if(menu == 3) {
service.findById();
}else if(menu == 4) {
service.upDate();
}else if(menu == 5) {
service.delete();
}else if(menu == 0) {
break;
}else {
System.out.println("없는 메뉴");
}
}
System.out.println("시스템 종료");
}
}
- 만들어보기_Student_Service
> 각 메뉴를 입력받으면 실행되는 service들입니다
public class StudentService {
StudentRepository re = new StudentRepository();
Scanner sc = new Scanner(System.in);
public void save() { < 사용자에게 받아 정보를 가공하는 save입니다.
StudentDTO studentDTO = new StudentDTO(); < Repository에 넣어주기 편하게 DTO객체로 압축
System.out.print("이름 >");
studentDTO.setName(sc.next());
System.out.print("국어 >");
studentDTO.setKor(sc.nextInt());
System.out.print("영어 >");
studentDTO.setEng(sc.nextInt()); < 입력받은 정보를 위에서 만든 DTO객체에 바로 저장
System.out.print("수학 >");
studentDTO.setMat(sc.nextInt());
studentDTO.setGrade();
if(re.save(studentDTO)) {
> 입력받은 정보를 저장한 DTO객체를 Repository에 매개변수로 사용하여 저장한모습
> 여기서 Repository 로 넘어가보면
System.out.println("등록 성공");
> 이렇게 Repository save에서 정상적으로 저장된다면 등록 성공이 출력되고
}else {
System.out.println("등록 실패");
> 실패하여 false가 리턴된다면 등록 실패가 출력된다
}
}
public void findAll() {
List<StudentDTO> list = re.findAll();
> DTO 리스트에 Repository에 있는 Array리스트를 대입함
System.out.println("학번\t이름\t국어\t영어\t수학\t총점\t평균\t학점");
System.out.println("------------------------------------------------------------");
for(StudentDTO s : list) {
System.out.println(s.toString());
> 향상된 for문을 이용해 넘겨받은 list를 StudentDTO 객체 S에 대입하며
> 실행문을 이용해 출력하는 실행문
}
}
public void findById() { > 학생을 조회하는 메소드
System.out.println("학번 >");
String stsno = sc.next();
> 학번으로 사용자를 확인하는 이유는 DTO를 살펴보면 알 수 있지만
> 학번은 사용자가 임의로지정할 수 없는 고유 번호로 설정했기 떄문입니다
StudentDTO studentDTO = re.findById(stsno);
> StudentDTO의 객체를 만들고 위에서 입력받은 학번을 이용하여
> Repository class의 메소드에 매개변수로 사용
> Arraylist에 입력받은 학번과 같은 정보가 담긴 list가 있다면 그것을
> DTO 객체에 대입하게 하였습니다 없다면 null이 대입됩니다
if(studentDTO == null) { < 대입받은 정보가 null이라면 없는 정보를 출력
System.out.println("없는 정보");
}else {
> null이 아니라면 list를 잘 대입 다은것이기 때문에
> DTO객체의 toString메소드를 출력합니다
System.out.println("학번\t이름\t국어\t영어\t수학\t총점\t평균\t학점");
System.out.println("------------------------------------------------------------");
System.out.println(studentDTO.toString());
}
}
public void upDate() { < 입력된 학생의 정보를 수정하는 메소드
System.out.print("대상 학번 >");
String stsno = sc.next();
> 위의 메소드와 마찬가지로 학번을 받는 이유는
> DTO에서 학번은 사용자가 임의로 입력할 수 없는 고유한 번호로 설정했기 떄문이다
StudentDTO studentDTO = re.findById(stsno);
> Repository를 재활용하여 입력받은 학번이 있는 Arraylist를 객체 DTO에 대입했다
if(studentDTO == null) { > 입력받은 정보가 NULL이면 없는 학새을 출력하고
System.out.println("없는 학생");
}else { > NULL이 아니면 LIST를 받았기 때문에 수정 정보를 입력받는다
System.out.print("이름(수정) >");
studentDTO.setName(sc.next());
System.out.print("국어(수정) >");
studentDTO.setKor(sc.nextInt()); < 위에서 사용자가 원하는 정보가 있는 객체를 찾았기 때문에
System.out.print("영어(수정) >"); < 찾은 객체에 바로 수정 정보를 set메소드를 이용하여 저장하는 모습입니다
studentDTO.setEng(sc.nextInt()); < 이방법은 jave에서만 가능하기때문에
System.out.print("수학(수정) >"); < Repository에 다른 방법을 작성해 놨습니다
studentDTO.setMat(sc.nextInt()); < 꼭 확인해주세요
studentDTO.setGrade();
System.out.println("수정 완료!\n");
System.out.println("학번\t이름\t국어\t영어\t수학\t총점\t평균\t학점");
System.out.println("------------------------------------------------------------");
System.out.println(studentDTO.toString()+"\n");
}
}
public void delete() { < 저장되어있는 학생 정보를 삭제하는 메소드
System.out.print("대상 학번 >");
String stsno = sc.next();
> 고유번호인 학번을 받아 사용자가 본인이 맞는지 확인
StudentDTO studentDTO = re.findById(stsno);
> Repository에 있는 메소드를 재활용하여 사용자의 정보를 DTO객체에 대입하였다
> list를 다시 가져오는 이유는 맞는 입력받은 학번이 있는 정보인지 확인하기 위해서다
if(studentDTO == null) {
System.out.println("없는 학번");
}else {
re.delete(studentDTO);
> 입력받은 정보가 null이 아니라면 Repository에 있는 메소드를 이용하여
> 객체를 매개변수로 가공하여 보내준다
> 이후는 Repository를 확인하자
System.out.println("삭제 완료");
}
}
}
- 만들어보기_Student_Reiository
>Repository의 주목적은 Service에서 가공하여 전달받은 정보를 DTO의 리스트에 저장하는 것
List<StudentDTO> list = new ArrayList<>();
public boolean save(StudentDTO studentDTO) {
> 리턴 타입은 boolean 매개변수는 정보를 입력받은 DTO객체를 이용
return list.add(studentDTO); < list.add에 매개 변수로 받은 DTO객체를 입력하여 통으로 리스트에 저장
> reutr을 list.add으로 하는 이유는 add은 숨겨진 메소드로 리턴 타입이 boolean이기 때문인데
> 입력받은 정보가 저장이되었다면 ture를 실패하였다면 false를 리턴해주기 떄문이다
> 이렇게 return을 이용하면 list.add이 정상적으로 작동하여 저장이 된다면 ture를 리턴할 수 있다
> 다시 Service로 넘어가 살펴보자!
}
public List<StudentDTO> findAll() {
return list;
> 간단하게 Array list를 리턴함 -끝-
}
public StudentDTO findById(String stsno) { < Srevice class에서 입력받은 학번을 매개변수로
for(StudentDTO s : list) { < 향상된 for문과 if문을 이용하여 대조하고 있다면 리턴
if(s.getSno().equals(stsno)) {
return s;
> 이렇게 리턴 타입을 받는 메소드는 return을 만나면 메소드를 빠져나기 때문에
> if문에서 return을 만나면 아래있는 return은 실행되지 않는다
}
}
return null; < 없다면 null을 리턴
}
public void delete(StudentDTO studentDTO) {
list.remove(studentDTO);
< 이렇게 매개변수로 받은 객체를 이용하여
< list.remove를 이용하여 지워준다
}
Service claa에 있어야 하는 메소드 예시
public void update(){
> 학번을 입력받는다
> DTO 객체를 만든다
> DTO 객체에 SET을 이용하여 입력받는다
> 받은 정보를 Repository에 있는 메소드에 매개 변수 넣고로 사용하여 메소드를 호출한다
> re.update(stsno , studentDTO) < 대충 이렇게
> 이후는 Repository에서 메소드가 실행되며 아래와 같이 저장된다 }
public boolean update(String sno , StudentDTO studentDTO) { < 학번 , DTO 객체을 매개변수로 받고
for(StudentDTO s : list) { < Repository에서 향상된 for문과 if문을 이용하여 학번과 맞다면
if(s.getSno().equals(sno)) { < 찾은 입력 학번이 있는 객체에 Service에서 입력받은 객체를 대입 set해준다
s.setName(studentDTO.getName());
s.setKor(studentDTO.getKor());
s.setEng(studentDTO.getEng());
s.setMat(studentDTO.getMat());
s.setGrade();
return true;
}
}
return false;
}
}
- 만들어보기_Student_DTO
> 대충 설계도 역활을 하는 DTO 클래스 아무튼 그럼 찰떡같이 이해하자
> 꼭 읽어보자
public class StudentDTO {
DecimalFormat df = new DecimalFormat("###.00");
private static int Number = 100;
private String sno;
private String name;
private int kor;
private int eng;
private int mat;
private int total;
private double avg;
private char grade; // 학점
public StudentDTO() {
this.sno = "S" + ++Number;
}
public String getSno() {
return sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
this.total = kor+eng+mat;
this.avg = total/(double)3;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
this.total = kor+eng+mat;
this.avg = total/(double)3;
}
public int getMat() {
return mat;
}
public void setMat(int mat) {
this.mat = mat;
this.total = kor+eng+mat;
this.avg = total/(double)3;
}
public int getTotal() {
return total;
}
public double getAvg() {
return avg;
}
public char getGrade() {
return grade;
}
public void setGrade() {
if(avg >= 90) {
this.grade = 'A';
}else if(avg >= 80){
this.grade = 'B';
}else if(avg >= 70){
this.grade = 'C';
}else if(avg >= 60){
this.grade = 'D';
}else {
this.grade = 'F';
}
}
@Override
public String toString() {
String str = sno+"\t"+name+"\t"+kor+"\t"+eng+"\t"+mat+"\t"+total+"\t"+df.format(avg)+"\t"+grade;
return str;
> 기본적으로 모든 class는 오브젝트를 상속받는다
> 아무튼 그러니까 오버라이드임
}
}
'나의 수업일지' 카테고리의 다른 글
숙제)아이디 중복 체크 저장용 (0) | 2023.03.12 |
---|---|
인천 일보 아카데미 12일차_2 만들며 익히기 (반복학습) (0) | 2023.03.10 |
인천 일보 아카데미 11일차 4개의 클래스를 사용하여 만들어보기 (0) | 2023.03.08 |
인천 일보 아카데미 10일차 확장_상속자_오버라이딩 / 추상화 (0) | 2023.03.07 |
인천 일보 아카데미 9일차 static을_알아보자 (0) | 2023.03.06 |