2021. 04. 02(금) TIL

eastgun_·2021년 4월 2일
0

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("현재 할인 이벤트는 진행하지 않습니다.");
		}
		
	}
}
profile
게으르고 싶은 예비 개발자입니다.

0개의 댓글