과제 (객체 배열)

냐아암·2023년 5월 10일
0

국비_과제

목록 보기
1/1

Member

package kh.edu.updown.model.vo;

public class Member {
	private String memberId; // 아이디
	private String memberPw; // 비밀번호
	private String memberName; // 이름
	private int highScore; // 최고 점수
	
	// 생성자
	public Member() { }

	
	public Member(String memberId, String memberPw, String memberName) {
		super();
		this.memberId = memberId;
		this.memberPw = memberPw;
		this.memberName = memberName;
	}

	public Member(String memberId, String memberPw, String memberName, int highScore) {
		super();
		this.memberId = memberId;
		this.memberPw = memberPw;
		this.memberName = memberName;
		this.highScore = highScore;
	}
	
	// getter / setter
	public String getMemberId() {
		return memberId;
	}

	public void setMemberId(String memberId) {
		this.memberId = memberId;
	}

	public String getMemberPw() {
		return memberPw;
	}

	public void setMemberPw(String memberPw) {
		this.memberPw = memberPw;
	}

	public String getMemberName() {
		return memberName;
	}

	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}

	public int getHighScore() {
		return highScore;
	}

	public void setHighScore(int highScore) {
		this.highScore = highScore;
	}

	@Override
	public String toString() {
		return "Member [memberId=" + memberId + ", memberPw=" + memberPw + ", memberName=" + memberName + ", highScore=" + highScore
				+ "]";
	}

	
	
	
}

MainService

package kh.edu.updown.model.service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;

import kh.edu.updown.model.vo.Member;

public class MainService {
	
	
	
	private Scanner sc = new Scanner(System.in);
	
	// 회원 가입된 회원의 정보를 저장할 배열 선언 및 할당
	private Member[] members = new Member[3];  
	
	private int memberCount = 0; // 현재 가입한 회원 수 (회원 가입 시 members 인덱스 지정에 사용 가능)
	
	// 현재 로그인한 회원의 정보를 참조할 변수 선언.
	private Member loginMember = null; // 로그인 X == null,  로그인 O != null
	
	// LoginService 생성
	// -> 로그인 시 이용할 수 있는 기능만을 모아둔 객체
	private LoginService loginService = new LoginService();
	
	
	
	public MainService() { //편의를 위한 초기화
		
		members[0] = new Member("user01", "pass01", "tom", 5);
		members[1] = new Member("user02", "pass02", "peter", 10);
				
	}
	
	
	
	// 메뉴 출력 메소드
	// * 메뉴 출력 메소드를 분석해보세요!
	public void displayMenu() {

		int sel = -1; // 메뉴 선택용 변수
		//이걸 0으로 하면 처음에 잘못 입력되고 나서 do while 실행이 안 됨
		
		do {
			try {
				
				System.out.println();
				System.out.println("=== UP/DOWN 게임 ===");
				
				
				if(loginMember == null) { // 로그인이 되어있지 않은 경우
				
					System.out.println("[메인 메뉴]");
					System.out.println("1. 회원가입");
					System.out.println("2. 로그인");
					System.out.println("0. 종료");
					System.out.print("메뉴 선택 >> ");
					
					sel = sc.nextInt();
					sc.nextLine(); // 입력 버퍼 개행문자 제거
					System.out.println(); // 줄바꿈
					
					switch(sel) {
					case 1 : signUp(); break;
					case 2 : login(); break;
					case 0 : System.out.println("[프로그램 종료]"); break;
					default : System.out.println("잘못 입력하셨습니다. 메뉴를 다시 선택해주세요.");
					}
					
				
				}else { // 로그인이 되어있는 경우
					
					System.out.println("[로그인 메뉴]");
					System.out.println("1. 업/다운 게임 start");
					System.out.println("2. 내 정보 조회");
					System.out.println("3. 전체 회원 조회");
					System.out.println("4. 비밀번호 변경");
					System.out.println("9. 로그아웃");
					System.out.print("메뉴 선택 >> ");
					
					sel = sc.nextInt();
					sc.nextLine();
					System.out.println();
					
					
					// 선택된 메뉴 번호에 따라 LoginService에서 알맞은 기능을 호출
					switch (sel) {
					case 1: loginService.startGame(loginMember); break;
					case 2: loginService.selectMyInfo(loginMember); break;
					case 3: loginService.selectAllMember(members); break;
					case 4: loginService.updatePassword(loginMember); break;
					
					case 9 : System.out.println("[로그아웃 되었습니다.]"); 
							 loginMember = null; // loginMember 필드에 아무것도 참조하고 있지 않음을 의미하는 null을 대입
							 break;
					
					default: System.out.println("잘못 입력하셨습니다. 메뉴를 다시 선택해주세요.");
					}
					
				}
				
			}catch (InputMismatchException e) {
				System.out.println("정수만 입력해주세요.");
				sc.nextLine(); // 버퍼에 남아있는 문자열 제거
			}
		}while(sel != 0);
		
	}
	
	// [회원 가입]
	// 아이디, 비밀번호, 이름을 입력 받고
	// Member객체를 생성하여 members 리스트에 추가
	// 단, 이미 중복되는 아이디가 존재하는 경우 가입 불가
	public void signUp() { 
		
		System.out.println("[회원 가입]");
		
		System.out.print("아이디: ");
		String memberId = sc.next();
		System.out.print("비밀번호: ");
		String memberPw = sc.next();
		System.out.print("이름: ");
		String memberName = sc.next();
		
		for(int i=0; i<members.length; i++) {
			//비어있는 인덱스 찾기
			if(members[i] == null) { //null값인 인덱스
				memberCount = i;
				break;
			}else { //비어있는 인덱스 없는 경우
				memberCount = -1;
			}
			
			//아이디 중복 가입 불가능
			if (members[i].getMemberId().equals(memberId)){
				System.out.println("가입 불가능(아이디 중복)");
				return;
			} 
		}
		
		//입력된 정보로 객체 생성
		if (memberCount != -1) {
			members[memberCount] = new Member(memberId, memberPw, memberName);
			System.out.println("회원가입 성공");
		}else {
			System.out.println("회원가입 불가능(인원 초과)");
		}
		
//		System.out.println(Arrays.toString(members));
		
		
	} 
	
	
	// [로그인]
	// 아이디, 비밀번호를 입력 받아 일치하는 회원이 members에 있을 경우 로그인
	// 없으면 "아이디 또는 비밀번호가 일치하지 않습니다." 출력
	public void login() {
		
		System.out.println("[로그인]");
		
		System.out.print("아이디: ");
		String memberId = sc.next();
		System.out.print("비밀번호: ");
		String memberPw = sc.next();
		
		boolean flag = true;
		
		for( Member mem : members) {
			
			if(mem != null) { 
				flag = false; //members에 저장된 값이 하나라도 있다면 회원가입 정보가 있다는 뜻
				if(mem.getMemberId().equals(memberId) &&
						mem.getMemberPw().equals(memberPw)) { //회원가입된 아이디 비번과 입력값이 같다면
					
					loginMember = mem; //로그인 객체에 넣어라
					
					System.out.println("로그인 성공");
					
					break; // 더이상 반복문 수행하는 건 무의미
				}
				
			} 
				
		}
		
		if (flag) { // flag = true (회원가입된 정보가 없다 == members[i] 다 null값이다.)
			System.out.println("회원가입부터 진행해주세요.");
		} else { //!flag (flag = false)
			if(loginMember == null) {
				System.out.println("아이디 또는 비밀번호가 일치하지 않습니다.");
			}
		}

	}

	
}

LoginService

package kh.edu.updown.model.service;

import java.util.List;
import java.util.Scanner;

import kh.edu.updown.model.vo.Member;

public class LoginService {
	
	private Scanner sc = new Scanner(System.in);

	// 업다운 게임 시작
	// 1 ~ 100 사이 숫자 중 랜덤하게 한 숫자를 지정하고 업/다운 게임을 진행
	// 맞춘 횟수가 현재 로그인한 회원의 최초 또는 최고 기록인 경우 회원의 highScore 필드 값을 변경
	public void startGame(Member loginMember) {
		
		System.out.println("[Game Start...]");
		
		int random = (int)(Math.random()*100 +1);
		
		int input =0; //입력할 문자
		
		int count =1; //시도 횟수
		
		do {
			
			
			System.out.print(count+ "번째 입력: ");
			input = sc.nextInt();
			
			if (input>random) {
				System.out.println("-- DOWN --");
			}else if (input < random) {
				System.out.println(" -- UP --");
			}else {
				System.out.println("정답!!");
			}
			
			count++;
			
		} while(input != random);
		
		System.out.println("입력 시도 횟수: " + count);
		
		if(loginMember.getHighScore() == 0 || loginMember.getHighScore() > count) {
			System.out.println("*** 최고 기록 달성 ***");
			loginMember.setHighScore(count);
		}
	}

	
	// 내 정보 조회
	// 로그인한 멤버의 정보 중 비밀번호를 제외한 나머지 정보만 화면에 출력
	public void selectMyInfo(Member loginMember) {
		
		System.out.println("[내 정보 조회]");
		
		//로그인을 해야 이 메뉴를 볼 수 있음.. -> loginMember가 null값인지 굳이 확인 안 해도 됨
		
		String str = "\n아이디: " + loginMember.getMemberId();
		str += "\n이름: "+ loginMember.getMemberName();
		str += "\n최고기록: " + loginMember.getHighScore();
		
		System.out.println(str);
		
		
	}

	// 전체 회원 조회
	// 전체 회원의 아이디, 이름, 최고점수를 출럭
	public void selectAllMember(Member[] members) {
		
		System.out.println("[전체 회원 조회]");
		
		/*일반 for문
		for(int i =0; i<members.length; i++) {
			if(members[i] !=null) {
				String str = "\n아이디: " + members[i].getMemberId();
				str += "\n이름: " + members[i].getMemberName();
				str += "\n최고 기록: " + members[i].getHighScore();
				
				System.out.println(str);
			}
		}
		*/
		
		for(Member mem : members) {
			if(mem != null) {
				
				String str = "\n아이디: " + mem.getMemberId();
				str += "\n이름: "+ mem.getMemberName();
				str += "\n최고기록: " + mem.getHighScore();
				
				System.out.println(str);
			}
		}
		
		
	}

	// 비밀번호 변경
	// 현재 비밀번호를 입력 받아 
	// 같은 경우에만 새 비밀번호를 입력 받아 비밀번호 변경
	public void updatePassword(Member loginMember) {
		
		System.out.println("[비밀번호 변경]");
		
		System.out.print("비밀번호 입력: ");
		String inputPw = sc.next();
		
		if(inputPw.equals(loginMember.getMemberPw())) {
			
			System.out.print("새 비밀번호 입력: ");
			String newPw = sc.next();
			
			loginMember.setMemberPw(newPw);
			System.out.println("비밀번호 변경 성공");
		}else {
			System.out.println("비밀번호 변경 실패(비밀번호 불일치)");
		}
		
	}

	
	
}

UpDownRun

package kh.edu.updown.run;

import kh.edu.updown.model.service.LoginService;
import kh.edu.updown.model.service.MainService;

public class UpDownRun {
	public static void main(String[] args) {
		
		MainService service = new MainService();
		service.displayMenu();
		
		LoginService serv = new LoginService();
		
//		serv.startGame(null);
	}
}
profile
개발 일지

0개의 댓글