두번째 프로젝트-아이디어

박찬우·2023년 7월 26일
0

이번주 프로젝트인 스타벅스의 키오스크의 흐름을 만들었다.

while let input = readLine(), let pressedNum = Int(input){
    if pressedNum == 0 {
        break
    }
    else if pressedNum == 1{
        showMenu()
        if let menuInput = readLine(), let menuNum = Int(menuInput){
            if menuNum == 1{
                showBeverage()
                if let inputBevNum = readLine(), let bevNum = Int(inputBevNum){
                    if bevNum == 1{
                        showCoffees()
                        print("0. 뒤로가기")
                    }
                    else if bevNum == 2{
                        showFizzios()
                        print("0. 뒤로가기")
                    }
                    else if bevNum == 3{
                        showFrappuccions()
                        print("0. 뒤로가기")
                    }
                }
            }
            else if menuNum == 2{
                showFoods()
                print("0. 뒤로가기")
            }
            else if menuNum == 3{
                showGoods()
                print("0. 뒤로가기")
            }
        }
    }
}

지난번 만들었던 코드는 뒤로가기를 구현할 수는 있으나, if문 안에 무수한 if문을 만들어야 한다는 생각이 들었다.

class OrderProcess {
    
    func choiceCategory() {
        print("어서오세요. 스타벅스입니다.")
        var pressedNumber: Int?
        showMenu()
        
        pressedNumber = Int(readLine()!)
        
        if pressedNumber == 0 {
            Void()
        }
        
        else if pressedNumber == 1 { // 음료 종류 출력
            beverageChoice()
        }
        
        else if pressedNumber == 2 { // 푸드 출력
            print("푸드메뉴")
            for (var index, menu) in menuItems.enumerated() {
                if menu.type == "Food" {
                    print("\(index - 8). \(menu.name) - 가격: \(menu.price)원") 
                    index += index + 1
                }
            }
            print("0. 뒤로가기")
            var foodNumber: Int?
            
            foodNumber = Int(readLine()!)
            if foodNumber == 0 {
                choiceCategory()
            }
        }
        
        else if pressedNumber == 3 { // 상품 출력
            print("상품메뉴")
            for (var index, menu) in menuItems.enumerated() {
                if menu.type == "Goods" {
                    print("\(index - 11). \(menu.name) - 가격: \(menu.price)원")
                    index += index + 1
                }
            }
            print("0. 뒤로가기")
            var goodsNumber: Int?
            
            goodsNumber = Int(readLine()!)
            if goodsNumber == 0 {
                choiceCategory()
            }
        }
    } // choiceCategory()
    
    func beverageChoice() {
        var pressedNumber: Int?
        showBeverage()
        
        pressedNumber = Int(readLine()!)
        
        if pressedNumber == 0 {
            choiceCategory()
        }
        
        else if pressedNumber == 1 { // 커피 메뉴 출력
            print("커피메뉴")
            for (var index, menu) in menuItems.enumerated() {
                if menu.beverageType == "Coffee" {
                    print("\(index + 1). \(menu.name) - 가격: \(menu.price)원")
                    index += index + 1
                }
            }
            print("0. 뒤로가기")
            var coffeeNumber: Int?
            
            coffeeNumber = Int(readLine()!)
            if coffeeNumber == 0 {
                beverageChoice()
            }
        }
            
            else if pressedNumber == 2 { // 피지오 메뉴 출력
                print("피지오메뉴")
                for (var index, menu) in menuItems.enumerated() {
                    if menu.beverageType == "Fizzio" {
                        print("\(index - 2). \(menu.name) - 가격: \(menu.price)원")
                        index += index + 1
                    }
                }
                print("0. 뒤로가기")
                var fizzioNumber: Int?
                
                fizzioNumber = Int(readLine()!)
                if fizzioNumber == 0 {
                    beverageChoice()
                }
            }
            
            else if pressedNumber == 3 { // 프라푸치노 메뉴 출력
                print("프라푸치노메뉴")
                for (var index, menu) in menuItems.enumerated() {
                    if menu.beverageType == "Frappuccino" {
                        print("\(index - 5). \(menu.name) - 가격: \(menu.price)원")
                        index += index + 1
                    }
                }
                print("0. 뒤로가기")
                var FrappuccinoNumber: Int?
                
                FrappuccinoNumber = Int(readLine()!)
                if FrappuccinoNumber == 0 {
                    beverageChoice()
                }
            }
        } //beverageChoice
    }

오늘 수정한 코드는 OrderProcess클래스 안에 메서드를 만들었다. 그리고 이전으로 돌아가는 일은 그때 필요한 메서드를 호출함으로써 뒤로가기를 구현했다.
이 코드에서 아쉬운 부분은 index부분인데, index를 호출하면 위에는 나와있지 않지만 메뉴에 적힌 순서의 index가 나왔다. 임시방편으로 그 순서에서 가감하여 1,2,3이 나오도록 했지만 다른 방법을 찾는 중이다.

0개의 댓글