전체코드 5개로 나누어서 리뷰!
-> 참고로 나눈 코드 5개를 모두 붙여야 정상 작동된다
** tistory에서 작성한 코드는 역슬래쉬(\)가 달러표시로 뜸.. ㅠ
- 입력한 숫자에 따라 메뉴를 조회하고 각 메뉴별 프로그램을 실행 -
1번: 상품등록(상품명, 가격, 수량)
2번: 상품목록
3번: 상품명 조회
4번: 상품수정
0번: 프로그램 종료
DecimalFormat 변수 = new DecimalFormat("형식"); |
- 데이터를 지정한 형식으로 표현해주는 메서드
- format 한 데이터는 문자취급한다 -> 지시자 %s로 사용
- decimalformat 아래 빨간 줄 눌러 Java.text로 가져와 사용한다.
Integer.parseInt(스트링 타입데이터); |
-숫자로 된 String(문자) 데이터를 int(정수) 타입의 데이터로 변환해주는 명령어이다.
- integer.parseint("1234") => 1234라는 문자를 1234 숫자로 변환한다.
package ex06;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
DecimalFormat df = new DecimalFormat("#,###만원");
DecimalFormat num = new DecimalFormat("#개");
String[]names = new String[10]
names[0] = "냉장고";
names[1] = "워시타워";
names[2] = "세탁기";
int[]price = new int[10];
price[0] = 300;
price[1] = 450;
price[2] = 550;
int[]qnt = new int[10];
qnt[0] = 5;
qnt[1] = 3;
qnt[2] = 7;
int count = 3;
1. 입력한 값을 받아오는 메서드 scanner와 문자열 데이터의 형식을 지정해주는 DecimalFormat을 가져온다.
2. df는 상품 가격의 형식타입, num은 상품개수의 형식타입을 지정한다.
3. 입력할 데이터를 넣기 위해 분류별 배열을 생성한다 (상품명, 가격, 개수)
* 이름은 문자라 String타입의 배열로, 가격과 개수는 숫자라 int타입의 배열로 생성
4. 위와 같이 각 데이터의 0~2번째에 미리 데이터를 입력시켜 놓으면 따로 데이터 입력 없이 메뉴를 실행시켜볼 수 있어 편리하다.
5. int count로 초기값을 3으로 설정한다 (입력해 놓은 데이터 이후로 새로운 값을 넣기 위해 3을 입력)
boolean run = true;
//1. 메뉴 목록 만들기
while(run) {
System.out.println("--------------------------------------------------");
System.out.println("1.판매등록|2.상품목록|3.상품명조회|4.판매수정|0.종료");
System.out.println("--------------------------------------------------");
System.out.print("조회할 번호>");
int menu = s.nextInt();s.nextLine();
switch(menu) {
case 0:
run = false;
break;
case 1://상품등록
System.out.print("상품이름>");
names[count] = s.nextLine();
System.out.print("상품가격>");
price[count] = s.nextInt();s.nextLine();
System.out.print("판매수량>");
qnt[count] = s.nextInt();s.nextLine();
count++;
System.out.println(count+"개 상품의 등록되었습니다.");
break;
6. 메뉴를 반복적으로 실행시키기 위해 while문을 사용하였고 선택한 메뉴별로 프로그래밍하기 위해 switch~case문 사용
7. sysout+space로 system.out.println를 호출해 메뉴판을 생성한다.
8. 조회할 메뉴번호 입력창을 나타내기 위해 sysout을 사용하고 s.nextLine()으로 입력받은 번호를 int타입 menu에 넣어
switch문의 case로 사용해 준다.
9. case는 0~4까지 생성, 0은 프로그램을 종료시키기 위해 run = false로 설정해주어 while문을 빠져나갈 수 있게 해 준다.
* switch 문에서는 default 경우를 제외한 모든 case에 break를 넣어줘야 다른 case가 중복실행되지 않는다.
10. case 1 : 상품등록
- sysout으로 각 입력창을 사용자에게 나타내기 위해 이름, 가격, 수량 창을 생성한다.
- 분류별 count번째에 입력한 데이터를 넣어주기 위해 s.nextInt()와 s.nextLine()을 사용한다.
- count의 초기값을 3으로 설정되어 있어 3번째 배열의 방부터 데이터가 입력되고 입력이 끝나면 count++해주어 다음 등록 시 새로운 방에 데이터를 넣을 수 있도록 해준다.
* count++된 수가 총 입력되어 있는 데이터의 개수임
case 2://상품목록
System.out.println("----------------------------------------------");
System.out.println("No\t상품이름\t상품가격\t판매수량\t판매금액");
System.out.println("----------------------------------------------");
for(int i=0; i<count; i++) {
System.out.printf("%d\t%s\t%s\t%s\t%s\n",i,names[i],df.format(price[i]),num.format(qnt[i]),df.format(price[i]*qnt[i]));
}
break;
11. case 2: 상품 목록
- sysout으로 상품목록 메뉴를 선택했을 때 구분별로 등록된 내용을 보여주기 위해 소메뉴 생성
- for문을 사용해 0부터 count-1번째까지 반복하여 목록들을 조회하고 sysout으로 출력해 준다.
* count는 배열에 들어간 데이터의 개수이고 배열의 인덱스는 0부터 count-1번째까지 있어 i < count라는 조건을 줌
- printf를 사용해 format할 형식과 데이터를 입력한다.
* 위에서 만들어놓은 decimalFormat형식을 부여하기 위해 지시자는 %s를 사용하며 해당 데이터에 변수.format()을 적용시킨다.
case 3://상품명조회
System.out.print("검색할 상품>");
String name = s.nextLine();
boolean find = false;
for(int i = 0; i<count; i++) {
if(name.equals(names[i])) {
int sum = price[i]*qnt[i];
System.out.printf("%s 가격: %s%n",names[i],df.format(price[i]));
System.out.printf("%s 판매개수: %s%n",names[i],num.format(qnt[i]));
System.out.printf("%s 판매액 :%s%n",names[i],df.format(sum));
find = true;
}
}
if(find==false) {
System.out.println(name+"은(는) 없는 상품입니다.");
}
break;
12. case3: 상품명 조회
- sysout으로 검색할 상품창을 사용자에게 나타내고 s.nextLine( )으로 입력창을 생성해 입력값을 name[] 배열변수에 담는다.
- for문을 사용해 0~count-1까지 반복하여 전체 목록을 조회하고 사용자가 입력한 해당 상품명을 찾는다
- 처음 false(정지) 상태에서 해당 상품명을 찾으면 목록을 출력하도록 boolean find의 초기값을 false로 둔다.
- if문을 사용해 name(입력한 이름)과 names[i] (목록에 존재하는 이름)을 비교하기 위해 equals메서드를 사용한다.
- 해당 상품명을 찾으면 find = true로 바꿔 목록을 출력
-if (find ==false) 경우로 없는 상품이라는 문구를 출력한다. *for문 밖에 생성해야 중복 실행되지 않는다!!
* 초기값을 true로 두면 찾지 못했을 경우를 출력할 수가 없다.
- 목록에 나오는 값에도 형식을 지정해주기 위해 decimalformat을 적용한다.
case 4: //상품수정
System.out.print("수정할 번호:");
int no = s.nextInt();s.nextLine();
//상품명 수정
System.out.print("[변경할 이름]%n"+names[no]+"->");
String newName = s.nextLine();
if(!newName.equals(""))names[no] = newName;
//가격 수정
System.out.print("[변경할 가격]%n"+price[no]+"->");
String newPrice = s.nextLine();
if(!newPrice.equals(""))price[no]=Integer.parseInt(newPrice);
//수량 수정
System.out.print("[변경할 수량]%n"+qnt[no]+"->");
String newQnt = s.nextLine();
if(!newQnt.equals(""))qnt[no] = Integer.parseInt(newQnt);
break;
default:
System.out.println("메뉴를 다시 선택해주세요.");
}
}//while문 종료
System.out.println("프로그램이 종료되었습니다.");
}
}
13. case4: 상품수정
- 수정할 상품 번호(배열 인덱스)를 s.next.int();s.nextLine()으로 입력받아 no변수에 담고 sysout으로 사용자에게 창을 보여준다.
- 상품명, 가격, 수량 별 수정할 내용에 대해 보여주기 위해 sysout으로 창을 생성하고 변경할 내용을 next메서드로 입력받아 각각 새로운 변수에 담아준다. (이름은 newName 가격은 newPrice 수량은 newQnt에)
- 새로운 값이 입력되었을 경우(공백""이 아닐 때)를 if문으로 비교하여 입력받은 수정 번호에 해당하는 배열의 인덱스 값을 새로 입력한 값으로 변경해 준다.
* 가격&수량의 배열은 int타입으로 지정되어 있기 때문에 case 2와 3에서 DecimalForat을 통해 String타입으로 변환된 데이터를 Interger parseInt()를 사용하여 int타입으로 다시 변환해 넣어준다.
*값을 입력하지 않았을 경우 엔터만 쳐도 break로 빠져나가기 때문에 기존 데이터가 변경되지 않고 그대로 남아있는다.
14. default는 없는 메뉴(0~4가 아닌 수)를 선택했을 경우이므로 "메뉴를 다시 선택해 주세요"문구를 입력하여 사용자에게 알려준다.
15. case 0을 선택했을 때 종료되는 문구를 sysout으로 출력해 준다. 이 문구는 while문 바깥에 작성해주어야 반복 실행되지 않는다.
'BE > Java [Servlet , Spring]' 카테고리의 다른 글
Java 차량 관리 프로그램 리뷰 - 클래스 생성하기(필드, 생성자, 메서드 오버로딩) (0) | 2023.01.09 |
---|---|
Java 배열의 합계 및 최대&최소 값 구하기 (Sum, Max, Min) (0) | 2023.01.09 |
Java 성적 입력 프로그램 리뷰 (참조 변수, 문자열 비교 equals) (0) | 2023.01.08 |
자바 배열(array) -배열 구조 및 합계 구하기 (0) | 2023.01.06 |
자바 조건문- if문, switch~case문 (0) | 2023.01.03 |