728x90
오늘은 피드백을 반영해 기존 코드를 굉장히 많이 고쳤다.
더보기
Kioskmain.kt
package com.example.week3_homework
fun main() {
val ordered = mutableListOf<Order>()// 주문한 메뉴의 정보가 있는 Order 클래스
val category = MainCategory()
val billList = BillList(ordered)
println("가진 돈을 입력하세요. 오류 발생 시 $ 100.0이 자동으로 입력됩니다.(소숫점 한자리까지)")
var money = readln().toDoubleOrNull() ?: 100.0
println("Welcome to Just Pizzeria")
// 외부 반복문
while (true) {
// category
category.printCategory(money)
val menuType: MenuType = when (category.getCategory()) {
0 -> {
println("프로그램을 종료합니다.")
break
}
1 -> PizzaMenu()
2 -> DrinkMenu()
3 -> SideMenu()
9 -> {
billList.printBill()
continue
}
else -> continue
}
menuType.printMenu()
val menuNum = menuType.getMenu()
if (menuNum == 0) continue
else ordered.add(menuType.takeNum(menuNum))
if (menuType.nextOrder()) continue
billList.printBill()
when (billList.getNumFun()) {
1 -> {
money = billList.purchaseFun(money, ordered.sumOf { it.totalPrice })
ordered.clear()
}
2 -> {
ordered.clear()
}
3 -> {
println("처음으로 돌아갑니다.")
}
}
}
}
중첩되어있던 반복문을 제거하고 클래스의 메서드 내부에서 예외처리를 하는 것으로 바꾸었다.
또한 이번에 Lv5를 시도해보았다.
더보기
KioskMain.kt
package com.example.week3_homework
import java.time.LocalTime
import kotlin.concurrent.thread
// 예외처리 대부분 클래스로 이관
fun main() {
val ordered = mutableListOf<Order>()// 주문한 메뉴의 정보가 있는 Order 클래스
val category = MainCategory()
val billList = BillList(ordered)
var kioskFinished = false // 주문 대기수 thread 종료용
println("가진 돈을 입력하세요. 오류 발생 시 $ 100.0이 자동으로 입력됩니다.(소숫점 한자리까지)")
var money = readln().toDoubleOrNull() ?: 100.0
println("Welcome to Just Pizzeria")
// 돈 입력할 때 까지 thread 실행 안함
val kioskThread = thread(false) {
// 키오스크 기능 전체 반복문
while (true) {
// category 선택하기
category.printCategory(money)
// 아래 menuType은 스튜디오에서 추천해서 바꿔본 선언방식
val menuType = when (category.getCategory()) {
0 -> {
kioskFinished = true
break
}
1 -> {
PizzaMenu()
}
2 -> {
DrinkMenu()
}
3 -> {
SideMenu()
}
9 -> {
billList.printBill()
continue
}
// 예외처리를 getCategory 메서드에서 했지만 외부에서는 그것을 알 방법이 없으니 else문을 작성하여야 레드라인이 안나온다
else -> {
continue
}
}
//해당 카테고리의 메뉴 출력 후 번호 및 개수 입력 받기
menuType.printMenu()
val menuNum = menuType.getMenu()
// 0 입력 시 처음화면으로, 다른 숫자 입력 시 주문목록에 추가
if (menuNum == 0) continue
else ordered.add(menuType.takeNum(menuNum))
// 추가 주문 여부 확인
if (menuType.nextOrder()) continue
// 주문 목록 기능
billList.printBill()
when (billList.getNumFun()) {
1 -> {
//시간 체크기능
val whatTimeIsItNow = LocalTime.now()
if (whatTimeIsItNow.hour == 23 && whatTimeIsItNow.minute in 50..59) {
println("23시 50분부터 23시 59분까지는 은행 점검 시간입니다. 처음으로 돌아갑니다.")
continue
} else {
money = billList.purchaseFun(money, ordered.sumOf { it.totalPrice })
ordered.clear()
// 추가 주문 여부 확인: 1 입력 시 처음 화면으로 2 입력시 반복문 종료
if (menuType.nextOrder()) continue
else {
kioskFinished = true
break
}
}
}
2 -> {
ordered.clear()
continue
}
3 -> {
println("처음으로 돌아갑니다.")
continue
}
}
}
}
val orderedThread = thread(false) {
//10초마다 주문 대기열 증가 / 주문 대기열 출력
var i = 0
Thread.sleep(50)
while (true) {
if (kioskFinished) break
println("현재 주문 대기 수: ${i}건")
i++
Thread.sleep(5000)
}
println("프로그램을 종료합니다.")
}
orderedThread.start()
kioskThread.start()
}
다만 여러 기능을 추가하다보니 메인 코드가 굉장히 길어졌다. 이 부분에 대해서 조언을 구해야겠다.
728x90
'개발' 카테고리의 다른 글
| 03/19 주특기 1주차 개인과제(1) (0) | 2024.03.19 |
|---|---|
| 03/18 간단한 키오스크 만들기 - 피드백 반영 (1) | 2024.03.18 |
| 03/11 간단한 키오스크 만들기(2) (0) | 2024.03.11 |
| 03/11 간단한 키오스크 만들기(1) (0) | 2024.03.11 |
| 03/08 간단한 계산기 만들기(3) (0) | 2024.03.08 |