전체 글 (135)

728x90

class
혼자 해보고, 안 되면 앞서 배운 것들을 보면서 따라해보기

 

1. Day01_3

// 필드 (인스턴스변수, 멤버변수)
String name;
private String color;	// 현재 공간에서만 사용 가능
// 생성자
public Day01_3() {
	// 기본 생성자
	// 생성하지 않아도 자동 컴파일됨
}
public Day01_3(String name /*매개변수*/) {
	this.name = name;
    // 필드명과 매개변수명이 같을때 this. 사용 / 필드명 = 매개변수명
}
public Day01_3(String name,String color) {
	this.name = name;
	this.color = color;
}
// 메서드
public void setColor(String color) {
	this.color = color;
    // 현재 공간에서만 사용할 수 있는 private 필드에 값을 설정하기 위한 메서드
}
public String getColor() {
	return color;
    // 현재 공간에서만 사용할 수 있는 private 필드 값을 사용하기 위한 메서드
}

public void print() {
	System.out.printf("%s\t%s\n",name,color);
	// 미리 출력할 양식을 적어둔 메서드
}

 

2. Day01_3Main

Scanner sc = new Scanner(System.in);
	
Day01_3 first = new Day01_3("사과","빨강");
Day01_3[] nC = new Day01_3[10];
int cnt = 0;
while(true) {
	System.out.println("1.추가 2.목록 0.종료");
	System.out.print("메뉴 선택> ");
	int menu = sc.nextInt();
	System.out.println();
	if(menu == 1) {
		System.out.println("===추가=> ");
		Day01_3 s = new Day01_3();
		System.out.print("이름 설정> ");
		s.name = sc.next();
		System.out.print("색 설정> ");
		s.setColor(sc.next());
		nC[cnt] = s;
		cnt++;
	}else if(menu == 2){
		System.out.println("===목록=> ");
		for(int i=0; i<cnt; i++) {
			if(i == 0) {
				first.print();
			}
			nC[i].print();
		}
		
	}else if(menu == 0) {
		break;
	}else {
		System.out.println(" > 잘못된 메뉴 선택");
	}
	System.out.println();
}
System.out.println("종료");

 

출력 이미지 ㄱ

 


 

틀리거나 헷갈렸던 점 메모

  • 1번

 생성자를 만들때, void(리턴타입)를 적어서 메서드로 만들고는 2번에서 객체를 생성하려니 안 된다고 해서 이클립스의 도움을 받아 해결했다.

 생성자는 리턴타입이 없음!!

 

  • 2번

 객체를 생성하는 것부터 저장하는 것까지 기억나지 않아서 열심히 혼자 해보려고 했는데, nC[cnt].name 혹은 nC[cnt].setColor();까지는 접근했다. 물론 이 방법으로 했더니 오류가 나서 결국 배운 것을 보고 고쳤지만 근접했다고 생각한다..!

 객체 생성하는 법, 객체 배열에 저장하는 법 외우기!


 

전체 피드백

  • 생각보다 기억을 못하고 있어서 2번은 거의 보고 하듯이 한 것 같다. 여러번 보고 적어보면서 안 보고도 응용할 수 있도록 해야겠다.

 


728x90
728x90

if문이나 for문 등 선생님이 문제 주셨던 것들을 문제만 적어두고 풀어보는 것으로 복습을 진행했다.
10번은 메뉴만 적어두고 풀었다.

 

1. 입력받은 숫자가 짝수인지, 홀수인지, 0인지 출력

System.out.print("숫자 입력> ");
int m1 = sc.nextInt();
if(m1 == 0) {
	System.out.println(" > 0 입력");
}else if(m1%2 == 0) {
	System.out.println(" > 입력하신 숫자는 짝수입니다.");
}else {
	System.out.println(" > 입력하신 숫자는 홀수입니다.");
}

 

2. 입력받은 숫자에 따라 (3, 5, 3과5)의 배수, 둘다아님 출력

System.out.print("숫자 입력> ");
int m2 = sc.nextInt();
if(m2%15 == 0) {
	System.out.println(" > 입력하신 숫자는 3과 5의 배수입니다.");
}else if(m2%5 == 0) {
	System.out.println(" > 입력하신 숫자는 5의 배수입니다.");
}else if(m2%3 == 0){
	System.out.println(" > 입력하신 숫자는 3의 배수입니다.");
}else {
	System.out.println(" > 입력하신 숫자는 3과 5의 배수 어디에도 해당하지 않습니다.");
}

 

3. 숫자 두 개를 입력받고, 메뉴에 따라 +-*/% 값 출력

System.out.print("첫번째 숫자 입력> ");
int m31 = sc.nextInt();
System.out.print("두번째 숫자 입력> ");
int m32 = sc.nextInt();
System.out.println("1.더하기 2.빼기 3.곱하기 4.나누기 5.나머지");
for(int i=0; i<1; i++) {
	System.out.print("메뉴 선택> ");
	int m3 = sc.nextInt();
	if(m3 == 1) {
		System.out.println(" > "+m31+" + "+m32+" = "+(m31+m32));
	}else if(m3 == 2) {
		System.out.println(" > "+m31+" - "+m32+" = "+(m31-m32));
	}else if(m3 == 3) {
		System.out.println(" > "+m31+" + "+m32+" = "+(m31*m32));
	}else if(m3 == 4) {
		System.out.println(" > "+m31+" / "+m32+" = "+(m31/m32));
	}else if(m3 == 5) {
		System.out.println(" > "+m31+" % "+m32+" = "+(m31%m32));
	}else {
		System.out.println(" > 메뉴를 잘못 입력하셨습니다.");
		i--;
	}
}

 

4. 1~100의 합 출력

int m4 = 0;
for(int i=1; i<=100; i++) {
	m4+=i;
}
System.out.println(" > "+m4);

 

5. 1~300까지 (3, 5, 3과5)의 배수 개수 출력

int m53 = 0;
int m55 = 0;
int m515 = 0;
for(int i=1; i<=300; i++) {
	if(i%3 == 0) {
		m53++;
	}
	if(i%5 == 0) {
		m55++;
	}
	if(i%15 == 0) {
		m515++;
	}
}
System.out.println(" > 3의 배수의 개수: "+m53);
System.out.println(" > 5의 배수의 개수: "+m55);
System.out.println(" > 3과 5의 배수의 개수: "+m515);

 

6. 하나의 숫자를 입력받고, 1부터 입력받은 수까지의 합 출력

System.out.print("숫자 입력> ");
int m6 = sc.nextInt();
int sum6 = 0;
for(int i=1; i<=m6; i++) {
	sum6 += i;
}
System.out.println(" > "+sum6);

 

7. 두 개의 숫자를 입력받고, 첫번째 입력받은 수부터 두번째 입력받은 수까지의 합 출력

System.out.print("첫번째 숫자 입력> ");
int m71 = sc.nextInt();
System.out.print("두번째 숫자 입력> ");
int m72 = sc.nextInt();
int sum7 = 0;
for(int i=m71; i<=m72; i++) {
	sum7 += i;
}
System.out.println(" > "+sum7);

 

8. while문을 통해 반복적으로 숫자를 입력받다가 0이 입력되면 반복문 종료하기

while(true) {
	System.out.print("숫자 입력> ");
	int m8 = sc.nextInt();
	if(m8 == 0) {
		break;
	}
}
System.out.println(" > 반복문 종료");

 

9. 배열 a의 홀수의 합, 짝수 인덱스의 합 출력

int[] a = {45,78,5,69,8};
int sum91 = 0;
int sum92 = 0;

for(int i=0; i<a.length; i++) {
	if(a[i]%2 != 0) {
		sum91 += a[i];
	}
	if(i%2 == 0) {
		sum92 += a[i];
	}
}
System.out.println(" > 홀수의 합: "+sum91);
System.out.println(" > 짝수 인덱스의 합: "+sum92);

 

10. 홈페이지

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
Scanner sc = new Scanner(System.in);
		
String[] name = new String[10];
String[] id = new String[10];
String[] pw = new String[10];
String[] date = new String[10];
int cnt = 0;
int loginIndex = -1;


while(true) {
	System.out.println("========== 홈페이지 ==========");
	
	if(loginIndex == -1) {
		// 로그인 안 했을때
		System.out.println("1.회원가입 2.로그인 3.회원목록 0.종료");
	}else {
		//로그인 했을때
		System.out.println("1.정보수정 2.로그아웃 3.내정보 0.종료");
	}
	System.out.print("메뉴 선택> ");
	int menu = sc.nextInt();
	
	if(menu == 1) {
		System.out.println("\n===========================");
		if(loginIndex == -1) {
			// 회원가입
			System.out.println("\t\t   ▷ 회원가입");
			System.out.print("이름 입력> ");
			name[cnt] = sc.next();
			System.out.print("아이디 입력> ");
			id[cnt] = sc.next();
			System.out.print("비밀번호 입력> ");
			pw[cnt] = sc.next();
			date[cnt] = dtf.format(LocalDateTime.now());
			
			System.out.println(" > "+name[cnt]+"님 회원가입이 성공적으로 완료되었습니다!");
			cnt++;
			
		}else {
			// 정보수정
			System.out.println("\t\t   ▷ 정보수정");
			System.out.println("> 정보수정을 위해 비밀번호를 확인합니다.");
			System.out.print("비밀번호 입력> ");
			String loginPw = sc.next();
			boolean find = false;
			for(String p : pw) {
				if(loginPw.equals(p)) {
					System.out.println(" > 확인되었습니다.");
					System.out.println("1.아이디 변경\t2.비밀번호 변경");
					System.out.print("메뉴 선택> ");
					menu = sc.nextInt();
					if(menu == 1) {
						System.out.println("\t\t   ▷  아이디");
						System.out.print("변경할 아이디> ");
						id[loginIndex] = sc.next();
						System.out.println(" > 아이디 변경이 성공적으로 완료되었습니다.");
					}else if(menu == 2) {
						System.out.println("\t\t   ▷ 비밀번호");
						pw[loginIndex] = sc.next();
						System.out.println(" > 비밀번호 변경이 성공적으로 완료되었습니다.");
					}
					find = true;
					break;
				}
			}
			if(!find) {
				System.out.println(" > 비밀번호가 일치하지 않습니다.");
			}
			
		}
	}else if(menu == 2) {
		System.out.println("\n===========================");
		if(loginIndex == -1) {
			// 로그인
			System.out.println("\t\t   ▷  로그인");
			System.out.print("아이디 입력> ");
			String loginId = sc.next();
			System.out.print("비밀번호 입력> ");
			String loginPw = sc.next();
			boolean find = false;
			for(int i=0; i<cnt; i++) {
				if(loginId.equals(id[i]) && loginPw.equals(pw[i])) {
					System.out.println(" > 로그인 성공!");
					loginIndex = i;
					find = true;
					break;
				}
			}
			if(!find) {
				System.out.println(" > 로그인 실패");
			}
			
		}else {
			// 로그아웃
			System.out.println(" > 성공적으로 로그아웃 되었습니다.");
			loginIndex = -1;
			
		}
	}else if(menu == 3) {
		System.out.println("\n===========================");
		if(loginIndex == -1) {
			// 회원목록
			System.out.println("\t\t   ▷ 회원목록");
			System.out.println("번호\t이름\t아이디\t기입일자");
			for(int i=0; i<cnt; i++) {
				System.out.printf("%d\t%s\t%s\t%s\n",
								i+1,name[i],id[i],date[i]);
			}
			
		}else {
			// 내정보
			System.out.println("\t\t   ▷ 내 정보");
			System.out.println("이름\t아이디\t기입일자");
			System.out.printf("%s\t%s\t%s\n",
					name[loginIndex],id[loginIndex],date[loginIndex]);
			
		}
	}else if(menu == 0) {
		// 종료
		System.out.println("\n > 프로그램을 종료합니다.\n");
		break;
	}else {
		System.out.println(" > 존재하지 않는 메뉴입니다.\n");
	}
	
	System.out.println();
}
		System.out.println("========= 프로그램종료 =========");

 


 

틀리거나 헷갈렸던 점 메모

  • DateTimeFormatter

 자주 안 써본 것이라 그런가 바로 까먹었는지 여러 방법을 혼자 해봤는데도 오류가 떠서 결국 앞에서 선생님이 알려주셨던 것을 보고 적었다.

 date[cnt] = dtf.format(); 까지는 맞췄는데 괄호 안에 LocalDateTime.now()를 적어야 한다는걸 잊었다.

 


 

전체 피드백

  • 역시 많이 해봤던 문제들이라 바로바로 풀어냈다.
  • 10번 문제를 풀면서 foreach를 써보려고 했는데 두 가지의 조건을 적을 때에는 어떻게 써야할지 모르겠어서 foreach 안에 foreach를 쓰려다 너무 복잡해질 것 같아 포기했다.
  • printf도 조금 익숙해진 것 같다. 

 


728x90
728x90

 

수업내용 정리 (Java)

 

1. class 복습+a

 1-1) 생성자

  • 기본 생성자는 만들지 않아도 자동 컴파일된다.
  • 리턴 타입이 없다.
  • 그러나 생성자를 따로 만들면 기본 생성자는 자동 컴파일 되지 않아서 기본 생성자로 만든 객체가 있다면 오류가 난다.

 

 1-2) 오버로딩

public Fruit() {	// 기본 생성자
}
public Fruit(String name) {	//두번째 생성자
	this.name = name;
}
public Fruit(String name, String color) {
	this(name);	//두번째 생성자 실행 <= 다른 생성자를 호출할 때는 맨 위에 위치해야함
	this.color = color;
}
public Fruit(String name, String color, boolean isSeed) {
	this(name, color);	//세번째 생성자 실행
	this.isSeed = isSeed;
}
  • 생성자의 이름은 class명과 동일해서 생성자를 여러번 쓸 수 없을 것 같지만 오버로딩으로 여러번 사용이 가능하다.
  • 오버로딩을 사용하려면 매개변수의 개수나 타입 다르게 적어줘야 한다.
  • 매개변수의 이름이 달라도 타입이 같은데 위치도 같다면 사용할 수 없다.
  • 생성자 내에서 다른 생성자를 호출해서 사용할 수 있다. (ex: this.(name) 등)

 

 1-3) 생성자 or 메서드

// 생성자
public Student(String no, String name, String dept, int year) {
	this.no = no;
	this.name = name;
	this.dept = dept;
	this.year = year;
}
// 메서드
public void setNo(String no) {
	this.no = no;
}
public void setName(String name) {
	this.name = name;
}
public void setDept(String dept) {
	this.dept = dept;
}
public void setYear(int year) {
	this.year = year;
}

 

  • 두 코드 모두 필드에 값을 저장하기 위한 코드다.
  • 보기에는 생성자에 적는 것이 가장 간편하지만, 그렇다고 이 방법이 가장 좋은 방법이라는 것은 아니다.

 

2. class 예제

 2-1) Member

// 필드(인스턴스변수, 멤버변수)
private int id;
private String email;
private String pw;
private String name;
private String joinDate;
  • joinDate: 가입 날짜를 담기 위해 만든 필드

 

// 생성자
public Member() {
	DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
	String now = dtf.format(LocalDateTime.now());
	this.joinDate = now;
}
public Member(int id, String email, String pw, String name) {
	this();
	this.id = id;
	this.email = email;
	this.pw = pw;
	this.name = name;
}
  • 기본 생성자: 가입 날짜를 여러번 적지 않기 위해 가입 날짜를 적어주는 코드를 담았다.
  • 생성자: 객체를 생성할 때, 한 번에 바로 값을 대입하기 위해서 매개변수를 사용했다. this();를 통해 위의 기본 생성자를 호출하여 사용했다.

 

// 메서드
public void setId(int id) {
	this.id = id;
}
public void setEmail(String email) {
	this.email = email;
}
public void setPw(String pw) {
	this.pw = pw;
}
public void setName(String name) {
	this.name = name;
}
  • 위의 생성자와 동일하게 객체를 생성하고 값을 입력받아 저장할 수 있도록 해주는 메서드
  • 매개변수에 필드에서 선언한 이름과 동일한 변수명을 이용하려면 실행문에서 적을 필드명에 this.를 붙여주어야 컴퓨터가 구분할 수 있다.

 

public int getId() {
	return id;
}
public String getEmail() {
	return email;
}
public String getPw() {
	return pw;
}
public String getName() {
	return name;
}
  • 리턴 값이 있는 메서드는 필드 값이 private 일때 출력하는 메서드라고 생각하면 편하다.

 

public void print() {
	System.out.printf("%d\t%s\t%s\t%s\t%s\n", id,name,email,pw,joinDate);
}

 

 

 2-2) MemberMain

Scanner sc = new Scanner(System.in);
Member[] list = new Member[10];
int cnt = 0;
int id = 1000;

while (true) {
	System.out.println("=====멤버관리시스템=====");
	System.out.println("1.멤버등록 2.멤버목록 3.검색 4.멤버수정 0.종료");
	System.out.print("메뉴 선택> ");
	int menu = -1;
	if(sc.hasNextInt()) {
		menu = sc.nextInt();
	}else {
		sc.next();
		System.out.println("숫자만 입력하세요.");
	}
	
	if (menu == 1) {
		// 두번째 생성자 사용하여 객체 생성
		System.out.print("이름 입력> ");
		String name = sc.next();
		System.out.print("이메일 입력> ");
		String email = sc.next();
		System.out.print("비밀번호 입력> ");
		String pw = sc.next();
		
		Member m = new Member(id++, email, pw, name);
		list[cnt] = m;
		cnt++;
		System.out.println(name + "님 환영합니다.");
		
	} else if (menu == 2) {
		System.out.printf("아이디\t이름\t이메일\t비밀번호\t가입일자\n");
		System.out.println("==================================");
		for (Member mb : list) {
			if (mb != null) {
				mb.print();
				}
			}

	} else if (menu == 3) {
	// 아이디로 검색하고 멤버정보 출력
		System.out.print("검색할 아이디> ");
		int serchId = 0;
		if(sc.hasNextInt()) { 
			serchId = sc.nextInt();
			boolean find = false;
			for (Member mb : list) {
				if (mb != null) {
					if (mb.getId() == serchId) {
						System.out.printf("아이디\t이름\t이메일\t비밀번호\t가입일자\n");
						mb.print();
						find = true;
						break;
					}
				}
			}
			if (!find) {
				System.out.println("아이디를 찾을 수 없습니다.");
			}
		}else {
			sc.next();
			System.out.println("숫자만 입력하세요.");
		}
		
	} else if (menu == 4) {
		// 이메일과 비밀번호를 입력받고, 맞으면 비밀번호 수정
		System.out.print("아이디 입력> ");
		String serchEm = sc.next();
		System.out.print("비밀번호 입력> ");
		String serchPw = sc.next();
		boolean find = false;
		for (Member mb : list) {
			if (mb != null) {
				if (mb.getEmail().equals(serchEm) && mb.getPw().equals(serchPw)) {
					System.out.print("비밀번호 수정> ");
					String rPw = sc.next();
					mb.setPw(rPw);
					System.out.println("비밀번호가 성공적으로 수정되었습니다.");
					find = true;
					break;
				}
			}
		}
		if (!find) {
			System.out.println("아이디를 찾을 수 없습니다.");
		}
	} else if (menu == 0) {
		break;
	}
	System.out.println();
}
  • 문제) 메뉴 1, 2, 3, 4번 만들기
  • hasNextInt는 예외처리를 할 때 사용하는 Scanner 클래스의 메서드다. 메뉴 선택이나 아이디 입력 등 int만 입력받아야 하는 경우에 사용한다.

 


 

질문한 내용이나 어려웠던 점 메모

  • 내가 생각한 방법은 이것밖에 없는데 밑줄이 쳐져서 왜 안 되나..싶었다. 근데 지웠다가 똑같이 적었는데 밑줄없이 오류없이 잘 출력되길래 당황스러웠다.
  • foreach 문법이 너무 어렵다..안 보고 응용할만큼 익숙해지려면 시간이 꽤 걸릴 것 같다.

 


 

전체 피드백

  • 밑줄이 쳐져있다고 해서 무조건 오류가 아니라 저장하면 밑줄이 사라지기도 하니 저장부터 하는 습관을 들여야겠다.
  • 코드 위치에 따라 출력이 달라지거나 기능이 달라지니 코드 위치 확인 필수!!!
  • boolean find는 여러번 문제를 풀면서 익숙해진 것 같다.

 


728x90
728x90

 

수업내용 정리 (Java)

 

1. class

  • 객체를 만들기 위한 설계도
  • 구성요소: 필드(인스턴스 변수, 멤버 변수), 생성자, 메서드

 

 1-1) 필드(인스턴스 변수, 멤버 변수)

String name = "자동차";
String tire;
String color;
int speed;
  • 객체(변수)의 값을 저장할 공간
  • 생성할 때, 값을 집어넣어도 무관하다.

 

 1-2) 생성자

// 기본 틀
public Car() {

}
// 매개변수를 사용했을때
public Car(String name, String tire, String color, int speed) {
	this.name = name;
	this.tire = tire;
	this.color = color+"색";
	this.speed = speed;
}
  • 리턴 타입이 없다.
  • 생성자 명은 class명과 동일하다.
  • 만들지 않아도 기본적으로 자동 사용된다.
  • 매개변수를 사용하는 이유: 객체를 생성함과 동시에 필드값을 세팅하기 위해 사용한다.
  • this. <- 필드에 선언한 이름과 동일한 변수명을 이용했을때, 필드명에 붙여준다.
  • 안에 실행문구가 없으면 출력 시 null, null, null, 0이 뜬다.

 

 1-3) 메서드

// 기본 틀
public (리턴타입) (이름)(){

}
public void run() {
	speed++;
}
public void run1(int a) {
	speed+=a;
}
public void print(){
	System.out.printf("%s\t%s\t%s\t%d\n",name,tire,color,speed);
}
  • 실행문
  • run의 경우, 사용할 때마다 1씩 증가하는 실행문
  • run1의 경우, 사용할 때 입력한 숫자만큼 증가하는 실행문
  • print를 메서드에 적음으로서 car1.print만 적어도 객체 안에 담긴 값을 출력할 수 있다.

 

 1-4) 객체 생성

// 생성자를 기본틀로 사용했을 경우
Car car1 = new Car();

car1.name = "그랜저"; // car1의 이름에 ""를 대입
car1.tire = "한국";
car1.color = "검정";
car1.speed = 9;
car1.run();
// 생성자에 매개변수를 사용했을 경우
Car car1 = new Car("그랜저","한국","검정",9);
  • Scanner를 사용하듯 생성한다.
  • 매개변수를 사용하지 않았을 경우, 하나하나 필드값을 설정해주어야 한다.
  • 매개변수를 사용했을 경우, 생성할 때 필드값을 설정할 수 있다.

 


 

질문한 내용이나 어려웠던 점 메모

 

1. 메서드

 완전히 이해하는 데에 조금 오래 걸릴 것 같다. 아직은 응용할 수 없는 단계다.

 


 

전체 피드백

 비가 와서 그런지 축 쳐져서 연이틀이나 수업에 집중하지 못했다. 건강&수면관리 열심히 해야할 것 같다..

 


728x90
728x90

 

수업내용 정리 (Java)

 

1. 예제_Account

---------- import, 변수 선언

import java.util.Scanner;
Scanner sc = new Scanner(System.in);
String[] name = new String[10];		// 이름
String[] id = new String[10];		// 아이디
String[] pw = new String[10];		// 비밀번호
String[] account = new String[10];	// 계좌번호
int[] balance = new int[10];		// 잔액
int cnt = 0;				// 회원가입한 사람 수
int loginIndex = -1;			// 상황에 따라 메뉴를 다르게 하기 위한 변수

 

 

---------- while문 사용

  • 메인 (메뉴 선택)
System.out.println("==========  은행  ==========");
	if(loginIndex == -1) {
		System.out.println("1.회원가입 2.로그인 3.회원목록 0.종료");
	}else {
		System.out.println("1.회원정보수정 2.로그아웃("+name[loginIndex]+"님) 3.입금 4.출금 5.계좌이체 0.종료");
	}
    
	System.out.printf("메뉴 선택> ");
	int menu = sc.nextInt();
  • 상황에 따라 메뉴를 다르게 출력하기 위해 if문을 이용했다.
  • loginIndex가 -1일때: 아무도 로그인하지 않은 상태
  • 그 외: 로그인 상태

 

  • 메뉴 1번 선택 시
if(loginIndex == -1) {
	// 이름, 아이디, 비밀번호, 계좌번호, 초기잔액 입력 회원가입
	System.out.println("\t회원가입==============");
	System.out.printf("회원가입 할 이름> ");
	name[cnt] = sc.next();
	System.out.printf("회원가입 할 아이디> ");
	id[cnt] = sc.next();
	System.out.printf("회원가입 할 비밀번호> ");
	pw[cnt] = sc.next();
	System.out.printf("회원가입 할 계좌번호> ");
	account[cnt] = sc.next();
	System.out.printf("계좌 초기 잔액> ");
	balance[cnt] = sc.nextInt();
	
    System.out.println(name[cnt]+"님, 회원가입이 완료되었습니다.");
	cnt++;
}
  • loginIndex가 -1일때: 회원가입

 - 배열 name, id, pw, account, balance를 입력받아 각 cnt번째에 저장한다.

 - 회원가입이 완료되면 cnt를 1씩 증가한다.

 

else {
	// 회원정보수정 /비밀번호, 계좌번호 수정
	System.out.println("\t정보수정==============");
	System.out.println("1.아이디 2.비밀번호 3.계좌번호");
	System.out.print("메뉴 선택> ");
	menu = sc.nextInt();
	if(menu == 1) {
		System.out.print("변경할 아이디 입력> ");
		id[loginIndex] = sc.next();
		System.out.println("아이디 변경이 성공적으로 완료되었습니다.");
	}else if(menu == 2) {
		System.out.print("변경할 비밀번호 입력> ");
		pw[loginIndex] = sc.next();
		System.out.println("비밀번호 변경이 성공적으로 완료되었습니다.");
	}else if(menu == 3) {
		System.out.print("변경할 계좌번호 입력> ");
		account[loginIndex] = sc.next();
		System.out.println("계좌번호 변경이 성공적으로 완료되었습니다.");
	}else {
		System.out.println("존재하는 메뉴를 선택해주세요.");
	}
}
  • loginIndex가 -1이 아닐때: 회원정보 수정

 - 변경할 정보를 입력받아 해당하는 배열의 loginIndex번째 인덱스에 저장한다.

 

  • 메뉴 2번 선택 시
if(loginIndex == -1) {
	System.out.println("\t로그인===============");
	// 아이디, 비밀번호 입력받아서 로그인 기능 수행
	System.out.print("아이디 입력> ");
	String loginId = sc.next();
	System.out.print("비밀번호 입력> ");
	String loginPw = sc.next();
	boolean find = false;
	for(int i=0; i<cnt; i++) {
		if(loginId.equals(id[i]) && loginPw.equals(pw[i])) {
		System.out.println("로그인 성공!");
		find = true;
		loginIndex = i;
		break;
		}
	}
	if(!find) {
		System.out.println("로그인 실패");
	}
}
  • loginIndex가 -1일때: 로그인

 - i가 cnt보다 작은 동안에 loginId와 loginPw가 id와 pw 배열에 있는지 확인하고, 있으면 find를 true로 바꾸고 liginInex는 i 값을 대입한다.

 - break를 넣어 for문을 나가준다.

 - 만약 for문을 나왔는데 find가 true가 아니라면 로그인 실패 문구를 출력한다.

 

else {
	// 로그아웃
	loginIndex = -1;
	System.out.println("성공적으로 로그아웃되셨습니다.");
}
  • loginIndex가 -1이 아닐때: 로그아웃

 - loginIndex에 -1을 대입한다.

 

  • 메뉴 3번 선택 시
if(loginIndex == -1) {
	// 회원목록 출력
	System.out.println("\t회원목록==============");
	System.out.println("이름\t아이디\t비밀번호\t계좌번호\t잔액");
	System.out.println("==================================");
	for(int i=0; i<cnt; i++) {
		System.out.printf("%s\t%s\t%s\t%s\t%,d원\n",
				name[i],id[i],pw[i],account[i],balance[i]);
	}
	System.out.println();
}
  • loginIndex가 -1일때: 회원목록

 - 회원가입 한 사람들이 가입 할 때 입력한 정보가 출력된다.

 

else {
	// 입금 /입금금액 받아서 입금
	System.out.println("\t입금================");
	System.out.print("입금할 금액을 입력해주세요.\n입금 금액> ");
	int inMoney = sc.nextInt();
	balance[loginIndex] += inMoney;
	System.out.println("성공적으로 입금이 완료되었습니다.");
	System.out.printf("입금 금액: %,d원\n입금 후 잔액: %,d원",
			inMoney,balance[loginIndex]);
}
System.out.println();
  • loginIndex가 -1이 아닐때: 입금

 - 로그인 되어있는 아이디의 계좌에 돈을 입금한다.

 - 입금할 금액을 입력받으면 입금 금액과 입금 후 잔액을 출력한다.

 

  • 메뉴 4번 선택 시
// 출금 /출금금액 받아서 출금(잔액부족 확인)
System.out.println("\t출금================");
System.out.print("출금할 금액을 입력해주세요.\n출금 금액> ");
int outMoney = sc.nextInt();
if(outMoney > balance[loginIndex]) {
	System.out.println("잔액이 부족합니다.");
}else {
	balance[loginIndex] -= outMoney;
	System.out.println("성공적으로 출금이 완료되었습니다.");
	System.out.printf("출금 금액: %,d원\n출금 후 잔액: %,d원",
			outMoney,balance[loginIndex]);
}
System.out.println();
  • loginIndex가 -1이 아닐때: 출금

 - 로그인 되어있는 아이디의 계좌에서 돈을 출금한다.

 - 만약 출금액이 잔액보다 크면, 잔액이 부족하다는 안내를 출력한다.

 - 그렇지 않고 잔액이 출금액보다 크면, 출금 금액과 출금 후 잔액을 출력한다

 

  • 메뉴 5번 선택 시
// 계좌이체 /이체 할 계좌 및 금액 받아서 계좌이체(잔액부족 확인)
System.out.println("\t계좌이체==============");
System.out.print("이체하려는 계좌번호를 입력해주세요\n이체할 계좌번호> ");
String inOutAcc = sc.next();
boolean find = false;
for(int i=0; i<cnt; i++) {
	if(inOutAcc.equals(account[i])) {
		System.out.print(" > 계좌번호가 확인되었습니다.\n이체할 금액을 입력해주세요."
				+ "\n이체할 금액> ");
		int inOutB = sc.nextInt();
		balance[loginIndex] -= inOutB;
		if(balance[loginIndex] >= inOutB) {
			balance[i] += inOutB;
			System.out.println("성공적으로 계좌이체가 완료되었습니다.");
			System.out.printf("이체 금액: %,d원\n이체 후 잔액: %,d원",
					inOutB,balance[loginIndex]);
			System.out.println();
		}else {
			System.out.println("잔액이 부족합니다.");
		}
		find = true;
		break;
	}
}
if(!find) {
	System.out.println("존재하지 않는 계좌번호입니다.");
}
  • loginIndex가 -1이 아닐때: 계좌이체

 - 계좌번호를 확인하고, 계좌번호가 확인되면 이체금을 입력받는다.

 - 만약 잔액이 이체금보다 크면, 이체 금액과 이체 후 잔액을 출력한다.

 - 그렇지 않고 이체금이 잔액보다 크다면, 잔액이 부족하다는 안내를 출력한다.

 - 만약 for문을 나왔는데 find가 true가 아니라면 존재하지 않는 계좌번호라는 문구를 출력한다.

 

  • 종료
break;

 - while문을 종료한다.

 

 

 

 


 

질문한 내용이나 어려웠던 점 메모

 

1. 메뉴 5번 선택 시 (계좌이체)

  •  혼자 힘으로 해결하긴 했으나 자꾸 boolean을 이용해서 코드를 짜는 것보다 else 혹은 else if를 써서 먼저 짜게 되는 것 같다. 처음에 제출할 때 else로 계좌번호가 존재하지 않는다 를 출력해서 두번째 회원가입한 사람이 첫번째 회원가입한 사람한테 계좌이체를 할 때는 괜찮은데 반대로 하려니까 너무 슬프게도 계좌가 존재하지 않는대서 그제서야 for문 밖에 !find를 추가해주었다.

 


 

전체 피드백

  •  오늘은 수업에 전혀 집중하지 못했다. 속이 별로이기도 했는데, 졸리기도 해서 많이 멍때리면서 들었다. 그래도 오늘은 다행히 새로운걸 배우기 보다는 7일차에 게임 만들던 것을 계속 만들어보라고 하셔서 다른 사람들 만드는거 조금 도와주고 다녔다.
  • 이 예제를 하면서 !find는 이해한 것 같아서 다행이다!
  • 오늘 일지가 짧으니 남은 시간은 어제 완성한 게임 조금 더 손봐야겠다!

 


728x90
1 ··· 7 8 9 10 11 12 13 ··· 27