인천일보아카데미 (39)

728x90

 

수업내용 정리 (Java)

 

1. 예제1_Shopping

  • Shopping
더보기
  • 필드
private String pno;	//상품번호
private String name;	//상품명
private int price;	//가격
private int quantity;	//수량

private static int num = 100;
  1. static 은 해당 클래스의 객체들이 공유하는 정적필드

 

  • 생성자
public Shopping(String name, int price, int quantity) {
	pno = "P"+num++;
	this.name = name;
	this.price = price;
	this.quantity = quantity;
}
  1. 객체를 생성할 때 매개변수로 값을 받아온다.
  2. pno에 정적필드인 num 값을 입력하고, num에 1을 더한다.
  3. 매개변수에 받아온 값을 각 맞는 필드에 입력한다.

 

  • 메서드
// get/set
public String getPno() {
	return pno;
}
public void setPno(String pno) {
	this.pno = pno;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public int getPrice() {
	return price;
}
public void setPrice(int price) {
	this.price = price;
}
public int getQuantity() {
	return quantity;
}
public void setQuantity(int quantity) {
	this.quantity = quantity;
}
  1. get) private 필드 값을 메인에서 호출할 수 있도록 한다.
  2. set) 메인에서 private 필드 값을 변경할 수 있도록 한다.

 

public void print() {
	if(quantity == 0) {
		System.out.printf("%s\t%s\t%,d원\t품절!\n",pno,name,price);
	}else {
		System.out.printf("%s\t%s\t%,d원\t%d개\n",pno,name,price,quantity);
	}
}
  1.  메인에서 호출하면 quantity 값이 0이거나 아닐 때 리스트를 출력한다.

 

public void buy(int balance, int buyQu) {
	int buyQP = price*buyQu;
	if(buyQu > quantity) {
		System.out.println(" > 상품 수량이 부족합니다.");
	}else if(buyQu<=quantity && buyQP>balance) {
		System.out.println(" > 잔액이 부족합니다.");
	}else if(buyQu<=quantity && buyQP<=balance) {
		quantity -= buyQu;
		balance -= buyQP;
		System.out.println(" > 상품이 정상적으로 구매되었습니다.");
		System.out.printf("상품 구매 후 잔액: %,d원\n",balance);
	}
}
  1. 상품을 구매할 때 필요한 코드가 너무 길어질 것 같아서 따로 메서드를 만들었다.
  2. 매개변수로 현재 잔액과 구매할 수량을 입력받아온다.
  3. 변수를 하나 만들어서 구매할 수량에 맞는 가격을 저장해둔다.
  4. 만약 상품수량보다 많은 수량이라면, 상품 수량 부족 출력,
  5. 그렇지 않고 저장해둔 금액이 잔액보다 크다면, 잔액 부족 출력,
  6. 그렇지 않고 상품수량보다 적거나 같은 수량이고 저장해둔 금액이 잔액보다 작거나 같으면, 상품수량에서 구매하는 수량을 빼고, 잔액에서 저장해둔 값을 빼고, 정상 구매 출력 후 남은 잔액 출력
  • ShoppingMain
더보기
  • 변수 선언
Scanner sc = new Scanner(System.in);
ArrayList<Shopping> list = new ArrayList<Shopping>();
int balance = 10000;	//잔액

 

  • 메뉴선택
System.out.println("============쇼핑몰============");
System.out.printf("\t\t[잔액: %,d원]\n", balance);
System.out.println("1.상품등록 2.상품목록 3.상품검색 4.상품수정\n5.상품삭제 6.잔액충전 0.종료");
System.out.print("메뉴선택> ");
int menu = sc.nextInt();

System.out.println();
System.out.println("========================");
  1.  밑의 두 줄은 알아보기 쉽게 나눠놓는 용도로 적어놓았다.

 

  • 메뉴 1
if(menu == 1) {
	System.out.println(" ====> 상품 등록");
	System.out.print("상품명> ");
	String name = sc.next();
	System.out.print("가격> ");
	int prise = sc.nextInt();
	System.out.print("개수> ");
	int quantity = sc.nextInt();
	Shopping a = new Shopping(name,prise,quantity);
	list.add(a);
	System.out.println(name+" 상품 등록이 완료되었습니다.");	
}
  1.  상품명, 가격, 개수를 각각 입력받아 ArrayList에 저장한다.

 

  • 메뉴 2
else if(menu == 2) {
	System.out.println(" ====> 상품 목록");
	int cnt = 0;
	System.out.println("상품번호\t상품명\t가격\t수량");
	System.out.println("============================");
	for(Shopping a : list) {
		a.print();
		if(a.getQuantity() != 0) {
			cnt++;
		}
	}
	if(cnt != 0) {
		System.out.print("상품을 구매하시겠습니까? (Y/y)> ");
		String selet = sc.next();
		if(selet.equals("Y") || selet.equals("y")) {
			System.out.println(" > 구매하실 상품 번호를 입력해주세요.");
			System.out.print("상품번호> ");
			String buyPno = sc.next();
			boolean find = false;
			for(Shopping a : list) {
				if(buyPno.equals(a.getPno())) {
					if(a.getPrice() > balance) {
						System.out.println(" > 잔액이 부족합니다.");
					}else {
						System.out.println(" > 구매하실 수량을 입력해주세요.");
						System.out.print("구매수량> ");
						a.buy(balance, sc.nextInt());
					}
					find = true;
					break;
				}
			}
			if(!find) {
				System.out.println(" > 상품을 조회할 수 없습니다.");
			}
		}
	}else {
		System.out.println(" > 현재 구매할 수 있는 상품이 없습니다.");
	}	
}
  1.  foreach로 상품 목록을 출력한다.
  2. 상품 목록을 출력할 때, 상품 수량이 0이 아닌 경우에만 cnt를 1씩 추가한다.
  3. 만약, cnt가 0이 아니라면 상품을 구매할 수 있도록 출력한다.
  4. 상품 번호를 입력받고, 조회가 된다면 상품 가격과 잔액을 비교해서 잔액이 더 적다면 잔액 부족 출력, 잔액이 크거나 같다면 구매할 수량 입력 후, 구매 메서드를 사용한다. 
  5. 상품 번호를 입력받았을때, 조회가 됐다면 find를 true로 바꾸고 for문을 종료한다.
  6. 상품 번호를 입력받았을 때, 조회가 안 된다면 조회할 수 없다고 출력
  7. 만약 cnt가 0이라면 구매할 수 있는 상품이 없다고 출력

 

  • 메뉴 3
else if(menu == 3) {
	System.out.println(" ====> 상품 검색");
	System.out.print("검색할 상품번호> ");
	String searchPn = sc.next();
	boolean find = false;
	for(Shopping a : list) {
		if(searchPn.equals(a.getPno())) {
			System.out.println("상품번호\t상품명\t가격\t수량");
			System.out.println("============================");
			a.print();
			System.out.print("상품을 구매하시겠습니까? (Y/y)> ");
			String selet = sc.next();
			if(selet.equals("Y") || selet.equals("y")) {
				System.out.println(" > 구매하실 수량을 입력해주세요.");
				System.out.print("구매수량> ");
				a.buy(balance,sc.nextInt());
			}
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 상품을 조회할 수 없습니다.");
	}	
}
  1. 상품 번호를 입력받고, 조회된다면 해당 상품번호를 출력하고, 상품을 구매할건지 물어본 후 구매한다면 구매수량을 입력하면서 구매 메서드를 사용한다. find는 true로 바꾸고 for문을 종료한다.
  2. 조회가 안 된다면 조회할 수 없다고 출력

 

  • 메뉴 4
else if(menu == 4) {
	System.out.println(" ====> 상품 수정");
	System.out.print("수정할 상품 번호> ");
	String searchPn = sc.next();
	boolean find = false;
	for(Shopping a : list) {
		if(searchPn.equals(a.getPno())) {
			System.out.print("상품명> ");
			a.setName(sc.next());
			System.out.print("가격> ");
			a.setPrice(sc.nextInt());
			System.out.print("수량> ");
			a.setQuantity(sc.nextInt());
			System.out.println(" > 상품 수정이 성공적으로 완료되었습니다.");
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 조회할 수 없습니다.");
	}	
}
  1.  상품번호를 입력받고, 조회가 된다면 상품명, 가격, 수량의 값을 입력받아 저장한다. find는 true로 바꾸고 for문을 나간다.
  2. 조회가 안 된다면 조회할 수 없다고 출력

 

  • 메뉴 5
else if(menu == 5) {
	System.out.println(" ====> 상품 삭제");
	System.out.print("삭제할 상품 번호> ");
	String delPn = sc.next();
	boolean find = false;
	for(Shopping a : list) {
		if(delPn.equals(a.getPno())) {
			list.remove(a);
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 조회할 수 없습니다.");
	}	
}
  1.  상품번호를 입력받고, 조회가 된다면 해당 인덱스를 삭제하고 find를 true로 바꾸면서 for문을 나간다.
  2. 조회가 안 된다면 조회할 수 없다고 출력

 

  • 메뉴 6
else if(menu == 6) {
	System.out.println(" ====> 잔액 충전");
	System.out.print("충전할 금액> ");
	balance += sc.nextInt();
	System.out.println(" > 충전이 성공적으로 완료되었습니다.");
	System.out.println("충전 후 금액: "+balance);			
}
  1. 충전 금액을 입력받고, 잔액에 그 금액을 더한다.
  2. 충전 후 금액을 출력한다.

 

  • 메뉴 0
else if(menu == 0) {
	System.out.println(" ====> 종료");
	System.out.println("============================");
	break;
}

 

  • 그 외
else {
	System.out.println(" > 잘못된 메뉴입니다.");
}
System.out.println("============================");
System.out.println();
  1. 메뉴에 없는 숫자를 선택하면 잘못된 메뉴라고 출력
  2. 밑의 두 줄은 알아보기 쉽게 나눠놓는 용도로 적어놓았다.

 

 

2. 예제2_Board

  • Board
더보기
  • 필드
private String id;	//작성자 아이디
private int bno;	//책번호
private String title;	//
private String contents;	//
private int cnt;	//조회수
private boolean like;	//좋아요

static int num = 100;

 

  • 생성자
public Board(String title, String contents, String id) {
	bno = num++;
	this.title = title;
	this.contents = contents;
	this.id = id;
}

 

  • 메서드
public int getBno() {
	return bno;
}
public String getId() {
	return id;
}
public boolean getLike() {
	return like;
}
public void setTitle(String title) {
	this.title = title;
}
public void setContents(String contents) {
	this.contents = contents;
}
public void cntUp() {
	cnt++;
}
public void likeToggle() {
	like = !like;
}

 

public void print() {
	System.out.printf("%-14s\t\t%3d %s\n", "["+title+"]", cnt,like == true ? "🖤" : "♡");
	System.out.printf("┌──────────────────────────┐\n");
	System.out.printf("│%-26s│\n", "");
	System.out.printf("│%-26s│\n", 
			contents.length()<=26 ? contents : contents.substring(0,23)+"...");
	System.out.printf("└──────────────────────────┘\n");
}
  1. 선생님이 하신 것
  • BoardMain
더보기
  • 변수선언
Scanner sc = new Scanner(System.in);
ArrayList<Board> list = new ArrayList<Board>();
ArrayList<User> ulist = new ArrayList<User>();
int loginIndex = -1;

 

  • 메뉴선택
System.out.println("==========블로그==========");
System.out.println("1.회원가입 2.로그인 3.게시글목록 4.읽기 0.종료");
System.out.println("1.게시글등록 2.로그아웃 3.게시글목록 4.읽기\n"
			+ "5.수정 6.삭제 0.종료");
System.out.print("메뉴선택> ");
int menu = sc.nextInt(); sc.nextLine();
System.out.println();

 

  • 메뉴 1 (로그인X)
if(menu == 1)
if(loginIndex == -1) {
	System.out.println( "====> 회원가입");
	User user = new User();
	System.out.print("이름> ");
	user.setName(sc.next());
	System.out.print("아이디> ");
	user.setId(sc.next());
	System.out.print("비밀번호> ");
	user.setPw(sc.next());
	ulist.add(user);
	System.out.println(" > "+user.getName()+"님 회원가입을 축하드립니다.");
}

 

  • 메뉴 1 (로그인O)
else {
	System.out.println( "====> 게시글 등록");
	System.out.print("제목> ");
	String title = sc.nextLine();
	System.out.print("내용> ");
	String contents = sc.nextLine();
	Board b = new Board(title, contents,ulist.get(loginIndex).getId());
	list.add(b);
	System.out.println(title+" 게시가 성공적으로 완료되었습니다.");
}

 

  • 메뉴 2 (로그인X)
else if(menu == 2)
else if(menu == 2) {
	if(loginIndex == -1) {
		System.out.println(" ====> 로그인");
		System.out.print("아이디> ");
		String loginId = sc.next();
		System.out.print("비밀번호> ");
		String loginPw = sc.next();
		boolean find = false;
		for(int i=0; i<ulist.size(); i++) {
			if(loginId.equals(ulist.get(i).getId()) &&
					loginPw.equals(ulist.get(i).getPw())) {
				System.out.println(" > 로그인 성공!");
				loginIndex = i;
				find = true;
				break;
			}
		}
		if(!find) {
			System.out.println(" > 로그인 실패");
		}
		
	}
}

 

  • 메뉴 2 (로그인O) 
else {
	System.out.println(" ====> 로그아웃");
	loginIndex = -1;
	System.out.println(" > 로그아웃이 완료되었습니다.");					
}

 

  • 메뉴 3
else if(menu == 3) {
	System.out.println(" ====> 게시글 목록");
	for(Board b : list) {
		b.print();
	}	
}

 

  • 메뉴 4
else if(menu == 4) {
	System.out.println(" ====> 게시글 읽기");
	System.out.print("읽을 글 번호> ");
	int searchBno = sc.nextInt();
	boolean find = false;
	for(Board b : list) {
		if(searchBno == b.getBno()) {
			b.cntUp();
			b.print();
			find = true;
			System.out.print("좋아요를 ");
			System.out.print(!b.getLike() ? "누르시겠습니까?" : "취소하시겠습니까?");
			System.out.print(" (Y/y)> ");
			String like = sc.next();
			if(like.equals("Y") || like.equals("y")) {
				b.likeToggle();
			}
			break;
		}
	}
	if(!find) {
		System.out.println(" > 조회할 수 없습니다.");
	}				
}
  1. 글 번호를 입력받고, 조회가 된다면 조회수를 올리고 출력한다.
  2. 좋아요를 누를지 취소할지 물어보고, 긍정일 때만 likeToggle 메서드를 실행한다.
  3. 물어볼때 삼항연산자를 사용했다.

 

  • 메뉴 5 (로그인O)
else if(menu == 5 && loginIndex != -1) {
	System.out.println(" ====> 게시글 수정");
	System.out.print("수정할 글 번호> ");
	int updateBno = sc.nextInt();sc.nextLine();
	boolean find = false;
	for(Board b : list) {
		if(updateBno == b.getBno()) {
			if(b.getId().equals(ulist.get(loginIndex).getId())) {
				System.out.print("수정할 제목> ");
				b.setTitle(sc.nextLine());
				System.out.print("수정할 글> ");
				b.setContents(sc.nextLine());
				System.out.println(" > 성공적으로 글 수정이 완료되었습니다.");
			}else {
				System.out.println(" > 등록자만 수정 가능합니다.");
			}
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 조회할 수 없습니다.");
	}		
}

 

 

  • 메뉴 6 (로그인O)
else if(menu == 6 && loginIndex != -1) {
	System.out.println(" ====> 게시글 삭제");
	System.out.print("삭제할 글 번호> ");
	int deleteBno = sc.nextInt();
	boolean find = false;
	for(Board b : list) {
		if(deleteBno == b.getBno()) {
			if(b.getId().equals(ulist.get(loginIndex).getId())) {
				list.remove(b);	// 인덱스로 지우기, 객체로 지우기
				System.out.println(" > 성공적으로 삭제가 완료되었습니다.");
			}else {
				System.out.println(" > 등록자만 삭제 가능합니다.");
			}
			find = true;
			break;
		}
	}
	if(!find) {
		System.out.println(" > 조회할 수 없습니다.");
	}
}
  1.  ArrayList 삭제는 인덱스로 지울수도 있고, 객체로 지울 수도 있다.

 

  • 메뉴 0
else if(menu == 0) {
	System.out.println(" ====> 블로그 종료");
	System.out.println("========================");
	break;	
}

 

  •  그 외
else {
	System.out.println(" > 존재하는 메뉴를 선택해주세요.");	
}
System.out.println("========================");
System.out.println();

 

 


 

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

1. 삼항연산자

  • 가볍게 하고 지나가서 그런지 구조가 많이 낯설어서 응용하기는 쉽지 않을 것 같다.
  • 링크 속 학원 글 잘 보기..

 


 

전체 피드백

  • 출석 비콘 잘 찍자 ㅠㅠ!!! 저번에 퇴실 안 찍어서 결석인걸 확인했다..입실 비콘 안 찍어서 지각처리 된적도 있는데 너무 슬프다..

 


728x90
728x90

 

수업내용 정리 (Java)

 

1. class_복습+a

 1-1) 생성자

// 기본생성자
public User() {

}
User() {

}
  • 생성자의 앞 부분 public 없이 적어도 생성자로 사용이 가능하다.

 

 1-2) 복습 문제

더보기

메뉴에 따른 if문 코드 짜기

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Scanner sc = new Scanner(System.in);
	User[] list = new User[10];
	int cnt = 0;
	
	while(true) {
		System.out.println("============lol============");
		System.out.println("1.회원가입 2.로그인 3.회원목록 0.종료");
		System.out.print("메뉴선택> ");
		int menu = sc.nextInt();
		System.out.println();
		
		if(menu == 1 ) {
			System.out.println(" ==> 회원가입");
			User u = new User();
			System.out.print("이름 입력> ");
			u.setName(sc.next());
			System.out.print("아이디 입력> ");
			u.setId(sc.next());
			System.out.print("비밀번호 입력> ");
			u.setPw(sc.next());
			System.out.println(" > "+u.getName()+"님 회원가입을 환영합니다.");
			list[cnt] = u;
			cnt++;
			
		}else if(menu == 2) {
			System.out.println(" ==> 로그인");
			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(list[i].getId()) && loginPw.equals(list[i].getPw())) {
					System.out.println(" > 로그인 성공!");
					find = true;
					break;
				}
			}
			if(!find) {
				System.out.println("로그인 실패");
			}
			
		}else if(menu == 3) {
			System.out.println(" ==> 회원목록");
			System.out.println("이름\t아이디\t비밀번호");
			for(int i=0; i<cnt; i++) {
				list[i].print();
			}
			
		}else if(menu == 0) {
			break;
			
		}else{
			System.out.println("잘못된 입력입니다.");
			
		}
		
		System.out.println("===========================");
		System.out.println();
	}
	System.out.println("\n프로그램 종료");
	System.out.println("===========================");
	
}

 

 

2. ArrayList

// 배열
String[] a = new String[10];	// 배열 생성
a[0] = "홍길동";		// 값 입력

// a 배열의 크기만큼 반복하여 출력
for(int i=0; i<a.leght; i++) {
	System.out.println(a[i]);
}
// ArrayList
import java.util.ArrayList;

	ArrayList<String> b = new ArrayList<String>();	// 리스트 생성
	b.add("이순신");				// 값 입력
	b.add("심청이");
	b.add("장동건");
	
	// b 리스트의 크기만큼 반복하여 출력
	for(int i=0; i<b.size(); i++) {
		System.out.println(b.get(i));
	}
	
	// foreach로 출력
	for(String i : b) {
		System.out.println(i);
	}
  • ArrayList는 배열과 달리 크기가 지정되어있지 않고, 값을 추가, 삭제하는 것에 따라 크기가 달라진다.
  • 배열의 크기는 leght인 것처럼, 리스트의 크기는 size다.
  • 방이 존재하지 않는 배열이라고 기억하면 편할 것 같다. (값을 집어넣으면 방이 생성됨)
add() 괄호 안 값 추가
get() 괄호 안 인덱스 번호 값 호출
set() 괄호 안 인덱스 번호 값 수정
remove() 괄호 안 인덱스 번호 값 삭제
size 저장된 값의 크기

 

 2-1) 예제_Account

  • Account
더보기
// import
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

 

// 필드
private String name;	// 예금주
private String account;	// 계좌번호
private String pw;		// 비밀번호
private int balance;	// 잔액
private String date;	// 가입일
private DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

 

// 생성자
public Account() {
	String now= dtf.format(LocalDateTime.now());
	this.date = now;
}
public Account(String name, String account, String pw) {
	this();		// 위에 있는 생성자를 실행
	this.name = name;
	this.account = account;
	this.pw = pw;
	this.balance = 0;
}

 

// 메서드
public void deposit(int money) {	// 입금
	System.out.println("입금 전 잔액: "+balance);
	this.balance += money;
	System.out.println("입금 후 잔액: "+balance);
}
//public int withdraw(int money) {	// 출금
//	if(this.balance >= money) {
//		this.balance -= money;
//		return balance;
//	}else {
//		return balance;
//	}
//}
public boolean withdraw(int money) {	// 출금
	if(this.balance >= money) {
		this.balance -= money;
		return true;
	}else {
		return false;
	}
}
public void setName(String name) {
	this.name = name;
}
public String getName() {
	return name;
}
public void setAccount(String account) {
	this.account = account;
}
public String getAccount() {
	return account;
}

public void print() {
	System.out.printf("%s\t%s\t%s\t%,d원\t%s\n",name,account,pw,balance,date);
}

 

  • Util
더보기
import java.util.Scanner;

 

// 숫자체크 메서드
public int numberCheck(String a, Scanner sc) {
	System.out.print(a);
	while(true) {
		if(sc.hasNextInt()) {
			return sc.nextInt();
		}else {
			sc.nextLine();
			System.out.println(" > 숫자를 입력해주세요.");
			System.out.print(a);
		}
	}
}
//public int numberCheck1(String a, Scanner sc) {
//	System.out.print(a);
//	do {
//		if(sc.hasNextInt()) {
//			return sc.nextInt();
//		}else {
//			sc.nextLine();
//			System.out.println(" > 숫자를 입력해주세요.");
//			System.out.print(a);
//		}
//	}while(true);
//}

 

// 글자수체크	(내가 한 것/두번 입력받게 코드를 짜서 선생님께 도움받았음)
public String mCheck(String a, Scanner sc) {
	while(true) {
		System.out.print(a);
		String m = sc.next();
		if(m.length()<5 && m.length()>0) {
			return m;
		}else {
//			sc.nextLine();	// 여기서 필요없음
			System.out.println(" > 5자 미만으로 입력해주세요.");
		}
	}
}
	

// 글자수 체크	(선생님이 한 것)
public String lengthCheck(String a, Scanner sc) {
	while(true) {
		System.out.print(a);
		if(sc.hasNextInt()) {
			String b = sc.nextInt()+"";
			if(b.length() == 4) {
				return b.substring(0,2)+"-"+b.substring(2);
                // 계좌번호 123-45 처럼 출력
			}
			System.out.println(" > 4자로 입력하세요.");
			sc.nextLine();
		}else {
			System.out.println(" > 숫자만 입력하세요.");
			sc.nextLine();
		}
	}
}

 

  • AccountMain
더보기
import java.util.ArrayList;
import java.util.Scanner;

 

Scanner sc = new Scanner(System.in);
ArrayList<Account> list = new ArrayList<Account>();
Util util = new Util();

 

 

while(true) {
	System.out.println("=============lol은행=============");
	System.out.println("1.계좌생성 2.입금 3.출금 4.계좌목록 5.조회 0.종료");
	int menu = util.numberCheck("메뉴입력> ",sc);
	
	System.out.println();
	
	if(menu == 1) {
		System.out.println(" ===> 계좌생성");
		String name = util.mCheck("예금주> ",sc);
		String account = util.mCheck("계좌번호> ",sc);
		String pw = util.mCheck("비밀번호> ",sc);
		Account a = new Account(name, account, pw);
		list.add(a);
		
		System.out.println(name+"님, 계좌가 생성되었습니다.");
		
	}else if(menu == 2) {
		System.out.println(" ===> 입금");
		System.out.println("입금할 계좌번호> ");
		String inAccount = sc.next();
		boolean find = false;
		for(Account a : list) {
			if(a.getAccount().equals(inAccount)) {
				System.out.println(" > 계좌번호가 확인되었습니다.");
				int inMoney = util.numberCheck("입금할 금액> ",sc);
				a.deposit(inMoney);
				System.out.println(" > 입금이 완료되었습니다.");
				find = true;
				break;
				
			}
		}
		if(!find) {
			System.out.println(" > 조회할 수 없는 계좌입니다.");
		}
		
	}else if(menu == 3) {
		System.out.println(" ===> 출금");
		System.out.println("출금할 계좌번호> ");
		String outAccount = sc.next();
		boolean find = false;
		for(Account a : list) {
			if(a.getAccount().equals(outAccount)) {
				System.out.println(" > 계좌번호가 확인되었습니다.");
				int outMoney = util.numberCheck("출금할 금액> ",sc);
				if(a.withdraw(outMoney)) {	// true가 리턴되면 출금
					System.out.println(" > 출금이 완료되었습니다.");
				}else {		// false가 리턴되면 잔액부족
					System.out.println(" > 잔액이 부족합니다.");
				}
				find = true;
				break;
			}
		}
		if(!find) {
			System.out.println(" > 조회할 수 없는 계좌입니다.");
		}
		
	}else if(menu == 4) {
		System.out.println(" ===> 계좌목록");
		System.out.println("예금주\t계좌번호\t비밀번호\t잔액\t가입날짜");
		System.out.println("=============================================");
		for(Account a : list) {
			a.print();
		}
		
	}else if(menu == 5) {
		System.out.println(" ===> 조회");
		System.out.print("조화할 계좌번호> ");
		String seachAcc = sc.next();
		boolean find = false;
		for(Account a : list) {
			if(a.getAccount().equals(seachAcc)) {
				System.out.println("예금주\t계좌번호\t비밀번호\t잔액\t가입날짜");
				System.out.println("=============================================");
				a.print();
				find = true;
				break;
			}
		}
		if(!find) {
			System.out.println(" > 조회할 수 없는 계좌입니다.");
		}
		
	}else if(menu == 0) {
		System.out.println(" ===> 종료");
		
		break;
	}else {
		System.out.println(" > 존재하는 메뉴를 선택해주세요.");
	}
	
	sc.nextLine();
	System.out.println();
}

System.out.println("===============================");

 

 

3. static

  • 클래스 변수(정적필드)
  • class에 붙어서 하나만 존재할 수 있는 변수
  • 메인에서 접근할 때, 클래스명으로 접근

 


 

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

 - 2-1의 Util, 글자수 체크 메서드

  • 코드를 잘못짜서 입력을 두번 받아야 넘어갈 수 있게 되어서 줄이는 방법을 질문했다.
  • 내가 메서드 안에서 sc.next();를 두번 사용해서 그런 결과가 출력됐던 것을 확인 받았다. 나는 sc.next();를 if 조건에서 한 번, 리턴할 때 한 번 썼는데, 이게 입력을 두 번 받게 되는 결과가 된 것이었다.
  • 변수를 하나 선언하면서 값을 저장하고 그 값을 리턴하는 방식으로 해결했다.

 


 

전체 피드백

  • 연휴동안 열심히 놀아서 그런지 수업을 듣는데 조금 힘들었다. 

 


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
1 ··· 7 8 9 10 11 12 13