commit
98c492a6ed
|
@ -360,4 +360,5 @@ MigrationBackup/
|
|||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
FodyWeavers.xsd
|
||||
*.out
|
||||
|
|
Binary file not shown.
|
@ -29,21 +29,21 @@ typedef struct _condition
|
|||
|
||||
typedef struct _dbElement
|
||||
{
|
||||
// Фамилия
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
char* last_nm;
|
||||
// Имя
|
||||
// <EFBFBD><EFBFBD><EFBFBD>
|
||||
char* first_nm;
|
||||
// Курс
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int curse_id;
|
||||
// ID лабораторной
|
||||
// ID <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int lab_id;
|
||||
// Время начала тестирования
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
time_t start_tm;
|
||||
// Время окончания тестирования
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
time_t end_tm;
|
||||
// Множество: пройденные тесты (99)
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (99)
|
||||
int* result;
|
||||
// Следующий элемент списка
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
struct _dbElement* nextElement;
|
||||
}DataBaseElement;
|
||||
|
||||
|
@ -110,21 +110,21 @@ int isStringOneOf(char* string, Condition* condition)
|
|||
|
||||
int isElementRespondConditions(DataBaseElement* elem, Condition* conditions[7])
|
||||
{
|
||||
// Проверка на фамилию
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (conditions[0] != NULL)
|
||||
{
|
||||
if (conditions[0]->condition == stringIsOneOf)
|
||||
if (!isStringOneOf(elem->last_nm, conditions[0]))
|
||||
return 0;
|
||||
}
|
||||
// Проверка на имя
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>
|
||||
if (conditions[1] != NULL)
|
||||
{
|
||||
if (conditions[0]->condition == stringIsOneOf)
|
||||
if (!isStringOneOf(elem->first_nm, conditions[0]))
|
||||
return 0;
|
||||
}
|
||||
// Проверка на курс
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
if (conditions[2] != NULL)
|
||||
{
|
||||
switch (conditions[2]->condition)
|
||||
|
@ -151,7 +151,7 @@ int isElementRespondConditions(DataBaseElement* elem, Condition* conditions[7])
|
|||
break;
|
||||
}
|
||||
}
|
||||
// Проверка на ID лабораторной
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (conditions[3] != NULL)
|
||||
{
|
||||
switch (conditions[3]->condition)
|
||||
|
@ -178,7 +178,7 @@ int isElementRespondConditions(DataBaseElement* elem, Condition* conditions[7])
|
|||
break;
|
||||
}
|
||||
}
|
||||
// Проверка на время начала теста
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (conditions[4] != NULL)
|
||||
{
|
||||
switch (conditions[4]->condition)
|
||||
|
@ -205,7 +205,7 @@ int isElementRespondConditions(DataBaseElement* elem, Condition* conditions[7])
|
|||
break;
|
||||
}
|
||||
}
|
||||
// Проверка на время конца теста
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (conditions[5] != NULL)
|
||||
{
|
||||
switch (conditions[5]->condition)
|
||||
|
@ -232,7 +232,7 @@ int isElementRespondConditions(DataBaseElement* elem, Condition* conditions[7])
|
|||
break;
|
||||
}
|
||||
}
|
||||
// Проверка на результаты
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (conditions[6] != NULL)
|
||||
{
|
||||
switch (conditions[6]->condition)
|
||||
|
@ -254,13 +254,14 @@ int isElementRespondConditions(DataBaseElement* elem, Condition* conditions[7])
|
|||
return 1;
|
||||
}
|
||||
|
||||
int putElementToDB(char* lastName, char* firstName, int course, int labID, time_t* startTime, time_t* endTime, int results[99])
|
||||
int putElementToDB(char* lastName, char* firstName, int course, int labID, time_t* startTime, time_t* endTime, int* results)
|
||||
{
|
||||
DataBaseElement* newElement = (DataBaseElement*)malloc(sizeof(DataBaseElement));
|
||||
if (newElement == NULL)
|
||||
return ALLOC_FAILURE;
|
||||
mallocCount++;
|
||||
|
||||
|
||||
char* family = (char*)malloc(sizeof(char) * strlen(lastName));
|
||||
strcpy(family, lastName);
|
||||
mallocCount++;
|
||||
|
@ -273,6 +274,10 @@ int putElementToDB(char* lastName, char* firstName, int course, int labID, time_
|
|||
newElement->curse_id = course;
|
||||
newElement->lab_id = labID;
|
||||
newElement->result = results;
|
||||
|
||||
// newElement->result = *results; <--- it was like that
|
||||
// so you're writing first element value to newElement->result <--- which is incrorrect
|
||||
|
||||
newElement->start_tm = *startTime;
|
||||
newElement->end_tm = *endTime;
|
||||
newElement->nextElement = NULL;
|
||||
|
@ -322,10 +327,11 @@ void printElement(DataBaseElement* elem)
|
|||
elem->first_nm, elem->last_nm, elem->curse_id, elem->lab_id);
|
||||
printf("%s\t", asctime(gmtime(&(elem->start_tm))));
|
||||
printf("%s\tResults\n", asctime(gmtime(&(elem->end_tm))));
|
||||
/*for (int i = 0; i < 99; i++)
|
||||
for (int i = 0; i < 99; i++)
|
||||
{
|
||||
printf("%d ", elem->result[i]);
|
||||
}*/
|
||||
}
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
|
@ -344,7 +350,7 @@ int deleteNonUniqElements(char whatToDelete[7])
|
|||
char* needToDel = (char*)malloc(sizeof(char) * dataBaseSize);
|
||||
mallocCount++;
|
||||
|
||||
// Цикл проверок
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DataBaseElement* tmp = head;
|
||||
DataBaseElement* tmp2 = head;
|
||||
int currInd = 0;
|
||||
|
@ -364,7 +370,7 @@ int deleteNonUniqElements(char whatToDelete[7])
|
|||
needToDel[currInd] = 1;
|
||||
//printf("%d currind, %d, %d\n", currInd,tmp->lab_id, tmp2->lab_id);
|
||||
}
|
||||
// Добавить сравнение по тестам
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
tmp2 = tmp2->nextElement;
|
||||
}
|
||||
tmp = tmp->nextElement;
|
||||
|
@ -435,8 +441,8 @@ char* formateTime(time_t time)
|
|||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="whatToPrint">Указываются номера как порядок выводимых значений
|
||||
/// ,-1 для пустых мест (НЕ NULL)
|
||||
/// <param name="whatToPrint"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// ,-1 <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><> NULL)
|
||||
/// </param>
|
||||
/// <param name="conditions"></param>
|
||||
int selectFunc(char whatToPrint[7], Condition* conditions[7])
|
||||
|
|
|
@ -55,7 +55,7 @@ int parceField(char *line, int *_field_num, char **_string, int *_int, time_t **
|
|||
if (field_num != -1)
|
||||
{
|
||||
char *st1 = strtok(line, "=");
|
||||
char *st2 = strtok(NULL, "=");
|
||||
char *st2 = strtok(NULL, "=");
|
||||
switch (field_num)
|
||||
{
|
||||
case 0:
|
||||
|
@ -99,9 +99,43 @@ int parceField(char *line, int *_field_num, char **_string, int *_int, time_t **
|
|||
return -1;
|
||||
}
|
||||
return 1;
|
||||
|
||||
case 6:
|
||||
;
|
||||
|
||||
char* tmp_buf = st2;
|
||||
char* token_buf = strtok(tmp_buf, "[];");
|
||||
|
||||
int iteration = 1;
|
||||
while(token_buf != NULL)
|
||||
{
|
||||
// check token reliability
|
||||
if (strlen(token_buf) != 6 || strncmp("test", token_buf, 4))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if(!(token_buf[4]<='9' && token_buf[4]>='0' && token_buf[5]<='9' && token_buf[5]>='0'))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
int index = (token_buf[5] - '0') + (token_buf[4] - '0') * 10;
|
||||
results[index]++;
|
||||
|
||||
token_buf = strtok(NULL, "[];");
|
||||
iteration++;
|
||||
}
|
||||
|
||||
*_field_num = field_num;
|
||||
results[0] = 0;
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
if (results[i] > 1)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -116,7 +150,7 @@ int parceCondition(char *line, Condition *conditions[7])
|
|||
int x = !strncmp(line, "result", 6);
|
||||
if (x)
|
||||
{
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// char* buf = strtok(line, "");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -252,7 +286,8 @@ void parceLine(char *input)
|
|||
int f_num = -1;
|
||||
int _int = -1;
|
||||
time_t *tim = NULL, start = 0, end = 0;
|
||||
int stroks[99];
|
||||
int* stroks = (int*)malloc(100*sizeof(int));
|
||||
mallocCount++;
|
||||
|
||||
if (lixCount != 0)
|
||||
{
|
||||
|
@ -268,8 +303,13 @@ void parceLine(char *input)
|
|||
|
||||
for (int i = 1; i < lixCount; i++)
|
||||
{
|
||||
|
||||
for (int j = 0; j < 100; j++)
|
||||
{
|
||||
stroks[j] = 0;
|
||||
}
|
||||
|
||||
x = parceField(wrd[i], &f_num, &str, &_int, &tim, stroks);
|
||||
|
||||
if (x == -1)
|
||||
{
|
||||
error(input);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
insert last_nm=Ulanovsky, first_nm=George, curse_id=2, lab_id=2, start_tm=2000.10.10!22:1:20, end_tm=2000.10.10!23:0:20, result=[]
|
||||
insert last_nm=Ulanovsky, first_nm=George, curse_id=2, lab_id=2, start_tm=2000.10.10!22:1:20, end_tm=2000.10.10!23:0:20, result=[test01;test02]
|
||||
insert last_nm=Ulanovsky, first_nm=George, curse_id=1, lab_id=3, start_tm=2000.10.10!22:1:20, end_tm=2000.10.10!23:0:20, result=[]
|
||||
insert last_nm=Ulanovsky, first_nm=George, curse_id=2, lab_id=4, start_tm=2000.10.10!22:1:20, end_tm=2000.10.10!23:0:20, result=[]
|
||||
insert last_nm=Ulanovsky, first_nm=George, curse_id=2, lab_id=4, start_tm=2000.10.10!22:1:20, end_tm=2000.10.10!23:0:20, result=[test22;test11]
|
||||
uniq first_nm
|
||||
|
|
Loading…
Reference in New Issue