Kotlin Programming Intermediate - 11

Beautify.log·2022년 1월 27일
0

Kotlin for Android

목록 보기
11/11
post-thumbnail

구단 관리 프로그램 작성하기

야구팀 관리 프로그램을 작성하시오.

DTO는 Human을 상속받는 Picher, Batter가 있고 DAO에서 Mutablelist로 CRUD를 구현할 것. 단, 각각의 클래스는 하나의 파일에서 작성할 것.
파일 입출력 기능 구현할 것.

Main

import dao.MemberDao
import kotlin.system.exitProcess

fun main(args: Array<String>) {

    // dao 생성
    val dao = MemberDao()

    while(true) {
        println("******************************************")
        println("************* 구단 관리 프로그램 *************")
        println("** 사용하실 메뉴 번호를 입력 후 엔터키를 누르세요. **")
        println("************* 1. 선수 등록 *****************")
        println("************* 2. 전체 선수 조회 *************")
        println("************* 3. 선수 검색 *****************")
        println("************* 4. 선수 정보 수정**************")
        println("************* 5. 선수 삭제 *****************")
        println("************* 6. 파일로 저장 ****************")
        println("************* 7. 파일 바로 출력 **************")
        println("************* 8. 프로그램 종료 ***************")
        print("****** 사용할 메뉴의 번호 >>>> ")

        var wantToUse: Int = readLine()!!.toInt()

        when (wantToUse) {
            1 -> dao.addMember()
            2 -> dao.printAllData()
            3 -> dao.searchWithName()
            4 -> dao.editTeamList()
            5 -> dao.deleteTeamList()
            6 -> dao.saveAsText()
            7 -> dao.printFileToConsole()
            8 -> {
                println("프로그램이 종료됩니다...")
                exitProcess(0)
            }
        }
    }



}

DTO

package dto

open class Human(var index:Int, var number: Int, var name: String, var age:Int, var height: Double, var ref:Int) {

    override fun toString(): String {
        return "$index. 선수번호: $number, 선수이름: '$name', 나이: $age, 선수 신장: $height, "
    }
}

class Pitcher(index: Int, number: Int, name: String, age:Int, height: Double, ref:Int, var win:Int, var lost:Int, var defense:Double) : Human(index, number, name, age, height, ref) {

    override fun toString(): String {
        return super.toString() + "전적: ${win}승 / ${lost}패, 방어율: $defense"
    }

}

class Batter(index:Int, number:Int, name:String, age:Int, height:Double, ref:Int, var batCount:Int, var hit:Int, var batAvg:Double) : Human(index, number, name, age, height, ref) {

    override fun toString(): String {
        return super.toString() + "타수: $batCount, 안타수: $hit, 타율: $batAvg"
    }

}

DAO

package dao

import dto.Batter
import dto.Human
import dto.Pitcher
import java.io.File
import java.io.FileWriter

class MemberDao {

    var teamList:MutableList<Human> = mutableListOf(
        Pitcher(1, 1001, "Kim", 25, 181.5, 1, 100, 42, 75.0, ),
        Batter(2, 1002, "Park", 24, 181.5, 2, 75, 10, 24.0, )
    )



    // CRUD
    // CREATE
    fun addMember() {

        print("입력할 선수의 번호 >> ")
        var number:Int = readLine()!!.toInt()
        print("입력할 선수명 >> ")
        var name:String = readLine()!!
        print("입력할 선수의 나이 >> ")
        var age:Int = readLine()!!.toInt()
        print("입력할 선수의 신장 >> ")
        var height:Double = readLine()!!.toDouble()

        print("투수라면 1, 타자라면 2를 입력하세요 >> ")
        var ref:Int = readLine()!!.toInt()

        var index = 0
        index++

        when (ref) {
            1 -> {
                print("승리한 경기 수 >> ")
                var win:Int = readLine()!!.toInt()
                print("패배한 경기 수 >> ")
                var lost:Int = readLine()!!.toInt()
                var defense:Double = (win / lost).toDouble()

                teamList.add(Pitcher(index, number, name, age, height, ref, win, lost, defense))

                println("입력하신 선수가 추가되었습니다.")
            }

            2 -> {
                print("타수 >> ")
                var batCount:Int = readLine()!!.toInt()
                print("안타수 >> ")
                var hit:Int = readLine()!!.toInt()
                var batAvg:Double = (batCount / hit).toDouble()

                teamList.add(Batter(index, number, name, age, height, ref, batCount, hit, batAvg))
                println("입력하신 선수가 추가되었습니다.")
            }

            else -> println("잘못된 입력입니다. 다시 시도하세요.")
        }



    }


    // READ
    // 모든 데이터 출력
    fun printAllData() {
        if(teamList != null || teamList.size != 0) {
            for (item in teamList) println(item)
        } else if (teamList == null || teamList.size == 0) {
            println("작성된 명단이 한 건도 존재하지 않습니다.")
        }
    }

    // 검색
    fun searchWithName() {
        print("검색할 선수의 이름 입력 >> ")
        var inputName:String = readLine()!!

        for(item in teamList) {
            if (item.name == inputName) {
                println(item)
            } else {
                println("검색결과가 없습니다")
            }
        }
    }


    // UPDATE
    // 수정

    private var Human.win: Int
        get() { return win }
        set(value) { win = value }

    private var Human.lost: Int
        get() { return lost }
        set(value) { lost = value }

    private var Human.bat: Int
        get() { return bat }
        set(value) { bat = value }

    private var Human.hit: Int
        get() { return hit }
        set(value) { hit = value }

    fun editTeamList() {
        printAllData()
        print("수정할 선수의 순번을 입력하세요 >> ")
        val wantEdit:Int = readLine()!!.toInt() - 1
        println("다음 선수의 정보를 수정합니다.")
        println("${teamList[wantEdit]}")

        println("수정할 내용을 선택하세요.")
        for (item in teamList) {
            if (item.ref == 1) {
                print("*** [1]선수번호, [2]선수이름, [3]나이, [4]신장, [5]이긴 게임 수, [6]진 게임 수 >> ")

                val editInform:Int = readLine()!!.toInt()

                when(editInform) {
                    1 -> {
                        print("변경할 선수번호를 입력하세요 >> ")
                        val newNumber:Int = readLine()!!.toInt()
                        teamList[wantEdit].number = newNumber
                        println("변경이 완료 되었습니다.")
                        break
                    }

                    2-> {
                        print("변경할 선수이름을 입력하세요 >> ")
                        val newName:String = readLine()!!
                        teamList[wantEdit].name = newName
                        println("변경이 완료 되었습니다.")
                        break
                    }

                    3-> {
                        print("변경할 선수나이를 입력하세요 >> ")
                        val newAge:Int = readLine()!!.toInt()
                        teamList[wantEdit].age = newAge
                        println("변경이 완료 되었습니다.")
                        break
                    }

                    4-> {
                        print("변경할 선수신장을 입력하세요 >> ")
                        val newHeight:Double = readLine()!!.toDouble()
                        teamList[wantEdit].height = newHeight
                        println("변경이 완료 되었습니다.")
                        break
                    }

                    5 -> {
                        print("변경할 이긴 게임 수를 입력하세요 >> ")
                        val newWinValue:Int = readLine()!!.toInt()
                        teamList[wantEdit].win = newWinValue
                        println("변경이 완료 되었습니다.")
                        break
                    }

                    6 -> {
                        print("변경할 이긴 게임 수를 입력하세요 >> ")
                        val newWinValue:Int = readLine()!!.toInt()
                        teamList[wantEdit].lost = newWinValue
                        println("변경이 완료 되었습니다.")
                        break
                    }
                }

            } else if (item.ref == 2) {
                print("*** [1]선수번호, [2]선수이름, [3]나이, [4]신장, [5]타수, [6]안타수 >> ")

                val editInform:Int = readLine()!!.toInt()

                when(editInform) {
                    1 -> {
                        print("변경할 선수번호를 입력하세요 >> ")
                        val newNumber:Int = readLine()!!.toInt()
                        teamList[wantEdit].number = newNumber
                        println("변경이 완료 되었습니다.")
                        break
                    }

                    2-> {
                        print("변경할 선수이름을 입력하세요 >> ")
                        val newName:String = readLine()!!
                        teamList[wantEdit].name = newName
                        println("변경이 완료 되었습니다.")
                        break
                    }

                    3-> {
                        print("변경할 선수나이를 입력하세요 >> ")
                        val newAge:Int = readLine()!!.toInt()
                        teamList[wantEdit].age = newAge
                        println("변경이 완료 되었습니다.")
                        break
                    }

                    4-> {
                        print("변경할 선수신장을 입력하세요 >> ")
                        val newHeight:Double = readLine()!!.toDouble()
                        teamList[wantEdit].height = newHeight
                        println("변경이 완료 되었습니다.")
                        break
                    }

                    5 -> {
                        print("변경할 타수를 입력하세요 >> ")
                        val newBat:Int = readLine()!!.toInt()
                        teamList[wantEdit].bat = newBat
                        println("변경이 완료 되었습니다.")
                        break
                    }

                    6 -> {
                        print("변경할 안타 수를 입력하세요 >> ")
                        val newHit:Int = readLine()!!.toInt()
                        teamList[wantEdit].hit = newHit
                        println("변경이 완료 되었습니다.")
                        break
                    }
                }
            }
        }

    }


    // DELETE
    fun deleteTeamList() {
        printAllData()
        print("삭제할 선수의 순번을 입력하세요 >> ")
        var wantToDelete = readLine()!!.toInt() - 1
        teamList.removeAt(wantToDelete)
    }

    // File IO
    // 파일로 저장
    fun saveAsText() {

        val path:String = "/User/hwangduil/test/test.rtf"
        val writer = FileWriter(path)

        try {
            writer.write(teamList.toString())
        } catch (e:Exception) {
            e.printStackTrace()
        } finally {
            writer.close()
        }

    }

    // 파일을 콘솔로 출력
    fun printFileToConsole() {

        val path:String = "/User/hwangduil/test/test.rtf"

        val br = File(path).bufferedReader()
        val list = mutableListOf<String>()
        br.useLines { e -> e.forEach { list.add(it) } }
        list.forEach { println(it) }

    }

}
profile
tried ? drinkCoffee : keepGoing;

0개의 댓글