https://print-blue.tistory.com/170
class | Main | Item |
field | - id : int - itemName : String - price : Integer - quantity : int |
|
method | + main(args: String[]) : void |
+ Item (id : int, itemName : String, price : Integer, quantity : int) + showInfo() : void |
설명 | - 사용자에게 메뉴 1 ~7의 정수 중 1개를 입력 받음 - 정수 7를 입력하지 않은 한, 계속 반본적으로 실행 |
- 생성자 |
class | ItemBusinessRule | ItemView |
field | - store : Item[100] {read only} - sequence : int |
+ INPUT : scanner {read only} |
method | + save() : void - findById(itemId : int) : item + find() : void + updata() : void + delete() void + findAll() : void + clearStore() : void |
+ showMenu() : void |
설명 | - save : 상품명, 가격, 개수를 입력 받아서 store 에 Item 객체를 저장 : Item 객체의 id field 는 1씩 증가 (한번 사용된 id 는 다시 사용하지 않음) - findById : id 에 해당하는 Item 객체 리턴 - find : id 에 해당하는 정보 출력 - findById 호출 - updata : id 에 해당하는 상품의 가격과 개수 수정 - findById 호출 - delete : id 에 해당하는 상품 삭제 - findById 호출 - findAll : 저장된 전체 상품 출력 - clearStore : 저장된 모든 상품 삭제 |
- 아래 문구 출력
<< 상품 관리 >>
1. 상품 저장 2. 상품 조회 3. 상품 수정 4. 상품 삭제 5. 상품 전체 조회 6. 상품 전체 삭제 7. 프로그램 종료 원하는 기능을 선택하세요 ... |
[문항 1]
아래 그림과 같이 패키지와 파일을 추가하시오. [5점]
[문항 2]
Main.java 파일에 코드를 작성하시오. [5점]
[문항 3]
1. Item.java 파일 코드를 작성하시오. [10점]
2. field를 선언하시오. [5점]
3. showInfo() method를 정의하시오. [5점]
[문항 4]
ItemBusinessRule.java 파일에 코드를 작성하시오. [75점]
1. store field를 선언하시오. [5점]
2. sequence field를 선언하시오. [5점]
3. save method를 정의하시오. [10점]
4. findById method를 정의하시오. [10점]
5. find method를 정의하시오. [10점]
6. update method를 정의하시오. [10점]
7. delete method를 정의하시오. [10점]
8. findAll method를 정의하시오. [10점]
9. clearStore method를 정의하시오. [5점]
[문항 5]
1. INPUT field를 선언하시오. [2점]
2. showMenu method를 정의하시오. [3점]
문항 1번은 전체 파일을 업로드 하는 거니 패스하고
[문항 2]
Main.java 파일에 코드를 작성하시오. [5점]
Main 클래스에 main () 메소드에서 작업이 이루어지면 된다.
사용자에게 메뉴 1 ~ 7의 정수 중 1개를 입력 받고, 정수 7를 입력하지 않는 한, 계속 반복적으로 실행되면 된다.
여기서 나는 입력받는 타입을 int 가 아닌 String 으로 할 건데
그 이유는 만약 잘못 입력해서 문자를 입력했을 때 타입 에러가 떠서 실행이 종료가 되는데
이를 방지하고자 입력 받는 건 숫자로, 받아들일 땐 문자열로 처리해서 받을 것이다.
이미 문제에서 어떤 파일에 필드와 메소드를 구현하라고 제시했기때문에
구현하지 않은 상태에서 Main 클래스를 정의할 것이다
import item.ItemBusinessRule;
import item.ItemView;
일단 같은 패키지에 있는 것이 아니여서 item 패키지에 있는 ItemBusinessRule 클래스와 ItemView 클래스를 import 하였다.
import item.ItemBusinessRule;
import item.ItemView;
public class Main {
private static ItemBusinessRule manager = new ItemBusinessRule();
public static void main(String[] args) {
...
}
}
ItemBusinessRule 클래스의 메소드를 호출하기 위해 static 필드로 설정하였다.
import item.ItemBusinessRule;
import item.ItemView;
public class Main {
private static ItemBusinessRule manager = new ItemBusinessRule();
public static void main(String[] args) {
String userValue;
menu:
while (true) {
ItemView.showMenu();
userValue = ItemView.INPUT.next();
...
}
ItemView.INPUT.close();
}
}
그리고 ItemView 클래스에서 Scanner 객체를 생성하는 필드를 정의 했고, 하나만 사용할 예정이라
이 또한 static final 필드로 정의 해줬다. (문제에서 정의해줌)
Main 클래스를 정의하기 전에
[문항 5]
1. INPUT field를 선언하시오. [2점]
2. showMenu method를 정의하시오. [3점]
먼저 해결하는 것이 코드의 이해를 더할 것 같아 미리 작성 !
package item;
import java.util.Scanner;
public class ItemView {
// field
public static final Scanner INPUT = new Scanner(System.in);
public static void showMenu() {
System.out.println("\n<< 상품 관리 >>"
+ "1. 상품 저장"
+ "2. 상품 조회"
+ "3. 상품 수정"
+ "4. 상품 삭제"
+ "5. 상품 전체 조회"
+ "6. 상품 전체 삭제"
+ "7. 프로그램 종료"
+ "\n원하는 기능을 선택하세요 ... ");
}
}
iteam 패키지에 ItemView 클래스에는 Scanner 객체를 만드는 필드와 메뉴 문구 출력하는 메소드를 정의하면 된다.
static final 필드는 상수이기 때문에 대문자로 INPUT 라 변수명 쓰면 된다.
이렇게 정의하면 IteamView 클래스는 끝 !
다시 Main 클래스로 돌아가자
아까 앞서 말했듯 사용자에게 받는 정수는 String 타입으로 받는다 이야기 했다.
import item.ItemBusinessRule;
import item.ItemView;
public class Main {
private static ItemBusinessRule manager = new ItemBusinessRule();
public static void main(String[] args) {
String userValue;
menu:
while (true) {
ItemView.showMenu();
userValue = ItemView.INPUT.next();
switch(userValue) {
case "1":
manager.save();
break;
case "2":
manager.find();
break;
case "3":
manager.update();
break;
case "4":
manager.delete();
break;
case "5":
manager.findAll();
break;
case "6":
manager.clearStore();
break;
case "7":
System.out.println("프로그램이 종료되었습니다.");
break menu;
}
}
ItemView.INPUT.close();
}
}
Scanner 객체 사용 후 메모리 해지 하는 부분은 잊지 말도록 !!
그럼 이제 Main 클래스 정의도 끝 !
[문항 3]
1. Item.java 파일 코드를 작성하시오. [10점]
2. field를 선언하시오. [5점]
3. showInfo() method를 정의하시오. [5점]
이제 item 패키지에 있는 Item 클래스를 정의하도록 하자
문제에 나와있듯 필드와 showInfo() 를 해주자
package item;
public class Item {
private int id;
private String itemName;
private Integer price;
private int quantity;
public Item(int id, String itemName, Integer price, int quantity) {
this.id = id;
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
public void showInfo() {
System.out.printf("%d\t%s\t\t%d\t%d\n", this.id, this.itemName, this.price, this.quantity);
}
}
일단 문제에서 요구했던 부분까지 구현하도록 했다 .
ItemBusinessRule 클래스를 구현하면서 수정될 수 있으니 일단 보류 !
먼저 ItemBusinessRule 클래스로 와보자
[문항 4]
ItemBusinessRule.java 파일에 코드를 작성하시오. [75점]
1. store field를 선언하시오. [5점]
2. sequence field를 선언하시오. [5점]
3. save method를 정의하시오. [10점]
4. findById method를 정의하시오. [10점]
5. find method를 정의하시오. [10점]
6. update method를 정의하시오. [10점]
7. delete method를 정의하시오. [10점]
8. findAll method를 정의하시오. [10점]
9. clearStore method를 정의하시오. [5점]
일단 문제에서 요구했던 메소드를 전체적으로 구현했다. (기능 구현은 아직)
package item;
public class ItemBusinessRule {
private static final Item[] store = new Item[100];
private static int sequence = 0;
// 상품 아이디 찾기 ============================================
private Item findById(int itemId) {
}
// [1] 상품 저장 ===============================================
public void save() {
}
// [2] 상품 조회 ===============================================
public void find() {
}
// [3] 상품 수정 ===============================================
public void update() {
}
// [4] 상품 삭제 ===============================================
public void delete() {
}
// [5] 상품 전체 조회 ==========================================
public void findAll() {
}
}
// [6] 상품 전체 삭제 ==========================================
public void clearStore() {
}
}
이제 차례대로 시작 !
첫번째로 1번 상품 저장 !
일단 기능을 구현하기 전에 전체적인 흐름부터 생각한 다음 기능 구현하는 것이 좋다.
store 의 배열은 100으로 한정 지어났다.
만약 상품 101개 입력 받았을 때 배열의 길이가 초과하여 에러가 발생한다 .
추후의 문제를 위해 수량을 체크하는 sequence 가 100 이상일 경우 더 이상 저장할 수 없다는 문구를 출력해주자.
sequence 는 0 으로 초기화 했으니 후증가로 Item 객체가 생성할 때 1씩 증가하도록 하고,
id 도 객체가 생성할 때 후증가하여 1씩 증가하도록 했다.
프로그램 실행 후 상품 1개를 입력했을 때 아래 표처럼 될 것이다 !
store 배열 index | 0 | 1 | 2 | ... | 99 |
배열의 요소값 | 상품 1번 | null | null | null | null |
public void save() {
if (sequence >= 100) {
System.out.println("더 이상 저장할 수 없습니다.\n");
return;
}
System.out.print("상품명, 가격, 수량을 순서대로 입력하세요 ... ");
String name = ItemView.INPUT.next();
Integer price = ItemView.INPUT.nextInt();
int quantity = ItemView.INPUT.nextInt();
store[sequence++] = new Item(id++, name, price, quantity);
System.out.println("상품 정보가 저장되었습니다.");
}
그럼 이제 2번 상품 조회 !
상품 조회 / 수정 / 삭제는 findById () 메소드를 활용하라 하였다
사용자가 찾고자 하는 상품의 id 값을 입력하면 저장되어있는 store 의 배열을 순회하면서 해당 객체의 정보를 받아오는
메소드이다 !
코드로 구현해보자
// 상품 아이디 찾기 ============================================
private Item findById(int itemId) {
for (int i=0; i<sequence; i++) {
...
}
return null;
}
일단 저장된 상품의 수를 저장하기 위해 sequence 를 사용했다
그래서 sequence 만큼 돌면서 store 인덱스에 접근해 저장된 객체의 id 를 가져올 것이다
근데 getId 는 구현 안했다 !
구현하게 Item 클래스로 이동 !
package item;
public class Item {
private int id;
private String itemName;
private Integer price;
private int quantity;
public Item() {}
public Item(int id, String itemName, Integer price, int quantity) {
this.id = id;
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
...
public int getId() { // 추가 !
return this.id;
}
public void showInfo() {
System.out.printf("%d\t%s\t\t%d\t%d\n", this.id, this.itemName, this.price, this.quantity);
}
}
자 이제 id 를 가져와보자
// 상품 아이디 찾기 ============================================
private Item findById(int itemId) {
for (int i=0; i<sequence; i++) {
if (store[i].getId() == itemId) {
return store[i];
}
}
return null;
}
문제에서 요구했듯 반환형은 Item 이다 그럼 return 으로 찾고자 하는 id 를 가진 객체를 return 해주면 된다
만약 없으면 null 로 return !
그럼 findById () 메소드는 구현 완료 !
그럼 상품 조회하는 메소드를 정의하자
1. 사용자에게 원하는 상품 id 를 받는다
2. findById () 메소드를 활용하여 해당 객체를 반환 받는다
3. 반환된 값이 null 이 아닌 경우 즉, 잘 찾았으면 값이 있으니까 ! 값이 있으면 객체의 showInfo () 메소드를 호출
4. 만약 반환된 값이 null 인 경우 찾는 객체가 없으니 찾고자 하는 상품 id 가 없다고 문구 출력 !
코드로 구현해보자
// [2] 상품 조회 ===============================================
public void find() {
System.out.print("조회를 원하는 아이디를 입력하세요 ... ");
int itemId = ItemView.INPUT.nextInt();
Item searchInfo = findById(itemId);
if (searchInfo != null) {
searchInfo.showInfo();
System.out.println();
} else {
System.out.printf("아이디 %s인 상품이 없습니다.", itemId);
return;
}
}
3번째 상품 수정 !!
수정하고자 하는 상품 id 를 사용자에게 받아
가격과 수량을 입력 받고, 해당 상품에 적용하면 된다 !
// [3] 상품 수정 ===============================================
public void update() {
System.out.print("수정하기 원하는 아이디 입력하세요 ... ");
int itemId = ItemView.INPUT.nextInt();
Item searchInfo = findById(itemId);
if (searchInfo != null) {
System.out.print("가격, 수량을 입력하세요 ... ");
Integer price = ItemView.INPUT.nextInt();
int quantity = ItemView.INPUT.nextInt();
// 이 부분에 수정하는 코드 집어 넣기
System.out.println("상품 수정이 완료되었습니다.");
return;
}
System.out.printf("아이디 %s인 상품이 없습니다.\n", itemId);
}
근데 Item 에서 가격과 수량 즉, 매개변수 2개를 받는 생성자가 없다
그렇담 정의해주면 되지 !
package item;
public class Item {
private int id;
private String itemName;
private Integer price;
private int quantity;
public Item() {}
public Item(int id, String itemName, Integer price, int quantity) {
this.id = id;
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
// 가격과 수량 수정하는 생성자 정의 !
public void setPrQu(Integer price, int quantity) {
this.price = price;
this.quantity = quantity;
}
public int getId() {
return this.id;
}
public void showInfo() {
System.out.printf("%d\t%s\t\t%d\t%d\n", this.id, this.itemName, this.price, this.quantity);
}
}
그럼 코드는
// [3] 상품 수정 ===============================================
public void update() {
System.out.print("수정하기 원하는 아이디 입력하세요 ... ");
int itemId = ItemView.INPUT.nextInt();
Item searchInfo = findById(itemId);
if (searchInfo != null) {
System.out.print("가격, 수량을 입력하세요 ... ");
Integer price = ItemView.INPUT.nextInt();
int quantity = ItemView.INPUT.nextInt();
searchInfo.setPrQu(price, quantity);
System.out.println("상품 수정이 완료되었습니다.");
return;
}
System.out.printf("아이디 %s인 상품이 없습니다.\n", itemId);
}
'Language > JAVA' 카테고리의 다른 글
Java equals / HashCode 오버라이딩 하기 (0) | 2024.07.08 |
---|---|
JAVA 고급 (0) | 2024.07.03 |
JAVA 자바 활용 백엔드 개발 기초 연습 문제 - 예외 처리 throws 처리 되는 순서 (0) | 2024.04.25 |
JAVA 간단한 프로그램 - 동물병원 프로그램 ver2.1 (1) | 2024.04.25 |
JAVA 간단한 프로그램 - 동물병원 프로그램 ver1.1 (0) | 2024.04.25 |