2025.1.3 처음에는 2일 복습하는 내용이다
package day006.class01;
//복습
public class Test01 {
public static void main(String[] args) {
int [] datas = new int[3];
//3가지 조건
for(int i=0;i<3;i++){
datas[i]=(i+1)*10;
}
for(int v : datas){
System.out.print(v + " ");
}
}
}
학생부 프로그램
package day006.student;
import java.util.Random;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
/* 학생부 프로그램은 무한루프로 진행, 종료 하려면 사용자가 원해야해서
* */
Scanner sc = new Scanner(System.in);
Random rand = new Random();
//배열 선언(학생부 내용 등록)
final int LEN=3; //학생부에 저장될 수 있는 최대 학생 수 상수화
int[] stuList = new int[LEN]; //학생부
int cnt = 0; //현재 학생부에 저장된 학생 수
while(true){
System.out.println("===== 학생부 프로그램 =====");
System.out.println("1. 전체출력");
System.out.println("2. 1등 출력");
System.out.println("3. 정보추가");
System.out.println("4. 정보변경");
System.out.println("0. 프로그램 종료");
System.out.println("========================");
System.out.print(">> ");
int action = sc.nextInt();
if(action == 0){ // 종료조건
System.out.println("프로그램을 종료합니다");
break;
}
else if (action == 1) { // 전체출력
// 현재 저장된 학생들의 점수정보를 출력
if(cnt<=0){ // UI/UX, 학생부에 학생이 없는 경우, ==0을 해도 되지만
//오류가 난 경우 -1이 될 수 있기에 <=이 더 낫다. 변수 차단
System.out.println("출력할 데이터가 없습니다.");
continue; //굳이 안 써도 되지만 continue를 쓰면 가독성이 좋아짐
// else를 안 써도 되기 때문이다.
}
for(int i=0; i<cnt; i++) { //stuList.length를 쓰면 안됨.
//학생부에 저장된 학생 수를 출력해야 하는데
//학생부의 크기를 출력하면 안 되기 때문이다
System.out.println((i+1) + "번 학생의 점수 : " + stuList[i] + "점");
}
System.out.println();
}
else if (action == 2) { // 1등 출력
// 다른 학생들과 비교해서 가장 높은 점수를 출력
// 오름차순으로 정렬하고 가장 뒤에 있는거를 뽑아내면 될 것 같음
if(cnt<=0){
System.out.println("출력할 데이터가 없습니다");
continue;
}
int max=stuList[0];
int maxIndex=0;
for(int i=1; i<cnt; i++){
if(max<stuList[i]){
max=stuList[i];
}
}
System.out.println("1등은 " + (maxIndex + 1) + "번 학생, " + max + "점 입니다.");
// for(int a=0; a<stuList.length-1; a++) {
// // Bubble sort
// for(int i=0;i<stuList.length-1;i++) { // 양옆 데이터끼리 비교하는 횟수
// if(stuList[i] > stuList[i+1]) {
// // 교환 알고리즘
// int tmp=stuList[i];
// stuList[i]=stuList[i+1];
// stuList[i+1]=tmp;
// }
// }
// }
}
else if (action == 3) { // 정보추가
if(cnt >= LEN) { //최대학생수만큼 저장된 상황이라면
System.out.println("학생부에 저장공간이 부족합니다.");
System.out.println("관리자에게 문의바랍니다.");
continue;
}
int score; //scope 이슈
while(true) {
// 사용자로부터 학생의 점수를 입력
System.out.print("추가할 학생의 점수 입력 : ");
score = sc.nextInt();
if(score >=0 && score <= 100){
break;
}
System.out.println("0~100점 사이만 입가능합니다!");
}
// 입력받은 점수 정보를 배열에 저장
stuList[cnt] = score;
cnt++; //한 명 더 입력 받았기 때문에 카운트 증가
// 저장완료! 안내
System.out.println("학생 정보 추가 완료!");
}
else if (action == 4) { // 정보변경
if(cnt <= 0){ // 학생부에 학생이 한명도 없다면
System.out.println("변경할 데이터가 없습니다");
continue;
}
// 정보변경할 학생의 번호를 입력받음
int num; //scope 이슈
while(true) { // 사용자로부터 입력을 받으면? 유효성 검사!
System.out.print("정보변경할 학생의 번호 입력 : ");
num = sc.nextInt();
if(num >= 1 && num <= cnt){ //입련 번호가 존재하는지 확인
break;
}
System.out.println("해당 번호의 학생은 존재하지 않습니다!");
}
// 어떤 점수로 변경할지 결정
// 랜덤으로 변경
int score;
while(true) {
score = rand.nextInt(101); // 0~100 중 랜덤으로 돌림
if (score != stuList[num-1]){ // 점수가 이전과 다르면
break;
}
}
stuList[num-1]=score;
// 정보 변경 완료 안내
System.out.println("학생 정보 변경 완료!");
}
else { //유효성 검사
System.out.println("잘못된 입력입니다! 다시 입력해주세요!");
}
}
}
}
쇼핑몰 프로그램
package day006.shopping;
import java.util.Scanner;
/*[쇼핑몰 프로그램]
상품은 3개 고정, 이미 추가된 상태
1. 재고가 모두 출력됨.
1번 상품 [2]개
2번 상품 [3]개
3번 상품 품절 << ☆
2. 상품을 선택
3번 상품은 품절입니다.
1번 상품을 구매하시겠습니까?
1. 네 2. 아니오
⇒ 1번 상품 [1]개
3. 상품 재고 추가
몇 번 상품 재고를 추가하시겠습니까? 3
3번 상품 현재 재고 : 0개
몇개 추가하시겠습니까? 5
⇒ 3번 상품 [5]개
자유롭게 코딩, CRUD 중에 무엇일지 주석으로 같이 작성*/
public class Test {
public static void main(String[] args) {
/* 스캐너 객체 생성
* 인덱스를 상품번호라 생각하고 인덱스에 해당하는 재고를 저장
* 배열[0]은 1개 배열[1]은 5개 배열[2]는 8개 이런식
* 배열[1]은 사과 이런거라고 생각하면 될 것 같음
* 그러면 배열 안에 [1, 5, 8] 이런식으로 저장되겠지
*
* 1. 재고를 전체 출력 - Read
* 상품이 없을 때 유효성 검사를 통해 에러 출력
* 재고가 있을 때 재고 전체를 출력
*
* 2. 상품 선택 - Read, Update
* 재고 1번 => [?]개 이런식으로 전부 보여주고 몇번 선택할래? 물어보기
* 0번 입력하면 뒤로 돌아가기 설정해주기
* 1번 선택하면 1번 상품을 구매하시겠습니까? 출력
* 1.네 2.아니오 에서 네 하면 1번 상품 [남아있는개수] 출력
* 이상한거 선택한다고 하면 없다고 처리 후 다시 선택하게 하기
*
* 몇개 구매할지 물어보고 재고보다 적거나 같으면 구매하게 하고
* 재고보다 많이 구매한다고 하면 재고는 [?]개 있습니다 다시 입력해주세요 처리
* 아니오 선택하면 처음으로 돌아가게 하기
* 이상한거 선택한다고 하면 없다고 처리 후 다시 선택하게 하기
* 구매한 만큼 기존 재고에서 차감
*
* 3. 상품 재고 추가 - Update
* 몇번 상품 재고를 추가하시겠습니까? 출력하고 몇개 입력받기
* 0번 입력하면 뒤로 돌아가기 설정해주기
* 상품 번호 잘못 입력하면 다시 입력받게 설정
* 추가한다고 해놓고 -10 이런거 입력하면 안되니까 범위 설정
* 추가했을 때 1조 개 1경 이렇게 써놓으면 에러나니까
* 범위 설정하고 1만개 넘으면 양이 너무 많습니다. 관리자에게 문의해주세요
* [?]번 상품 현재 재고 : ?개 이렇게 출력하고
* 몇개 추가하시겠습니까? 출력하고 몇개 입력받기
* 현재 [?]번 상품 현재 재고 : ?개 출력해주기
*
* 4. 종료하기
* 프로그램을 종료합니다 출력하고 종료시키기
* */
Scanner sc = new Scanner(System.in);
int[] datas = new int[3]; //1. 티셔츠 2. 바지 3. 패딩
datas[0] = 5; // 티셔츠
datas[1] = 5; // 바지
datas[2] = 5; // 패딩
while(true){
System.out.println("===== [쇼핑몰 프로그램] =====");
System.out.println("1. 재고 전체 출력");
System.out.println("2. 상품 구매");
System.out.println("3. 상품 재고 추가");
System.out.println("0. 종료하기");
System.out.println("==========================");
System.out.print("숫자를 입력해주세요 : ");
int action = sc.nextInt();
if(action == 0){ // 0. 종료하기
System.out.println("프로그램을 종료합니다.");
break;
}
else if (action == 1){ // 1. 재고 전체 출력
System.out.println("=========================="); //재고 출력 분리
if (datas == null) { // 상품이 없을 때
System.out.println("상품이 없습니다. 다시 입력해주세요");
break;
} else if (datas != null){ // 상품이 있으면
for(int i=0; i<datas.length; i++){ //재고 출력
System.out.println((i+1) + "번 상품 [" + datas[i] + "]개");
}
System.out.println("=========================="); //재고 출력 분리
System.out.println(); //줄바꿈
}
}
// 2. 상품 구매
else if (action == 2) {
while(true) { // 구매 메뉴를 위한 반복문 추가
System.out.println("=== 재고 목록 ===");
for(int i=0; i<datas.length; i++){ //재고 출력
System.out.println((i+1) + "번 상품 [" + datas[i] + "]개");
}
System.out.println();
System.out.println("몇 번을 구매하시겠습니까? (0: 이전 메뉴)");
System.out.print(">>");
int res = sc.nextInt(); // 몇 번 재고를 구매할지 입력받기
// 0 입력시 이전 메뉴로
if(res == 0) {
System.out.println("이전 메뉴로 돌아갑니다.");
break;
}
//유효한 번호 외에 다른거 입력했을 때 예외처리
if(res < 1 || res > 3){
System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
continue; // 상품 번호 입력으로 다시 돌아감
}
while(true) { //선택한 재고 불러옴
System.out.println(res + "번 상품을 구매하시겠습니까?\n1.네 2.아니오");
System.out.print("숫자를 입력해주세요 >> ");
int answer = sc.nextInt(); //몇개 구매할지 입력받음
if (answer == 2) { //아니오 누르면 다시 처음으로 돌아가게 함
break; // 구매 취소시 상품 선택으로 돌아감
} else if (answer == 1) { //네 눌렀을 때
System.out.print("몇개를 구매하시겠습니까?\n >> ");
int quantity = sc.nextInt();
//인덱스는 0부터 시작하므로 선택한 수에서 1을 뺀다
int index = res - 1;
if (quantity > datas[index] || quantity < 0) {
System.out.println("재고가 부족합니다. 다시 입력해주세요");
continue; //가독성 향상
} else if (quantity == 0) {
System.out.println("0개는 구매가 안 된 상태입니다. 다시 입력해주세요.");
continue; //가독성 향상
} else if (quantity <= datas[index]) {
datas[index] = datas[index] - quantity; // 실제 재고 차감
System.out.println(quantity + "개 구매완료.");
System.out.println("현재 " + res + "번 상품의 재고는 [" + datas[index] + "] 개 있습니다.");
break; // 반복문 탈출
}
} else {
System.out.println("숫자를 잘못 입력하셨습니다. 다시 입력해주세요");
continue; //가독성 향상
}
}
break; //반복문 탈출해서 메인 메뉴로 돌아가기
}
}
// 3. 상품 재고 추가
else if (action == 3) {
while(true) {
System.out.println("=== 상품 재고 ===");
// 현재 재고 상태 출력
for(int i = 0; i < datas.length; i++) {
System.out.println((i+1) + "번 재고 : " + datas[i] + "개");
}
System.out.print("몇 번 상품의 재고를 추가하시겠습니까? (0: 이전 메뉴)\n>> ");
int res = sc.nextInt();
// 이전 메뉴로 돌아가기
if(res == 0) {
break;
}
// 1번보다 작을 때, 3번보다 클 때 유효성 검사
if(res < 1 || res > 3) {
System.out.println("해당 번호는 없는 번호입니다. 다시 입력해주세요");
continue;
}
// 재고 몇개 추가할지 검사
System.out.print(res + "번 상품에 몇개의 재고를 추가할까요?\n>> ");
int quantity = sc.nextInt();
// 수량 유효성 검사
if(quantity < 0) { // 0보다 작을 때
System.out.println("음수는 입력할 수 없습니다. 다시 입력해주세요");
continue;
} else if(quantity == 0) { // 0을 입력했을 때
System.out.println("0은 추가되지 않습니다. 다시 입력해주세요");
continue;
} else if(quantity >= 100) { // 100보다 크거나 같을 때
System.out.println("창고가 모자랍니다. 관리자에게 문의해주세요");
continue;
}
// 재고 추가 및 결과 출력
datas[res - 1] += quantity; //-1을 해야 우리가 생각한 값이 나옴 인덱스는 0부터 시작
System.out.println(res + "번 상품의 현재 재고는 [" + datas[res - 1] + "]개 입니다.");
break; //반복문 탈출
}
}
else { //없는 번호 눌렀을 때 유효성 검사
System.out.println("잘못된 입력입니다! 다시 입력해주세요!");
}
}
}
}
'Back-End' 카테고리의 다른 글
| [JAVA] IDE와 CONSOLE을 사용해 포켓몬 프로그램 만들기 (1) | 2025.01.06 |
|---|---|
| [JAVA] 삽입정렬(insertion sort) (1) | 2025.01.04 |
| [JAVA] 기초 공부 5(배열, 정렬) (0) | 2025.01.02 |
| [JAVA] 문제 풀기(기초) (0) | 2025.01.01 |
| [JAVA] 기초 공부 4(문제풀기) (1) | 2024.12.31 |