국비 13

냐아암·2023년 5월 2일
0

국비

목록 보기
17/114

객체배열

같은 객체 참조 자료형의 변수를 하나의 묶음으로 다루는 것
배열의 자료형을 클래스명(사용자 정의 자료형)으로 지정하여 활용


  • 선언
    클래스명 [] 배열명;

  • 할당
    배열명 = new 클래스명[배열크기]


  • 객체배열 초기화
  1. 인덱스 이용
  2. 선언과 동시에 할당 및 초기화

디버그_breakpoint 설정 후 실행
variable로 흐름 파악 가능

Member

package edu.kh.oarr.model.vo;

public class Member {
	
	//필드 (==멤버변수)
	private String memberId;
	private String memberPw;
	private String memberName;
	private int memberAge;
	private String region; //지역(서울 경기 인천..)
	
	//생성자
	
	public Member() {} //기본 생성자
	
	//매개변수 생성자
	public Member(String memberId, String memberPw, String memberName,
					int memberAge, String region) {
		// 매개변수명과 필드명이 같지 않아도 됨
		
		this.memberId = memberId;
		this.memberPw = memberPw;
		this.memberName = memberName;
		this.memberAge = memberAge;
		this.region = region;
		
	}
	
	//메소드
	//getter/setter
	
	//memberId
	public String getMemberId() {
		return memberId; //this.memberId 라고 써도 됨
	}
	
	public void setMemberId(String memberId) {
		this.memberId = memberId;
		return;
		//모든 메소드는 종료 시 호출한 곳으로 돌아가는
		//return 구문이 작성되어야 하지만
		//void의 경우 생략 가능
		// -> 생략 시 컴파일러가 자동으로 추가함
		
	}
	
	//memberPw
	public String getMemberPw() {
		return memberPw;
	}
	
	public void setMemberPw(String memberPw) {
		this.memberPw = memberPw;
	}
	
	//memberName
	public String getMemberName() {
		return memberName;
	}
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}
	
	//memberAge
	public int getMemberAge() {
		return memberAge;
	}
	public void setMemberAge(int memberAge) {
		this.memberAge = memberAge;
	}
	
	//region
	public String getRegion() {
		return region;
	}
	public void setRegion(String region) {
		this.region = region;
	}

}

MemberService

package edu.kh.oarr.model.service;

import java.util.Scanner;

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

public class MemberService {
	
	private Scanner sc = new Scanner(System.in);
	
	//Member 5칸짜리 객체 배열 선언 및 할당
	private Member[] memberArr = new Member[5];
	
	//현재 로그인한 회원의 정보를 저장할 변수 선언
	private Member loginMember = null;
	
	
	public MemberService() { //기본생성자
		
		//memberArr 배열 0 1 2 인덱스 초기화
		memberArr[0]= new Member("user01", "pass01", "카리나", 20, "서울");
		memberArr[1]= new Member("user02", "pass02", "윈터", 22, "대구");
		memberArr[2]= new Member("user03", "pass03", "지젤", 21, "일본");
		
	}
	

	
	public void displayMenu() { // 메뉴 화면 출력 기능

		int menuNum = 0; // 메뉴 선택용 변수

		do { // 한 번은 무조건 반복

			System.out.println("====회원 정보 관리 프로그램 v2====");
			System.out.println("1. 회원가입");
			System.out.println("2. 로그인");
			System.out.println("3. 회원정보 조회");
			System.out.println("4. 회원정보 수정");
			System.out.println("5. 회원 검색(지역)");
			System.out.println("0. 프로그램 종료");

			System.out.print("메뉴 입력 >> ");
			menuNum = sc.nextInt(); // 필드에 작성된 Scanner sc 사용

			sc.nextLine(); // 입력 버퍼에 남은 개행 문자 제거

			switch (menuNum) {
			case 1: System.out.println(signUp()); break;
			case 2: System.out.println(login()); break;
			case 3: System.err.println(selectMember()); break;
			case 4: int result = updateMember(); //-1 1 0
					
					if(result == -1) {
						System.out.println("로그인 후 이용해주세요.");
					} else if (result == 1) {
						System.out.println("회원정보 수정 완료");
					} else {
						System.out.println("회원정보 수정 실패(비밀번호 오류)");
					}
			
			break;
			case 5: serchRegion(); break;
			case 0:
				System.out.println("프로그램을 종료합니다.");
				break;
			default:
				System.out.println("잘못 입력하셨습니다. 다시 입력하세요.");
				break;

			}

		} while (menuNum != 0);
	}
	
	//회원가입 메소드
	public String signUp() {
		
		System.out.print("\n=====회원가입=====");
		
		//객체 배열(memberArr)에 가입한 회원 정보를 저장할 예정
		//-> 새로운 회원 정보를 저장할 공간이 있는지 확인하고
		//	 빈 공간에 인덱스 번호를 얻어오기 --> 새로운 메소드 작성
		
		int index = emptyIndex(); //memberArr 배열에서 비어 있는 인덱스를 반환받음
		
		System.out.println("\n현재 회원 수: " + index);
		
		if (index == -1) { //비어있는 인덱스가 없을 경우 -> 회원가입 불가능
			return "회원가입 불가능(인원수 초과)";
		}
		
		System.out.print("아이디: ");
		String memberId = sc.next();
		
		System.out.print("비밀번호: ");
		String memberPw = sc.next();
		
		System.out.print("비밀번호 확인: ");
		String memberPw2 = sc.next();
		
		System.out.print("이름: ");
		String memberName = sc.next();
		
		System.out.print("나이: ");
		int memberAge = sc.nextInt();
		
		System.out.print("지역: ");
		String region = sc.next();
		
		//비밀번호, 비밀번호 확인 일치 시 회원가입
		if (memberPw.equals(memberPw2)) {
			//Member 객체를 생성해서 할당된 주소를 memberArr 비어있는 인덱스에 대입
			memberArr[index] = new Member(memberId, memberPw, memberName, 
											memberAge, region);
			
			return "회원가입 성공!!!";
		} else {
			return "회원가입 실패(비밀번호 불일치)";
		}
		

		
	}
	
	//memberArr에 비어있는 인덱스 번호를 반환하는 메소드
	//단, 비어있는 인덱스가 없으면 -1 반환
	public int emptyIndex() {
		
		//memberArr 배열을 0번 인덱스부터 끝까지 접근해서
		//참조하는 값이 null인 경우의 인덱스를 반환해라
		for(int i = 0; i<memberArr.length; i++) {
			if(memberArr[i] == null) {
				return i; //현재 메소드 종료 후 호출한 곳으로 i값을 가지고 돌아감
			}
		}
		
		//for문을 수행했지만 return이 되지 않은 경우, 해당 위치의 코드 실행
		//--> for문에서 return이 되지 않았다 == 배열에 빈칸이 없다.
		//== -1 반환
		return -1; //else문 쓰지 않고 이렇게 하자
		
	}
	
	public String login() {
		
		System.out.println("\n****로그인****");
		
		System.out.print("아이디: ");
		String memberId = sc.next();
		
		System.out.print("비밀번호: ");
		String memberPw = sc.next();
		
		
		//1) memberArr 배열 내 요소를 순서대로 접근하여 null이 아닌지 확인
		for(int i =0; i<memberArr.length; i++) {
			
			if (memberArr[i] !=null) { //회원의 정보가 있을 경우
				
				//2) 회원정보의 아이디, 비번과 입력받은 아이디, 비번이 같은지 확인
				if (memberId.equals(memberArr[i].getMemberId()) &&
					memberPw.equals(memberArr[i].getMemberPw())) {
					
					//3) 로그인 회원 정보 객체(Member) 참조하는 변수 loginMember에
					//	 현재 접근 중인 memberArr[i] 요소에 저장된 주소를 얕은 복사
					loginMember = memberArr[i];
					break; //더이상 같은 아이디, 비번이 없기 때문에 for문 종료
					//break 대신 return 도 사용 가능
				}

			}
		}
		//4) 로그인 성공/실패 여부에 따라 결과값 반환
		if (loginMember == null) { //로그인 실패
			return "아이디 또는 비밀번호가 일치하지 않습니다." ;
		}else { //로그인 성공
			return loginMember.getMemberName() + "님 환영합니다.";
		}
		
	}
	
	//회원정보 조회 메소드
	public String selectMember() {
		System.out.println("/n****회원정보 조회");
		
		//1) 로그인 여부 확인 -> 필드 loginMember가 참조하고 있는 객체가 있는지 확인
		if(loginMember==null) {
			//로그인이 안 되어 있으면 "로그인 후 이용해주세요"
			return "로그인 후 이용해주세요.";
		}
		//2) 로그인이 되어있는 경우
		//	 회원정보를 출력할 문자열을 만들어서 반환
		//	 (단, 비밀번호는 제외)
		
		String str = "\n이름: " + loginMember.getMemberName();
		str += "\n아이디: " +loginMember.getMemberId();
		str += "\n나이: " + loginMember.getMemberAge() + "세";
		str += "\n지역: " + loginMember.getRegion();
		
		//이름: 유저일
		//아이디: user01
		//나이: 25세
		//지역: 서울
		
		return str;
		
	}
	
	//회원정보 수정 메소드
	public int updateMember() {
		System.out.println("\n****회원정보 수정****");
		
		//1) 로그인 여부 판별
		if(loginMember == null) {
			//로그인이 되어있지 않으면 -1 반환
			return -1;
		}
		//2) 되어있으면 수정할 회원정보 입력받기(이름, 나이, 지역)
		System.out.print("수정할 이름: ");
		String inputName = sc.next();
		
		System.out.print("수정할 나이: ");
		int inputAge = sc.nextInt();
		
		System.out.print("수정할 지역: ");
		String inputRegion = sc.next();
		
		//3) 비밀번호를 입력받아 로그인한 회원의 비밀번호와 일치하는지 확인
		System.out.print("비밀번호: ");
		String memberPw = sc.next();
		
		if(memberPw.equals(loginMember.getMemberPw())) {
			//4) 같은 경우
			//	 로그인한 회원의 이름, 나이, 지역 정보를 입력 받은 값으로 변경 후
			//	 1 반환
			loginMember.setMemberName(inputName);
			loginMember.setMemberAge(inputAge);
			loginMember.setRegion(inputRegion);
			
			return 1;
		}
		
		//5) 다른 경우 0 반환
		return 0;

		
	}
	//회원 검색(지역) 메소드
	public void serchRegion() {
		
		System.out.println("\n****회원 검색(지역)****");
		
		System.out.print("검색할 지역을 입력하세요: ");
		String inputRegion = sc.next();
		
		//주의!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		boolean flag = true; //검색 결과 신호용 변수
		
		//1) memberArr 배열의 모든 요소 순차 접근
		for(int i = 0; i<memberArr.length; i++) {
			
			//2) memberArr[i] 요소가 null인 경우 반복 종료
			if(memberArr[i] == null) {
				break; //반복종료 
			}
			
			//3) memberArr[i]요소에 저장된 지역이 
			//	 입력받은 지역과 같은 경우, 회원의 아이디와 이름 출력
			
			if (memberArr[i].getRegion().equals(inputRegion)) {
				
				System.out.printf("아이디: %s\n이름: %s\n",
						memberArr[i].getMemberId(),memberArr[i].getMemberName());
				flag = false;
			}
			
			
		}
		
		if(flag) {
			//4) 검색 결과가 없을 경우 "일치하는 검색 결과가 없습니다." 출력
			System.out.println("일치하는 검색 결과가 없습니다.");
		}

		
	}

}

MemberRun

package edu.kh.oarr.run;

import edu.kh.oarr.model.service.MemberService;

public class MemberRun {

	public static void main(String[] args) {

		MemberService service = new MemberService();
		
		service.displayMenu();
		
	}

}
profile
개발 일지

0개의 댓글