Вариант базы данных для локальной сети учебной лаборатории САПР вуза

ВАРИАНТ БАЗЫ ДАННЫХ ДЛЯ ЛОКАЛЬНОЙ СЕТИ УЧЕБНОЙ

ЛАБОРАТОРИИ САПР ВУЗА

С.С. Винницкий, А.Д. Иванов, М.С. Петрищев

Современные базы данных (БД) представляют собой универсальное, но довольно громоздкое средство хранения информации и потому требуют не менее сложной системы пользования ими (СУБД). Кроме того, они не учитывают специфику сведений, необходимых в повседневной работе конструктора. Как правило, для постоянного пользования требуется лишь часть БД либо небольшая БД, которую проще создавать, использовать и дополнять.

Предлагаемый вариант локальной БД для небольших конструкторских бюро приборостроения, работающих в довольно узких областях, отличается следующими особенностями. Во-первых, данные хранятся в том же виде, как и в справочной литературе, в привычном виде; во-вторых, все данные об однотипных изделиях хранятся в виде отдельных текстовых файлов. Набор таких файлов образует БД. Наконец, предлагаемый алгоритм обращения к БД для выбора требуемой информации повторяет действия конструктора при выборе нужных данных в справочной литературе.

Файл с БД следует формировать по определенным правилам. В структуре файла можно условно выделить справочный раздел и раздел с данными. Необходимо их разделять метками специального вида. Вид меток одинаков для всех файлов БД и выбирается заранее. В справочной литературе таблицы по однотипным изделиям очень часто содержат несколько разделов. При формировании файла такие разделы следует разделять метками выбранного ранее вида. При отсутствии данных для одного из полей, для сохранения структуры БД в поле следует поместить маркер специального вида.

Пример файла БД: Содержание файла «metric.dat».

Размеры сбегов, недорезов, проточек и фасок (мм) для метрической резьбы (по ГОСТ 10549-63). Данные из:

Заплетохин В.А. Соединение деталей приборов. Л.: Изд-во Ленингр. ун-та, 1974.

123456789 10

1 - Шаг резьбы t 6 - Проточка b

2 - Сбег l1max 7 - Проточка r

3 - Сбег l1min 8 - Проточка r1

4 - Недорез l2max 9 - Проточка a

5 - Недорез l2min 10 - Фаска c Примечания:

1. Максимальная величина сбега соответствует углу заборной части инструмента 20 градусов, минимальная - 45 градусов.

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

* - Данные отсутствуют либо не предусмотрены.

-!-Начальное_место_считывания -!-Наружная_резьба

0.2 0.4 0.2 0.5 0.4 * * * * 0.2

0.25 0.5 0.2 0.6 0.5 * * * * 0.2

0.3 0.5 0.2 0.7 0.5 * * * * 0.2

0.35 0.6 0.3 0.8 0.6 * * * * 0.3

0.75 1.5 0.5 2.0 1.6 2.0 0.5 0.3 1.2 1.0

0.8 1.5 0.6 3.0 1.6 3.0 1.0 0.5 1.2 1.0

1 1.8 0.7 3.0 2.0 3.0 1.0 0.5 1.5 1.0

1.25 2.2 0.9 4.0 2.5 4.0 1.0 0.5 1.8 1.6

1.5 2.8 1.0 4.0 2.5 4.0 1.0 0.5 2.2 1.6

1.75 3.2 1.2 4.0 2.5 4.0 1.0 0.5 2.5 1.6

2 3.5 1.4 5.0 3.0 5.0 1.5 0.5 3.0 2.0

2.5 4.5 1.6 6.0 4.0 6.0 1.5 1.0 3.5 2.5

3 5.2 2.0 6.0 4.0 6.0 1.5 1.0 4.5 2.5

3.5 6.3 2.2 8.0 5.0 8.0 2.0 1.0 5.0 2.5

4 7.1 2.5 8.0 5.0 8.0 2.0 1.0 6.0 3.0

4.5 8.0 3.0 10.0 6.0 10.0 3.0 1.0 6.5 3.0

5 9.0 3.2 10.0 6.0 10.0 3.0 1.0 7.0 4.0

5.5 10.0 3.5 12.0 8.0 12.0 3.0 1.0 8.0 4.0

6 11.0 4.0 12.0 8.0 12.0 3.0 1.0 9.0 4.0

-! -Внутренняя_резьба

0.2 0.5 0.3 1.2 1.0 * * * * 0.2

0.25 0.6 0.4 1.5 1.2 * * * * 0.2

5 * 9.5 * 16.0 16.0 3.0 1.0 1.8 4.0

5.5 * * * * 16.0 3.0 1.0 1.8 4.0

6 * * * * 16.0 3.0 1.0 2.0 4.0

Файл содержит справочный раздел и два раздела данных - по наружной и внутренней метрической резьбе. Метка их разделения - «-!-». Маркер, позволяющий сохранять структуру БД при отсутствии данных - «*». В тексте комментария к разделам данных не должно быть пропусков. Пропуски рекомендуется заполнять символом подчеркивания. Например:

-!-Наружная_резьба

Выборка данных из файла легко может осуществляться программными средствами с помощью подпрограммы-функции с необходимым набором входных и выходных параметров. Алгоритм действий, реализованный в подпрограмме-функции, последовательно перебирает все записи в пределах БД. Выборка осуществляется в цикле с постусловием. Условием служит ненахождение метки конца файла. Выборка данных в пределах требуемого раздела осуществляется с помощью счетчика меток. Все встречающиеся метки считаются. При равенстве сосчитанного и требуемого значений счетчика меток осуществляется выборка в пределах раздела. Требуемое значение счетчика является одним из входных параметров.

Каждая запись проверяется на соответствие заданным критериям. Одним из критериев является поиск ближайшего большего. Запись, наилучшим образом удовлетворяющая критериям выборки, запоминается и передается в головную программу в виде одномерного массива данных, которые непосредственно используются для создания БХБ-файла разрабатываемого чертежа и выпуска текста ПЗ.

Блок-схема подпрограммы-функции выборки данных в общем случае представляется следующим образом:

нет

Считанные значения удовлетворяют условиям выборки И этот вариант лучше найденного ранее ?

да

Поместить запись в массив

Данный алгоритм реализован на языке программирования Turbo C. Для иллюстрации его работы решим задачу определения параметров резьбы по заданному шагу.

В качестве входных параметров подпрограммы-функции выберем: baza - имя файла БД; stolb - количество столбцов в файле; N_ser - требуемое значение счетчика меток; Status_0 - статус 1-го столбца (1 - буквенно-цифровой, 0 - иначе); stolb_par - № столбца поиска; par_1 - значение параметра для поиска. Выходные параметры: Results[16] - массив выборки; name_podbor - если 1-ый по счету столбец букв.-цифр., то «заголовок» строки (например, обозначение двигателя).

Листинг программы:

#include <stdio.h> #include <stdlib.h>

#include <string.h>

void search_one (char baza[12], int stolb, int N_ser, int Status_0, float stolb_par, float par_1); float Results[16]; char name_podbor[7], name_vrem[7];

void main

{

float t, sbeg, faska;

printf ("\n\nBBeflHTe значение шага резьбы, мм: "); scanf ("%f', &t);

printf ("\nB справочных данных значения величины сбега и фаски резьбы."); search_one ("metric.dat", 10, 1, 0, 1, t); sbeg=Results[3]; faska=Results[10];

printf ("\nC6er равен %.3g мм, фаска %.2gx45.", sbeg, faska); }

void search_one (char baza[12], int stolb, int N_ser, int Status_0,

float stolb_par, float par_1)

{

FILE *bd;

char dan[7]; int schet=-1, i; float vrem[16], float d_vel=10000; bd=fopen(baza, "r");

do

{

a1: fscanf (bd, "%s", name_podbor);

if (strncmp(name_podbor, "-!-", 3)==0) {schet=schet+1; goto a1;}

if (schet == N_ser) {

if (Status_0==0) {vrem[1]=atof(name_podbor);}

else {fscanf (bd, "%s", dan); vrem[1]=atof(dan);} for (i=2; i<stolb+1; i++) {fscanf(bd, "%s", dan);

if (dan!="*") {vrem[i]=atof(dan);} else {vrem[i]=0.;}

}

if

{d_vel=vrem[stolb_par]; strcpy (name_vrem, name_podbor);

for (i=1; i<stolb+1; i++) {Results[i]=vrem[i];}

}

}

}

while (!feof(bd)); fclose (bd);

return;

}

Подпрограмма-функция search_one считывает значение каждого поля в строковую переменную. Проверяются первые три символа на эквивалентность с меткой «-!-». В случае равенства значение счетчика меток увеличивается на 1. (в начале работы функ-

ции значение счетчика меток равно -1; начальному месту описания данных будет соответствовать - 0; первому разделу данных - 1 и т.д.) При равенстве требуемого и сосчитанного значения счетчика меток выборка данных производится в пределах требуемого подмножества.

Далее последовательно считывается вся запись. В зависимости от условий считанные значения либо переводятся в численный вид, либо остаются в строковом виде. Если встречается «*», то считанному значению поля присваивается значение 0.

Осуществляется проверка условия поиска наилучшего результата. Условием является поиск ближайшего большего, начальное значение которого задается переменной d_vel. При выполнении условия поиска наилучшего результата значение записи сохраняется в массиве выборки Results, а значение ближайшего большего заменяется текущим подобранным. Если 1-й столбец - буквенно-цифровой, то нумерация столбцов в массиве Results сдвигается на 1 (т.е., например, значение 2-го поля будет соответствовать первому элементу массива Results). Первый столбец таблицы при этом записывается в строковой переменной name_podbor.

В условиях малого количества АРМов в локальной сети вероятность одновременного редактирования одного и того же файла базы мала, и потому вопрос одновременного доступа не рассматривался.

Вариант подобной БД реализован в лаборатории САПР кафедры ИТиКТ СПбГУ-ИТМО. Вариант подлежит апробации в условиях учебного процесса.

Литература

1. Бойко В.В., Савинков В.М. Проектирование баз данных информационных систем.

М.: Финансыистатистика, 1989.

2. Ульман Дж. Базы данных наПаскале. М.: Машиностроение, 1990.