오늘부터 이번주 주어진 과제를 작성하기로 했다.
아래는 과제 내용이다.
Kotlin 문법 과제 - 키오스크 프로그래밍
💡 Goal : 키오스크 프로그래밍
- 지금까지 배운 Kotlin 기초/심화 문법을 응용해서 키오스크 프로그래밍 과제를 완성해 봅시다
- 팀원들과 적절한 업무 분담을 위해서 서로를 소개하고 팀노션을 만드는 것 부터 시작해주세요~!
📌 Requirement : 과제에 요구되는 사항이에요.
lv0 ~lv3 는 팀원들의 학습 성취도에 따라 논의를 통해 업무를 분담해 보세요. 업무 분담이 어렵다면 튜터님과 함께 풀어나가봅시다. 차례차례 구현해서 키오스크 프로그래밍을 완성하는 것이 이번주 목표입니다.
완성하셨다면 lv4, 5도 도전해보세요!
lv0~3은 키오스크의 기본 골자를 만드는 과정이고, lv4~5는 기능읗 넣는 과정이다.
일단 오늘은 키오스크의 기본 골자를 어느정도 만들어놨다.

일단 구성한 클래스들이다.
각 메뉴의 상세 메뉴판을 구성했고 인터페이스를 이용해 각 메뉴를 띄운다.
fun main() {
val mainScreen = MainScreen()
val menuPrint = MenuControl()
var choosednum = 1
while(true) {
mainScreen.screenPrint()
choosednum = menuPrint.menuSelect(mainScreen.userChoice)
if(choosednum == 9) continue
else break
}
}
메인 함수이다. 필요한 클래스들을 인스턴스화 하고 무한루프로 기본 메뉴판을 출력한다.
class MainScreen {
var userChoice = 0
fun screenPrint(){
while(true) {
println("\n\n\n\n\n")
println("[ McDonald's Menu ]")
println("1. Burger")
println("2. Happy Snack")
println("3. Sides & Desserts")
println("4. McCafe & Beverages\n")
println("0. Exit")
println("===================")
try {
userChoice = readln().toInt()
if(userChoice < 0 || userChoice > 4){
println("목록에 없는 선택 입니다.")
continue
}
else break
} catch (e: NumberFormatException) {
println("잘못된 형식입니다.")
continue
}
}
}
}
MainScreen 클래스이다. 상세 메뉴로 들어가기 전 카테고리를 선택할 수 있다. 예외처리를 통해 intager형만 받을 수 있도록 한다.
class MenuControl {
private lateinit var choosedMenu: MenuInterface
fun menuSelect(x: Int): Int {
when (x) {
1 -> choosedMenu = BurgerMenu()
2 -> choosedMenu = HappySnackMenu()
3 -> choosedMenu = SIdeMenu()
4 -> choosedMenu = CafeMenu()
}
return choosedMenu.printMenu()
}
}
interface MenuInterface {
fun printMenu(): Int
}
MenuControl 클래스는 인터페이스인 MenuInterface를 지연 초기화 하고 사용자가 입력한 숫자에 따라 인터페이스를 초기화한다.
class BurgerMenu: MenuInterface {
private var choice = 0
val burgerList: MutableList<MenuInfo> = mutableListOf(
MenuInfo("Big Mac®", 1, 5.5, false),
MenuInfo("Big Mac® - Meal", 1, 6.9, true),
MenuInfo("McSpicy Shanghai Burger", 2, 5.5, false),
MenuInfo("McSpicy Shanghai Burger - Meal", 2, 6.9, true),
MenuInfo("1955 Burger", 3, 6.4, false),
MenuInfo("1955 Burger - Meal", 3, 7.8, true),
MenuInfo("Bacon Tomato Deluxe", 4, 5.8, false),
MenuInfo("Bacon Tomato Deluxe - Meal", 4, 7.7, true),
MenuInfo("Bulgogi Burger", 5, 3.1, false),
MenuInfo("Bulgogi Burger - Meal", 5, 4.9, true),
MenuInfo("Cheeseburger", 6, 2.7, false),
MenuInfo("Cheeseburger - Meal", 6, 4.7, true))
override fun printMenu(): Int {
while(true) {
println("\n\n\n\n\n")
println(" [ Burger Menu ] ")
println(" burger Meal")
for (menu in burgerList){
if(menu.option == false) menu.displayInfo()
else println(" / ${menu.price}₩")
}
println("9. Home 0. Exit")
println("======================================")
try {
choice = readln().toInt()
if(choice in 7..8 || choice < 0 || choice > 9){
println("목록에 없는 선택 입니다.")
continue
}
else break
} catch (e: NumberFormatException) {
println("숫자로 입력하세요.")
continue
}
}
return choice
}
}
class MenuInfo(val name: String, val number: Int, val price: Double, val option: Boolean) {
fun displayInfo(){
println("$number. $name")
print(" $price₩")
}
}
대표로 BurgerMenu 클래스를 보면 burgerList라는 리스트 안에 MenuInfo클래스를 넣는 작업을 수행한다.
이 리스트는 메뉴 정보를 담고 있으며 아래에서 for문을 통해 메뉴를 출력한다.

option이 false일 경우 단품, true일 경우 세트로 구성했다. 이 option 프로퍼티는 후에 커피의 아이스/핫의 구분에도 도움을 줄 것으로 기대한다.
'TIL' 카테고리의 다른 글
TIL - 23.12.26 (1) | 2023.12.26 |
---|---|
TIL - 23.12.20 (1) | 2023.12.20 |
TIL - 23.12.19 (1) | 2023.12.19 |
TIL - 23.12.18 (0) | 2023.12.18 |
TIL - 23.12.14 (0) | 2023.12.15 |