본문 바로가기
국비 교육/백엔드(Java, Spring)

[자바] 피트니스 관리 프로젝트 - v2

by 육츠 2024. 1. 24.
Contents 접기

v2 = 다수의 데이터 처리(객체배열)

1) FitnessVO 설계
2) 서비스 분리

 

package service;

import java.util.Scanner;

import vo.Fitness;

public class FitnessService {
	Scanner scanner = new Scanner(System.in); 
	
	Fitness[] members = new Fitness[100]; // 최대 회원 수 100명
	int size; // 현재 회원 수 

	public FitnessService(){

		String choice;


		while(true) {
			menu(); 
			choice = scanner.next();
			
			switch(choice) {
			case "1" : create(); break; 
			case "2" : read(); break;  // 검색: 이름이나 id를 입력 (이름인 경우 같은 동명이인 존재)
			case "3" : update(); break; 
			case "4" : delete(); break; 
			case "0" : System.out.println("## 프로그램을 종료하겠습니다. ");return; 
			default : System.out.println("메뉴에 적힌 번호를 입력해주세요."); scanner.nextLine();
			
			}
		}


	}
원래 코드 바뀐 코드 의미
Fitness member; Fitness[] members = new Fitness[100]; 객체 배열 생성. 최대회원 수 = 100명 
- int size; 현재 회원 수

 

 회원으로 가입을 처리하는 메소드  - create()

 parameter: 없음 / return: 없음

 		private void create() {
		System.out.println(" [ 회원 등록 ] ");
		
		String id, name;
		double weight, height;
		
		if(size > members.length) {
			System.out.println("## 현재는 가입이 불가능합니다.. ");
			return;
		}
		
		System.out.print("> 아이디: "); id = scanner.next();
		System.out.print("> 이  름: "); name = scanner.next();
		System.out.print("> 키(cm): "); height = scanner.nextDouble();
		System.out.print("> 몸무게(kg): "); weight = scanner.nextDouble();                                             
		
		members[size] = new Fitness(id, name, height, weight); 
		++size;
		
		System.out.println("## 회원 등록이 완료되었습니다. \n");
		
	} // end create
원래 코드 바뀐 코드
member = new Fitness(id, name, height, weight); members[size] = new Fitness(id, name, height, weight); 
++size;
객체 배열에 새로운 회원 등록하고 size(현재 회원 수) 변수를 증가한다.

 

		private void create() {
		System.out.println(" [ 회원 등록 ] ");

		String id, name;
		double weight, height;

		if(size > members.length) {
			System.out.println("## 현재는 가입이 불가능합니다.. ");
			return;
		}
	
		System.out.print("> 아이디: "); id = scanner.next();
		int searchIndex = search(id);
		if(searchIndex > -1) {
			System.out.println(" ##이미 존재하는 아이디 입니다.");
			return;
		}	
		
		System.out.print("> 이  름: "); name = scanner.next();
		System.out.print("> 키(cm): "); height = scanner.nextDouble();
		System.out.print("> 몸무게(kg): "); weight = scanner.nextDouble();  
	

		members[size] = new Fitness(id, name, height, weight); 
		++size;

		System.out.println("## 회원 등록이 완료되었습니다. \n");

	} // end create
원래 코드 바뀐 코드
System.out.print("> 아이디: "); id = scanner.next(); System.out.print("> 아이디: "); id = scanner.next();
int searchIndex = search(id);
if(searchIndex > -1) {
    System.out.println(" ##이미 존재하는     아이디 입니다.");
    return;
}
이미 존재하는 아이디가 있는지 체크

 

회원의 id를 이용하여 조회하는 메소드  - read()

paramter : 없음 /  return : 없음

		private void read() {
		System.out.println(" [ 정보 조회 ] ");
		
		if( size == 0) {
			System.out.println("## 등록된 회원이 존재하지 않습니다.\n");
			return ;
		}
		
		int searchIndex; // = -1;
		
		// 검색할 사람의 id 입력
		String id;
		System.out.print("> 아이디: ");
		id = scanner.next();
		
		
		searchIndex = search(id);
		
		//x -1이 반환되면 에러메세지 출력 후  return
		//x 아니면 멤버 정보출력
		if(searchIndex == -1) {
			System.out.println("## 등록된 회원이 없습니다.");
			return;
		}
		else
			members[searchIndex].output();
		
	}
	
	private int search(String id) {
	    for (int i = 0; i < size; i++) {
	        if (members[i].getId().equals(id)) {
	            return i; 
	        }
	    }
	    return -1; 
	    }
원래 코드 바뀐 코드 의미
- int searchIndex; // = -1; 찾으려는 인덱스 번호를 넣으려는 변수를 만들어 놓는다.

-1을 초기화 안해도 되는 이유는 search() 메소드에서 발견을 못 했을때 -1을 반환해주기 때문이다.
- String id;
System.out.print("> 아이디: ");
id = scanner.next();
검색할 사람의 id 입력
- searchIndex = search(id); search() 메소드 이용
private int search(String id) {
    for (int i = 0; i < size; i++) {
        if (members[i].getId().equals(id)) {
            return i; 
        }
    }
    return -1; 
    }
id를 매개변수로 받아 발견하면 해당 인덱스 반환한다.

없으면 -1을 반환한다.

 

회원의 정보를 찾아서 키와 몸무게를 다시 입력받아 그 두개의 정보를 수정 - update()

private void update() {
		System.out.println(" [ 회원 정보 수정 ] ");
		// int searchIndex;

		if( size == 0) {
			System.out.println("## 등록된 회원이 존재하지 않습니다.\n");
			return ;
		}

		String id;
		System.out.print("> 아이디: ");
		id = scanner.next();

		searchIndex = search(id);

		if(searchIndex == -1) {
			System.out.println("## 등록된 회원이 없습니다.");
			return;
		}


		double weight, height;

		System.out.print("> 키(cm): "); height = scanner.nextDouble();
		System.out.print("> 몸무게(kg): "); weight = scanner.nextDouble();

		members[searchIndex].setHeight(height); 
		members[searchIndex].setWeight(weight); 
		// 지역변수

		System.out.println("## 정보 수정 완료.\n");

	}
원래 코드 바뀐 코드
member.setHeight(height); 
member.setWeight(weight); 
members[searchIndex].setHeight(height); 
members[searchIndex].setWeight(weight); 
객체 배열로 들어가므로

 

회원탈퇴 - delete()

private void delete() {
		System.out.println(" [ 회원 탈퇴 ] ");

		String confirm;
		int searchIndex;

		if( size == 0) {
			System.out.println("등록된 회원이 존재하지 않습니다.\n");

			return ;
		}

		String id;
		System.out.print("> 아이디: ");
		id = scanner.next();

		searchIndex = search(id);

		if(searchIndex == -1) {
			System.out.println("## 등록된 회원이 없습니다.");
			return;
		}
		

		System.out.print(">> 정말로 탈퇴하실 건가요...? (y / n) : ");
		confirm = scanner.next();

		if(!(confirm.equals("Y") | confirm.equals("y")))
			System.out.println("## 탈퇴 취소!\n");
				
		// 인덱스 값을 이용해 인덱스 뒤의 데이터를 하나씩 앞으로 이동! 
		for(int i = searchIndex; i < size-1; i++) {
			members[i] = members[i+1];
		}
		--size;
        
		System.out.println("## 탈퇴 완료..\n");
		return;

	}
원래 코드 바뀐 코드
- for(int i = searchIndex; i < size-1; i++) {
    members[i] = members[i+1];
}
--size;
인덱스 값을 이용해 인덱스 뒤의 데이터를 하나씩 앞으로 이동한다.