на тему рефераты
 
Главная | Карта сайта
на тему рефераты
РАЗДЕЛЫ

на тему рефераты
ПАРТНЕРЫ

на тему рефераты
АЛФАВИТ
... А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

на тему рефераты
ПОИСК
Введите фамилию автора:


Реферат: Организация доступа к базам данных в Интернет


/* это многострочный

   комментарий */

(или можно посреди строки /* кусок программки */ при отладке так вот закомментировать)

/** это особый комментарий */ для создания документации при помощи утилиты javadoc. Она кое-что понимает и создает документацию в виде HTML-страницы. Например комментарий относится к введенной следом переменной в программке. Тогда в HTML-странице будет мой комментарий и следом - та самая переменная указана. Посмотрите в Документацию Java! Полезно документацией уметь пользоваться. Ее очень много и все запомнить нереально. (и, как уже было сказано, в печатаных книгах за Sun не поспевают.. Реплика из зала: есть книжка, морально старая, но хорошо написанная - 2 тома - P.Norton "программирование на Java".

П2.2.1. Типы данных:

Простые типы данных

целочисленные = для хранения целых чисел

byte (8 bit)  : -128 - +127

short = 2 byte : -32768 .. +32767

int = 4 byte  : -... +2147483647

long = 8 byte  : много-много ( 10**19 степени)

Много разных типов? Это сделано для экономии места в оперативной памяти. Если есть куча *небольших* чисел, то мне незачем отводить на них *большие* куски памяти. На использование int рассчитаны все функции. Если переполняется предусмотренная под тот или иной тип ячейка памяти - данные просто теряются. Но такие ошибки надо предусматривать и перехватывать механизмом перехвата исключительных ситуаций.

Вещественные числа (с плав. точкой):

  float : 4 byte : min=+/-1,4*10**-45  max=+/-3,4*10**+38

  double : 8 byte : max=+/-2*10**-308  max=+/-1.7*10**+308

Символьные

char : 2 byte (чтобы туда влазила кодировка unicode - см www.unicode.org - 65 000 символов на всех языках и еще место осталось). В Win окне или в DOS-окне не сработает, но в бродилках все ОК

Логические-булевские

boolean : thrue/false (нельзя как в других языках понимать это как 0 или 1)

Что такое "простые типы" ? Это значит отвели память и никак ее не структурировали. А еще существуют сложные типы данных - объекты. Об них позднее. Теперь о них упоминаю, чтоб вас не пугало отсутствие строкового типа string. Объекты - это современно и здорово. Это нужно освоить. Это несложно и удобно... Но пока закончим разговор про простые типы.

  int a;   // мы сделали переменную имя а для хранения целого числа.

           // в конце оператора ставят ; и пробелов, табуляций.. может

// быть много (не то что в Бейсике)

Память не только выделилась, но и заполнилась. В других языках надо инициализировать переменную - назначить ей некоторое значение, "ноль" например, иначе там будет вредный мусор. А в java переменная сама собой заполняется нулями. Вещественная переменная заполнилась бы 0,0 ; Символьная заполнится нулевым символом кодировки unicode (т.е. 0000 ), boolean - false ; (хотя лучше все же инициализировать явно, по старинке)

Вводить переменные можно в любом месте до их использования. А не только в начале.

Имена как и в других языках - состоят из букв, цифр (но с цифры имя нельзя чтоб начиналось), символа подчеркивания. (это правило полезно использовать и в именах файлов)

   a = 5 ;  // в объявленную ранее переменную занесли 5

Можно эти операции объединить вот так:

   int a = 5 ;

Примеры для переменных других простых типов:

   float c = 7.2 ;

   boolean d = true ;

   char e = 'M' ; // только в одинарные кавычки

Спецсимволы - как и в C - например:

\n enter=newline \t = tab  \r = enter  \f = newpagetoprint \b backspace

Использование числовых значений кодировки unicode:

\u0037 = это то же самое, что символ '7' (цифры десятичные)

Расшифровка символов есть на сайте Unicode и на

розданном CD есть расшифровка для русского языка.

Чтобы спецсимвол не работал как спецсимвол, ставят косую черту:

  char c = '\'' ; // тут в "c" поместили символ "одиночная кавычка"

Экзотика: Можно использовать и 8 и 16-ричную форму записи, например так:

  a = 0x7B  // записано 16-ричное число 7B

  a = 0175  // записано 8-ричное число 175

---

Какие преобразования типов данных возможны?:

   int x;  // 4 byte длиной

   byte y; // 1 byte длиной

   x=y; // более короткое число "y 1 byte длиной" положили в место

        // для длинного "x 4 byte длиной"

Наоборот тоже возможно, но компилятор будет ругаться.

Еще можно явно преобразовывать типы:

   y=(byte)x;  // сделать из 4-байтового числа "x" 1-байтовое

Аналогичные штуки работают для вещественных чисел.

   double z = 7.8; Превратим вещ. z в целое

   x=(int)z;  // сработает, но пропадет хвостик 0.8

А если попытаться написать x=z; то компилирование не произойдет и байт-код не получиться. Наоборот, преобразование с удлинением места в памяти не обязательно указывать во что преобразовываем. То есть при таком безопасном преобразовании можно применить неявную форму записи преобразования. То есть в примере выше можно написать z=x;

П2.2.2. Математические операции

Все обычные операции

(кто не знает что такое % - это есть вычисление остатка от

целочисленного деления, например

  10   % 3 -> получится 1 ,

  10,2 % 3 -> тоже      1)

увеличить на число и результат положить в ту же ячейку-переменную, откуда брали. Сокращают запись:

  а=а+5;   то же самое что   а+=5;

Аналогично пишут для - % * /

Инкремент, например а=а+1;

++а = сначала увеличиваем переменную, потом можем

      воспользоваться хранящимся в ней значением.

а++ = наоборот, сначала можем воспользоваться хранящимся

      в переменной значением, потом увеличиваем ее на единицу;

Пример:

  int a=5, b;

  b=++a;      // это значит в b попала шестерка

              // (сначала к 5 прибавилась 1, потом ее

              // использовали для занесения в ячейку "6")

 Аналогично есть "декремент"

  --а или а--

(это все не сложно, нужно лишь привыкнуть и запомнить разные разности)

Сравнение

 (результат будет булевского типа)

  <  > =< >= ==

  != не равно

Пример

   int a = 5;

   int b = 6;

   boolean c

   c = а == b     // в "с" будет-запишется false

Логические операции

  || или

  !  не

  && и

исчерпывающие примеры

  true && true = true

  true && false = false

  false && true = false

  false && false = false

  true || true = true

  true || false = true

  false || true = true

  false || false = false

  !true = false

  !false = true

Зачем это нужно? Для написания всяких сложных условий типа "если переменная А меньше того-то, но больше сего-то , тогда

П2.2.3. Исключительные ситуации (exeptions)

Прежде чем погибнуть по причине ошибки, программа создает "исключения". Это объекты - экземпляры какого-нибудь класса из подклассов java.lang.Throwable Класс Throwable содержит строку сообщения String. Много стандартных классов-наследников у Throwable.

Их (объекты-"исключения") можно перехватывать и обрабатывать, не давая совершиться чему-то страшному. Например вводим буквы вместо цифр в калькулятор. "Обработать искл.сит.", - значит понять что случилось, остановить программу и выдать сообщение, "не цифра!" например. Применяется конструкция

try{

       тут кусок программы способный

       привести к ошибкам

    }catch(Exception e){

       тут кусок программы "что делать"

       когда ошибка произошла

    }finally{

       что делать дальше независимо от результатов обработки в catch

       надеюсь далее будет пример

    }

Имя "Exception" означает на самом деле ту самую искл. сит., которая произошла в классе, который мы вызвали из раздела Try{"тут кусок программы способный привести к ошибкам"}. Компилятор помнит, откуда был сделан вызов метода, далее в том же блоке try-catch приведшего к исключению, поэтому собственное имя искл.сит. не требуется, вполне годится общестандартное имя "Exception". Экземпляр класса Exception будет создан.

Исключительные ситуации можно создавать и искусственно. Для проверки неких условий. (оператор throw new "имя_Exception" <-[внутри try - catch]). Тут уже Исключ.сит. - это некий объект некоего нами названного класса (наследника класса "Exception"). И тут уже он (объект нашего класса-наследника) имеет собственное имя!

П2.3 Языковые конструкции Java

П2.3.1. Циклы

с предусловием

while (condition) {

do-some-actions;     // if condition=false, ни разу действие не сделается

}

с после условием

do{

do-some-actions;  // at least it'll be done once

} while (condition a verifier);

с перечислением

for (intitialisation; condition; modification){

do-some-actions;

}

Пример:

   for (int i = 0; i < 7; i++){

можно на самом деле инициализировать одну переменную, а наращивать другую и проверять третью, а можно и вообще какое-то условие пропустить (но обязательно его указать пустым местом, то есть поставить соответствующую ему точку с запятой!. Как вы помните, i++ означает i=i+1

Еще можно перечислять несколько переменных в каждом разделе for оператор break можно использовать во всех этих циклах (его пишут предварив его if(условие) тогда break

Еще есть оператор continue - пропускает текущую итерацию и продолжает цикл. Пример

Пример:

for (int i=-3; i<3; i++){

if (i==0) continue;            // нельзя делить на ноль

float a = 5/i;                 // вообще-то если в Java делить на ноль,

}                              // получиться спец_значение inf (некая константа

                               // равная самому большому числу из возможных

                               // вещественных чисел

Тут i живет только внутри цикла, а вот а - видна снаружи и после завершения цикла не пропадает. Пример однако глупый, потому что промежуточные значения а нигде не останутся.. но это только пример на циклы.

П2.3.2. Условный переход

Все программерство стоит на условных переходах вроде такого "если условие верно, то делай это, если нет - делай то" Короче говоря "Если.. то.." Или по иностранному (все как в языке C)

if (условие) {

   действие;    // действие м/б одно или куча

   ...          // если действие одно, фигурные скобки можно не писать

   действие;

}

Если действие одно-единственное, фигурные скобки можно не писать.

if (проверяемое условие или логическая переменная){

   действие; 

  ...

   действие;

}else{

   действие; 

   ...

   действие;  // вместо действия могут быть вложенные if

}

Конструкция switch - выбор значений переменной из списка вариантов

switch (value){

  case value1 : do_this;

                break;         // срочный выход из цикла

  case value2 : do_this;

  case value3 : разные операторы;

  default : еще операторы ;

}

П2.3.3. Массивы

Это тоже объекты. В отличие от других типов, в библиотеке явно нет стандартного класса от Sun, из которых они создаются. Но оператор new используется и все делается похоже на создание других объектов.

1) Указывается тип данных которые будут храниться в ячейках массива и в ячейках можно будет хранить данные только одного этого типа.

  int a[];

  int[] a;

2) выделить память и указать сколько ячеек в массиве:

   a=new  int[5] ;

Все ячейки пронумерованы начиная с нуля. Обращаться к каждой можно используя квадратные скобки. А что тут объектного? Вот что: у объекта "массив" есть одно-единственное свойство length - длина массива в ячейках. Ее читают соответствующим методом-функцией. Длина обозначена числом типа int (long нельзя).

Массивы только одномерные. Подобие многомерности получается путем создания массива из массивов. В ячейке массива сидит массив (причем они разномерные и более того..)

Все массивы "динамические". Значит ли это, что они могут менять свою длину в процессе работы? НЕТ! Массив после создания можно только уничтожить (длина станет null). Слово "динамический" означает, что память под массив можно выделить в любом месте программы (а не заранее!) и память только в том месте программы - на том этапе работы программы - и выделится. Удобно вообще-то: если у вас огромный массив, то память он начнет загромождать не заранее, а только когда он понадобится.

Как еще можно создавать массивы? Можно сразу ему присвоить начальное значение. Длина будет такая, сколько значений указали:

   int a[] = {7, 21, 85};   // слово new тут не нужнО

Многомерные массивы  :

Объявим "массив с цифрами float в ячейках"

   float a[][];

Инициализируем его:

   float a[][] = new float [4][2];  // матрица 4 х 2

Разномерный массив:

   float a[][] = new float [4][];

Не сказано какой длины будут висеть наборы ячеек из каждой из 4-х ячеек "первого" массива (массива массивов). Это первое new не выделяет память, а только создает некие указатели. Далее нужно написать для выделения памяти :

   a[0] = new float[3]; - в первую ячейку положили массив длиной "три"...

Про массивы все. Очень нехарактерно для Java то, что в классе массив есть всего один метод. Есть еще класс Вектор, там методов полно, но есть и расплата - вектор медленно работает. Обычно в классах по не одному десятку методов.

П2.3.4. Подпрограммы

Все. Зачем все вышеназванное нужно? Все оно используется не само по себе, а внутри функций. ФУНКЦИЯ - группа операторов под общим ИМЕНЕМ. Обращаясь к ней по имени мы их все вызываем к работе. Может понятнее было бы назвать ПОДПРОГРАММОЙ. Отработав, операторы дают некий результат своей работы - его "функция" возвращает.

Чтобы вернуть результат, нужно указать заранее его тип. Итак функции пишут так:

data_type FunctionName (тип_арг1 имя_арг1, тип_арг2 имя_арг2, ... тип_аргN имя_аргN){

  перечень действий-операторов, составляющих;

  подпрограмму-функцию;

return(результат);   // спец_оператор для возврата результата работы функции-подпрограммы

  //  return результат;  - еще вариант записи оператора "возврат результата"

  // этот оператор еще по совместительству завершает функцию (работу подпрограммы)

}

Результатов возвращаются не более одного. Бывает, что функция не должна ничего возвращать. Тогда используют специальный тип - void ;

Перед типом результата иногда пишут так наз. описание доступа (спецификатор доступа) - указывают кто может использовать данную. функцию. Об этом позже.

ПРИМЕР - некая функция для суммирования целых чисел.

int Sum(int x, int y){

   return (x+y);

}

Аргументы простых типов передаются "по значению". Это значит, что внутри подпрограммы создаются копии переданных туда в качестве аргументов переменных, а сами эти переменные не изменяются. (((Если бы внутри функции использовались указатели - это было бы "по ссылке" .. На самом деле передача внутрь функции объектов производится "по ссылке" - об этом позднее. Еще раз: Объекты передаются по ссылке! (нужно внутрь некоторого объекта, в его функцию, передать посторонний объект со всеми его переменными=полями и их значениями... Передается лишь ссылка на этот объект. Внутри области нашего первого объекта НЕ выделяется память, не создается в ней копия постороннего передаваемого объекта.)))

Внутри функции-подпрограммы можно объявлять переменные - они есть "локальные". Когда функция начала работать, этим переменным отведется место в памяти компутера, но как только она перестанет работать (завершится), то эта переменная из памяти уничтожится. И вне функции она будет не видна все время работы функции.

В обычном программировании вы еще слышали "глобальную" переменную. Тут этого термина нет, но считайте что все переменные объявленные вне функции - "глобальные". Они называются на самом деле "полями" - об этом позднее!

int Sum(int x, int y){

   int rez; // локальная

   rez = x + y;

   return (rez);

}

ПЕРЕГРУЗКА функции

Это просто. В программе можно объявить несколько функций с одинаковыми именами, различающиеся только списком аргументов. Этот список должен быть разным обязательно. Разница м/б как в количестве, так и в их типе. Очень популярный механизм. Буквально каждая функция имеет несколько однофамильцев. Например мы хотим суммировать не только целые, но и вещественные числа. А язык-то жестко типизированный. Вот и пригодится перегрузка:

float Sum(float x, float y){

   return (x+y);

}

Если при вызове функции я указал вещественное, то вызовется Sum-вещественная, а если целые - Sum-цел.

float a=Sum(5, 6);

a = Sum(5,2, 6);

Пример не ахти какой, так как возможно безопасное преобразование типов... Но идея ясна. Очень это распространено, среди матем. библ. функций..

Функции не живут сами по себе в java-программировании. Они живут внутри КЛАССОВ.

П2.4. Объектно-ориентированное программирование (ООП).

Зачем нужно? Чтобы экономит силы и использовать объектный код, сочиненный другими людьми. Сама Java -программа - это некий объект. Главное понятие в ООП - понятие класса. Это структура (сложный тип данных), объединяющая переменные и функции для работы с ними.

Класс "мыша"

Mouse{

  x       // переменные внутри класса - "поля" или

  y       //                             "свойства"

  draw()  // функция внутри класса = "метод"

}

Формальное описание синтаксиса класса:

class Name {

   int x, y;

   тело класса;

int Sum (int a, int b){} // описание функций

   float z; // в любом порядке описание переменных и функций..

            // хотя для читабельности все лучше по порядку

}

Класс не похож на функцию, не возвращает никакого значения.

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

По сути класс - что это? Это сложная структура в памяти. Выделяем 4 байта для целого, 4 байта для вещественного, и описываем структуру функции для работы с ними. Но это лишь описание - реально память не выделена. Память выделяется реально - создается объект. То есть конкретный экземпляр класса. Я месяца три после процедурного программирования не мог привыкнуть к терминологии и не мог понять, зачем же это нужно! Попытаюсь вам объяснить все же побыстрее :-)

Класс "люди"

  голова

  руки

  метод_думать (увеличивает значение голова на 1)

  метод хватать (увеличивает значение рук на 1)

все

Мы все - объекты=экземпляры этого класса. Нам выделено место на земле чтобы жить, хватать и думать.

Внутри класса помимо всего прочего существует специальная функция - "конструктор" - называется функция тем же именем, что и класс (в этом примере - "люди"). Она может существовать или не существовать. Она не возвращает никакого результата и void к конструктору не надо приписывать. Она - функция-конструктор - нужна для некоторых начальных (инициализирующих) действий при создании объекта. Какие действия? Разные..

В нашем примере: конструктор присвоит головам и рукам значение "десять". Это я придумываю сам. Пусть будет так. Или пример с мышой: пусть мыша будет при инициализации располагаться в центре экрана. Кто-то должен вычислить координаты центра экрана и вызвать функцию рисования чтобы там мыша была нарисована.

Когда объект создается (человек рождается), то вызывается один-единственный раз конструктор. Если я не описал спец. конструктор, то что по умолчанию? Обычно ничего. Но если и ничего, все же по умолчанию конструктор есть. Хотя по умолчанию он ничего не совершает, ничего не возвращает, никаких аргументов не получает.

Вернемся к примеру Люди: создаем объект Миша класса Люди -

1) объявили переменную сложного типа "Люди" (так как мы писали int a;

   при объявлении переменной простого типа)

 Люди Миша;  // никакая память не выделилась, переменной

// спец_типа Люди - нет, ее "значение" - null

             // в отличие от случая простой переменной - она то

             // "инициализируется" автоматически

2) выделили оперативную память для объекта Миша:

   Миша=new Люди();

Теперь возник кусок выделенной памяти - конструктор там создал структуру для хранения переменных руки, голова, функций-методов.

Разница с обычным программированием: функция делается менее универсальной. Она может работать только над данными данного объекта! Нельзя заставить функцию-метод объекта взять переменную другого объекта. (можно ей передать извне эти переменные-поля как аргументы). Зато (выигрыш) все это дело увязано в одну взаимосвязанную структуру. Еще раз: даже если метод-функцию вызвать снаружи, она чужие данные не сможет взять. А как же передают данные внутрь переменных-полей объекта? Прямой записью в поле или передачей данных внутрь через функцию-метод, ему эти данные дают в качестве аргумента.

Уничтожение объектов. В отличие от Си++ в Java нет Деструктора. Я пишу

   Миша = null;

Объект "Миша" не сразу убивается-освобождает память. Он просто лежит тут, ненужный Миша. А потом, в момент регулярной чистки памяти, его уберут. Java -машина чистит память регулярно.


Приложение 3

 Листинг программы – SearchEngein.java

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.net.*;

import java.util.*;

import java.lang.*;

// Класс Интерфейс

public class SearchEngein extends HttpServlet {

// Объявление глобальных переменных

Properties INIProperties = new Properties();

String query = null,    // Запрос

       value = null;    // Запрос в нужной кодировке

String dbname,   // Имя базы

       dbpath;   // Путь к базе

String dbselect; //

 byte MD  = 30,   // Код разделителя

      MD2 = 31;   // Код разделителя

String RusDos = new String("Cp866");  // Кодировка дос

String RusWin = new String("windows-1251"); // Кодировка Виндовс

String    iso = new String("8859_1"); // Кодировка Сервлета

String RusIso = new String("8859-5"); // Кодировка Исо

// конвертор кодировки из ИСО В Виндовс

private String ConvertISO(String Str) {

try {

Str = new String( Str.getBytes(iso),RusWin);}

catch( java.io.UnsupportedEncodingException e ) { return Str;}

return Str;

}

 public String getServletInfo() {

return "Поиск в базе данных ";

 }

private String RemoveTrash(String str){

return new String(str);

}

// преобразование в нижний регистр

public String toLow(String str){

char old[] = str.toCharArray();

char news[] = new char[str.length()];

char c;

for (int i =0; i<str.length(); i++){

 c = old[i];

 switch (c) {

  case 'А' : {c = 'а';break;}

  case 'Б' : {c = 'б';break;}

  case 'В' : {c = 'в';break;}

  case 'Г' : {c = 'г';break;}

  case 'Д' : {c = 'д';break;}

  case 'Е' : {c = 'е';break;}

  case 'Ё' : {c = 'ё';break;}

  case 'Ж' : {c = 'ж';break;}

  case 'З' : {c = 'з';break;}

  case 'И' : {c = 'и';break;}

  case 'Й' : {c = 'й';break;}

  case 'К' : {c = 'к';break;}

  case 'Л' : {c = 'л';break;}

  case 'М' : {c = 'м';break;}

  case 'Н' : {c = 'н';break;}

  case 'О' : {c = 'о';break;}

  case 'П' : {c = 'п';break;}

  case 'Р' : {c = 'р';break;}

  case 'С' : {c = 'с';break;}

  case 'Т' : {c = 'т';break;}

  case 'У' : {c = 'у';break;}

  case 'Ф' : {c = 'ф';break;}

  case 'Х' : {c = 'х';break;}

  case 'Ц' : {c = 'ц';break;}

  case 'Ч' : {c = 'ч';break;}

  case 'Ш' : {c = 'ш';break;}

  case 'Щ' : {c = 'щ';break;}

  case 'Ъ' : {c = 'ъ';break;}

  case 'Ы' : {c = 'ы';break;}

  case 'Ь' : {c = 'ь';break;}

  case 'Э' : {c = 'э';break;}

  case 'Ю' : {c = 'ю';break;}

  case 'Я' : {c = 'я';break;}

  default  : {news[i]=c;}

 }// switch

 news[i] = c;

}

 return new String(news);

}

//

private String TagRemove(String s){

boolean inTag = false;

boolean tag = false;

int sn = 0;

char c;

int m = s.length();

char[] cd = new char[m];

char[] old = s.toCharArray();

char cMD = (char) MD2;

for (int i=0; i<m; i++)

 {c=old[i];

 if (tag) { c=' '; tag = false; }

 else  if ( c == cMD ) { c=' '; tag = true;}

     cd[i] = c;

 }

return  new String(cd);

}

//

public void dbFileRead(String dbNamePath, PrintStream out, String query) {

 String mAvtor = null;    // 100

 String msAvtor = null;   // 700

 String mName = null;     // 245

 String mPrinter = null;  // 260

 String mSize = null;     // 300

 String mKey = null;      // 653

 String mSeria = null;    // 490

 String mBBK = null;      // 91

 String mKaIndex = null;  // 90

 

 long fPosMarker = 0, // Позиция относительно начала

      fPosData = 0;   //

 boolean done = false,

         Avtor = false;

 int mC =0,

     mE =0;           // Счетчик

 byte Jumper[] = new byte[5]; // Размер запяси - символьный

 int JIndex = 0, // Размер запяси - числовой

     JTemp  = 0, // Размер данных + словарь

     MIndex = 0, // Счетчик для массива

     MTemp  = 0; // Счетчик полей

if (query != null){

try { RandomAccessFile dbfile = new RandomAccessFile(dbNamePath,"r");

// Цикл чтения файла по маркерам

   while (fPosMarker != dbfile.length()) {

      try { mC++;

            dbfile.seek(fPosMarker);

            dbfile.read(Jumper);

            String jBuf = new String(Jumper);

            JIndex = Integer.parseInt(jBuf,10);

              int b = 0;

// Поиск конца словаря

               while ( b != MD){

                dbfile.seek(fPosMarker+24+MIndex);

                 b = dbfile.read();

                MTemp++;

                MIndex = MTemp;

                }

                MTemp= MTemp - 1;

// чтение Словаря из файла в отдельный массив

               byte Dic[] = new byte[MTemp];

                dbfile.seek(fPosMarker+24);

                 dbfile.read(Dic);

// чтение полей данных из файла в массив

            fPosData = fPosMarker+24+MTemp;

              String sDic = new String(Dic);

               byte MarcRec[] = new byte[JIndex-24-MTemp];

               dbfile.seek(fPosData);

               dbfile.read(MarcRec);

               int DI2 = 0,

                   DI3 = 0,

                   DI4 = 0,

                   DI5 = 0,

               PNum    = 0, // Номер поля числовой

               PLength = 0, // Длинна поля числовая

               PStart  = 0; // Начальная позиция поля чиловая

// сканирование номеров полей

               while ( DI2 != MTemp){

                DI3=DI2+3;

                String DStr  = sDic.substring(DI2,DI3);// Номер поля

                DI4=DI3+5;

                String DStr2 = sDic.substring(DI3,DI4);// Начальная позиция

                DI5=DI4+4;

                String DStr3 = sDic.substring(DI4,DI5);// Длинна поля

                DI2=DI2+12;

                 PLength = Integer.parseInt(DStr3,10);// Узнаем длинну поля

                 PStart = Integer.parseInt(DStr2,10);// Узнаем начало поля

                 PNum = Integer.parseInt(DStr,10);// Код

                 byte Pole[] = new byte[PLength];

// Чтение поля из файла

               for (int PIndex = 0; PIndex < PLength; PIndex++) {

                 Pole[PIndex] = MarcRec[PStart+PIndex];

               }

                 String Pol = new String(Pole);

                 if (Pol == null) Pol=" ";

                 switch (PNum) {

                  case 100 : { mAvtor    = TagRemove(Pol.substring(5));break;}

                  case 700 : { msAvtor   = TagRemove(Pol.substring(5));break;}

                  case 245 : { mName     = TagRemove(Pol.substring(5));break;}

                  case 490 : { mSeria    = TagRemove(Pol.substring(5));break;}

                  case 91  : { mBBK      = TagRemove(Pol.substring(5));break;}

                  case 90  : { mKaIndex  = TagRemove(Pol.substring(5));break;}

                  case 260 : { mPrinter  = TagRemove(Pol.substring(5));break;}

                  case 300 : { mSize     = TagRemove(Pol.substring(5));break;}

                  case 653 : { mKey      = TagRemove(Pol.substring(5));break;}

                  default  : {}

                 }// switch

               }// конец проверки полей

                if ( mAvtor == null)  mAvtor=" ";

                if ( msAvtor == null) msAvtor=" ";

                if ( mName == null)  mName=" ";

                if ( mPrinter == null) mPrinter=" ";

                if ( mSize == null) mSize=" ";

                if ( mKey == null) mKey=" ";

                MarcRecord Rec = new MarcRecord( mAvtor,

                                                 msAvtor,

                                                 mName,

                                                 mPrinter,

                                                 mSize,

                                                 mKey,

                                                 mSeria,

                                                 mBBK,

                                                 mKaIndex);

                 if ( Rec.rAvtor.indexOf(query)  != -1 ||

                      Rec.rsAvtor.indexOf(query) != -1 ||

                      Rec.rName.indexOf(query)   != -1 ||

                      Rec.rKey.indexOf(query)    != -1)

                     { mE++;

out.println("<table width=\"461\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">"+

"<tr bgcolor=\"#3399FF\">"+

"<td colspan=\"3\" class=\"text\">&nbsp;&nbsp;&nbsp;Автор:&nbsp;"+

"<font color=\"#000000\">"+

Rec.rAvtor+" "+

Rec.rsAvtor+

"</font></td></tr><tr>"+

"<td colspan=\"3\" valign=\"top\" class=\"bodytext\">"+mE+". "+mC+

"&nbsp;<b>Название:</b>&nbsp;"+

Rec.rName+"<br>"+

Rec.rPrinter+" "+

Rec.rSize+"<br>"+

Rec.rBBK+" "+

Rec.rKaIndex+" "+

Rec.rSeria+

"</td></tr></table>");

}

            fPosMarker = fPosMarker+JIndex;

            MTemp = 0;

            MIndex = 0;

           }

       catch (IOException e) {

                      out.println("Ошибка!!!"+"<br>");

                      done=true; }

   }

 }

 catch (IOException e) { out.println("Ошибка доступа к "+dbNamePath); }

 if (mE == 0) {

  out.println("Запос: "+query+" не найден");

  }

} // end If

}

// Ридер файла настройки

public void INIFile(String filename, String directory, PrintStream out) {

  DataInputStream inifile = null;

  String path = null,

  iniRecord = null,

  section = null,

  vname = null,

  vvalue = null;

  boolean done = false;

  int equalIndex = 0;

//

  if (filename.length() == 0) {

      out.println("IOError ");

      System.exit(0);

   }

  if (directory.length() == 0) { directory = new String("c:\\www\\db"); }

  if (filename.indexOf(".") < 0) { filename = new String(filename+".ini"); }

  path = new String(directory+System.getProperty("file.separator")+filename);

// открытие файла

 try { inifile = new DataInputStream(new FileInputStream(path)); }

 catch(FileNotFoundException e) {

     out.println(filename+"not found");

     System.exit(0);

     }

// чтение файла

 try { iniRecord = inifile.readLine(); }

 catch (IOException e) { done=true; }

 while (!done && iniRecord != null)

  { if (iniRecord.startsWith("["))

    { section = iniRecord.substring(1,iniRecord.lastIndexOf("]"));}

    else if (!iniRecord.startsWith(";"))

         { equalIndex = iniRecord.indexOf("=");

           if (equalIndex > 0)

           { //Имя ключа => Раздел.ключ

             vname = new String(section+"."+iniRecord.substring(0,equalIndex));

             vvalue = new String(iniRecord.substring(equalIndex+1));

            INIProperties.put(vname, vvalue);

           

           }

         }

  try { iniRecord = inifile.readLine(); }

  catch (IOException e) { done=true; }

 }

}

// извлечь значение

 public String getINIVar(String key, String defValue) {

  return INIProperties.getProperty(key, defValue);

 }

// извлечь значение

 public String getINIVar(String key) {

  return INIProperties.getProperty(key);

 }

public void init(ServletConfig conf) throws ServletException {

super.init(conf);

}

public void service(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException

{

PrintStream out;

out = new PrintStream(res.getOutputStream());

res.setContentType("text/html; charset=Cp866");

// Печать заголовка

printPageHeader(out);

INIFile("db.ini","c:\\www\\db",out);

// Определяем кодировку

String requestEnc = req.getCharacterEncoding();

String clientEnc = requestEnc;

if ( requestEnc==null ) requestEnc=iso;

requestEnc=iso;

// Тело

out.println("<body bgcolor=\"#FFFFFF\">");

out.println("<form method=\"get\" action=\"/serv/SearchEngein\">");

out.println("  <table width=\"461\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">");

out.println("    <tr bgcolor=\"#3399FF\"> ");

out.println("      <td width=\"266\" class=\"text\">&nbsp;&nbsp;&nbsp;Запрос</td>");

out.println("      <td width=\"135\" class=\"text\">&nbsp;&nbsp;&nbsp;Каталог</td>  ");

out.println("      <td width=\"207\">&nbsp;</td>");

out.println("    </tr>");

out.println("    <tr>");

out.println("      <td width=\"266\" valign=\"top\"> ");

out.println("        <input type=\"text\" name=\"Query\" maxlength=\"100\" size=\"38\" value=\"\">");

out.println("      </td>");

out.println("      <td width=\"135\" valign=\"top\"> ");

out.println("        <select name=\"select\" size=\"1\">");

out.println("          <option value=\"MARCFILE.Book\" selected>"+ConvertISO(getINIVar("KATALOG.Book"))+"</option>");

out.println("          <option value=\"MARCFILE.Stat\">"+ConvertISO(getINIVar("KATALOG.Stat"))+"</option>");

out.println("          <option value=\"MARCFILE.Periud\">"+ConvertISO(getINIVar("KATALOG.Periud"))+"</option>");

out.println("          <option value=\"MARCFILE.Podpis\">"+ConvertISO(getINIVar("KATALOG.Podpis"))+"</option>");

out.println("          <option value=\"MARCFILE.Ucheb\">"+ConvertISO(getINIVar("KATALOG.Ucheb"))+"</option>");

out.println("        </select>");

out.println("      </td>");

out.println("      <td width=\"207\" valign=\"top\"> ");

out.println("        <input type=\"submit\" name=\"Start\" value=\"Поиск\">");

out.println("      </td>");

out.println("    </tr>");

out.println("  </table>");

out.println("  </form>");

// Конец тела

// Взять текст из строки

query = req.getParameter("Query");

 if (query == null || query.length()<1)

 {

   printPageFooter(out);

  return;

  }

dbselect = req.getParameter("select");

  value = new String(ConvertISO(query));

// Чтение файла

  dbFileRead(getINIVar(dbselect), out, value);

// Распечатка результата

printPageFooter(out);

query = null;

value = null;

}

// Вывод заголовка документа

private void printPageHeader(PrintStream out) {

out.println("<html>");

out.println("<head>");

out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Cp866\">");

out.println("<style type=\"text/css\">");

out.println("<!--");

out.println(".text {  font: bold 12px Arial, Helvetica, sans-serif; color: #0000FF; text-decoration: none; text-align: left; }");

out.println(".bodytext { font: 12px Arial, Helvetica, sans-serif; color: #000000; text-decoration: none; text-align: left; }");

out.println("-->");

out.println("</style>");

out.println("</head>");

}

private void printPageFooter(PrintStream out) {

 out.println("</body>");

 out.println("</html>");

 out.flush();

}

}

// Класс Запясь для хранения данных считаных из запяси

class MarcRecord {

 protected String rAvtor;     // Поле автор

 protected String rsAvtor;    // Поле соавтор

 protected String rName;      // Поле название произведения

 protected String rPrinter;   // Поле издатель

 protected String rSize;      // Поле Объем издания

 protected String rKey;       // Поле ключевые слова

 protected String rSeria;

 protected String rBBK;

 protected String rKaIndex;

  MarcRecord( String r1,

              String r2,

              String r3,

              String r4,

              String r5,

              String r6,

              String r8,

              String r11,

              String r12) {

   rAvtor   = r1;

   rsAvtor  = r2;

   rName    = r3;

   rPrinter = r4;

   rSize    = r5;

   rKey     = r6;

   rSeria   = r8;

   rBBK     = r11;

   rKaIndex = r12;

  }

}


Приложение 4

Результаты тестирования программы

Тестирование программы проводилось на 4 массивах данных размером 1000, 5000, 8366, 10000 записей. Метод тестирования заключался в поиске последней записи массива по уникальному названию, чтобы определить время поиска по всему массиву. Полученные данные приведены в таблице и на основе данных построен график (см. график).

График


Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11


на тему рефераты
НОВОСТИ на тему рефераты
на тему рефераты
ВХОД на тему рефераты
Логин:
Пароль:
регистрация
забыли пароль?

на тему рефераты    
на тему рефераты
ТЕГИ на тему рефераты

Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое.


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.