자기계발/방송통신대 컴퓨터과학과

[방송통신대 컴퓨터과학과] 2019년 2학기 전공 C++ 프로그래밍 과제물

shlee1990 2019. 12. 13. 10:36

 정보

  • 업무명     : C++ 프로그래밍 과제물

  • 작성자     : 이상호

  • 작성일     : 2019-12-13

  • 설   명      :

  • 수정이력 :

 

 내용

[개요]

  • 안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다.

  • 오늘 포스팅은 C++ 프로그래밍 과제물을 소개드리고자 합니다.

 

 

[특징]

  • C++ 프로그래밍 과제물에 대한 이해를 돕기위해 작성

 

[기능]

  • 과제물 지시사항

  • 과제물 작성요령

 

[활용자료]

  • 인터넷 검색

 

[과제물 작성 요령]

  • 과제물 작성 계획 세우기

    • 과제물 작성을 위하여 계획 및 준비, 글쓰기, 제출과 같이 3 단계로 구성

    • 1 단계는 우선 계획 및 준비로서 공고 확인, 제출 기간 확인, 과제물 문제를 파악

    • 2단계의 경우 글쓰기로서 자료 검색 수집 및 개요 작성 그리고 본문 쓰기 및 수정

    • 끝으로 제출 마감일뿐만 아니라 파일 용량 검사 및 온라인시스템 제출

  • 과제물 문제 파악 요령

    • 과제물 문제에서 교수님의 지시사항을 정확히 간파하여 작성

    • 특히 제출 파일의 양식/용량 및 스타일 형식 그리고 작성 분량에 유의

  • 나만의 글쓰기 전략

    • 앞서 작성 계획에서와 같이 단계별로 수행이 필연

    • 추가로 각 과제물마다 한글 또는 워드 양식에서 각자만의 스타일을 바탕으로 글의 내용 작성

    • 또한 각종 인터넷 검색 및 도서를 참조하여 내용을 제시할 뿐만 아니라 그에 따른 판단의 근거에 대한 명확한 인용 및 출처가 정확하게 표시

  • 학술 검색을 위한 유용한 방법

    • 인터넷은 1950대에 컴퓨터의 개발과 더불어 너무 많은 정보의 바다에서 살고 있기 때문에 자신에게 필요한 정보 발굴 능력 요구 

    • 인터넷 검색이 익숙하지 않을 경우 네이버 검색을 추천하고 익숙하면 구글 검색이 유용

    • 그러나 일반적으로 네이버 또는 구글로 검색할 경우 다수의 블로그에서 중복되는 정보를 확인할 수 있고 이러한 정보들은 대부분 복사 붙여넣기로 인해 남용되고 있는 실정

    • 따라서 이 보다는 전 세계 검색엔진 2위를 차지한 Yahoo! JAPAN (https://www.yahoo.co.jp)에서 검색하여 구글 번역할 경우 원하는 정보를 쉽게 얻음

    • 연구 보고서 또는 SCI/SCIE 논문을 보기 위해서 대학교에서 저널을 구독하는 것이 일반적이나 모든 저널을 구독하기에는 상당한 경제적 부담이 되기 때문에 SCI-HUB (https://sci-hub.tw/)를 통해 보는 것을 추천 

 

[사용법]

  • 과제물 서식을 바탕으로 작성

 

[사용 OS]

  • Windows 10

 

[사용 언어]

  • C++

  • 한글 v2018

 

 과제물 문제

 

 소스 코드

[명세]

// SurveyCheck.h
#ifndef _SurveyCheck_H_
#define _SurveyCheck_H_

class SurveyCheck {
    
    // 설문 내용
    char* ask;

    // 보기 개수
    int qty;

    // 보기 내용들
    char** example;

    // 각 보기에 대한 답변의 개수
    int* answer;

public:
    
    // 선택 항목 및 설문 문항을 0으로 초기화
    void fnClose() {
        for (int iCount = 0; iCount < qty; iCount++) {
            delete[] example[iCount];
        }
         
        delete[] example;
        delete[] answer;
    }

    void fnSetAsk(char* str) {
        int len = strlen(str) + 1;

        ask = new char[len];
        strcpy(ask, str);
    }

    // 선택 항목의 개수를 지정
    void fnSetQty(int iNumber) {
		qty = iNumber;
        answer = new int[qty];
        example = new char*[qty];
    }

    // 선택 항목을 등록
    void fnSetExample(char* str, int iNumber) {

        // 설정된 개수 내에서 허용
        if (iNumber < qty) {
            example[iNumber] = new char[strlen(str) + 1];
            strcpy(example[iNumber], str);
        }
    }

    // 설문 문항 (질문과 선택 항목)을 출력
    char* fnGetAsk() {
        return ask;
    }

    char* fnGetExample(int iNumber) {
        
        // 설정된 개수 내에서 허용
        if (iNumber < qty) {
            return example[iNumber];
        }

        // 설정된 개수 범위를 넘을 경우
        return NULL;
    }

    // 설문 문항을 출력 후 응답 (선택항목의 번호)을 입력
    void fnSetAnswer(int iNumber) {

        if (iNumber < qty) {
            answer[iNumber]++;
        }
    }

    // 설문 응답 결과를 출력
    int fnGetAnswer(int iNumber) {

        // 설정된 개수 내에서 허용
        if (iNumber < qty) {
            return answer[iNumber];
        }

        return 0;
    }

    // 설문 조사를 재시작하기 위해서 응답 수를 0으로 초기화
    void fnResetAnswer() {
        for (int iCount = 0; iCount < qty; iCount++) {
            answer[iCount] = 0;
        }
    }
};

#endif

// SurveyCheck.cpp
// cin, cout
#include <iostream>

// strlen, strcpy
#include <cstring>

// atoi, isdigit
#include <cstdlib>

#include "SurveyCheck.h"

using namespace std;

int main() {

    // 보기 개수, 보기 선택, 반복
    int qty, sel, iCount;

    // 다시 설문조사를 할 것인가 여부
    char again;

    // 문자열 입력용
    char str[200] = "\0";


    // 객체 생성
    SurveyCheck clSurveyCheck;

    cout << "등록할 설문 문항을 입력하시오 : ";
    
    // 공백 문자를 포함하여 199 글자까지
    cin.getline(str, sizeof(str) - 1);

    clSurveyCheck.fnSetAsk(str);

    cout << endl;

    if (strlen(str) > 0) {
        cout << "선택할 답항의 수를 입력하시오 : ";

        do {
            // 보기의 개수를 문자열로 받아들임
            cin >> str;

            // 문자열을 숫자로 변환
            qty = atoi(str);

        // 보기는 1개 이상
        } while (qty < 1);

        // 선택 항목 수 입력
        clSurveyCheck.fnSetQty(qty);

        cout << endl;
        
        // 입력 버퍼 비움
        cin.ignore(sizeof(str), '\n');

        // 등록할 수 있는 선택 항목의 수는 2에서 지정한 것 이내
        for (int iCount = 0; iCount < qty; iCount++) {
           cout << "답항" << iCount + 1 << " : ";

           cin.getline(str, sizeof(str) - 1);

            // 선택 항목 등록
           clSurveyCheck.fnSetExample(str, iCount);
        }

        do {
            clSurveyCheck.fnResetAnswer();

            cout << endl << "설문 조사를 시작합니다." << endl;
            cout << endl;
            system("pause");

            for (int iCount = 0; ; iCount++) {
                system("cls");

                cout << clSurveyCheck.fnGetAsk() << endl << endl;

                for (int jCount = 0; jCount < qty; jCount++) {
                    cout << "[" << jCount + 1 << "] " << clSurveyCheck.fnGetExample(jCount) << endl;
                }

                do {
                    cout << endl << "번호를 입력하시오(0은 설문 종료) : ";
                    cin >> str;

                } while (!isdigit(str[0]));

                sel = atoi(str);

				// 설문 종료
                if (sel == 0) {
                    
					break;
                }

                if (sel > qty || sel < 1) {
                    cout << "올바른 범위의 번호를 선택하세요." << endl;

                    system("pause");

                    iCount--;

                    continue;
                }

                // 선택 1이 배열의 0
                clSurveyCheck.fnSetAnswer(--sel);
            }

            system("cls");
            cout << "질문 : " << clSurveyCheck.fnGetAsk() << endl << endl;
            cout << "조사 결과" << endl << endl;

            for (int iCount = 0; iCount < qty; iCount++) {
                cout << "[" << iCount + 1 << "] " << clSurveyCheck.fnGetExample(iCount) << " --> " << clSurveyCheck.fnGetAnswer(iCount) << endl;
            }

            cout << endl << "설문조사를 다시 할까요? (프로그램 종료 : 'n' 입력) ";

            do {
                cin >> again;
            } while (again == '\0');
        } while (again != 'n' && again != 'N');
    } else {
        cout << "설문 조사가 취소되었습니다." << endl;
        system("pause");

        return 0;
    }
	
	clSurveyCheck.fnClose();
	
	return 0;
}

 

[GitHub Gist]

  • SurveyCheck.h

 

  • SurveyCheck.cpp

 

 관련 자료

[제출본]

 

 참고 문헌

[논문]

  • 없음

[보고서]

  • 없음

[URL]

  • 없음

 

 문의사항

[기상학/프로그래밍 언어]

  • sangho.lee.1990@gmail.com

[해양학/천문학/빅데이터]

  • saimang0804@gmail.com