[C#] 캡슐화 - 학생 클래스 정의, 인덱서 포함
실습) 다음을 만족하는 학생 클래스를 정의하시오. *목적: 캡슐화 전체 과정 실습 *국어, 영어, 수학은 열거형으로 정의하시오. *인덱서를 이용하여 성적을 설정 및 가져오기 할 수 있게 하시오.
학생은 생성할 때 학생 이름을 전달받습니다. |
*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 } } }
|