Создание тестовой системы и счетчика посещений страницы средствами CGI и PHP (Проверка знания правил дорожного движения)

Страницы работы

4 страницы (Word-файл)

Содержание работы

Министерство образования и науки РФ

Новосибирский Государственный Технический Университет

Кафедра ВТ

Лабораторная работа № 3

по дисциплине «Инфокоммуникации»

«Создание тестовой системы и счетчика посещений страницы средствами CGI и PHP»

Факультет: АВТ                                                                         Преподаватель: Новицкая Ю.В.

Группа: АМ-509

Студент: Трегубов И.Г.

                 Волынцев А.А.

Новосибирск, 2009 г.


1.  Задание:

Разработать CGI-модуль и PHP-скрипт.

Вариант 1

CGI. Проверка знания правил дорожного движения и текстовый счетчик посещения страницы.

PHP. Проверка знаний правил дорожного движения с записью результатов прохождения теста разными пользователями в файл и вывода результатов в виде диаграммы.

2.  Ход работы:

2.1  CGI

CGI – модуль в данной работе представляет собой скомпилированный с помощью Microsoft Visual Studio .exe файл.

Приведем кода CGI - модуля:

#include <iostream.h>

#include <stdlib.h>

#include <string.h>

#include <stdio.h>

#include <fstream.h>

char *GetName(char *out,char *in) // функция извлечения информации о сдающем

{

            char *tmp1,*tmp2;                     // два указателя для продвижения         

            tmp1=strstr(in,"&");    // возвращаем часть строки, начинающуюся с первого вхождения &

            tmp1[0]=0;

            tmp2=strstr(in,"=");        // возвращаем часть строки, начинающуюся с первого вхождения =

            tmp2++;                                                           // переводим указатель на символ вперед

            strcpy(out,tmp2);                       // копирование значения

            ++tmp1;

            return ++tmp1;                          // перевод указателя дальше

}

char *GetVal(int *out,char *in) // функция извлечения значений

{

            char *tmp1,*tmp2;

            if(strstr(in,"&")) {tmp1=strstr(in,"&"); tmp1[0]=0;}

            else                                                     

            {

                        tmp2=strstr(in,"=");// возвращаем часть строки, начинающуюся с первого вхождения =

                        tmp2++;

                        *out=atoi(tmp2);            // преобразуем из строки в число

                        return NULL;

            }

            tmp2=strstr(in,"=");        // возвращаем часть строки, начинающуюся с первого вхождения =

            tmp2++;                                                           // переводим указаетль на символ вперед

            *out=atoi(tmp2);                        // перевод в int и передаем на выход

            return ++tmp1;

}

void main()

{

            char *name1=new char[20];

            char *name2=new char[20];

            char *name3=new char[20];

            char *tmp, *ocenka;

            int v1,v2,v3,v4,v5,count,count2;

            v1=v2=v3=v4=v5=count=count2=0; // инициализация

            char *query=getenv("QUERY_STRING"); // устанавливаем указатель на переменную среды

            if(!query) return; // если переменной не существует, то реализуем возврат

            tmp = new char[80];

            strcpy(tmp,query);  // копируем строку 

            tmp=GetName(name1,tmp); // получаем фамилию

            tmp=GetName(name2,tmp); // имя         

            tmp=GetVal(&v1,tmp); // значения переменных в ответах

            tmp=GetVal(&v2,tmp);

            tmp=GetVal(&v3,tmp);

            tmp=GetVal(&v4,tmp);

            tmp=GetVal(&v5,tmp);

            count=v1+v2+v3+v4+v5;

            if (count==5) ocenka="тест пройден";

            else ocenka="тест не пройден";

            cout<<"Content-type:text/html\n\n"; // вывод сформированного документа о результатах

            cout<<"<html>";

            cout<<"<body bgcolor=yellow>";

            cout<<"<h3><u>Результаты</u></h3>";

            cout<<"<b>Ученик:</b> "<<name1<<" "<<name2<<"<br>";

            cout<<"<b>Правильных ответов: </b>"<<count<<" из 5<br>";

            cout<<"<b>Итог: </b>"<<ocenka;

            ifstream fin("count.txt");

            int cnt;

            fin>>cnt;

            cnt++;

            fin.close();

            cout<<"<br><h4>Тест проходили уже "<<cnt<<" раз(а).</h3>";

            cout<<"</html>";

            ofstream fout("count.txt");

            fout<<cnt;

            fout.close();

}

            Данный скрипт является обработчиком html формы, которая для CGI и для PHP скриптов является аналогичной (описание обработчика в пункте 2.3)

2.2  PHP

<?

echo "<html><body bgcolor=yellow>";

if (!isSet($_COOKIE["Counter"])) $_COOKIE["Counter"]=0;  //Хранение счетчика в cookie

$_COOKIE["Counter"]++;

SetCookie("Counter",$_COOKIE["Counter"],time()+3600);

$name1 = $_GET['name1']; //получение переменных из массива GET

$name2 = $_GET['name2'];

$r1 = $_GET['r1'];

$r2 = $_GET['r1'];

$r3 = $_GET['r1'];

$r4 = $_GET['r1'];

$r5 = $_GET['r1'];

$count=$r1+$r2+$r3+$r4+$r5;  //Суммирование результата

            if ($count<=2) $ocenka="неуд";

            if ($count==3) $ocenka="удовл";

            if ($count==4) $ocenka="хорошо";

            if ($count>=5) $ocenka="отлично";

echo "<h3><u>Результаты</u></h3>";  //Вывод

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
56 Kb
Скачали:
0