티스토리 뷰

2019년도 2학기 C++ 프로그래밍 출석수업대체시험 


과제 내용 

2019-2+출석수업대체+실험실습+과제명(C++프로그래밍)+(2).hwp.pdf
0.12MB


과제

 

1. 클래스 설계 설명

-       설문을 설정하고 답변을 저장하는 용도의 클래스를 Respond 클래스라는 클래스 명으로 정하였다.

A.     Respond 클래스 멤버함수 및 용도

메소드

비고

void closeClass()

소멸자 역할으로 클래스 멤버변수의 메모리 해제

char* getAskTitle()

질문명을 반환

char* getAskContents(int num)

전달된 index에 해당하는 선택항목의 내용을 반환

int getAnswer(int num)

전달된 index에 해당하는 선택항목의 답변(선택개수)을 반환

void setAskTitle(char* string)

전달된 질문명으로 질문명을 설정

void setAskNum(int num)

전달된 숫자로 선택항목의 개수를 설정

void setAskContents(char* string, int num)

전달된 index에 해당하는 선택항목의 내용을 전달된 string으로 설정

void increaseAnswer(int num)

전달된 index에 대항하는 답변(선택개수)를 1 증가 시킴

void clearAnswer()

답변(선택개수)를 모두 0으로 초기화

B.      Respond 클래스 멤버변수 및 용도

속성

비고

char* askTitle

질문명을 저장

int askNum

선택항목의 개수를 저장

char** askContents

선택항목의 내용들을 저장

int* answer

선택항목 별 답변(선택 개수)를 저장

C.      각각의 Respond 클래스 멤버 함수 설명

메소드

매개변수 자료형 및 용도

반환값 의미 및 자료형

처리 내용

void closeClass()

N/A

N/A

클래스의 메모리가 할당된 멤버 변수(askTitle, askContents, answer)의 메모리 해제

char* getAskTitle()

N/A

자료형: char*

용도: string 형태의 질문 명

멤버변수 askTitle(질문명)을 반환

char* getAskContents(int num)

자료형: int

용도: 선택 항목의index를 의미

자료형: char*

용도: string 형태의 선택항목 내용

선택항목의 index를 받아 멤버변수 askContents에서 index에 해당하는 선택항목의 내용을 반환

int getAnswer(int num)

N/A

자료형: int

용도: 선택 항목의 index를 의미함

선택항목의 index를 받아 멤버변수 answer에서 index에 해당하는 답변 (선택개수)를 반환

void setAskTitle(char* string)

자료형: char*

용도: string 형태의 질문 명

N/A

질문명을 받아 멤버변수 askTitle에 저장

void setAskNum(int num)

자료형: int

용도: 선택 항목의 개수를 의미

N/A

선택항목의 개수를 받아 멤버변수 askNum에 저장

void setAskContents(char* string, int num)

자료형: char*

용도: string 형태의 선택항목 내용

자료형: int

용도: 선택 항목의 index를 의미

N/A

전달된 선택항목의 내용을 멤버변수 askContents에 전달된 index 해당하는 부분에 저장

void increaseAnswer(int num)

자료형: int

용도: 선택 항목의 index를 의미

N/A

멤버변수 answer에 전달된 선택항목의 index에 해당하는 개수를 1증가시킴

void clearAnswer()

N/A

N/A

멤버변수 answer의 항목들을 모두 0으로 초기화

2. 소스 프로그램

#include <iostream>
#include <cstring>
#include <cstdlib>

using namespace std;

class Respond {
	char* askTitle;			//질문명
	int askNum;				//선택항목 개수
	char** askContents;		//선택항목 내용
	int* answer;			//선택항목 별 답변 개수
	
public:
	closeClass() {
		for (int i = 0; i < askNum; i++) {
			delete [] askContents[i];
		}
		delete [] askContents;
		delete [] answer;
	}
	
	//질문명 반환
	char* getAskTitle() {
		return askTitle;
	}
	
	//선택항목 내용 반환
	char* getAskContents(int num) {
		if (num < askNum) {
			return askContents[num];
		}
		return NULL;
	}
	
	//답변 반환
	int getAnswer(int num) {
		if (num < askNum) {
			return answer[num];
		}
		return 0;
	}
	
	//질문 등록
	void setAskTitle(char* string) {
		int len = strlen(string) + 1;
		askTitle = new char[len];
		strcpy(askTitle, string);
	}
	
	//선택항목 개수 설정
	void setAskNum(int num) {
		askNum = num;
		answer = new int[num];
		askContents = new char*[num];
	}
	
	//선택항목 내용 설정 
	void setAskContents(char* string, int num) {
		if (num < askNum) {
			askContents[num] = new char[strlen(string)];
			strcpy(askContents[num], string);
		}
	}
	
	//선택항목의 답변(선택 개수) 설정 
	void increaseAnswer(int num) { 
		if (num < askNum) {
			answer[num] += 1;
		} 
	}
	
	//답변 초기화 
	void clearAnswer() {
		for (int i = 0; i < askNum; i++) {
			answer[i] = 0;
		}
	}
};

int main() {
	int askNum;
	int selecNum;
	char retry;
	char string[200] = "\0";
	
	Respond r;
	
	cout << "설문명을 입력해주세요 : ";
	cin.getline(string, sizeof(string)-1);
	r.setAskTitle(string);
	cout << endl;
	
	if (strlen(string) > 0) {
		cout << "선택 항목의 수를 입력해주세요 : ";
		
		do {
			cin >> string;
			askNum = atoi(string);
		} while (askNum < 1);
		
		r.setAskNum(askNum);
		
		cout << endl;
		cin.ignore(sizeof(string), '\n');
		
		for(int i = 0; i < askNum; i++) {
			cout << "항목" << i+1 << " : ";
			cin.getline(string, sizeof(string) - 1);
			r.setAskContents(string, i);
		}
		
		do {
			r.clearAnswer();
			cout << endl << "설문을 시작합니다." << endl << endl;
			system("pause");
			
			for (int i = 0; ; i++) {
				system("cls");
				cout << r.getAskTitle() << endl << endl;
				
				for (int j = 0; j < askNum; j++) {
					cout << "[" << j + 1 << "]" << r.getAskContents(j) << endl;
				}
				
				do {
					cout << endl << "번호를 입력해주세요(0 입력시 설문 종료) : ";
					cin >> string;
				} while (!isdigit(string[0]));
				
				selecNum = atoi(string);
				if (selecNum == 0) {
					break;
				}
				
				if(selecNum > askNum || selecNum < 1) {
					cout << "올바른 범위의 번호를 선택해주세요." << endl;
					system("pause");
					continue;
				}
				r.increaseAnswer(selecNum-1);
			}
			
			system("cls");
			cout << "질문 : " << r.getAskTitle() << endl << endl;
			cout << "조사 결과" << endl << endl;
			
			for (int i = 0; i < askNum; i++) {
				cout << "[" << i+1 << "]" << r.getAskContents(i) << " ->" << r.getAnswer(i) << endl;
			}
			
			cout << endl << "설문을 다시 하시겠습니까? (종료 : 'n' 입력)";
			
			do {
				cin >> retry;
			} while (retry == '\0');
		} while (retry != 'n' && retry != 'N');	
	} else {
		cout << "설문이 취소되었습니다." << endl;
		system("pause");
		return 0;
	}	
	r.closeClass();
	return 0;
}

끝으로

이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏

광고 클릭은 많은 힘이 됩니다! 

반응형
댓글