언어 자료구조 알고리즘/프로그래밍 실습

[C#] 캡슐화 - 학생 클래스 정의, 인덱서 포함

언제나휴일 2019. 8. 8. 11:39
반응형

실습) 다음을 만족하는 학생 클래스를 정의하시오.

*목적: 캡슐화 전체 과정 실습

*국어, 영어, 수학은 열거형으로 정의하시오.

*인덱서를 이용하여 성적을 설정 및 가져오기 할 수 있게 하시오.

 

학생은 생성할 때 학생 이름을 전달받습니다. 
(그리고 학생 번호는 순차적으로 부여합니다.)
이 외에 학생의 국어, 영어, 수학 성적을 -1로 설정합니다.
학생을 생성한 후에는 학생의 국어, 영어, 수학 성적을 입력할 수 있습니다. 
만약 학생 성적이 0에서 100을 벗어나면 -1로 설정합니다.
학생 이름과 번호, 각 과목의 성적과 총점 및 평균을 확인할 수 있습니다. 
그리고 학생 정보를 확인하는 기능을 제공합니다.

*2019년 공주대에서
소스 코드) Subject.cs
namespace 캡슐화_실습3___학생_총복
{
    enum Subject
    {
        Korea, English, Math, MAX_SUBJECT
    }
}
Student.cs
using System;

namespace 캡슐화_실습3___학생_총복
{
    internal class Student
    {
        public string Name//학생 이름
        {
            get;//외부에서 접근 가능
            private set;//내부에서만 설정 가능
        }

        static int lastnum;//가장 최근에 부여한 학생 번호
        readonly int num;//학생 번호 - 읽기 전용
        public int Num
        {
            get
            {
                return num;
            }
        }
        int[] scores = new int[(int)Subject.MAX_SUBJECT];

        public Student(string name)
        {
            Name = name;
            //학생 번호를 순차적으로 부여
            lastnum++;
            num = lastnum;
            SetScores();
        }

        private void SetScores()
        {
            for(int i=0;i<(int)Subject.MAX_SUBJECT;i++)
            {
                scores[i] = -1;
            }
        }

        public int this[Subject subject]
        {
            get
            {
                return scores[(int)subject];
            }
            set
            {
                if(value>100)
                {
                    value = -1;
                }
                if(value<0)
                {
                    value = -1;
                }
                scores[(int)subject] = value;
            }
        }
        public int Total
        {
            get
            {
                int sum = 0;
                for(int i=0;i<(int)Subject.MAX_SUBJECT;i++)
                {
                    if(scores[i]!=-1)
                    {
                        sum += scores[i];
                    }
                }
                return sum;
            }
        }
        public int Average
        {
            get
            {
                //입력한 과목에 한하여 평균을 계산할 것인지 문의할 것
                //*현재는 전체 과목 수로 나누어 평균 계산*
                return Total / (int)Subject.MAX_SUBJECT;
            }
        }
        public override string ToString()
        {
            return string.Format("{0},{1}", Num, Name);
        }
    }
}
Program.cs

using System;

 

 

namespace 캡슐화_실습3___학생_총복

{

    class Program

    {

        static void Main(string[] args)

        {

            Student stu1 = new Student("홍길동");

            Console.WriteLine(stu1);//출력 내용: 홍길동, 1

            Student stu2 = new Student("강감찬");

            Console.WriteLine(stu2);//출력 내용: 강감찬, 2

            stu2[Subject.Korea] = 90;

            Console.WriteLine(stu2[Subject.Korea]);//출력 내용: 90

            stu2[Subject.Math] = 120;

            Console.WriteLine(stu2[Subject.Math]);//출력 내용: -1

            stu2[Subject.English] = -10;

            Console.WriteLine(stu2[Subject.English]);//출력 내용: -1

            Console.WriteLine(stu2.Total);//출력 내용:90

            Console.WriteLine(stu2.Average);//출력 내용:30

        }

    }

}

 

실행 결과

반응형