2021. 04. 02(금) TIL
Java
package day4;
public class Item {
int no;
String category;
String name;
String maker;
int price;
// 기본 생성자 정의하기
Item() {}
// 모든 멤버변수를 초기화하는 생성자를 정의하기
Item(int no, String category, String name, String maker, int price) {
this.no = no;
this.category = category;
this.name = name;
this.maker = maker;
this.price = price;
}
}
package day4;
import java.util.Scanner;
public class ItemApp {
public static void main(String[] args) {
final int PRINT_ALL_ITEMS = 1;
final int PRINT_ITEMS_BY_CATEGORY = 2;
final int PRINT_ITEM_BY_NAME = 3;
final int PRINT_ITEMS_BY_PRICE = 4;
final int PRINT_ITEM_DETAIL = 5;
final int INSERT_ITEM = 6;
final int DELETE_ITEM = 7;
final int EXIT = 0;
Scanner sc = new Scanner(System.in);
// Item객체에 대한 조회/검색/추가/삭제 기능을 제공하는 객체 생성
ItemService service = new ItemService();
while (true) {
System.out.println("==================================================================");
System.out.println("1.전체 2.카테고리 3.이름 4.가격");
System.out.println("5.번호 6.등록 7.삭제 0.종료");
System.out.println("==================================================================");
System.out.print("메뉴번호를 선택하세요 : ");
int menuNo = sc.nextInt();
if (menuNo == PRINT_ALL_ITEMS) {
System.out.println("[모든 상품정보 출력]");
service.printAllItems();
} else if (menuNo == PRINT_ITEMS_BY_CATEGORY) {
System.out.println("[카테고리 상세정보 출력]");
System.out.print("카테고리를 입력하세요 : ");
String category = sc.next();
service.printItemsByCategory(category);
} else if (menuNo == PRINT_ITEM_BY_NAME) {
System.out.println("[상품명 상세정보 출력]");
System.out.print("상품명 입력하세요 : ");
String itemName = sc.next();
service.printItemsByName(itemName);
} else if (menuNo == PRINT_ITEMS_BY_PRICE) {
System.out.println("[가격범위 상세정보 출력]");
System.out.print("최소가격 : ");
int minPrice = sc.nextInt();
System.out.print("최대가격 : ");
int maxPrice = sc.nextInt();
service.printItemsByPrice(minPrice, maxPrice);
} else if (menuNo == PRINT_ITEM_DETAIL) {
System.out.println("[상품상세 조회]");
System.out.print("상품번호를 입력하세요 : ");
int itemNo = sc.nextInt();
service.printItemDetail(itemNo);
} else if (menuNo == INSERT_ITEM) {
System.out.println("[상품정보 등록]");
System.out.print("상품번호를 입력하세요 : ");
int no = sc.nextInt();
System.out.print("카테고리를 입력하세요 : ");
String category = sc.next();
System.out.print("상품명을 입력하세요 : ");
String name = sc.next();
System.out.print("제조사를 입력하세요 : ");
String maker = sc.next();
System.out.print("가격을 입력하세요 : ");
int price = sc.nextInt();
Item item = new Item(no, category, name, maker, price);
service.insertItem(item);
} else if (menuNo == DELETE_ITEM) {
System.out.println("[상품정보 삭제]");
System.out.print("삭제할 상품번호를 입력하세요 : ");
int no = sc.nextInt();
service.deleteItem(no);
} else if (menuNo == EXIT){
System.out.println("[프로그램 종료]");
break;
}
System.out.println();
System.out.println();
}
sc.close();
}
}
package day4;
public class ItemService {
Item[] items = new Item[100];
int position = 0;
ItemService() {
// items 배열에 Item객체 5개 등록하기
items[position++] = new Item(101, "노트북", "맥북", "애플", 1900000);
items[position++] = new Item(102, "노트북", "맥북에어", "애플", 1200000);
items[position++] = new Item(103, "노트북", "맥북프로", "애플", 2500000);
items[position++] = new Item(104, "노트북", "LG그램", "LG", 2000000);
items[position++] = new Item(105, "노트북", "소니바이오", "소니", 1400000);
items[position++] = new Item(106, "노트북", "씽크패드", "레노버", 2800000);
items[position++] = new Item(107, "스마트폰", "iphone12", "애플", 1400000);
items[position++] = new Item(108, "스마트폰", "iphoneSE", "애플", 600000);
items[position++] = new Item(109, "스마트폰", "갤럭시S20", "삼성", 1300000);
items[position++] = new Item(110, "워치", "애플워치", "애플", 500000);
items[position++] = new Item(111, "워치", "갤럭시워치", "삼성", 450000);
items[position++] = new Item(112, "워치", "가민945", "가민", 750000);
}
// items 배열에 저장된 모든 Item객체의 번호, 상품명, 가격을 출력한다
void printAllItems() {
System.out.println("=== 전체 상품 정보 ==============================");
System.out.printf("%-5s \t %5s \t %s \n", "상품번호", "상품이름", "가격");
for (Item item : items) {
if (item == null) {
break;
}
System.out.printf("%-5d \t \t %5s \t %-8d \n", item.no, item.name, item.price);
}
System.out.println("=================================================");
}
// items 배열에 저장된 Item객체 중에서 전달받은 category에 속하는 Item객체의 번호, 상품명, 가격을 출력한다.
void printItemsByCategory(String category) {
boolean isExist = false;
System.out.println("====" + category +" 아이템 목록==================");
for (Item item : items) {
if (item == null) {
break;
}
if (item.category.equals(category)) {
isExist = true;
System.out.println(item.no + "\t" + item.name + "\t" + item.price);
}
}
if (!isExist) {
System.out.println("["+ category+"]에 해당하는 상품이 존재하지 않습니다");
}
System.out.println("===========================================");
}
// items 배열에 저장된 Item객체 중에서 전달받은 상품명을 포함하고 있는 Item객체의 번호, 상품명, 가격을 출력한다.
// .equals(name)은 상품명이 name과 일치하면 true
// .contains(name)은 상품명에 name이 포함되어 있으면 true
void printItemsByName(String name) {
boolean isExist = false;
for (Item item : items) {
if (item == null) {
break;
}
if ((item.name).contains(name)) {
isExist = true;
System.out.println(item.no + "\t" + item.name + "\t" + item.price);
}
}
if (!isExist) {
System.out.println("["+ name +"]에 해당하는 상품이 존재하지 않습니다");
}
System.out.println("===========================================");
}
// items 배열에 저장된 Item객체 중에서 전달받은 가격범위에 속하는 Item객체의 번호, 상품명, 가격을 출력한다
void printItemsByPrice(int minPrice, int maxPrice) {
boolean isExist = false;
for (Item item : items) {
if (item == null) {
break;
}
if (minPrice <= item.price && maxPrice >= item.price) {
isExist = true;
System.out.println(item.no + "\t" + item.name + "\t" + item.price);
}
}
if (!isExist) {
System.out.println(minPrice + "~" + maxPrice + "에 해당하는 상품이 존재하지 않습니다");
}
System.out.println("===========================================");
}
// items 배열에 저장된 Item객체중에서 전달받은 번호와 일치하는 Item객체의 모든 정보를 출력한다.
// Item마다 고유한 아이템번호를 가지고 있다.
// 아이템번호로 아이템을 조회하면 한 개만 조회되거나, 조회되지 않는다.
void printItemDetail(int no) {
Item foundItem = null;
for (Item item : items) {
if (item == null) {
break;
}
if (no == item.no) {
foundItem = item;
break;
}
}
System.out.println("=== 상품 상세 정보 =================");
if (foundItem == null) {
System.out.println("["+ no +"] 해당 번호가 존재하지 않습니다.");
} else {
System.out.println("상품번호 : " + foundItem.no);
System.out.println("카테고리 : " + foundItem.category);
System.out.println("상품이름 : " + foundItem.name);
System.out.println("제조회사 : " + foundItem.maker);
System.out.println("상품가격 : " + foundItem.price);
}
System.out.println("====================================");
}
// items 배열에 전달받은 Item 객체를 등록한다.
void insertItem(Item item) {
items[position++] = item;
System.out.println("### 새로운 상품이 등록되었습니다.");
}
// items 배열에서 전달받은 번호에 해당하는 Item객체를 제거한다.
// 제거된 자리에는 맨마지막번쨰에 저장된 Item객체를 옮긴다 (조금 어려움)
void deleteItem(int no) {
// 삭제할 아이템이 저장된 인덱스를 저장하는 변수
int foundItemIndex = -1;
// 향상된 for문을 사용해서 배열에 저장된 Item객체를 순서대로 하나씩 조회하는 동안
// 지금 조회된 ITem 객체가 배열의 몇번째 칸에서 조회된 아이템인지를 저장하는 변수
int index = 0; // 배열에서 조회한 아이템의 현재 순번을 저장하는 변수
for (Item item : items) {
if (item == null) {
break;
}
if (item.no == no) {
foundItemIndex = index;
break;
}
index++;
}
// foundItemIndex값이 -1이면 아이템번호와 일치하는 아이템이 배열에 존재하지 않는 경우임
if (foundItemIndex == -1) {
System.out.println("상품번호 [" + no + "]에 해당하는 아이템은 존재하지 않습니다");
return; // 메소드의 실행을 즉시 종료한다.
}
// foundItemIndex가 -1이 아닌 경우 아래의 수행문이 실행된다.
// lastItemSavedIndex는 items 배열에서 Item객체가 저장된 맨 마지막 Index를 저장하는 변수다
int lastItemSavedIndex = position - 1;
// foundItemIndex와 lastItemSavedIndex가 같으면 지금 삭제할 Item객체는
// 맨마지막으로 저장된 Item객체다.
// - 배열에서 foundItemIndex 칸으로 null로 만든다.
if (foundItemIndex == lastItemSavedIndex) {
// 삭제할 아이템이 맨 마지막에 저장되어 있다.
items[foundItemIndex] = null;
position--;
} else {
// 삭제할 아이템이 중간에 저장되어 있다.
// - 배열에서 foundItemIndex 칸을 null로 만든다
// - 맨마지막으로 저장된 Item객체의 주소값을 foundItemIndex칸에 대입한다.
// - 배열에서 맨 마지막으로 Item객체가 저장되었던 칸을 null로 만든다.
items[foundItemIndex] = null;
items[foundItemIndex] = items[lastItemSavedIndex];
items[lastItemSavedIndex] = null;
position--;
}
}
}
Getter 와 Setter
package day5;
public class Book {
private int no;
private String title;
private String writer;
private String publisher;
private int price;
private boolean isSoldOut;
private double discountRate;
private Event event;
private Gift gift;
// getter / setter 메소드 정의하기
/*
* getter 메소드
* 멤버변수의 값을 반환하는 메소드다.
* 반환타입은 void가 될 수 없다.
* 메소드명은 get멤버변수명 이다.
* 매게변수는 없다.
* public 타입 get멤버변수명() {
* return 멤버변수명
* }
*
* setter 메소드
* 멤버변수의 값을 변경하는 메소드다.
* 반환타입은 항상 void다.
* 매개변수가 항상 있다
* 메소드명은 set멤버변수명(해당 멤버변수의 타입 매개변수)
* public set set멤버변수명(해당 멤버변수의 타입 변수명) {
* this.멤버변수명 = 멤버변수명;
* }
*/
public Book() {}
public Book(int no, String title, String writer, String publisher, int price, boolean isSoldOut,
double discountRate) {
super();
this.no = no;
this.title = title;
this.writer = writer;
this.publisher = publisher;
this.price = price;
this.isSoldOut = isSoldOut;
this.discountRate = discountRate;
}
// 멤버변수 no에 대한 Getter 메소드 정의하기
public int getNo() {
return no;
}
// 멤버변수 no에 대한 Setter 메소드 정의하기
public void setNo(int no) {
this.no = no;
}
// 멤버변수 title에 대한 Getter 메소드 정의하기
public String getTitle() {
return title;
}
// 멤버변수 title에 대한 setter 메소드 정의하기
public void setTitle(String title) {
this.title = title;
}
// 멤버변수 writer에 대한 Getter 메소드 정의하기
public String getWriter() {
return writer;
}
// 멤버변수 writer에 대한 Setter 메소드 정의하기
public void setWriter(String writer) {
this.writer = writer;
}
// 멤버변수 publisher에 대한 Getter 메소드 정의하기
public String getPublisher() {
return publisher;
}
// 멤버변수 publisher에 대한 Setter 메소드 정의하기
public void setPublisher(String publisher) {
this.publisher = publisher;
}
// 멤버변수 price에 대한 Getter 메소드 정의하기
public int getPrice() {
return price;
}
// 멤버변수 price에 대한 Setter 메소드 정의하기
public void setPrice(int price) {
this.price = price;
}
// 멤버변수 isSoldOut에 대한 Getter 메소드 정의하기
public boolean isSoldOut() {
return isSoldOut;
}
// 멤버변수 isSoldOut에 대한 Setter 메소드 정의하기
public void setSoldOut(boolean isSoldOut) {
this.isSoldOut = isSoldOut;
}
// 멤버변수 discountRate에 대한 Getter 메소드 정의하기
public double getDiscountRate() {
return discountRate;
}
// 멤버변수 discountRate에 대한 Setter 메소드 정의하기
public void setDiscountRate(double discountRate) {
this.discountRate = discountRate;
}
public Event getEvent() {
return event;
}
public void setEvent(Event event) {
this.event = event;
}
public Gift getGift() {
return gift;
}
public void setGift(Gift gift) {
this.gift = gift;
}
}
package day5;
public class BookApp2 {
public static void main(String[] args) {
Book book1 = new Book(100, "자바의 정석", "남궁성", "도우출판사", 35000, false, 0.15);
Event event1 = new Event("동영상강의 특가", "구매고객에게 저자의 동영상 강의를 제공합니다.", "4월1일", "4월 15일", false);
Gift gift1 = new Gift("책받침", 500);
// book1이 참조하는 Book객체의 event 멤버변수에 event1이 참조하는 Event객체의 주소값을 전달한다
book1.setEvent(event1);
// book1이 참조하는 Book객체의 gift 멤버변수에 gift1이 참조하는 Event객체의 주소값을 전달한다
book1.setGift(gift1);
// book1이 참조하는 Book객체에 연결된 Event객체의 주소값 조회하기
Event e = book1.getEvent();
// Book객체에 event1이 참조하는 Event객체가 연결되어있는 경우
// event1, e, book1.getEvent() 전부다 같은 Event객체의 주소값을 가지고 있거나, 반환한다.
// System.out.println(event1);
// System.out.println(e);
// System.out.println(book1.getEvent());
// Book객체에 event2이 참조하는 Event객체가 연결되어있는 경우
// event1, e, book1.getEvent() 전부다 같은 Event객체의 주소값을 가지고 있거나, 반환한다.
// System.out.println(event2);
// System.out.println(e);
// System.out.println(book1.getEvent());
// book1이 참조하는 Book객체에 연결된 Event객체의 정보 출력하기
System.out.println(e.getDescription());
System.out.println(book1.getEvent().getDescription());
// book1이 참조하는 Book이 할인이벤트 진행중인지 확인해보기
if (book1.getEvent().getTitle().contains("할인")) {
System.out.println("할인 이벤트 진행중입니다.");
} else {
System.out.println("현재 할인 이벤트는 진행하지 않습니다.");
}
}
}
Author And Source
이 문제에 관하여(2021. 04. 02(금) TIL), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eastgun_/2021.-04.-02금-TIL저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)