자바(JAVA)/미니 프로젝트 & 기초 공부

Java 기초 다시 공부하기 3주차-놀이동산 입장권 계산 프로그램 구현, 주민등록번호 생성 프로그램 구현

개발학생 2024. 6. 22. 17:51
반응형

1. 놀이동산 입장권 계산 프로그램 구현

1) 조건

  • Scanner의 입력함수와 다중 조건문 사용
  • 입장료 할인은 중복 적용되지 않으며, 중복 시 가장 할인을 많이 받은 금액으로 정해짐
  • 나이-입장시간-국가유공자 여부-복지카드 여부 순으로 입력받기
  • 기본 입장료 10000원, 3세 미만이면 무료 입장, 국가유공자거나 복지카드가 있따면 일반 할인(8000원), 13세 미만이거나 17시 이후에 입장하면 특별 할인(4000원)
  • 출력 화면은 다음과 같이 구현(이미지 참고)

2) 코드

import java.util.Scanner;

// 자바 기초 미니과제 3: 놀이동산 입장권 계산 프로그램
public class MiniTask3 {
    // 입장료 계산 메서드
    private static String admissionFeeCal(int age, int time, String nationalMerit, String welfareCard) {
        // 기본 입장료
        String admissionFee = "10000";

        if (age < 3) {
            // 3세미만일 경우: 무료 입장
            admissionFee = "무료 입장";
        } else if (age < 13) {
            // 13세 미만일 경우: 특별 할인
            admissionFee = "4000";
        } else {
            // 그 외
            if (time >= 17) {
                // 17시 이후에 입장할 경우: 특별 할인
                admissionFee = "4000";
            } else if (time < 17){
                // 17시 이전에 입장할 경우:
                if (nationalMerit.equals("y") || welfareCard.equals("y")) {
                    // 국가유공자가 맞거나 복지카드가 있을 경우 일반 할인
                    admissionFee = "8000";
                }
            }
        }
        return admissionFee;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("[입장권 계산]");
        System.out.print("나이를 입력해 주세요.(숫자): ");
        int age = sc.nextInt();
        System.out.print("입장시간을 입력해 주세요.(숫자입력): ");
        int time = sc.nextInt();
        System.out.print("국가유공자 여부를 입력해 주세요.(y/n): ");
        String nationalMerit = sc.next();
        System.out.print("복지카드 여부를 입력해 주세요.(y/n): ");
        String welfareCard = sc.next();

        // 입장료 계산 메서드 호출
        String admissionFee = admissionFeeCal(age, time, nationalMerit, welfareCard);
        System.out.println("입장료: " + admissionFee);
    }
}

3) 출력 결과

2. 주민등록번호 생성 프로그램 구현

1) 조건

  • Scanner의 입력함수, 조건문, Random 클래스 사용
  • 2020년부터 변경된 주민번호 생성 조건 적용: 생년, 월, 일, 성별, 임의의 번호로 생성(임의 번호 범위는 1~999999사이의 값으로 설정, 생년은 2020년도 이후로 입력한다고 가정)
  • 임의 번호는 Random 함수의 nextInt() 함수를 통해 생성

  • 출력 화면은 다음과 같이 구현(이미지 참고)

2) 코드

import java.util.Random;
import java.util.Scanner;

// 자바 기초 미니과제 4: 주민등록번호 생성 프로그램
public class MiniTask4 {
    // 주민등록번호 계산 메서드
    public static String residentRegNumCal (String yearOfBirth, String monthOfBirth, String dayOfBirth, String gender) {
        // 주민번호 맨 앞 두자리
        String yearTwoDigits = yearOfBirth.substring(yearOfBirth.length() - 2);

        // 주민번호 성별 자리
        if (gender.equals("m")) {
            gender = "3";
        } else if (gender.equals("f")) {
            gender = "4";
        }

        // 주민번호 마지막 6자리 임의번호 생성
        Random random = new Random();
        int lowerBound = 1;
        int upperBound = 999999;
        int randomNumber = random.nextInt(upperBound - lowerBound + 1) + lowerBound; // 1에서 999999 사이의 무작위 정수 생성
        String formattedNumber = String.format("%06d", randomNumber); // 6자리로 포맷팅
				
				// 주민번호 전체
        String residentRegNum = yearTwoDigits + monthOfBirth + dayOfBirth + "-" + gender + formattedNumber;

        return residentRegNum;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("[주민등록번호 계산]");
        System.out.print("출생년도를 입력해 주세요.(yyyy): ");
        String yearOfBirth = sc.next();
        System.out.print("출생월을 입력해 주세요.(mm): ");
        String monthOfBirth = sc.next();
        System.out.print("출생일을 입력해 주세요.(mm): ");
        String dayOfBirth = sc.next();
        System.out.print("성별을 입력해 주세요.(m/f): ");
        String gender = sc.next();

        // 주민등록번호 계산 메서드 호출
        String residentRegNum = residentRegNumCal(yearOfBirth, monthOfBirth, dayOfBirth, gender);
        System.out.println("\n" + residentRegNum);
    }
}

3) 출력 결과

3. 회고

사실 회고는 구현 코드 당 하나씩 작성했었는데,

이번엔 두 코드 모두 메서드에 함수까지 이것저것 잘 활용해서 너무 쉽게 코드를 짜버려서 적을 말이 없다... 이게 맞나 싶을 정도다.

그저 지난 몇 년간 혼자 자바와 JSP로 웹 개발하기, AWS 서버 구축하기로 삽질했던 경험이 정말 큰 도움이 된 것 같다.

그 덕분에, 뭔가 오류나 이해가 안 되는 부분이 생겨도 30분 만에 구글링이나 chatGPT로 해결할 수 있게 된 것 같다... 이번 코드는 구글과 챗지피의 도움 정도만 받았고 거의 다 직접 짰기에 굉장히 뿌듯했다... ㅎㅎ

반응형