setcolor(16); //Рамка цвета курсора,когда он не активен
fillellipse(240,175+(i*50),10,10); //Прорисовка закрашенного курсора
}
key = getch();
if (key == 72)
cursor--;
if (key == 80)
cursor++;
if (key==27)
return -1;
if ((cursor==4)&&(key==13))
return -1;
if (key==13)
return cursor;
if (cursor==4)
cursor=0;
if (cursor==-1)
cursor=3;
}
while(1);
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//модуль ZASTAVKA.c
#include "bib.h"
//-------------------Вывод на экран названия курс. работы--------------------
int zastavka2()
{
ramka();
setcolor(8);
settextstyle(0,0,2);
outtextxy(65,25,"Информационно - обучающая система");
//---------
setcolor(7); //Смещение текста на два
settextstyle(0,0,2); //пикселя,создающее эффект
outtextxy(63,25,"Информационно - обучающая система"); //трехмерности
//---------
setcolor(8);
settextstyle(0,0,2);
outtextxy(65,45,"на тему:");
//--------- //Смещение текста на два
setcolor(7); //пикселя,создающее эффект
settextstyle(0,0,2); //трехмерности
outtextxy(63,45,"на тему:");
//---------
setcolor(3);
settextstyle(0,0,2);
outtextxy(120,180,"АТОМНО-МОЛЕКУЛЯРНАЯ ТЕОРИЯ.");
outtextxy(105,200,"ДОКАЗАТЕЛЬСТВА СУЩЕСТВОВАНИЯ");
outtextxy(185,220," АТОМОВ И МОЛЕКУЛ");
setcolor(8);
settextstyle(0,0,1);
outtextxy(65,430,"Нажмите ENTER для продолжения");
//---------
setcolor(7); //Смещение текста на два
settextstyle(0,0,1); //пикселя,создающее эффект
outtextxy(63,430,"Нажмите ENTER для продолжения"); //трехмерности
//---------
setcolor(8);
settextstyle(0,0,1);
outtextxy(65,440,"Нажмите esc для выхода");
//--------- //Смещение текста на два
setcolor(7); //пикселя,создающее эффект
settextstyle(0,0,1); //трехмерности
outtextxy(63,440,"Нажмите esc для выхода");
//---------
//****************************************************
do //События нажатия клавиш Enter и Esc
{
int choice;
choice=getch();
if (choice==27) return -1; //Если Esc, то выход из программы
if (choice==13) return 0; //Если Enter, то переход к меню
}
while(1);
//****************************************************
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//модуль POISK.c
#include"bib.h"
//-----------------------------Поиск слова-----------------------------------
char searchstr[30];
int search(FILE *f)
{
char in[2] = {' ','\0'};
int k;
int tmppos,oldpos; //Позиция строки в переменной tmp и текущая позиция слов
char *tmp; //Переменная tmp,в которую происходит считывание строк из
oldpos = ftell(f); //файла
setfillstyle(SOLID_FILL,7); //Цвет окна поиска
settextjustify(CENTER_TEXT, CENTER_TEXT); //Положение строки в полосе поиска
bar(220,190,420,250); //Окно поиска
setcolor(7); //Цвет рамки окна поиска
rectangle(220,190,420,250); //Рамка окна поиска
setfillstyle(SOLID_FILL,16); //Цвет полосы поиска
setcolor(15); //Цвет букв меню поиска
outtextxy(320,225,"Esc - Выход");
outtextxy(320,240,"Enter - Далее");
//****************************************************
do
{
bar(230,200,410,215); //Полоса поиска
setcolor(8); //Цвет рамки трехмерности на полосе поиска
rectangle(231,201,409,214); //Рамка на полосе поиска эффекта трехмерности
setcolor(15); //Цвет вводимого искомого слова
outtextxy(320,210,searchstr); //Набор искомого слова
k=getch();
if ((k!=13)&&(k!=27))
{
if (k!=8)
{
in[0]=k;
if (strlen(searchstr)<9) //Если слово меньше 9-ти знаков
strcat(searchstr,in); //дописываем в конец слова
} //признак окончания строки,иначе
else //стираем последний знак слова и
searchstr[strlen(searchstr)-1]='\0'; //все равно дописываем знак окончания
} //строки ('\0')
} //Заносим искомое слово в переменную
while((k!=13)&&(k!=27)); //searchstr
//****************************************************
fgets(tmp,74,f); //Считываем строки из файда в
//**************************************************** //переменную tmp
do
{ //Освобождаем занятую па-
freemem(tmppos); //мять под эту переменную
//------------------------------
tmppos = ftell(f);
fgets(tmp,74,f);
if (strstr(tmp,searchstr)!=NULL) //Ищем подстроку searchstr в строке tmp,
return tmppos; //и если подстрока существует,
} //то возвращаем его позицию (tmppos)
while(!feof(f)); //на позицию первой строки,ищем пока не дойдем
//**************************************************** //до конца файла
bar(230,200,410,215); //Полоса поиска
setcolor(8); //Цвет рамки трехмерности на полосе поиска
rectangle(231,201,409,214); //Рамка на полосе поиска эффекта трехмерности
setcolor(15); //Цвет надписи "Строка не найдена"
outtextxy(320,210,"Строка не найдена"); //Если слово не найдено
getch(); //то положение строк на
return oldpos; //экране не меняется
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//модуль FILE_OP.с
#include"bib.h"
//-----------------------Загрузка информации из файла------------------------
int show_file(char filename[12], int pos)
{
FILE *f;
char str[75];
int oldpos,cur=0;
//====================================
if ((f = fopen(filename,"r"))!=NULL)
{
do
{
ramka();
settextstyle(0,0,0);
int cury = 0; //Приращение на которое сместится
oldpos=pos; //следующая строка
fseek(f,pos,SEEK_SET);
//****************************************************
do
{ //Выводит на экран строку в 74
fgets(str,74,f); //символа
str[strlen(str)-1]='\0';
setcolor(15); //Цвет текста(Белый)
settextjustify(LEFT_TEXT,LEFT_TEXT);
if (!feof(f)) outtextxy(40,35+cury,str);
cury+=12; //Увеличение счетчика смещения
}
while((!feof(f))&&(cury<370));
//****************************************************
pos=ftell(f);
if (feof(f)) pos=-1;
setcolor(7);
line (35,409,615,409); //Две прямые над кнопками
line (35,414,615,414); //выбора в меню обучение
setcolor(8);
line (35,410,615,410); //Тени двух прямых над кнопками
line (35,415,615,415); //выбора в меню обучение
int k;
//===================================
//****************************************************
do
{
for (int i=0; i<4; i++) //Пока курсор находится в нужном
{ //месте его цвет серый,иначе
if (i==cur) setcolor(7); //в других местах-черный
else setcolor (16);
rectangle(42+160*i,422,118+160*i,448); //Прямоугольник выбора с прираще-
rectangle(41+160*i,421,119+160*i,449); //нием счетчика i (нужно для пе-
rectangle(40+160*i,420,120+160*i,450); //редвижения рамки выбора по экрану
rectangle(39+160*i,419,121+160*i,451);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
for (i=0; i<4; i++) //Пока курсор находится в нужном
{ //месте его цвет темносерый,иначе
if (i==cur) setcolor(8); //в других местах-черный
else setcolor (16);
rectangle(42+160*i,422,118+160*i,448); //Тень п для рямоугольник выбора с прираще-
rectangle(41+160*i,421,119+160*i,449); //нием счетчика i (нужно для пе-
//редвижения рамки выбора по экрану
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
settextjustify(CENTER_TEXT,LEFT_TEXT);
setcolor(8);
settextstyle(0,0,1);
outtextxy(81,440,"Выход"); //Тени для кнопок выбора
outtextxy(241,440,"Поиск"); //действий в меню обучения
outtextxy(401,440,"<<Назад");
outtextxy(561,440,"Далее>>");
//-----------------------------------------
setcolor(7);
outtextxy(79,440,"Выход"); //Кнопки выбора действий
outtextxy(239,440,"Поиск"); //в меню обучения
outtextxy(399,440,"<<Назад");
outtextxy(559,440,"Далее>>");
//-----------------------------------------
k=getch();
if (k==77) cur++; //Пердвижение курсора вправо
if (k==75) cur--; //Пердвижение курсора влево
if (cur==-1) cur=3; //Переход на крайний правый пункт
if (cur==4) cur=0; //Переход на крайний левый пункт
if (k==27) return -1; //Если ESC,то выход из меню "Теория"
//***********************************
if ((k==13)&&(cur==0)) return -1; //Выход из меню "Теория"
//***********************************
if ((k==13)&&(cur==1)) //Поиск слова, фразы
{
fseek(f,oldpos,SEEK_SET);
pos = search(f); //Присвоение позиции функции
} //поиска слова
//***********************************
if ((k==13)&&(cur==2))
{
if (oldpos>(74*20)) //Скролинг экрана вверх
{
fseek(f,-74*20+oldpos,SEEK_SET);
fgets(str,74,f);
pos=ftell(f);
} else pos=0;
}
//***********************************
if ((k==13)&&(cur==3))
{
if (oldpos<(540*20)) //Скролинг экрана вниз
{
fseek(f,74*20+oldpos,SEEK_SET);
fgets(str,74,f);
pos=ftell(f);
} else pos=oldpos; //Если конец текста,то не куда не
} //двигаемся
//***********************************
}
while(k!=13);
}
while(pos!=-1);
fclose(f);
}
return pos; //Функция возвращает позицию
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//модуль TEST.c
#include"bib.h"
//-------------------------------Тестирование--------------------------------
char *otvet; //Правильный ответ
char *user_otvet;
void test()
{
FILE *fansw;
FILE *test_file;
char i = 0, k = 0, len = 0;
fansw = fopen("answer.dat", "rb");
fread(&len, 1, 1, fansw); //считываем
otvet = (char *)malloc(len+1); //Резервируем память под
user_otvet = (char *)malloc(len+1); //данные переменные
memset(otvet, 0, len+1);
memset(user_otvet, 0, len+1);
fread(otvet, len, 1, fansw); //считываем
fclose(fansw); //Закрытие файла
if ((test_file = fopen("test.txt","rt"))!=NULL)
{
char otv1[50];
char otv2[50];
char otv3[50];
char otv4[50];
char vopr[50];
char tmp[50];
int good=0, bad=0;
i = 0;
while (!feof(test_file)) {
memset(vopr, 0, 50);
memset(otv1, 0, 50);
memset(otv2, 0, 50);
memset(otv3, 0, 50);
memset(otv4, 0, 50);
fgets(vopr,50,test_file); //Выводим вопрос на
*(vopr+strlen(vopr)-1)='\0'; //экран, а также все
fgets(otv1,50,test_file); //четыре вопроса и
*(otv1+strlen(otv1)-1)='\0'; //дописываем в конец
fgets(otv2,50,test_file); //каждой строки
*(otv2+strlen(otv2)-1)='\0'; //символ "окнчания
fgets(otv3,50,test_file); //строки"
*(otv3+strlen(otv3)-1)='\0';
fgets(otv4,50,test_file);
*(otv4+strlen(otv4)-1)='\0';
int k;
k = menu(vopr,otv1,otv2,otv3,otv4);
if (k==-1) return;
user_otvet[i] = k+1; //ответ пользователя
i++; //увеличивается
}
ramka(); //Прорисовка рамки
for(k=0;k<i;k++)
{
if (otvet[k] == user_otvet[k])
good++;
else bad++;
}
memset(tmp,0,50);
itoa(good,tmp,10);
outtextxy(30,50,"Правильных ответов: "); //Подсчет результата
outtextxy(350,50,tmp); //ответов пользователя
memset(tmp,0,50); //и вывод соответствую-
itoa(bad,tmp,10); //щего сообщения с ре-
outtextxy(30,80,"Неправильных ответов: "); //зультатами
outtextxy(380,80,tmp);
outtextxy(30,400,"Ваша оценка знаний: ");
settextstyle(1,0,2);
outtextxy(30,440,"Нажмите ESC для возврата в предыдущее меню");
settextstyle(0,0,2); //Характеристики текста
if (good<=3) //слова результатов
{ //тестирования
memset(tmp,0,50); //Выделение памяти под переменную tmp
strcpy(tmp," Плохо "); //Копирует строку "Плохо"
} //в строку tmp
if (good>3 && good<=6)
{
memset(tmp,0,50);
strcpy(tmp,"Удовлетворительно"); //Копирует строку "Удовлетворительно"
} //в строку tmp
if (good > 6)
{
memset(tmp,0,50);
strcpy(tmp, "Хорошо"); //Копирует строку "Хорошо"
} //в строку tmp
if (good == 10)
{
memset(tmp,0,50);
strcpy(tmp, " Отлично!!! "); //Копирует строку "Отлично"
} //в строку tmp
outtextxy(340,400,tmp); //В зависимости от набранных
} //баллов выводит результат
do //События нажатия клавиш Enter и Esc
{
int choice;
choice=getch();
if (choice==27) return ; //Если Esc, то выход из программы