C/명품 C언어 프로젝트(안기수 저)

명품 C언어 프로젝트 10.5장 설문 조사 프로그램

꾸준함. 2017. 10. 30. 21:10

/*

설문 조사 프로그램

*/

#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; //설문의 개수를 반환

}

설문내용.txt




[개선과 확장 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언어 프로젝트 안기수 저


*드디어 시험 끝났습니다!

반응형