ㄴ 개인 프로젝트에 적용
ㄴ MemberHandler => ItemHandler
ㄴ Member => Item
개인 프로젝트 - 마트 물품 관리 시스템
Item 클래스 생성
ㄴ 이는 vo 라는 패키지를 만들어서 안에 넣는 것이 좋음
Item.java
public class Item {
public int no; // no를 저장할 변수
public String name; // name을 저장할 변수
public String price; // price를 저장할 변수
public String type; // type을 저장할 변수
}
ㄴ Item 클래스를 이용하여 변수선언 부분을 간단히 바꿀 수 있음
ㄴ 여기서 주의할 점은 변수 선언 시 public 으로 해줘야 다른 클래스에서 참조가 가능하다는 것임
ItemHandler 수정
변수 선언 부분 수정
ItemHandler.java
static final int MAX_SIZE = 100;
static int[] no = new int[MAX_SIZE];
static String[] name = new String[MAX_SIZE];
static String[] price = new String[MAX_SIZE];
static String[] type = new String[MAX_SIZE];
static int itemId = 1;
static int length = 0;
=> 변수 선언 부분을 아래와 같이 변경
static final int MAX_SIZE = 100;
static Item[] items = new Item[MAX_SIZE];
static int itemId = 1;
static int length = 0;
ㄴ static Item[] items = new Item[MAX_SIZE]; 코드 추가
inputItem() 메서드 수정
public static void inputItem() {
if (!available()) {
System.out.println("더이상 입력할 수 없습니다!");
return;
}
name[length] = Prompt.inputString("물품 이름? ");
price[length] = Prompt.inputString("물품 가격? ");
// System.out.print("한정 판매(true/false)? ");
// limited_Sale[i] = scanner.nextBoolean();
type[length] = inputType("0");
no[length] = itemId++;
length++;
}
=> 아래와 같이 변경
public static void inputItem() {
if (!available()) {
System.out.println("더이상 입력할 수 없습니다!");
return;
}
Item item = new Item();
item.name = Prompt.inputString("물품 이름? ");
item.price = Prompt.inputString("물품 가격? ");
item.type = inputType("0");
item.no = itemId++;
// 위에서 만든 Item 인스턴스의 주소를 잃어버리지 않게 레퍼런스 배열에 담기
items[length++] = item;
}
ㄴ Item item = new Item(); 코드 추가
ㄴ name[length] => item.name
ㄴ price[length] => item.price
ㄴ type[length] => item.type
ㄴ no[length] => item.no
ㄴ length++; => items[length++] = item; // 위에서 만든 Item 인스턴스의 주소를 잃어버리지 않게 레퍼런스 배열(변수선언 부분에서 만든 items)에 담기
printItems() 메서드 수정
public static void printItems() {
System.out.println("---------------------------------------------------------------------");
System.out.println("물품 번호, 물품 이름, 물품 가격, 종류");
System.out.println("---------------------------------------------------------------------");
for (int i = 0; i < length; i++) {
System.out.printf("%d, %s, %s, %s\n", no[i], name[i], price[i], type[i]);
}
}
=> 아래와 같이 변경
public static void printItems() {
System.out.println("---------------------------------------------------------------------");
System.out.println("물품 번호, 물품 이름, 물품 가격, 종류");
System.out.println("---------------------------------------------------------------------");
for (int i = 0; i < length; i++) {
Item item = members[i];
System.out.printf("%d, %s, %s, %s\n",
item.no, item.name, item.price, item.type);
}
}
ㄴ Item item = Items[i]; 코드 추가
ㄴ no[i] => item.no
ㄴ name[i] => item.name
ㄴ price[i] => item.price
ㄴ type[i] => item.type
viewItem() 메서드 수정
public static void viewItem() {
String itemNo = Prompt.inputString("물품 번호? ");
for (int i = 0; i < length; i++) {
if (no[i] == Integer.parseInt(itemNo)) {
System.out.printf("물품 이름: %s\n", name[i]);
System.out.printf("물품 가격: %s\n", price[i]);
System.out.printf("물품 종류: %s\n", type[i]);
return;
}
}
System.out.println("해당 번호의 물품이 없습니다!");
}
=> 아래와 같이 변경
public static void viewItem() {
String itemNo = Prompt.inputString("물품 번호? ");
// 입력 받은 번호를 가지고 배열에서 해당 회원을 찾아야 함
for (int i = 0; i < length; i++) {
if (item.no == Integer.parseInt(itemNo)) {
// i 번째 항목에 저장된 회원 정보 출력
Item item = items[i];
System.out.printf("물품 이름: %s\n", item.name);
System.out.printf("물품 가격: %s\n", item.price);
System.out.printf("물품 종류: %s\n", item.type);
return;
}
}
System.out.println("해당 번호의 물품이 없습니다!");
}
ㄴ Item item = Items[i]; 코드 추가
ㄴ no[i] => item.no
ㄴ name[i] => item.name
ㄴ price[i] => item.price
ㄴ type[i] => item.type
updateItem() 메서드 수정
public static void updateItem() {
String itemNo = Prompt.inputString("물품 번호? ");
for (int i = 0; i < length; i++) {
if (no[i] == Integer.parseInt(itemNo)) {
System.out.printf("물품 이름(%s)? ", name[i]);
name[i] = Prompt.inputString("");
System.out.printf("물품 가격(%s)? ", price[i]);
price[i] = Prompt.inputString("");
type[i] = inputType(type[i]);
return;
}
}
System.out.println("해당 번호의 물품이 없습니다!");
}
=> 아래와 같이 수정
public static void updateItem() {
String itemNo = Prompt.inputString("물품 번호? ");
for (int i = 0; i < length; i++) {
Item item = items[i];
if (item.no == Integer.parseInt(itemNo)) {
System.out.printf("물품 이름(%s)? ", item.name);
item.name = Prompt.inputString("");
System.out.printf("물품 가격(%s)? ", item.price);
item.price = Prompt.inputString("");
item.type = inputType(item.type);
return;
}
}
System.out.println("해당 번호의 물품이 없습니다!");
}
ㄴ Item item = Items[i]; 코드 추가
ㄴ no[i] => item.no
ㄴ name[i] => item.name
ㄴ price[i] => item.price
ㄴ type[i] => item.type
deleteItem() 메서드 수정
public static void deleteItem() {
// 삭제하려는 물품의 정보가 들어있는 인덱스 알아내기
int itemNo = Integer.parseInt(Prompt.inputString("물품 번호? "));
int deletedIndex = indexOf(itemNo);
if (deletedIndex == -1) {
System.out.println("해당 번호의 물품이 없습니다!");
return;
}
// 만약 삭제하려는 항목이 마지막 인덱스의 항목이라면 마지막 인덱스의 값만 0으로 초기화 시키기
// 그 밖에는 해당 인덱스부터 반복하면서 앞 인덱스의 값을 당겨오기
for (int i = deletedIndex; i < length - 1; i++) {
no[i] = no[i + 1];
name[i] = name[i + 1];
price[i] = price[i + 1];
type[i] = type[i + 1];
}
// 배열의 맨 마지막 초기화
no[length - 1] = 0;
name[length - 1] = null;
price[length - 1] = null;
type[length - 1] = null;
length--;
System.out.println("삭제했습니다.");
return;
}
=> 아래와 같이 수정
public static void deleteItem() {
// 삭제하려는 물품의 정보가 들어있는 인덱스 알아내기
int itemNo = Integer.parseInt(Prompt.inputString("물품 번호? "));
int deletedIndex = indexOf(itemNo);
if (deletedIndex == -1) {
System.out.println("해당 번호의 물품이 없습니다!");
return;
}
// 만약 삭제하려는 항목이 마지막 인덱스의 항목이라면 마지막 인덱스의 값만 0으로 초기화 시키기
// 그 밖에는 해당 인덱스부터 반복하면서 앞 인덱스의 값을 당겨오기
for (int i = deletedIndex; i < length - 1; i++) {
items[i] = items[i + 1];
}
// 배열의 맨 마지막 초기화
items[length - 1] = null;
length--;
System.out.println("삭제했습니다.");
return;
}
ㄴ 여기서 items[length - 1 ] = null; length--; 는 하나로 만들 수 있음
=> items[--length] = null;
// 배열의 맨 마지막 초기화
items[length - 1] = null;
length--;
===========================
items[--length] = null;
IndexOf() 메서드 수정
private static int indexOf(int itemNo) {
for (int i = 0; i < length; i++) {
if (no[i] == itemNo) {
return i;
}
}
return -1;
}
=> 아래와 같이 수정
private static int indexOf(int itemNo) {
for (int i = 0; i < length; i++) {
Item item = items[i];
if (item.no == itemNo) {
return i;
}
}
return -1;
}
ㄴ Item items = items[i]; 코드 추가
ㄴ no[i] => item.no
총정리
App.java
import bitcamp.report.handler.itemHandler;
import bitcamp.util.Prompt;
public class App {
public static void main(String[] args) {
printTitle();
printMenu();
while (true) {
String menuNo = Prompt.inputString("메인> ");
if (menuNo.equals("6")) {
break;
} else if (menuNo.equals("menu")) {
printMenu();
} else if (menuNo.equals("1")) {
itemHandler.inputItem();
} else if (menuNo.equals("2")) {
itemHandler.printItems();
} else if (menuNo.equals("3")) {
itemHandler.viewItem();
} else if (menuNo.equals("4")) {
itemHandler.updateItem();
} else if (menuNo.equals("5")) {
itemHandler.deleteItem();
} else {
System.out.println(menuNo);
}
}
Prompt.close();
}
static void printMenu() {
System.out.println("1. 물품 등록");
System.out.println("2. 물품 목록");
System.out.println("3. 물품 조회");
System.out.println("4. 물품 변경");
System.out.println("5. 물품 삭제");
System.out.println("6. 종료");
}
static void printTitle() {
System.out.println("마트 물품 관리 시스템");
System.out.println("---------------------------------------------------------------------");
}
}
Item.java
public class Item {
public int no;
public String name;
public String price;
public String type;
}
ItemHandler.java
import bitcamp.report.vo.Item;
import bitcamp.util.Prompt;
public class itemHandler {
static final int MAX_SIZE = 100;
static Item[] items = new Item[MAX_SIZE];
static int itemId = 1;
static int length = 0;
static final String FOOD = "식료품";
static final String HOUSEHOLD_SUPPLIES = "생활용품";
static final String CLOTHES = "의류";
static final String HOME_APPLIANCES = "가전제품";
static final String LIVING = "리빙";
public static void inputItem() {
if (!available()) {
System.out.println("더이상 입력할 수 없습니다!");
return;
}
Item item = new Item();
item.name = Prompt.inputString("물품 이름? ");
item.price = Prompt.inputString("물품 가격? ");
item.type = inputType("0");
item.no = itemId++;
// 위에서 만든 Item 인스턴스의 주소를 잃어버리지 않게 레퍼런스 배열에 담기
items[length++] = item;
}
public static void printItems() {
System.out.println("---------------------------------------------------------------------");
System.out.println("물품 번호, 물품 이름, 물품 가격, 종류");
System.out.println("---------------------------------------------------------------------");
for (int i = 0; i < length; i++) {
Item item = items[i];
System.out.printf("%d, %s, %s, %s\n",
item.no, item.name, item.price, item.type);
}
}
public static void viewItem() {
String itemNo = Prompt.inputString("물품 번호? ");
for (int i = 0; i < length; i++) {
Item item = items[i];
if (item.no == Integer.parseInt(itemNo)) {
System.out.printf("물품 이름: %s\n", item.name);
System.out.printf("물품 가격: %s\n", item.price);
System.out.printf("물품 종류: %s\n", item.type);
return;
}
}
System.out.println("해당 번호의 물품이 없습니다!");
}
public static void updateItem() {
String itemNo = Prompt.inputString("물품 번호? ");
for (int i = 0; i < length; i++) {
Item item = items[i];
if (item.no == Integer.parseInt(itemNo)) {
System.out.printf("물품 이름(%s)? ", item.name);
item.name = Prompt.inputString("");
System.out.printf("물품 가격(%s)? ", item.price);
item.price = Prompt.inputString("");
item.type = inputType(item.type);
return;
}
}
System.out.println("해당 번호의 물품이 없습니다!");
}
private static String inputType(String type) {
String label;
if (type == "0") {
label = "물품 종류?\n";
} else {
label = String.format("물품 종류(%s)?\n", type);
}
loop: while (true) {
String typeNo = Prompt.inputString(label +
" 1. 식료품\n" +
" 2. 생활용품\n" +
" 3. 의류\n" +
" 4. 가전제품\n" +
" 5. 리빙\n" +
"> ");
switch (typeNo) {
case "1":
return FOOD;
case "2":
return HOUSEHOLD_SUPPLIES;
case "3":
return CLOTHES;
case "4":
return HOME_APPLIANCES;
case "5":
return LIVING;
default:
System.out.println("무효한 번호입니다.");
}
}
}
public static void deleteItem() {
// 삭제하려는 물품의 정보가 들어있는 인덱스 알아내기
int itemNo = Integer.parseInt(Prompt.inputString("물품 번호? "));
int deletedIndex = indexOf(itemNo);
if (deletedIndex == -1) {
System.out.println("해당 번호의 물품이 없습니다!");
return;
}
// 만약 삭제하려는 항목이 마지막 인덱스의 항목이라면 마지막 인덱스의 값만 0으로 초기화 시키기
// 그 밖에는 해당 인덱스부터 반복하면서 앞 인덱스의 값을 당겨오기
for (int i = deletedIndex; i < length - 1; i++) {
items[i] = items[i + 1];
}
// 배열의 맨 마지막 초기화
items[length - 1] = null;
length--;
System.out.println("삭제했습니다.");
return;
}
private static int indexOf(int itemNo) {
for (int i = 0; i < length; i++) {
Item item = items[i];
if (item.no == itemNo) {
return i;
}
}
return -1;
}
public static boolean available() {
return length < MAX_SIZE;
}
}
Prompt.java
import java.util.Scanner;
public class Prompt {
static Scanner scanner = new Scanner(System.in);
public static String inputString(String title) {
System.out.print(title);
return scanner.nextLine();
}
public static int inputInt(String title) {
// System.out.print(title);
// return scanner.nextLine();
return Integer.parseInt(inputString(title));
}
public static void close() {
scanner.close();
}
}
'네이버클라우드 > JAVA 웹 프로그래밍' 카테고리의 다른 글
JAVA 13일차 (2023-06-09) 자바 기초 DAY11_국영수 성적 테스트 만들기 (0) | 2023.06.09 |
---|---|
JAVA 13일차 (2023-06-09) 자바 기초 DAY11 (0) | 2023.06.09 |
JAVA 12일차 (2023-06-08) 자바 기초 DAY10 (0) | 2023.06.08 |
JAVA 11일차 (2023-06-07) 자바 기초 DAY9_개인프로젝트 - 마트 물품 관리 시스템 (0) | 2023.06.07 |
JAVA 10일차 (2023-06-05) 자바 기초 DAY8 (0) | 2023.06.06 |