250124 C# 연습문제

doyeon kim·2025년 1월 24일

C#

목록 보기
8/13

예제1

간단한 예제이지만 객체 지향 프로그래밍 연습과 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.오류 ;
            }
        }

학생 클래스(student)

각 변수에 해당하는 프로퍼티 선언, 라이브러리에 저장된 메서드로 변수 입력받음

 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();
        }
    }

장학금 클래스 (scholarship)

성적과 성별을 기준으로 장학금/해외연수 기준을 비교함

 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();
        }

예제 2

각 월의 마지막 날이 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();
            }
        }
    }

0개의 댓글