[문제]
#상품 관리 프로그램 만들기
## 클래스 정보
1. ProductDTO
- 필드 : 상품이름(name), 가격(price), 재고 수량(quantity)
- 생성자 : 전체 필드 초기화 생성자
- 메서드 : getter와 setter, toString
2. ProductDAO
- 필드 : List<ProduectDTO> products
- 생성자 : 기본생성자에서 리스트를 초기화
- 메서드 :
1. 상품 추가 메서드 : void addProduct(ProductDTO productDTO)
필드의 리스트에 새 상품 추가
2. 상품 조회 메서드 : void displayProduct()
리스트의 모든 상품 출력
3. 상품 삭제 메서드 : void deleteProduct(String name)
상품 이름으로 특정 상품 삭제
4. 상품 검색 : ProductDTO searchProduct(String name)
상품 이름으로 검색하여 특정 상품 정보 반환하기
존재하지 않으면 null반환
[설계]
1.productDTO,productDAO 클래스 생성
2.상품 추가, 상품조회, 상품삭제, 상품 검색 메서드 테스트
3.메인클래스에 프로그램 생성
[풀이]
1.ProductDTO 클래스 생성
- 필드 : 상품이름(name), 가격(price), 재고 수량(quantity)
private String name;
private int price;
private int quantity;
- 생성자 : 전체 필드 초기화 생성자
public ProductDTO(String name, int price, int quantity) {
this.name = name;
this.price = price;
this.quantity = quantity;
}
+자동 생성 기능을 사용했다
- 메서드 : getter와 setter, toString
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;
}
@Override
public String toString() {
return "ProductDTO [name=" + name + ", price=" + price + ", quantity=" + quantity + "]";
}
}
+자동생성기능을 사용했다
2.ProductDAO클래스 생성
- 필드 : List products
static List<ProductDTO> product;
+ProductDTO의 타입을 가진 리스트 product 선언
- 생성자 : 기본생성자에서 리스트를 초기화
public ProduectDAO() {
product=new ArrayList<ProductDTO>();
}
+product리스트를 배열과 똑같이 인덱스를 가지고 있는 ArrayList객체로 선언해주었다
- 메서드 :
1. 상품 추가 메서드 : void addProduct(ProductDTO productDTO)
필드의 리스트에 새 상품 추가
public void addProduct(ProductDTO productDTO) {
product.add(productDTO);
System.out.println("상품이 추가 되었습니다");
}
+매개변수를 Prodtuct타입인 productDTO 인자를 받아 .add 기능을 이용해 productList에 넣어주었다
+추가되었는지 확실히 보기 위해 추가되었다는 문자열을 출력하도록 했다
2. 상품 조회 메서드 : void displayProduct()
리스트의 모든 상품 출력
public void displayProduct() {
System.out.println(product);
}
+이미 DTO클래스에서 toString재정의 해두었기 때문에 간단히 product를 출력하도록 했다
3. 상품 삭제 메서드 : void deleteProduct(String name)
상품 이름으로 특정 상품 삭제
void deleteProduct(String name) {
for(ProductDTO produect: product) {
if(product.getName().equals(name)) {
product.remove(produect);
System.out.println(name+"이 삭제되었습니다");
return;
}
System.out.println("상품이 존재하지 않습니다")
}
+반복문for문을 이용하여 메서드가 product의 모든 변수를 돌면서 실행할 수 있도록 했고, 그 안에서 if문을 이용해 product 안에 있는 name과 입력받은 name이 같은지 확인해 맞다면 .remove기능을 이용해 product리스트에서 삭제한 후 삭제됐는지 눈으로 확인하기 위해 삭제되었다는 문자열 출력하고 for문을 빠져나오라고 return을 걸어주었다
+잘못 입력한 경우를 대비해 상품이 존재하지 않다는 문자열을 출력하도록 해주었다(상품명이 동일하지 않을 경우 for문이 실행되지 않을 것이기 때문에)
4. 상품 검색 : ProductDTO searchProduct(String name)
상품 이름으로 검색하여 특정 상품 정보 반환하기
존재하지 않으면 null반환
ProductDTO searchProduct(String name) {
for(ProductDTO pro :product) {
if(pro.getName().equals(name)) {
return pro;
}
}return null;
}
+제거 메서드랑 비슷한 맥락으로 만들었으나 제거가 아닌 정보 반환이 목적이기에 상품명이 동일하기에 리턴으로 값을 반환시켜주었다
++문제가 반환만 명시되어있어 문제에 맞게 반환만 했으나 상품정보를 찾지못했습니다 같은 문자열을 추가하는 것도 좋은 방법일것 같다
2.기능 테스트
static void addProductTest() {
ProductDTO productDTO=new ProductDTO("칫솔", 1500, 12);
ProductDTO productDTO2=new ProductDTO("칫솔3", 15020, 122);
ProductDAO proDao = new ProductDAO();
proDao.addProduct(productDTO);
proDao.addProduct(productDTO2);
proDao.displayProduct();
}
static void deleteTast() {
ProductDTO productDTO=new ProductDTO("칫솔", 1500, 12);
ProductDTO productDTO2=new ProductDTO("칫솔3", 15020, 122);
ProductDAO proDao = new ProductDAO();
proDao.addProduct(productDTO);
proDao.addProduct(productDTO2);
proDao.deleteProduct("칫솔");
proDao.displayProduct();
}
static void searchProductTest() {
ProductDTO productDTO=new ProductDTO("칫솔", 1500, 12);
ProductDTO productDTO2=new ProductDTO("칫솔3", 15020, 122);
ProductDAO proDao = new ProductDAO();
proDao.addProduct(productDTO);
proDao.addProduct(productDTO2);
System.out.println(proDao.searchProduct("칫솔12"));
}
+임의로 두가지의 상품을 지정해 테스트 해보았다
+proDao라는 변수에 ProductDAO클래스의 객체를 초기화 시켜 proDao를 사용해 기능들을 꺼내 쓸 수 있게 만들었다
+모두 문제 없이 돌아가는 모습이었다
3.Main클래스에 프로그램 구현
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ProductDAO produectDAO = new ProductDAO();
Scanner sc = new Scanner(System.in);
String msg = """
1.상품추가
2.상품 리스트 조회
3.상품 삭제
4.상품 검색
5.시스템 종료
입력>>""";
while (true) {
System.out.println(msg);
int choice = sc.nextInt();
if (choice == 5) {
System.out.println("프로그램을 종료합니다");
break;
} else if (choice == 1) {
System.out.print("상품명 입력:");
String name = sc.next();
System.out.print("가격 입력:");
int price = sc.nextInt();
System.out.print("재고 입력:");
int quantity = sc.nextInt();
ProductDTO produectDTO = new ProductDTO(name, price, quantity);
produectDAO.addProduct(produectDTO);
} else if (choice == 2) {
produectDAO.displayProduct();
} else if (choice == 3) {
System.out.print("삭제할 상품명 입력:");
String proname = sc.next();
produectDAO.deleteProduct(proname);
} else if (choice == 4) {
System.out.print("검색할 상품명 입력:");
String searchName = sc.next();
ProductDTO search = produectDAO.searchProduct(searchName);
System.out.println(search);
}
}
}
}
+직접 입력을 받기 위해 Scanner 클래스 호출시켜 각 메뉴에 정수를 부여해 정수를 입력받았다
+while(true)를 사용해 무한루프 돌아 한 기능사용이 끝나도 프로그램이 계속 돌아갈 수 있도록 하였다
+if문에 하나씩 조건을 달아 기능이 돌아가도록 했다 5번인 시스템 종료를 입력하면 while문을 탈출할 수 있도록 break;를 걸어주었다
+if문 대신 swiltch문을 사용할 수도 있을 거 같다
[느낀점]
하나하나 배워 하나씩 써볼때랑은 달리 여러가지를 복합적으로 사용해야하는 상황이 오니 어떤 것을 사용해야 현명할지 고민하는 시간이 길어졌지만 그만큼 더 재밌어졌다.
코드를 짜는 것은 어느정도 늘어가고 있는거 같은데 읽는법은 아직 제자리 걸음인거 같아 해석하는 연습도 해야될 거 같다
'연습기록 > JAVA' 카테고리의 다른 글
[JAVA 코딩테스트] 문자열 겹쳐쓰기 (2) | 2024.11.15 |
---|---|
[JAVA코딩테스트] 홀짝에 따라 다른 값 반환하기 (0) | 2024.11.15 |
[JAVA]캐스팅 연습-도형 넓이 구하는 프로그램 생성 (0) | 2024.10.29 |
[JAVA]클래스 연습-학생의 정보를 저장하는 클래스 생성 (1) | 2024.10.24 |
[JAVA]class연습 - 도서관 책대여/반납 프로그램 만들어보기 (0) | 2024.10.19 |