23.07.21 swift / 계산기에 대한 이해 / 호텔 프로그램 제작기(1)

2023. 7. 24. 18:38IOS [ Swift ]

저번 계산기코딩에서 상속을 통해 클래스를 나눠 각자의 역할을 분배하는것을 연습했었는데 ,

여러곳에서 나의 코드를 설명들었지만 잘 이해가 되지 않았다.

 

결국 코드를 다시 구성하며 도움을 받아갔지만 잘 이해가 되지않았고 , 상속에 대해서는 이해가되었지만 내가 짠 코드가 너무 뒤죽박죽이라

이렇게가다간 머리가 터질것같아서 또 다른 과제인 호텔프로그램을 먼저 시도해보기로 하였다.

아래는 계산기 코드이다 👇

//class AbstractOperation{
//
//    func abstractOperation(number: Double, number2: Double) -> Double{
//
//        return 0
//
//    }
//}

class Caculator{
    
//    switch 넣어 기능구현
    let p : Plus
    let m : Minus
    let t : Multiply
    let d : Divide
    
//    init 에서 받아온걸 12줄부터 받아준거 plus < 이름 ,: Plus 타입 ( 만들어둔 클래스 )
//
    init (plus:Plus,minus:Minus,multiply:Multiply,divide:Divide){
        self.p = plus
        self.m = minus
        self.t = multiply
        self.d = divide
    }

    func caculate(number3: Double, number4: Double){


        print(p.abstractOperation(number: number3, number2: number4))
        print(m.abstractOperation(number: number3, number2: number4))
        print(t.abstractOperation(number: number3, number2: number4))
        print(d.abstractOperation(number: number3, number2: number4))

    }
}

//클래스는 하나의 타입

class Plus{
    func abstractOperation(number: Double, number2: Double) -> Double{
        return number + number2
    }
}

class Minus{
    func abstractOperation(number: Double, number2: Double) -> Double{
        return number - number2
    }
}

class Multiply{
    func abstractOperation(number: Double, number2: Double) -> Double{
        return number * number2
    }
}

class Divide{
    func abstractOperation(number: Double, number2: Double) -> Double{
        return number / number2
    }
}

var (num1,num2) = (15.0,5.0)

//let p = Plus()

var c = Caculator(plus: Plus(), minus: Minus(), multiply: Multiply(), divide: Divide())

c.caculate(number3: num1, number4: num2)


//
//print(p.plus(number: num1, number2: num2))
//print(p.minus(number: num1, number2: num2))
//print(p.multiply(number: num1, number2: num2))
//print(p.divide(number: num1, number2: num2))

//
//var profile = """
//첫번째 값은 \(num1) 입니다.
//두번째 값은 \(num2) 입니다.
//더한 값은 \(num1+num2) 입니다.
//뺀 값은 \(num1-num2) 입니다.
//곱한 값은 \(num1*num2) 입니다.
//나눈 값은 \(num1/num2) 입니다.
//"""
//
//print(profile)





//class Caculator {
//    var AddOperation =
//}


//var adult = 19
//var age = 13
//
//if age < adult {
//    print("당신은 미성년자 입니다.")
//} else {
//    print("당신은 성인 입니다.")
//}
//class Caculator{
//    func plus(number: Int , number2: Int) -> Int{
//        return number + number2
//    }
//
//}

//var num1 = 20
//var num2 = 10
//
//var p = Caculator();
//
//print(p.plus(number: num1, number2: num2))


////- Lv3 : AddOperation(더하기), SubstractOperation(빼기), MultiplyOperation(곱하기), DivideOperation(나누기) 연산 클래스를을 만든 후 클래스간의 관계를 고려하여 Calculator 클래스와 관계를 맺기
//- 관계를 맺은 후 필요하다면 Calculator 클래스의 내부코드를 변경하기
//    - 나머지 연산자(%) 기능은 제외합니다.
//- Lv2 와 비교하여 어떠한 점이 개선 되었는지 스스로 생각해 봅니다.
//    - hint. 클래스의 책임(단일책임원칙)

//
//class Caculator {
//    func caculate(
//        operator: number1 : number2 : ) ->Double{
//
//            return 0
//        }
//}
//
//class AddOperation {
//    func operate(number1 : number2 : ) -> Double{
//
//    }
//}
//
//var num1 = number1
//var num2 = number2

 

호텔프로그램 같은경우 콘솔창에서 호텔을 예약할 수 있도록 간단한 정보제공과 예약 세팅을 가능하게 하는것이 목표이다.

내가 시도한 레벨은 , 랜덤한 금액을 대상에게 지급한 후 , 그 돈으로 예약을 할 수 있으며, 남은 방은 어떤게 있는지를 안내 받는 것이었다.

//let begin = """
//--------------------------------------------------
//* 호텔 예약 관리 프로그램입니다 *
//1. 랜덤 금액 지급
//2. 호텔 객실 정보 보기
//3. 호텔 객실 예약하기
//4. 나의 예약 목록 보기
//5. 나의 예약 목록 체크인 날짜 순으로 보기
//6. 예약 삭제하기
//7. 예약 수정하기
//8. 나의 입출금 내역 출력하기
//9. 나의 잔액 보기
//0. 프로그램 종료하기
//--------------------------------------------------
//
//원하시는 기능의 번호를 입력해주세요
//"""
//
//var balance = 0
//
//while true {
//print(begin)
//
//let number = Int(readLine()!)!
//if number == 0 {
//print("이용해 주셔서 감사합니다.")
//break
//}
//if number == 1 {
//let randomAmount = Int.random(in: 10...50)*10000
//balance += randomAmount
//print("\(randomAmount)가 입금되었습니다. 잔액은 \(balance)입니다.")
//
//} else if number == 2 {
//let roomInfo = ["1번방 1박 10000원", "2번방 1박 20000원", "3번방 1박 30000원", "4번방 1박 40000원", "5번방 1박 50000원"]
//for info in roomInfo{
//print(info)
//}
//}
//}


let begin = """
--------------------------------------------------
* 호텔 예약 관리 프로그램입니다 *
1. 랜덤 금액 지급
2. 호텔 객실 정보 보기
3. 호텔 객실 예약하기
4. 나의 예약 목록 보기
5. 나의 예약 목록 체크인 날짜 순으로 보기
6. 예약 삭제하기
7. 예약 수정하기
8. 나의 입출금 내역 출력하기
9. 나의 잔액 보기
0. 프로그램 종료하기
--------------------------------------------------
"""

var money = 0

var number = Int(readLine()!)!
var word = String()

var input = readLine()
let inputText = input
let inputText2 = input


//숫자를 입력받는다.

var roomInfo = ["1번방 1박 10000원",
                "2번방 1박 20000원",
                "3번방 1박 30000원",
                "4번방 1박 40000원",
                "5번방 1박 50000원"]

while true{
    
    print(begin)
    number = Int(readLine()!)!
    //    무한출력
    
    if number == 0{
        print("당장 나가.")
        break
        //    입력받은 숫자가 0이면 당장 나가 프린트와 함께 종료.
    }
    
    if number == 1 {
        let random = Int.random(in: 10...50)*10000
        money += random
        print("\(random)원이 입금 되었습니다. 총 잔액은 \(money)원 입니다.")
    }
    
    if number == 2 {
        //
        //        for info in roomInfo{
        //            print(info)
        //    }
            
                    print("""
                           현재 남아있는 객실을 안내 드립니다.
                           
                           1.1번방 1박 100000원
                           2.2번방 1박 200000원
                           3.3번방 1박 300000원
                           4.4번방 1박 400000원
                           5.5번방 1박 500000원
                           
                           아무 키 를 입력시 메인 화면으로 돌아갑니다.
                           """)
            
            word = (readLine()!)
            
            if word == "b" {
                
                print(begin)
                
                number = Int(readLine()!)!
                
                
            }
            
        }
        
        if number == 3 {
            print("""
              예약 안내 창 입니다.
              
              원하시는 호텔 방 번호를 입력 해 주세요.
              """)
            
            number = Int(readLine()!)!
            
            if number == 1 {
                print("100,000원이 빠져나갔습니다 . 현재 잔액은 \(money-100000)원입니다.")
            }
            else if number == 2{
                print("200,000원이 빠져나갔습니다 . 현재 잔액은 \(money-200000)원입니다.")
            }
            else if number == 3{
                print("300,000원이 빠져나갔습니다 . 현재 잔액은 \(money-300000)원입니다.")
            }
            else if number == 4{
                print("400,000원이 빠져나갔습니다 . 현재 잔액은 \(money-400000)원입니다.")
            }
            else if number == 5{
                print("500,000원이 빠져나갔습니다 . 현재 잔액은 \(money-500000)원입니다.")
            }
            else if money < 0{
                print("당장 나가.")
            }
            
            print("체크인 날짜를 입력해 주세요. ex) 2000_01_01")
            
//
            input = readLine()
            
            if let inputText = input {
            print("""
                  체크인 날짜 : \(inputText)
                  
                  체크 아웃 날짜를 입력해 주세요. ex) 2000_01_01
                  """)
                
                input = readLine()
                
                if let inputText2 = input {
                print("""
                      체크인 날짜 : \(inputText)
                      체크인 아웃 날짜: \(inputText2)
                      로 예약이 완료되었습니다.
                      
                      감사합니다.
                      
                      아무 키를 누르면 메뉴로 이동합니다.
                      
                      """)
                }
            }
            
            
            
            word = (readLine()!)
            
            
            
        }
        
    }

위와 같이 코드를 짜게되었고 , 짜면서 각각의 방정보를 array화 하여 각자 관리해주면 좋다는것을 인지하였고, 나누어주었다.

또 마지막 부분의 체크인 날짜 체크아웃 날짜를 지정하는 데에 있어서 코드를 어떻게 짤지 몰랐는데 간단하였다.

if문을 활용하여 inputtext라는 이름을 객체이름을 짓고 , input에 readLine 을 적용시켜 사용자가 입력한값을 받아내도록 설정하였다.