#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[20];//содержит слово которое нужно ввести }; void inputqwestions(test **o, test **q,test *qw); void testing(people **, people **,test **, test **); 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; strcpy(current->vord, qw->vord); } void input(people **h, people **t,test **o, test **q)//Ввод инвормации о тестирующихся и запись ее в файл { FILE *f; if(!(f=fopen("People.txt","a+"))){puts("Файл поврежден или утерян");return;} system("cls"); people *current = NULL; if (!(current = (people *)malloc(sizeof(people)))) return; printf("Заполните пожалуста анкету\n"); 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("%f",¤t->date); fprintf(f,"%f\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; if(!(f=fopen("People.txt","r"))){puts("Файл поврежден или утерян");return;} *h = NULL; *t = NULL; people *current = NULL; //выделяем память if (!(current = (people *)malloc(sizeof(people)))) return; do { printf( "Тестируемый №\n"); fscanf(f,"%d",¤t->kol); if(feof(f))break; printf( "%d\n",current->kol); fscanf(f,"%s",current->sorname); printf( "Фамилия:\n"); printf( "%s\n",current->sorname); printf( "Имя:\n"); fscanf(f,"%s",current->name); printf( "%s\n",current->name); printf( "Отчество:\n"); fscanf(f,"%s",current->patronymic); printf( "%s\n",current->patronymic); printf( "Место работы:\n"); fscanf(f,"%s",current->profession); printf( "%s\n",current->profession); printf( "Ваш возраст:\n"); fscanf(f,"%d",¤t->age); printf( "%d\n",current->age); printf( "Дата проходения тестирования:\n"); fscanf(f,"%f",¤t->date); printf( "%f\n",current->date); printf( "IQ\n"); fscanf(f,"%f",¤t->iq); printf( "%f\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; if(!(f=fopen("qwestions.txt","a+"))){puts("Файл поврежден или утерян");return;} system("cls"); test *current = NULL; if (!(current = (test *)malloc(sizeof( test)))) return; printf("Введите вопрос\n"); scanf("%s",current->qwestion); fprintf(f,"%s",current->qwestion); printf("Введите вид ответа(1-тестовый 0 -вариант где нужно ввести слово)\n"); fflush(stdin); if(getch()!='0') { printf("Введите номер правильного ответа\n"); scanf("%d",¤t->variant); fprintf(f,"%d\n",current->variant); } else { printf("Введите слово отвечающее на вопрос\n"); scanf("%s",current->vord); fprintf(f,"%s\n",current->vord); } printf("Количество баллов за данный вопрос\n"); 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; if(!(f1=fopen("People.txt","a+"))){puts("Файл поврежден или утерян");return;} if(!(f=fopen("qwestions.txt.txt","r"))){puts("Файл поврежден или утерян");return;} int mark=0; int n=0; test *current = *o; test *answer = NULL; do { n++; printf("Вопрос номер %d: \n", n); fprintf(f,"%s", current->qwestion); if(feof(f))break; printf( "%s\n",current->qwestion); if(!current->variant) { printf("Введите номер правильного ответа\n"); scanf("%d",answer->t); if(current->t==answer->t){mark=mark+current->grade;} else {mark=mark + current->grade;} } else { printf("Введите слово отвечающее на вопрос\n"); scanf("%s",answer->vord); if(strcmp(current->vord, answer->vord) == 0){mark=mark+current->grade;} else {mark=mark + current->grade;} } current = current->left; } while(current->left); printf("Ваш IQ равен : %d",mark); (*t)->iq = mark; fprintf(f1,"%d\n",(*t)->iq); free(current); } void edit(test **o, test **q)//Функция редактирования вопросов { FILE *f; if(!(f=fopen("qwestions.txt","a+"))){puts("Файл поврежден или утерян");return;} int n=0; test *current = NULL; //выделяем память if (!(current = (test *)malloc(sizeof(test)))) return; do { printf( "Текст вопроса и варианты ответа\n"); 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",current->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-Просмотреть базу тестировавшихся:\n\ 2-Редактировать вопросы:\n\ 3-Добавить вопросы:\n\ 0-Выход\n" ); switch(getch()) { case'1':{system("cls");output(h,t);break;} case'2':{system("cls");edit(o,q);break;} case'3':{system("cls");inputqwestions(o, q,qw);break;} case'0':{system("cls");break;} } } while(getch()!='0'); } void rating(people **h, people **t)//Вывод информации о тестируемых для пользователей { FILE *f; if(!(f=fopen("People.txt","r"))){puts("Файл поврежден или утерян");return;} *h = NULL; *t = NULL; people *current = NULL; //выделяем память if (!(current = (people *)malloc(sizeof(people)))) return; printf( "Список тестировавшихся\n"); printf( "№ "); printf( "Фамилия: "); printf( "Имя: "); printf( "Отчество:"); printf( "Место работы:"); printf( "Возраст:"); printf( "Дата проходения:"); printf( "IQ\n"); printf( "\n"); do { fscanf(f,"%d",¤t->kol); if(feof(f))break; printf( "%d",current->kol); fscanf(f,"%s",current->sorname); printf( "%s",current->sorname); fscanf(f,"%s",current->name); printf( "%s",current->name); fscanf(f,"%s",current->patronymic); printf( "%s",current->patronymic); fscanf(f,"%s",current->profession); printf( "%s",current->profession); fscanf(f,"%d",¤t->age); printf( "%d",current->age); fscanf(f,"%f",¤t->date); printf( "%f",current->date); fscanf(f,"%f",¤t->iq); printf( "%f",current->iq); printf( "\n"); }while(!feof(f)); free(current); fclose(f); getch(); } 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-Выход\n"); switch(getch()) { case'1':{system("cls");input(&h,&t,&o,&q);break;} case'2':{system("cls");rating(&h, &t);break;} 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');break;} case'0':{system("cls");break;} }}while(getch()!='0'); }