#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#include <locale>
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;
f=fopen("People.txt","a+");
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);
// inputqwestions(o, q, qw)
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( "Тестируемый №\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;
f=fopen("qwestions.txt","a+");
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;
f1=fopen("People.txt","a+");
f=fopen("qwestions.txt","r");
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 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( "Текст вопроса и варианты ответа\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-Просмотреть базу тестировавшихся:\n2-Редактировать вопросы:\n3-Добавить вопросы:\n0-Выход\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 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");statistics(hum);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');
}