오늘은 키오스크 프로그래밍을 모두 끝내고, 팀원들과 서로의 코드를 공유하며 더 괜찮은 부분을 서로서로의 코드에서 가져와서 완성시켜보았다.
먼저 특정 기능 수행후 3초간 딜레이 시키는 부분이다. 내가 원래 짜놨던 코드도 3초간 딜레이가 잘 되었지만, 아무표시도 해주지 않아서 잘못보면 멈췄나..? 라는 생각이 들 수도 있었다.
fun waitTime() {
runBlocking {
print(" ... ")
for (i in 1..3) {
print("$i ")
delay(999L)
}
println()
}
}
waitTime함수를 만들어서 3초동안 1초 간격으로 1... 2... 3...을 프린트 해줘서 로딩중이라고 표현해주었다.
다음으로는 지금은 Burger, Chicken, Drink, Side 4가지 클래스를 자식 클래스로 두고, Menu클래스를 부모 클래스로 만들어줬었다. 하지만 위 4가지 자식 클래스들은 받는 파라미터가 이름,가격,정보 3가지가 같은 내용이 들어가서 굳이 나눠줄 필요가 없었다. 그래서 4가지 클래스를 Food라는 클래스로 합쳐주었다.
// 메뉴에 포함되는 음식들을 묶어놓는 클래스
class Food(name: String, price: Int, desc: String): Menu(name, price, desc) {
}
다음으로는 원래 주문취소를 누르면 장바구니에 담겨져있던 목록을 취소시켜줬는데, 해당 로직은 남겨두고, 이미 주문했던 목록에 대해서도 취소를 시킬 수 있고, 환불 또한 받을수 있게 해주었다.
주문클래스인 Order, 배달클래스인 Delivery를 자식클래스로 두고 새로운 Receipt클래스를 부모 클래스로 설정해주었다.
주문취소에 대한건 먼저
proceedingOrderList.forEachIndexed { index, it ->
it.printProceedingOrders(index + 1)
}
주문했던 내용들을 담은 리스트를 가져와 리스트를 보여준다.
그후 주문을 선택하고, 사용자가 확인을 눌러 주문을 취소한다면
println("[ 주문 ${selectedOption.toInt()} ]이 취소되었습니다.\n")
println("${proceedingOrderList[selectedOption.toInt() - 1].sum}원이 환불되었습니다.\n")
// 환불 진행
currentMoney += proceedingOrderList[selectedOption.toInt() - 1].sum
// 진행중인 주문 리스트에서 제거
proceedingOrderList.removeAt(selectedOption.toInt() - 1)
println("현재 잔액 : ${currentMoney}원\n")
break
주문을 취소해주고, 리스트에서 해당 주문을 지운 후에 currentMoney를 취소한 주문의 가격만큼 다시 더해주었다. 이렇게 해서 주문 취소내용을 구현하였다.
마지막으로 콘솔창에 나오는 글씨? 들을 정렬시켜주었다. 우리가 만약 주문 리스트에 메뉴들을 영어로 저장해뒀다면 편하게 정렬시킬 수 있었을텐데 한글로 저장해놔서 정렬이 쉽지 않았다. 영어는 한글자와 " "하나가 길이가 같은데 한글은 달랐다. 만약 영어였다면
fun printOrders() {
val maxName = receipt.maxOfOrNull { it.name.length } ?: 0
receipt.forEachIndexed { index, it ->
val padding = " ".repeat(maxName - it.name.length)
println("${index+1}. ${it.name}$padding | $i{t.price}")
}
}
이런식으로 maxName에 영수증 리스트를 가져와서 maxOfOrNull함수를 이용해서 해당 리스트의 이름의 길이를 가져와 max값을 저장해준다. 이후에 해당 리스트에서 padding이라는 변수를 만들어서 maxName에서 해당 부분의 이름의 길이를 빼주면 제일 긴 이름과 해당부분의 이름의 길이의 차이가 구해진다. 그만큼을 " "로 repeat해서 채워주면 해결된다.
하지만 한글로 하는법도 알아보았고, format을 사용해서 표현해주었다.
println("%d. %-8s\t| %7s\t| %s".format(index + 1, it.name, it.price, it.desc))
이렇게 피드백 받은 내용을 참고하여 고치고, 코드들을 합쳐보며 최종적으로 키오스크 프로그래밍을 끝냈다. 첫 팀과제였고, 하지만 각자 끝까지 코딩해보며 스스로 끝내봤고, 서로의 코드를 공유하며 이런식으로도 할수 있겠네! 하는 부분또한 많았다. 실력자 팀원들과 만나서 서로 질문하기도 좋았고, 정들었지만 다음주부터 새로운 챕터에 들어가 멀어질거같다..
그래도 따로 궁금하거나 질문할만한거 물어보면서 지내기로 했다! ㅎㅎ
이번주도 고생 많았다~~
고생 많으셨어요! 어느 팀에 가더라도 화이팅입니다!