728x90
수업내용 정리 (Java)
1. 예제1_Shopping
- Shopping
더보기
- 필드
private String pno; //상품번호
private String name; //상품명
private int price; //가격
private int quantity; //수량
private static int num = 100;
- static 은 해당 클래스의 객체들이 공유하는 정적필드
- 생성자
public Shopping(String name, int price, int quantity) {
pno = "P"+num++;
this.name = name;
this.price = price;
this.quantity = quantity;
}
- 객체를 생성할 때 매개변수로 값을 받아온다.
- pno에 정적필드인 num 값을 입력하고, num에 1을 더한다.
- 매개변수에 받아온 값을 각 맞는 필드에 입력한다.
- 메서드
// 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;
}
- get) private 필드 값을 메인에서 호출할 수 있도록 한다.
- 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);
}
}
- 메인에서 호출하면 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);
}
}
- 상품을 구매할 때 필요한 코드가 너무 길어질 것 같아서 따로 메서드를 만들었다.
- 매개변수로 현재 잔액과 구매할 수량을 입력받아온다.
- 변수를 하나 만들어서 구매할 수량에 맞는 가격을 저장해둔다.
- 만약 상품수량보다 많은 수량이라면, 상품 수량 부족 출력,
- 그렇지 않고 저장해둔 금액이 잔액보다 크다면, 잔액 부족 출력,
- 그렇지 않고 상품수량보다 적거나 같은 수량이고 저장해둔 금액이 잔액보다 작거나 같으면, 상품수량에서 구매하는 수량을 빼고, 잔액에서 저장해둔 값을 빼고, 정상 구매 출력 후 남은 잔액 출력
- 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
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+" 상품 등록이 완료되었습니다.");
}
- 상품명, 가격, 개수를 각각 입력받아 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(" > 현재 구매할 수 있는 상품이 없습니다.");
}
}
- foreach로 상품 목록을 출력한다.
- 상품 목록을 출력할 때, 상품 수량이 0이 아닌 경우에만 cnt를 1씩 추가한다.
- 만약, cnt가 0이 아니라면 상품을 구매할 수 있도록 출력한다.
- 상품 번호를 입력받고, 조회가 된다면 상품 가격과 잔액을 비교해서 잔액이 더 적다면 잔액 부족 출력, 잔액이 크거나 같다면 구매할 수량 입력 후, 구매 메서드를 사용한다.
- 상품 번호를 입력받았을때, 조회가 됐다면 find를 true로 바꾸고 for문을 종료한다.
- 상품 번호를 입력받았을 때, 조회가 안 된다면 조회할 수 없다고 출력
- 만약 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(" > 상품을 조회할 수 없습니다.");
}
}
- 상품 번호를 입력받고, 조회된다면 해당 상품번호를 출력하고, 상품을 구매할건지 물어본 후 구매한다면 구매수량을 입력하면서 구매 메서드를 사용한다. find는 true로 바꾸고 for문을 종료한다.
- 조회가 안 된다면 조회할 수 없다고 출력
- 메뉴 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(" > 조회할 수 없습니다.");
}
}
- 상품번호를 입력받고, 조회가 된다면 상품명, 가격, 수량의 값을 입력받아 저장한다. find는 true로 바꾸고 for문을 나간다.
- 조회가 안 된다면 조회할 수 없다고 출력
- 메뉴 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(" > 조회할 수 없습니다.");
}
}
- 상품번호를 입력받고, 조회가 된다면 해당 인덱스를 삭제하고 find를 true로 바꾸면서 for문을 나간다.
- 조회가 안 된다면 조회할 수 없다고 출력
- 메뉴 6
else if(menu == 6) {
System.out.println(" ====> 잔액 충전");
System.out.print("충전할 금액> ");
balance += sc.nextInt();
System.out.println(" > 충전이 성공적으로 완료되었습니다.");
System.out.println("충전 후 금액: "+balance);
}
- 충전 금액을 입력받고, 잔액에 그 금액을 더한다.
- 충전 후 금액을 출력한다.
- 메뉴 0
else if(menu == 0) {
System.out.println(" ====> 종료");
System.out.println("============================");
break;
}
- 그 외
else {
System.out.println(" > 잘못된 메뉴입니다.");
}
System.out.println("============================");
System.out.println();
- 메뉴에 없는 숫자를 선택하면 잘못된 메뉴라고 출력
- 밑의 두 줄은 알아보기 쉽게 나눠놓는 용도로 적어놓았다.
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");
}
- 선생님이 하신 것
- 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(" > 조회할 수 없습니다.");
}
}
- 글 번호를 입력받고, 조회가 된다면 조회수를 올리고 출력한다.
- 좋아요를 누를지 취소할지 물어보고, 긍정일 때만 likeToggle 메서드를 실행한다.
- 물어볼때 삼항연산자를 사용했다.
- 메뉴 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(" > 조회할 수 없습니다.");
}
}
- 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
'프로그래밍 > 수업일지' 카테고리의 다른 글
수업일지 14일차 (23/10/10) - Java (0) | 2023.10.10 |
---|---|
수업일지 13일차 (23/10/06) - Java (1) | 2023.10.07 |
수업일지 11일차 (23/10/04) - Java (0) | 2023.10.04 |
수업일지 10일차 (23/09/27) - Java (0) | 2023.09.27 |
수업일지 9일차 (23/09/26) - Java (0) | 2023.09.26 |