자료 구조들은 공통된 속성을 인터페이스로 정의해서 상속을 받고 있는 것을 볼 수 있습니다.
인터페이스들은 각각의 상위 인터페이스들을 상속 받고 공통된 속성을 공유 하여 클래스간 의존성을
줄여서 수정이 용이 하게 합니다.
객체지향 언어의 특성이라 볼 수 있습니다.
위 자료 구조 중에 사용된건 List 와 Dictionary 를 사용 하였는데 List: 인덱스로 엑세스 할 수 있어
목록의 검색, 정렬 및 조작에 이용 됩니다.
그리고 동적으로 할당이 가능해서 웬만하면 C# 에서는 List 를 주로 사용 됩니다.
Dictionary: Key와 Valued가 하나의 쌍으로 이루어 져 있으며 탐색 할때 Key 에 해당하는 Value 를
찾을 수 있고 O(1) 시간복잡도를 가지고 있어 검색속도가 제일 우수한 자료 형입니다.
[밑줄형]
① 출제될 문제의 수를 설정 한 후 실행 버튼을 누르면 문제가 출제 됩니다.
① KeywordUnderLineAnaly 클래스를 이용해 원문 변형문제 를 생성합니다.
② 생성된 문제를 ‘[ ]’ 를 포함하는 문자열을 밑줄 을 긋기 위해 IndexOfNth 함수를 이용해 문자열을 찾고 new Font(richTextBox_Transform.Font, FontStyle.Underline); 클래스를 이용해 UI표현을 합니다
② 출제할 원문을 입력 하는 공간으로 [A /B] 가 출제될 기준 형식으로 앞에 A는 정답이고 B는 오답입니다.
③ 프로그램이 생성한 문장들이 입력된 공간으로 문제를 생성하는 클래스 를 자세히 살펴 봅시다.
5개의 매서드와 내부 처리를 위한 4개의 멤버 변수를 이용하고 있습니다.
IndexOfNth: string 값 중에 특정 N번째 반복 되는 문자열 인덱스를 찾는 메서드
FindKeywordSet: 문제를 출제할 A/B 형태 Set 을 찾아 낸 후 A는 정답 B는 오답
함수 반환값인 KeywordSetList 안에는 위와 같이 문제를 출제할 KeywordSet 형태로 저장되어 있습니다.
문제를 생성하는 핵심인 GenerateQuestion 함수를 살펴 봅시다.
FindKeywordSet 함수 호출 후 만들어진 KeywordSetList 를 정합성 체크 하는 부분으로
키워드셋 기준으로 랜덤 셔플 후 문제를 출제할 QuestionList 가 생성 됩니다.
QuestionList 를 랜덤 셔플 후 오답 문제를 출제할 WrongQuestionList 를 생성하는데
이유는 정답과, 오답을 번갈아 출제 하기 위함입니다.
.OrderBy(a=> Guid.NewGuid()).ToList() 이부분이 Guid를 이용해 정렬을 Random으로 섞는 방식입니다.
Dictionary 는 출제할 번호를 채번하기 위해 생성되었고 1번문제는 1 2번문제는 2 이런식으로 생성 하도록 했습니다.
KeywordSetList 순환하면서 WrongQuestion(오답) 과 정답을 번갈아가면서
문제를 출제할 변수에 할당 한 후 정답은 별도로 StringBuilder 문자열로 보관 합니다.
여기 까지 영어 문장 생성기 에 대한 설명을 마치겠습니다.
1,2부 글을 이해 하시면 간단한 프로그램을 만들 수 있습니다.
여기 까지 읽어 주셔서 감사합니다.
'Dev Story > C#' 카테고리의 다른 글
C# 영어문장 생성 프로그램 #1 (크몽 개발 의뢰건) (0) | 2021.11.04 |
---|---|
WPF 차트 바인딩 하는 법 - 기초편 (크몽 개발의뢰건) (0) | 2021.11.03 |
소켓의 개념정리 짤막하게! (0) | 2021.10.31 |
원격 으로 PC 전원을 제어(WOL) 하는 셋팅 설명 및 C# 소스 공개 합니다. [셋팅 제대로 했는데 안될때 경우 팁 !! 도 있습니다.] (5) | 2019.02.22 |