본문 바로가기

Dev Story/C#

C# 영어문장 생성 프로그램 #2 (크몽 개발 의뢰건)

C# 자료 구조

자료 구조들은 공통된 속성을 인터페이스로 정의해서 상속을 받고 있는 것을 볼 수 있습니다.

인터페이스들은 각각의 상위 인터페이스들을 상속 받고 공통된 속성을 공유 하여 클래스간 의존성을

줄여서 수정이 용이 하게 합니다. 

객체지향 언어의 특성이라 볼 수 있습니다.

 

위 자료 구조 중에 사용된건 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부 글을 이해 하시면 간단한 프로그램을 만들 수 있습니다.

 

여기 까지 읽어 주셔서 감사합니다.