
간단한 예제이지만 객체 지향 프로그래밍 연습과 C#에 익숙해지기 위해 최대한 메서드나 클래스를 분할하여 작성하였다.
숫자,이름,성별을 입력받는 메서드를 선언, 성별의 경우 enum 을 모아놓는 클래스에 저장
public enum GenEnum
{
남성 = 1,
여성 = 2,
오류 = 3
}
public class MyUtil
{
public int GetDigit()
{
Console.WriteLine("성적을 입력하세요(0~100)");
string score = Console.ReadLine();
int scoreToint = ConvertStrInt(score);
return scoreToint;
}
public int ConvertStrInt(string p_str)
{
int result = 0;
bool res = int.TryParse(p_str, out result);
// 자료형을 int 로 변환하려고 시도. 성공하면 result 에 해당 값을 넣으면서 true 반환, 실패 시 false
if (result > 100 || result < 0)
{
return -2;
}
else if (res)
{
return result;
}
else
{
return -1;
}
}
public string GetName()
{
Console.WriteLine("이름을 입력하세요");
return Console.ReadLine();
}
public GenEnum GetGen()
{
Console.WriteLine("성별을 입력하세요[1 : 남성, 2 : 여성]");
string gender = Console.ReadLine();
int isGen = ConvertStrInt(gender);
switch (isGen)
{
case 1:
return GenEnum.남성;
case 2:
return GenEnum.여성;
default:
return GenEnum.오류 ;
}
}
각 변수에 해당하는 프로퍼티 선언, 라이브러리에 저장된 메서드로 변수 입력받음
class Student
{
public string Name { get; set; }
public int Score { get; set; }
public GenEnum Gender { get; set; }
MyUtil Util = new MyUtil();
public void ReadProperty()
{
Score = Util.GetDigit();
Gender = Util.GetGen();
Name = Util.GetName();
}
}
성적과 성별을 기준으로 장학금/해외연수 기준을 비교함
class Scholarship
{
public Student MyStudent { get; set; }
public Scholarship(): this(null)
{
}
public Scholarship(Student st)
{
MyStudent = st;
}
public void Evaluate()
{
switch (MyStudent.Gender)
{
case MyLibrary.GenEnum.남성:
EvaluateMale();
break;
case MyLibrary.GenEnum.여성:
EvaluateFemale();
break;
default:
Console.WriteLine("올바른 방식으로 성별을 입력해주세요");
Exam8_4.Run();
break;
}
}
// -2 범위 초과, -1 잘못 입력
private void EvaluateMale()
{
int score = MyStudent.Score;
if (score > 90)
{
Console.WriteLine("축하합니다! 우수 장학생에 선정되었습니다!");
}
else if (score > 80)
{
Console.WriteLine("축하합니다! 장학생에 선정되었습니다!");
}
else if(score == -2)
{
Console.WriteLine("범위를 초과하는 점수를 입력했습니다.");
Exam8_4.Run();
}
else if(score == -1)
{
Console.WriteLine("점수를 잘못 입력하셨습니다.");
Exam8_4.Run();
}
else
{
Console.WriteLine("해당없음. 좀 더 노력하세요");
}
}
private void EvaluateFemale()
{
int score = MyStudent.Score;
if (score > 90)
{
Console.WriteLine("축하합니다! 해외 연수 장학생에 선정되었습니다!");
}
else if (score > 80)
{
Console.WriteLine("축하합니다! 국비 장학생에 선정되었습니다!");
}
else if (score == -2)
{
Console.WriteLine("범위를 초과하는 점수를 입력했습니다.");
Exam8_4.Run();
}
else if (score == -1)
{
Console.WriteLine("점수를 잘못 입력하셨습니다.");
Exam8_4.Run();
}
else
{
Console.WriteLine("해당없음. 좀 더 노력하세요");
}
}
인스턴스 선언 및 실행
public static void Run()
{
Student st = new Student();
st.ReadProperty();
Scholarship scholar = new Scholarship(st);
scholar.Evaluate();
}

각 월의 마지막 날이 28일, 30일, 31일 인 경우를 구분해야 한다.
-> Dictionary 를 이용
class Calendar
{
public Calendar()
{
// 각 월을 key로, 마지막 날을 value 로 하는 dictionary 생성
Dictionary<int, int> MonthDaTe = new Dictionary<int, int>();
MonthDaTe.Add(1, 31);
MonthDaTe.Add(2, 28);
MonthDaTe.Add(3, 31);
MonthDaTe.Add(4, 30);
MonthDaTe.Add(5, 31);
MonthDaTe.Add(6, 30);
MonthDaTe.Add(7, 31);
MonthDaTe.Add(8, 31);
MonthDaTe.Add(9, 30);
MonthDaTe.Add(10, 31);
MonthDaTe.Add(11, 30);
MonthDaTe.Add(12, 31);
CreateCalendar(MonthDaTe);
}
public void CreateCalendar(Dictionary<int, int> MonthDaTe)
{
foreach (var item in MonthDaTe)
//foreach 문으로 각 딕셔너리에 접근
{
Console.WriteLine($"\t {item.Key} 월");
for (int i = 1; i <= item.Value; i++) //value 값 만큼 일 수 출력
{
Console.Write($"{i}일 ");
}
Console.WriteLine();
Console.WriteLine();
}
}
}