[Kotlin] TECHIT 중간 평가 과제

Leechaeyeon·2023년 5월 21일
0
post-thumbnail

중간 평가 과제

학교를 만든다.

학교에는 교실, 운동장, 체육관, 수영장이 있다.

교실에서는 학생들이 공부를 한다
운동장에서는 축구부와 배구부 학생들이 축구를 한다.
체육관에서는 배구부와 수영부 학생들이 배구를 한다.
수영장에서는 수영부와 축구부 학생들이 수영을 한다.

학생은 다음과 같이 구성된다
일반 학생 : 소속, 이름, 학년, 국어, 영어, 수학, 학생 정보 출력, 공부를 한다.
축구부 학생 : 소속, 이름, 학년, 국어, 영어, 수학, 학생 정보 출력, 공부를 한다, 축구를 한다, 수영을 한다.
배구부 학생 : 소속, 이름, 학년, 국어, 영어, 수학, 학생 정보 출력, 공부를 한다, 배구를 한다, 축구를 한다.
수영부 학생 : 소속, 이름, 학년, 국어, 영어, 수학, 학생 정보 출력, 공부를 한다, 수영을 한다, 배구를 한다.

소속, 이름, 학년, 국어, 영어, 수학은 키보드로 입력을 받는다.

프로그램을 시작하면 학생 정보를 입력받으며 0 을 입력할 때 까지 계속 입력을 받는다.

입력이 끝나면 각 학생들의 정보를 출력한다.

소속 : 00부
이름 : 000
학년 : 0학년
국어 : 000점
영어 : 000점
수학 : 000점
개인 총점 : 0000점
개인 평균 : 0000점

각 학생들의 정보 출력이 끝나면 교실, 운동장, 체육관, 수영장에 학생들을 넣어준다.

000 학생이 교실에서 공부하고 있습니다
000 학생이 교실에서 공부하고 있습니다

000 학생이 운동장에서 축구를 하고 있습니다
000 학생이 운동장에서 축구를 하고 있습니다

000 학생이 체육관에서 배구를 하고 있습니다
000 학생이 체육관에서 배구를 하고 있습니다

000 학생이 수영장에서 수영을 하고 있습니다
000 학생이 수영장에서 수영을 하고 있습니다

위의 출력이 끝나면 다음과 같이 출력한다.

전체 학생 수 : 000명
일반 학생 수 : 000명
축구부 학생 수 : 000명
배구부 학생 수 : 000명
수영부 학생 수 :000명
축구를 하는 학생 수 : 000명
배구를 하는 학생 수 : 000명
수영을 하는 학생 수 : 000명


배점 기준
모든 기능이 정상적으로 돌아가면 80점
상속과 인터페이스를 적극적으로 활용하면 가산점 5점
열거형을 사용했을 경우 가산점 5점
오버라이딩 개념을 사용했을 경우 가산점 5점
축구부, 배구부, 수영부를 클래스를 따로 만들지 않고 중첩 클래스를 이용해서 객체를 생성할 경우 가산점 5점

과제 정리 그림

코드

import java.util.ArrayList
import java.util.Scanner

fun main(){

    val studentManagement = StudentManagement()
    val studentList = studentManagement.inputNewStudent()
    val school = School(studentList)

    // 학생들을 club에 넣어줌
    school.inClub()
    // 학생들을 교실에 넣기
    school.inClassroom()
    // 체욱관
    school.inGym()
    // 운동장
    school.inPlayground()
    // 수영장
    school.inSwimmingpool()
    // 학생 정보 출력
    studentManagement.printStudnet()
    school.printAllStudentCount()
}

// 학생 관리
class StudentManagement{
    private var studentArrayList = ArrayList<Student>()
    // 입력 받는 함수 설정
    fun inputNewStudent():ArrayList<Student>{
        val scan = Scanner(System.`in`)
        var doInput: Int


        while(true){
            print("입력을 하시려면 1 종료하시려면 0을 입력해주세요. : ")
            var newStudent:Student
            doInput = scan.nextInt()
            when(doInput){
                1-> print("입력을 시작합니다.")
                0-> {
                    println("입력을 종료합니다.")
                    break
                }
                else ->{
                    println("잘못된 입력입니다. 0 또는 1을 입력해주세요")
                    continue
                }
            }

            print("소속 ( 0: 일반부 , 1: 축구부 , 2 : 배구부 , 3: 수영부 ) : ")
            val belongTest:CLUB = when(scan.nextInt()){
                CLUB.NOMAL.number -> CLUB.NOMAL
                CLUB.SOCCER.number -> CLUB.SOCCER
                CLUB.VOLLEYBALL.number -> CLUB.VOLLEYBALL
                CLUB.SWIMMING.number -> CLUB.SWIMMING
                else->{
                    println("잘못된 소속입력입니다. 다시 입력해주세요")
                    continue
                }
            }
            print("이름 : ")
            val inputName = scan.next()
            print("학년 : ")
            val inputGrade = scan.nextInt()
            print("국어 : ")
            val inputKorean = scan.nextInt()
            print("영어 : ")
            val inputEnglish = scan.nextInt()
            print("수학 : ")
            val inputMath = scan.nextInt()

            newStudent = Student(belongTest,inputName,inputGrade,inputKorean,inputEnglish,inputMath)
            studentArrayList.add(newStudent)

        }
        return studentArrayList
    }

    // 모든 학생 출력하는 함수
    fun printStudnet(){
        for(student in studentArrayList){
            student.printInfo()
            println("------------------")
        }
    }

}

// 열거형 클럽이름 생성
enum class CLUB(val number:Int, val clubName:String){
    NOMAL(0,"일반"),
    SOCCER(1,"축구부"),
    VOLLEYBALL(2,"배구부"),
    SWIMMING(3,"수영부")
}

// 학교안에는 클럽생성
class School(private var studentList:ArrayList<Student>){
    var countDoVolleyball = 0
    var countDoSoccer = 0
    var countDoSwimming = 0
    private var normalStudent = object:DoActivity, ArrayList<Student>(){}
    private var SoccerClub = object:DoActivity, ArrayList<Student>(){
        override fun doSoccer(students: ArrayList<Student>){
            for( temp in students){
                println("${temp.name}은 운동장에서 축구를 하고 있습니다.")
                countDoSoccer++
            }
        }
        override fun doSwim(students: ArrayList<Student>){
            for( temp in students){
                println("${temp.name}은 수영장에서 수영을 하고 있습니다.")
                countDoSwimming++
            }
        }
    }
    private var VolleyballClub = object : DoActivity, ArrayList<Student>(){
        override fun doVolleyball(students: ArrayList<Student>){
            for( temp in students){
                println("${temp.name}은 체육관에서 배구를 하고 있습니다.")
                countDoVolleyball++
            }
        }
        override fun doSoccer(students: ArrayList<Student>){
            for( temp in students){
                println("${temp.name}은 운동장에서 축구를 하고 있습니다.")
                countDoSoccer++
            }
        }
    }
    private var SwimmingClub = object : DoActivity, ArrayList<Student>(){
        override fun doVolleyball(students: ArrayList<Student>){
            for( temp in students){
                println("${temp.name}은 체육관에서 배구를 하고 있습니다.")
                countDoVolleyball++
            }
        }
        override fun doSwim(students: ArrayList<Student>){
            for( temp in students){
                println("${temp.name}은 수영장에서 수영을 하고 있습니다.")
                countDoSwimming++
            }
        }
    }

    fun inClub(){
        for(temp in studentList){
            when(temp.belong){
                CLUB.NOMAL -> normalStudent.add(temp)
                CLUB.SOCCER -> SoccerClub.add(temp)
                CLUB.VOLLEYBALL -> VolleyballClub.add(temp)
                CLUB.SWIMMING -> SwimmingClub.add(temp)
            }
        }
    }
    fun inClassroom(){
        normalStudent.doStudy(normalStudent)
        SoccerClub.doStudy(SoccerClub)
        VolleyballClub.doStudy(VolleyballClub)
        SwimmingClub.doStudy(SwimmingClub)
    }
    fun inPlayground(){
        normalStudent.doSoccer(normalStudent)
        SoccerClub.doSoccer(SoccerClub)
        VolleyballClub.doSoccer(VolleyballClub)
        SwimmingClub.doSoccer(SwimmingClub)
    }
    fun inGym(){
        normalStudent.doVolleyball(normalStudent)
        SoccerClub.doVolleyball(SoccerClub)
        VolleyballClub.doVolleyball(VolleyballClub)
        SwimmingClub.doVolleyball(SwimmingClub)
    }
    fun inSwimmingpool(){
        normalStudent.doSwim(normalStudent)
        SoccerClub.doSwim(SoccerClub)
        VolleyballClub.doSwim(VolleyballClub)
        SwimmingClub.doSwim(SwimmingClub)
    }
    fun printAllStudentCount(){
        println("""
            전체 학생 수 : ${studentList.size} 명
            일반 학생 수 : ${normalStudent.size} 명
            축구부 학생 수 : ${SoccerClub.size} 명
            배구부 학생 수 : ${VolleyballClub.size} 명
            수영부 학생 수 : ${SwimmingClub.size} 명
            축구를 하는 학생 수 : $countDoSoccer 명
            배구를 하는 학생 수 : $countDoVolleyball 명
            수영을 하는 학생 수 : $countDoSwimming 명
        """.trimIndent())
    }

}

// 학생 정보 만듦
class Student(var belong:CLUB, var name:String, private var grade:Int, private var korean:Int, private var english:Int, private var math:Int){
    private var totalScore:Int = korean+english+math
    private var averageScore:Double = totalScore/3.0

    fun printInfo(){
        println("""
            소속 : ${belong.clubName}
            이름 : $name 
            학년 : $grade
            국어 : $korean
            영어 : $english
            수학 : $math
            개인 총점 : $totalScore
            개인 평균 : $averageScore
        """.trimIndent())
    }

}

// 행동 인터페이스로 구현해서 다 같이 쓰게끔
interface DoActivity{
    fun doStudy(students: ArrayList<Student>){
        for( temp in students){
            println("${temp.name}은 교실에서 공부하고 있습니다.")
        }
    }
    fun doVolleyball(students: ArrayList<Student>){

    }
    fun doSoccer(students: ArrayList<Student>){

    }
    fun doSwim(students: ArrayList<Student>){

    }
}

0개의 댓글