Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2012, 18:04   #1
tim47
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 14
По умолчанию ввод анкет на си

условие: Анкета для опроса населения содержит две группы вопросов. Первая группа содержит сведения о респонденте: 1)возраст 2)пол 3)образование(начальное, среднее, высшее).Вторая группа содержит собственно вопрос анкеты, ответом на который может являться либо ДА либо НЕТ. Нужно написать программу, которая:
1)обеспечивает начальный ввод анкет и формирует из них линейный список;
2) на основе анализа анкет выдаёт ответы на следующие вопросы: а)сколько мужчин старше 40 лет, имеющих высшее образование, ответили ДА на вопрос анкеты; а)сколько женщин моложе 30 лет, имеющих начальное образование ответили НЕТ на вопрос анкеты; а)сколько мужчин моложе 25 лет, имеющих начальное образование, ответили ДА на вопрос анкеты;
3)производит вывод всех анкет на экран и ответов на вопросы.
Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.

как нужно доделать/переработать прогу, чтобы она корректно работала?
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct Form
{
    int Age;
    int Sex;        /* 0 - мужчина; 1 - женщина */
    int Education; /* 0 - начальное; 1 - среднее; 2 - высшее */
    int Question;   /* 0 - НЕТ; 1 - ДА */
};

int main(int argc, char* argv[])
{
    int     Selection, i;
    struct Form    *pForm = NULL;
    int     RecCount = 0;
    int     k1, k2, k3;
    char    *str;

    printf("M E N U\n-------------------\n");
    printf("1. Dobavit zapis\n");
    printf("2. Analiz anket\n");
    printf("3. Vivod anket\n");
    printf("4. Vihod");

    while (1)
    {
        printf("\n\nVash vibor: ");
        scanf("%d ", &Selection);

        switch (Selection)
        {
        case 1: /* Dobavit zapis */
            pForm = (struct Form*)realloc(pForm, (RecCount + 1) * sizeof(struct Form));

            printf("\nVvedite dannye:\n");
            printf("\tVozrast: ");
            scanf("%d", &pForm[RecCount].Age);
            printf("\tPol (0 - M; 1 - G): ");
            scanf("%d", &pForm[RecCount].Sex);
            printf("\tObrazovanie (0 - nach.; 1 - sr.; 2 - vishee): ");
            scanf("%d", &pForm[RecCount].Education);
            printf("\tVi kurite? (0 - NET; 1 - DA): ");
            scanf("%d", &pForm[RecCount].Question);

            RecCount++;
            break;
        case 2: /* Analiz anket */
            k1 = k2 = k3 = 0;
         for (i = 0; i < RecCount; i++)
          {
          if (pForm[i].Sex == 0 &&   /* muzhchina.*/
              pForm[i].Age > 40 &&  /* starshe 40 let.*/
              pForm[i].Education == 2 &&   /* имеющий высшее образование...*/
              pForm[i].Question == 1)  /* ответивший ДА.*/
              k1++;
          if (pForm[i].Sex == 1 &&     /* женщина.*/
              pForm[i].Age < 30 &&    /* моложе 30 лет...*/
              pForm[i].Education == 1 &&  /* имеющая среднее образование... */
              pForm[i].Question == 0)   /* ответившая НЕТ. */
              k2++;
          if (pForm[i].Sex == 0 &&      /* мужчина... */
              pForm[i].Age < 25 &&  /* моложе 25 лет.*/
              pForm[i].Education == 0 &&   /* имеющий начальное образование... */
              pForm[i].Question == 1)   /* ответивший ДА... */
                    k3++;
            }
            printf("\nStatistika #1: %d\n", k1);
            printf("Statistika #2: %d\n", k2);
            printf("Statistika #3: %d\n", k3);
            break;
        case 3: /* Вывод всех анкет */
            printf("\nVse ankety:\n");
            printf("====================================================\n");
            printf("Vozrast      Pol          Obrazovanie         Otvet\n");
            printf("====================================================\n");
            for (i = 0; i < RecCount; i++)
            {
                if (pForm[i].Education == 0)
                    str = "Nachalnoe";
                else if (pForm[i].Education == 1)
                    str = "Srednee  ";
                else
                    str = "Vishee   ";

                printf("%d           %s            %s           %s\n", pForm[i].Age,
                    ((pForm[i].Sex) ? "G" : "M"),
                    str,
                    ((pForm[i].Question) ? "DA" : "NET"));
                printf("____________________________________________________\n");
            }
            break;
        case 4: // Выход
            free(pForm);
            exit(0);
            break;
        }
    }

    free(pForm);
    return 0;
}
tim47 вне форума Ответить с цитированием
Старый 22.02.2012, 21:22   #2
Klausms
Пользователь
 
Аватар для Klausms
 
Регистрация: 24.10.2011
Сообщений: 38
По умолчанию

Более корректно будет лучше сделать твою прогу в WinForms а не в консоли!вот моя почта если что Klausms@yandex.ru
Klausms вне форума Ответить с цитированием
Старый 08.03.2012, 17:15   #3
tim47
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 14
По умолчанию

прогу доделал так, чтобы все записывалось в файл, теперь проблема в том, чтобы вывести данные из файла, то есть анкету и статистику. понимаю, что нужно использовать fread но как именно им воспользоваться
Код:
#include <stdio.h>
#include <stdlib.h>


struct Form
{
    int Age;
    int Sex;        /* 0 - мужчина; 1 - женщина */
    int Education; /* 0 - начальное; 1 - среднее; 2 - высшее */
    int Question;   /* 0 - НЕТ; 1 - ДА */
};

int main()
{
    int     Selection, i;
    struct Form    *pForm = NULL;
    int     RecCount = 0;
    int     k1, k2, k3;
    char    *str;

    FILE *f=NULL;
    f=fopen("data.txt","wt");
    printf("M E N U\n-------------------\n");
    printf("1. Dobavit zapis\n");
    printf("2. Analiz anket\n");
    printf("3. Vivod anket\n");
    printf("4. Vihod");

    while (1)
    {
        printf("\n\nVash vibor: ");
        scanf("%d", &Selection);


        switch (Selection)
        {
        case 1: /* Dobavit zapis */
            pForm = (struct Form*)realloc(pForm, (RecCount + 1) * sizeof(struct Form));

            printf("\nVvedite dannye:\n");
            printf("\tVozrast: ");
            scanf("%d", &pForm[RecCount].Age);
            printf("\tPol (0 - M; 1 - G): ");
            scanf("%d", &pForm[RecCount].Sex);
            printf("\tObrazovanie (0 - nach.; 1 - sr.; 2 - vishee): ");
            scanf("%d", &pForm[RecCount].Education);
            printf("\tVi kurite? (0 - NET; 1 - DA): ");
            scanf("%d", &pForm[RecCount].Question);

            RecCount++;
            break;
        case 2: /* Analiz anket */
            k1 = k2 = k3 = 0;
         for (i = 0; i < RecCount; i++)
          {
          if (pForm[i].Sex == 0 &&   /* muzhchina.*/
              pForm[i].Age > 40 &&  /* starshe 40 let.*/
              pForm[i].Education == 2 &&   /* имеющий высшее образование...*/
              pForm[i].Question == 1)  /* ответивший ДА.*/
              k1++;
          if (pForm[i].Sex == 1 &&     /* женщина.*/
              pForm[i].Age < 30 &&    /* моложе 30 лет...*/
              pForm[i].Education == 1 &&  /* имеющая среднее образование... */
              pForm[i].Question == 0)   /* ответившая НЕТ. */
              k2++;
          if (pForm[i].Sex == 0 &&      /* мужчина... */
              pForm[i].Age < 25 &&  /* моложе 25 лет.*/
              pForm[i].Education == 0 &&   /* имеющий начальное образование... */
              pForm[i].Question == 1)   /* ответивший ДА... */
                    k3++;
            }
            fprintf(f,"\nStatistika #1: %d\n", k1);
            fprintf(f,"Statistika #2: %d\n", k2);
            fprintf(f,"Statistika #3: %d\n", k3);
            break;
        case 3: /* Вывод всех анкет */
            fprintf(f,"\nVse ankety:\n");
            fprintf(f,"====================================================\n");
            fprintf(f,"Vozrast      Pol          Obrazovanie         Otvet\n");
            fprintf(f,"====================================================\n");
            for (i = 0; i < RecCount; i++)
            {
                if (pForm[i].Education == 0)
                    str = "Nachalnoe";
                else if (pForm[i].Education == 1)
                    str = "Srednee  ";
                else
                    str = "Vishee   ";

                fprintf(f,"%d           %s            %s           %s\n", pForm[i].Age,
                    ((pForm[i].Sex) ? "G" : "M"),
                    str,
                    ((pForm[i].Question) ? "DA" : "NET"));
                fprintf(f,"____________________________________________________\n");
            }

            break;
        case 4: // Выход
            free(pForm);
            exit(0);
            break;
        }
    }

    free(pForm);
    fclose(f);

}

Последний раз редактировалось tim47; 08.03.2012 в 20:10.
tim47 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# структура базы для Анкет sasblade C# (си шарп) 1 05.10.2011 16:33
Создание анкет flyinsky Общие вопросы Delphi 0 12.05.2011 21:20
VBA_Word. Заполнение анкет Nasten'ka7 Microsoft Office Word 1 07.02.2011 11:49