/*
설문 조사 프로그램
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <Windows.h>
void survey_input(void);
int survey_question_read(char question[][100], char space[]);
void gotoxy(int x, int y);
int main(void)
{
survey_input();
return 0;
}
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
/*
설문 출력과 응답자의 답을 텍스트 파일에 저장하는 함수 survey_input
*/
void survey_input(void)
{
int i, answer[20], count;
char yn, question[10][100], space[10];
FILE *fpw;
count = survey_question_read(question, space);
fpw = fopen("조사결과.txt", "a");
do
{
system("cls");
printf("각 설문에 대해 문항의 답을 입력하고 Enter하시오.\n");
printf("문항의 답은 숫자만 사용합니다.\n\n");
for (i = 0; i < count; i++)
printf("%d) %s\n", i + 1, question[i]);
for (i = 0; i < count; i++)
{
fflush(stdin);
gotoxy(space[i] + 4, i * 2 + 4);
scanf("%d", &answer[i]);
fprintf(fpw, "%d ", answer[i]);
}
fprintf(fpw, "\n");
printf("\n");
printf("설문조사가 끝났습니다. 계속은 1, 종료는 0을 입력 ");
yn = getch();
printf("\n");
} while (yn != '0');
fclose(fpw);
}
/*
텍스트 파일을 읽어 배열에 저장하는 함수 survey_question_read
*/
int survey_question_read(char question[][100], char space[])
{
char chr[100];
FILE *fpr;
int count = 0;
fpr = fopen("설문내용.txt", "r");
while (!feof(fpr))
{
fgets(chr, 90, fpr);
space[count] = strlen(chr);
strcpy(question[count], chr);
count++;
}
fclose(fpr);
return count; //설문의 개수를 반환
}
[개선과 확장 1]
/*
응용 10.5.1에서의 모든 항목의 답은 숫자로 입력해야 하는데 실수로 문자를 입력할 경우,
또는 범위 밖의 숫자를 입력할 경우에 다시 입력하도록 프로그램을 수정하시오.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <Windows.h>
#pragma warning(disable:4996)
void survey_input(void);
int survey_question_read(char question[][100], char space[]);
void gotoxy(int x, int y);
int main(void)
{
survey_input();
return 0;
}
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
/*
설문 출력과 응답자의 답을 텍스트 파일에 저장하는 함수 survey_input
*/
void survey_input(void)
{
int i, answer[20], count;
char yn, question[10][100], space[10];
FILE *fpw;
count = survey_question_read(question, space);
fpw = fopen("조사결과.txt", "a");
do
{
system("cls");
printf("각 설문에 대해 문항의 답을 입력하고 Enter하시오.\n");
printf("문항의 답은 숫자만 사용합니다.\n\n");
for (i = 0; i < count; i++)
printf("%d) %s\n", i + 1, question[i]);
for (i = 0; i < count; i++)
{
fflush(stdin);
gotoxy(space[i] + 4, i * 2 + 4);
scanf("%d", &answer[i]);
if (i == 0 || i == 6)
{
if (answer[i]>2 || answer[i] < 1)
{
gotoxy(1, 20);
printf("잘못 입력하셨습니다");
Sleep(1000);
gotoxy(1, 20);
printf(" ");
i--;
continue;
}
}
else if (i == 3)
{
if (answer[i] < 1 || answer[i]>4)
{
gotoxy(1, 20);
printf("잘못 입력하셨습니다");
Sleep(1000);
gotoxy(1, 20);
printf(" ");
i--;
continue;
}
}
else if (i == 4)
{
if (answer[i] < 1 || answer[i]>3)
{
gotoxy(1, 20);
printf("잘못 입력하셨습니다");
Sleep(1000);
gotoxy(1, 20);
printf(" ");
i--;
continue;
}
}
else if (i == 2 || i == 5)
{
if (answer[i] < 1 || answer[i]>5)
{
gotoxy(1, 20);
printf("잘못 입력하셨습니다");
Sleep(1000);
gotoxy(1, 20);
printf(" ");
i--;
continue;
}
}
fprintf(fpw, "%d ", answer[i]);
}
fprintf(fpw, "\n");
printf("\n");
printf("설문조사가 끝났습니다. 계속은 1, 종료는 0을 입력 ");
yn = getch();
printf("\n");
} while (yn != '0');
fclose(fpw);
}
/*
텍스트 파일을 읽어 배열에 저장하는 함수 survey_question_read
*/
int survey_question_read(char question[][100], char space[])
{
char chr[100];
FILE *fpr;
int count = 0;
fpr = fopen("설문내용.txt", "r");
while (!feof(fpr))
{
fgets(chr, 90, fpr);
space[count] = strlen(chr);
strcpy(question[count], chr);
count++;
}
fclose(fpr);
return count; //설문의 개수를 반환
}
[개선과 확장 2]
/*
설문의 종류에 따라 주관식 답을 입력받아 처리할 수 있도록 프로그램을 수정하시오
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <Windows.h>
#pragma warning(disable:4996)
void survey_input(void);
int survey_question_read(char question[][100], char space[]);
void gotoxy(int x, int y);
int main(void)
{
survey_input();
return 0;
}
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
/*
설문 출력과 응답자의 답을 텍스트 파일에 저장하는 함수 survey_input
*/
void survey_input(void)
{
int i, count, str = 0;
char answer[7][20];
char yn, question[10][100], space[10];
FILE *fpw;
count = survey_question_read(question, space);
fpw = fopen("조사결과.txt", "a");
do
{
system("cls");
printf("각 설문에 대해 문항의 답을 입력하고 Enter하시오.\n");
printf("문항의 답은 숫자만 사용합니다.\n\n");
for (i = 0; i < count; i++)
printf("%d) %s\n", i + 1, question[i]);
for (i = 0; i < count; i++)
{
fflush(stdin);
gotoxy(space[i] + 4, i * 2 + 4);
scanf("%s", answer[i]);
fprintf(fpw, "%s ", answer[i]);
}
fprintf(fpw, "\n");
printf("\n");
printf("설문조사가 끝났습니다. 계속은 1, 종료는 0을 입력 ");
yn = getch();
printf("\n");
} while (yn != '0');
fclose(fpw);
}
/*
텍스트 파일을 읽어 배열에 저장하는 함수 survey_question_read
*/
int survey_question_read(char question[][100], char space[])
{
char chr[100];
FILE *fpr;
int count = 0;
fpr = fopen("설문내용.txt", "r");
while (!feof(fpr))
{
fgets(chr, 90, fpr);
space[count] = strlen(chr);
strcpy(question[count], chr);
count++;
}
fclose(fpr);
return count; //설문의 개수를 반환
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 명품 C언어 프로젝트 안기수 저
*드디어 시험 끝났습니다!
'C > 명품 C언어 프로젝트(안기수 저)' 카테고리의 다른 글
명품 C언어 프로젝트 11.2장 바이오리듬 (0) | 2017.11.12 |
---|---|
명품 C언어 프로젝트 11.1장 디지털 주판 (0) | 2017.11.04 |
명품 C언어 프로젝트 10.4장 교실 내의 자리배치 (0) | 2017.10.09 |
명품 C언어 프로젝트 10.3장 움직이는 광고판 (15) | 2017.10.05 |
명품 C언어 프로젝트 10.2장 휴대전화 문자 (0) | 2017.09.29 |