#include "stdafx.h" #include #include #include #include #include #include struct people { people *left, *right; int kol;//порядковый номер тестирующегося char sorname[30];//фамилия char name[30];//имя char patronymic[30];//отчество char profession[30]; //профессия int age;//возраст float date ;//дата прохождения тестирования float iq;//IQ человека который проходил тестирование }; struct test//структура содержащая информацию об тесте { test *left, *right; char qwestion[400];//вопрос. int grade;//балы за данный вопрос. bool variant;//Вид вопроса 0-тестовый вариант 1 - вариант где нужно ввести слово. int t;//содержит номер правильного ответа char vord;//содержит слово которое нужно ввести }; void AddPeopleToQueue(people **h, people **t, people *pl) { people *current = NULL; //выделяем память if (!(current = (people *)malloc(sizeof(people)))) return; //если очередь не существует if (!*t) { *h = current; (*h)->right = NULL; } else { (*t)->left = current; current->right = *t; } *t = current; (*t)->left = NULL; strcpy(current->sorname, pl->sorname); strcpy(current->name, pl->name); strcpy(current->patronymic, pl->patronymic); strcpy(current->profession, pl->profession); current->age = pl->age; current->date = pl->date; current->iq = pl->iq; current->kol = pl->kol; } void AddQwestionToQueue(test **o, test **q, test *qw)//h-o t-q *pl-qw { test *current = NULL; //выделяем память if (!(current = (test *)malloc(sizeof(test)))) return; //если очередь не существует if (!*q) { *o = current; (*o)->right = NULL; } else { (*q)->left = current; current->right = *q; } *q = current; (*q)->left = NULL; strcpy(current->qwestion, qw->qwestion); current->grade = qw->grade; current-> variant = qw-> variant; current->t = qw->t; current->vord = qw->vord; } void input(people **h, people **t)//Ввод инвормации о тестирующихся и запись ее в файл { FILE *f; f=fopen("People.txt","a+"); system("cls"); people *current = NULL; if (!(current = (people *)malloc(sizeof(people)))) return; printf("Заполните пожалуста анкету"); printf("Ваша фамилия :"); scanf("%s",current->sorname); fprintf(f,"%s\n",current->sorname); printf("Ваше имя :"); scanf("%s",current->name); fprintf(f,"%s\n",current->name); printf("Ваше отчество :"); scanf("%s",current->patronymic); fprintf(f,"%s\n",current->patronymic); printf("Ваша профессия :"); scanf("%s",current->profession); fprintf(f,"%s\n",current->profession); printf("Ваш возраст:"); scanf("%d",¤t->age); fprintf(f,"%d\n",current->age); printf("Дата проходения тестирования"); scanf("%d",¤t->date); fprintf(f,"%d\n",current->date); system("cls"); printf("Спасибо за информацию"); AddPeopleToQueue(h, t, current); free(current); testing( *h,*t, *o, *q) fclose(f); } void output(people **h, people **t)//Вывод информации о тестируемых из файла { FILE *f; f = fopen("People.txt","r"); *h = NULL; *t = NULL; people *current = NULL; //выделяем память if (!(current = (people *)malloc(sizeof(people)))) return; do { printf( "Тестируемый №"); fscanf(f,"%d",¤t->kol); if(feof(f))break; printf( "%d\n",current->kol); fscanf(f,"%s",¤t->sorname); printf( "Фамилия:\n"); printf( "%s\n",current->sorname); printf( "Имя:\n"); fscanf(f,"%s",¤t->name); printf( "%s\n",current->name); printf( "Отчество:\n"); fscanf(f,"%s",¤t->patronymic); printf( "%s\n",current->patronymic); printf( "Место работы:\n"); fscanf(f,"%s",¤t->profession); printf( "%s\n",current->profession); printf( "Ваш возраст:\n"); fscanf(f,"%d",¤t->age); printf( "%d\n",current->age); printf( "Дата проходения тестирования:\n"); fscanf(f,"%d",¤t->date); printf( "%d\n",current->date); printf( "IQ\n"); fscanf(f,"%d",¤t->iq); printf( "%d\n",current->iq); AddPeopleToQueue(h, t, current); }while(!feof(f)); free(current); fclose(f); getch(); } void inputqwestions(test **o, test **q,test *qw) { FILE *f; f=fopen("qwestions.txt","a+"); system("cls"); test *current = NULL; if (!(current = (test *)malloc(sizeof( test)))) return; printf("Введите вопрос"); fscanf(f,"%s",¤t->qwestion); printf("Введите вид ответа(0-тестовый 1 -вариант где нужно ввести слово)"); if(qw->variant =='0') { printf("Введите номер правильного ответа"); scanf("%d",qw->variant); fprintf(f,"%d\n",qw->variant); } else { printf("Введите слово отвечающее на вопрос"); scanf("%s",qw->vord); fprintf(f,"%s\n",qw->vord); } printf("Количество баллов за данный вопрос"); fscanf(f,"%d",¤t->grade); AddQwestionToQueue(o, q, current); fclose(f); } void testing(people **h, people **t,test **o, test **q) { system("cls"); FILE *f,*f1; f1=fopen("People.txt","a+"); f=fopen("qwestions.txt","r"); int mark=0; int n=0; test *current = NULL; test *answer = NULL; //выделяем память if (!(current = (test *)malloc(sizeof(test)))) return; do { printf("Вопрос номер %d: ", n); fprintf(f,"%s",¤t->qwestion); if(feof(f))break; printf( "%s\n",current->qwestion); if(current->variant =='0') { printf("Введите номер правильного ответа"); scanf("%d",answer->t); if(current->t==answer->t){mark=mark+current->grade;} else {mark=mark-current->grade;} } else { printf("Введите слово отвечающее на вопрос"); scanf("%s",answer->vord); if(current->vord==answer->vord){mark=mark+current->grade;} else {mark=mark-current->grade;} } } n++; while(!feof(f)); printf("Ваш IQ равен : %d",mark); f1=mark; fprintf(f1,"%d\n",current->iq); free(current); } void statistics(people *hum) { } void edit(test **o, test **q)//Функция редактирования вопросов { FILE *f; f = fopen("qwestions.txt","a+"); int n=0; test *current = NULL; //выделяем память if (!(current = (test *)malloc(sizeof(test)))) return; do { printf( "Текст вопроса и варианты ответа"); fscanf(f,"%s",¤t->qwestion); if(feof(f))break; printf( "%s\n",current->qwestion); fscanf(f,"%s",¤t->variant); printf( "Вариант правильного ответа :\n"); printf( "%d\n",current->variant); printf( "Слово отвечающее на вопрос:\n"); fscanf(f,"%s",¤t->vord); printf( "%s\n",current->vord); printf( "Количество баллов за данный вопрос:\n"); fscanf(f,"%d",¤t->grade); printf( "%d\n",current->grade); AddQwestionToQueue(o, q, current); }while(!feof(f)); free(current); printf( "Введите номер вопроса для редактирвания\n"); scanf("%d",&n); current = *o; do { current=current->left; if(n==0)break; n--; }while(n!=0); printf("Введите пункт который хотите отредактировать\n1-Текст вопроса\n2-Вариант правильного ответа\n3-Слово отвечающее на вопрос\n0-Выйти\n"); switch(getch()) do { case'1':{system("cls");fscanf(f,"%s",¤t->qwestion);} case'2':{system("cls");fscanf(f,"%s",¤t->variant);} case'3':{system("cls");fscanf(f,"%s",¤t->vord);} case'0':{system("cls");break;fscanf(f,"%s",¤t->grade);} }while(getch()!=0); fclose(f); getch(); } void admin(people **h, people **t, test *qw ,test **o,test **q ) { do { system("cls"); printf("Добро пожаловать,выберите что будем делать:\n"); printf("1-Просмотреть базу тестировавшихся:\n2-Редактировать вопросы:\n3-Добавить вопросы:\n0-Выход"); switch(getch()) { case'1':{system("cls");output(h,t);} case'2':{system("cls");edit(o,q);} case'3':{system("cls");inputqwestions(o, q,qw);} case'0':{system("cls");break;} }}while(getch()!='0'); } void main() {setlocale(LC_ALL,"rus"); people *h = NULL; people *t = NULL; test *o = NULL; test *q = NULL; test *qw; people *hum; hum=(people*)calloc(1,sizeof(people)); do{ printf("Добро пожаловать,выберите операцию которую хотите произвести:\n"); printf("1-Пройти тестирование:\n2-Посмотреть статистику:\n3-Администрирование:\n0-Выход"); switch(getch()) { case'1':{system("cls");input(&h,&t);} case'2':{system("cls");statistics(hum);} case'3':{system("cls");printf("Введите пароль\n"); do{ if(getch()!='a'){printf("Пароль не верен\n");printf("Желаете выйти?(y/n)\n");} else admin(&h,&t, qw,&o,&q);} while(getch()!='y');} case'0':{system("cls");break;} }}while(getch()!='0'); }