자바 19일차

선장원·2021년 10월 28일

자바

목록 보기
22/24

19일차 (10/28)

오늘은 프로젝트 만들다가 끝났다
그래서 적을 내용이 없지만 프로젝트를 올려야지
하지만 내일은 더 없을 예정이다
왜냐하면 프로젝트 제출은 내일까지니까

주차장

DTO

차량DTO

  • 차량번호 차량종류 이름

가격DTO

  • 차량종류 시간당가격 (분당 가격으로 변경했다)

주차장DTO

  • 자리번호 입차시간(시간당/분당으로 변경) 차량DTO(차량번호 차량종류)

메서드

차량등록

  • 차량번호 차량종류 입력

가격등록(인터페이스 사용해봄)

  • 차량종류 입력
  • 시간당 가격입력

입차

  • 차량번호입력하면 자동으로 차량DTO가져온다
  • 자리번호 자동
  • 입차시간 입력(실시간으로 바꿔서 자동)
  • 주차장 자리(Service에서 내가 정함) 없으면 자리가 없습니다 출력

출차

  • 차량번호입력하면 자동으로 DTO가져온다
  • 현재시간 입력(이것도 실시간으로 바꿔서 자동)
  • 차량종류*(현시간-입차시간) 출력
  • 주차장map에서 지움

차량조회

  • 차량번호 입력
  • 현재시간 입력(이것도 실시간으로 변경)
  • 자리랑 현재금액 출력

전체 차량

  • 현재시간입력(실시간 자동)
  • 주차된 차량모두 출력
  • 금액도 출력

메인

		// 주자창 프로젝트
		Scanner sc = new Scanner(System.in);

		Map<Integer, CarDTO> cMap = new HashMap<>();
		Map<Integer, PriceInterface> pMap = new HashMap<>();
		Map<Integer, CarParkDTO> cpMap = new HashMap<>();

		CarParkService cps = new CarParkService();

		int choice = 0;
		boolean run = true;
		int parkNumber = 1;

		while (run) {
			System.out.println("-----------------------------------------------------------------");
			System.out.println("1.차량등록 | 2.가격등록 | 3.입차 | 4.출차 | 5.차량조회 | 6.전체 차량 | 7.종료");
			System.out.println("-----------------------------------------------------------------");
			System.out.print("선택 : ");
			choice = sc.nextInt();
			switch (choice) {

			case 1: {// 차량 등록
				cMap = cps.carJoin(cMap);
				break;
			}
			case 2: {// 가격 등록
				pMap = cps.priceJoin(pMap);
				break;
			}
			case 3: {// 입차
				cpMap = cps.carIn(cpMap, cMap, parkNumber);
				parkNumber++;
				break;
			}
			case 4: {// 출차
				cpMap = cps.carOut(cpMap, pMap);
				break;
			}
			case 5: {// 차량조회
				cps.carSearch(cpMap, pMap);
				break;
			}
			case 6: {// 전체차량
				cps.carList(cpMap, pMap);
				break;
			}
			case 7: {// 종료
				System.out.println("종료합니다.");
				run=false;
				break;
			}
			default: {
				break;
			}
			} // switch
		} // while

Service

	// 차량등록 가격등록 입차 출차 차량조회 전체차량조회

	// 차량등록
	// 메서드 이름 : carJoin
	// 리턴 타입 : Map<Integer, CarDTO>
	// 매개변수 : Map<Integer, CarDTO>
	// 차량종류 이름 입력
	// 차량번호 자동

	Map<Integer, CarDTO> carJoin(Map<Integer, CarDTO> cMap) {
		Scanner sc = new Scanner(System.in);
		System.out.println("1.경차 | 2.승용차 | 3.승합차");
		System.out.print("차량 종류 : ");
		int carType = sc.nextInt();
		sc.nextLine();
		System.out.print("이룸 : ");
		String name = sc.nextLine();
		CarDTO c = new CarDTO(carType, name);
		c.setCarNumber(cMap.size() + 1); // 1부터 삭제는 없으니 사이즈로 가자

		System.out.println(name + "님 환영합니다.");
		System.out.println("차량번호 : " + c.getCarNumber());

		cMap.put(cMap.size() + 1, c);
		return cMap;
	}

	// 가격등록
	// 메서드 이름 : priceJoin
	// 리턴 타입 : Map<Integer, PriceInterface>
	// 매개변수 : Map<Integer, PriceInterface>
	// 차량종류(키값) 가격 입력
	//

	Map<Integer, PriceInterface> priceJoin(Map<Integer, PriceInterface> pMap) {
		Scanner sc = new Scanner(System.in);
		System.out.println("1.경차 | 2.승용차 | 3.승합차");
		System.out.print("차량 종류 : ");
		int carType = sc.nextInt();

		System.out.print("분당 가격 : ");
		int price = sc.nextInt();

		PriceInterface p = null;
		if (carType == 1) { // 괜히 쓰는건가
			p = new Price1DTO();
			p.price(price);
		} else if (carType == 2) {
			p = new Price2DTO();
			p.price(price);
		} else if (carType == 3) {
			p = new Price3DTO();
			p.price(price);
		}

		pMap.put(carType, p);
		return pMap;
	}

	// 입차
	// 메서드 이름 : carIn
	// 리턴 타입 : Map<Integer, CarParkDTO>
	// 매개변수 : Map<Integer, CarDTO>, Map<Integer, CarParkDTO>
	// 차량번호(DTO) 입차시간 입력
	// 자리번호 자동

	Map<Integer, CarParkDTO> carIn(Map<Integer, CarParkDTO> cpMap, Map<Integer, CarDTO> cMap, int parkNumber) {
		Scanner sc = new Scanner(System.in);
		System.out.print("차량 번호 : ");
		int carNumber = sc.nextInt();

		SimpleDateFormat sdf = new SimpleDateFormat("m");

//		int time = sc.nextInt();
		int time = Integer.parseInt(sdf.format(new Date()));// 분 단위로 교체
		System.out.println("입차 시간 : "+time+"분");
		if (cpMap.size() < 3) { // 사이즈로 해두면 자리번호는 늘어나도 3개 이상 되면 막겠지
			CarParkDTO cp = new CarParkDTO(parkNumber, time, cMap.get(carNumber));

			System.out.println(cMap.get(carNumber).getName() + "님 환영합니다.");
			System.out.println("차량 번호 : " + carNumber);
			System.out.println("자리 번호 : " + parkNumber + " 입차 되었습니다.");
			cpMap.put(parkNumber, cp);
		} else {
			System.out.println("주차장에 자리가 없습니다.");
		}
		return cpMap;
	}

	// 출차
	// 메서드 이름 : carOut
	// 리턴 타입 : Map<Integer, CarParkDTO>
	// 매개변수 : Map<Integer, CarDTO>, Map<Integer, CarParkDTO>, Map<Integer,
	// PriceInterface>
	// 차량번호(DTO) 입차시간 입력
	// 자리번호 자동

	Map<Integer, CarParkDTO> carOut(Map<Integer, CarParkDTO> cpMap, Map<Integer, PriceInterface> pMap) {
		Scanner sc = new Scanner(System.in);
		System.out.print("자리 번호 : ");
		int parkNumber = sc.nextInt();

		SimpleDateFormat sdf = new SimpleDateFormat("m");

//		int time = sc.nextInt();
		int time = Integer.parseInt(sdf.format(new Date()));// 분 단위로 교체
		System.out.println("출차 시간 : "+time+"분");
		int inTime = cpMap.get(parkNumber).getTime();
		int price = pMap.get(cpMap.get(parkNumber).getCar().getCarType()).priceOut();

		int money = (time - inTime) * price;
		System.out.println("주차비 : " + money + "원 입니다.");

		cpMap.remove(parkNumber);
		return cpMap;
	}

	// 차량 조회
	// 메서드 이름 : carSearch
	// 리턴 타입 : void
	// 매개변수 :Map<Integer, CarParkDTO>, Map<Integer, PriceInterface>
	// 차량번호(DTO) 입차시간 입력
	// 자리번호 자동

	void carSearch(Map<Integer, CarParkDTO> cpMap, Map<Integer, PriceInterface> pMap) {
		Scanner sc = new Scanner(System.in);
		System.out.print("자리 번호 : ");
		int parkNumber = sc.nextInt();

		SimpleDateFormat sdf = new SimpleDateFormat("m");

//		int time = sc.nextInt();
		int time = Integer.parseInt(sdf.format(new Date()));// 분 단위로 교체
		System.out.println("현재 시간 : "+time+"분");

		int inTime = cpMap.get(parkNumber).getTime();
		int price = pMap.get(cpMap.get(parkNumber).getCar().getCarType()).priceOut();

		int money = (time - inTime) * price;
		System.out.println("현재 주차비 : " + money + "원 입니다.");

	}

	// 전체 차량 조회
	// 메서드 이름 : carList
	// 리턴 타입 : void
	// 매개변수 :Map<Integer, CarParkDTO>, Map<Integer, PriceInterface>
	// 차량번호(DTO) 입차시간 입력
	// 자리번호 자동

	void carList(Map<Integer, CarParkDTO> cpMap, Map<Integer, PriceInterface> pMap) {
		Scanner sc = new Scanner(System.in);
		SimpleDateFormat sdf = new SimpleDateFormat("m");

//		int time = sc.nextInt();
		int time = Integer.parseInt(sdf.format(new Date()));// 분 단위로 교체
		System.out.println("현재 시간 : "+time+"분");

		for (Integer parkNumber : cpMap.keySet()) {
			int inTime = cpMap.get(parkNumber).getTime();
			int price = pMap.get(cpMap.get(parkNumber).getCar().getCarType()).priceOut();

			int money = (time - inTime) * price;
			System.out.println("현재 자리 : " + parkNumber + " 입니다.");
			System.out.println("현재 주차비 : " + money + "원 입니다.");
		}

	}

Interface

	public void price (int price);
	
	public int priceOut ();

DTO는 너무 많으니 패스!

실시간으로 할 생각은 없었는데
제출하고나서 선생님께서 실시간으로 추가해 보자고 하셔서
실시간으로 변경했다

프로젝트 제출은 월요일까지라는데 내일은 뭐하지
하나 더 만들던가 백준 알고리즘 요즘 안풀었는데
문제를 풀어야겠다

자바 실시간 시간

실시간으로 년월일시간분초를 가져오는 클래스

SimpleDateFormat 클래스

선언

SimpleDateFormat sdf = new SimpleDateFormat("패턴방식");

패턴방식안에 자유롭게 자신이 패턴을 정할 수 있다

년 : y
월 : M (대문자)
일 : d

시 : h
분 : m
초 : s
오전/오후 : a

두개를 붙여쓰면 1의자리숫자가 01 으로 앞에 0이 붙어서 나온다

년도는 숫자에 따라 다르다
y = 2021
yy = 21
yyyy = 2021

profile
코딩도전기

0개의 댓글