Смекни!
smekni.com

Разработка информационно-обучающей системы на тему “Атомно-молекулярная теория. Доказательство существования атомов и молекул (стр. 6 из 7)

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]='&bsol;0'; //все равно дописываем знак окончания

} //строки ('&bsol;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]='&bsol;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)='&bsol;0'; //экран, а также все

fgets(otv1,50,test_file); //четыре вопроса и

*(otv1+strlen(otv1)-1)='&bsol;0'; //дописываем в конец

fgets(otv2,50,test_file); //каждой строки

*(otv2+strlen(otv2)-1)='&bsol;0'; //символ "окнчания

fgets(otv3,50,test_file); //строки"

*(otv3+strlen(otv3)-1)='&bsol;0';

fgets(otv4,50,test_file);

*(otv4+strlen(otv4)-1)='&bsol;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, то выход из программы