티스토리 뷰
2019년도 2학기 C++ 프로그래밍 출석수업대체시험
과제 내용
과제
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 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏
광고 클릭은 많은 힘이 됩니다!
'학교' 카테고리의 다른 글
[방송통신대학교] 2019년도 사진의 이해 과제물 (0) | 2020.04.07 |
---|---|
[방송통신대학교] 2019년도 대중 영화의 이해 과제물 (0) | 2020.04.07 |
[방송통신대학교] 2019년도 컴퓨터의 이해 과제물 (0) | 2020.04.07 |
[방송통신대학교] 2019년도 언어의 이해 중간 과제물 (0) | 2020.04.07 |
[방송통신대학교] 데이터베이스설계및구현 출석수업대체시험 실습 과제물 (0) | 2020.03.18 |
- Total
- Today
- Yesterday
- effectivejava
- git
- java
- 이펙티브 자바
- 배낭여행
- 이펙티브자바
- JavaFX
- 일본여행
- 일본 여행
- 이펙티브
- JavaFX 종료
- 스프링부트
- 자전거 여행
- effective java
- 텐트
- 자바
- JavaFX Table View
- JavaFX 테이블뷰
- 배낭 여행
- JavaFX Window Close
- 인텔리제이
- 자전거
- springboot
- intelij
- TableView
- 일본 자전거 여행
- windows
- 일본 배낭여행
- 방통대 과제물
- Java UI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |