47369 (588480), страница 4

Файл №588480 47369 (Клиентская часть технологической среды для разработки больших экономических моделей: компоненты поддержки работы эксперта-экономиста при формировании и отладке (в расчетном режиме) структурного текста модели) 4 страница47369 (588480) страница 42016-07-29СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

Минимально необходимое оборудование:

PC 80486 SX2-66;

RAM 12 MB;

HDD 50 MB свободных;

Screen Color VGA.

Рекомендуемое оборудование:

PC Pentium 133 МГц;

RAM 32 MB;

HDD 30 MB свободных;

Screen Color SVGA;

Необходимое программное обеспечение:

ОС Windows’95;

Машина баз данных Borland DataBase Engine 3.0;

Приложение Система моделирования макроэкономики.

    1. Алгоритмы предварительной подготовки данных для расчета экономической модели

      1. Общий алгоритм работы программы

      1. Структура программы

Структура программы представлена на риc.5

Рис.5. Структура программы.

      1. Архитектура Borland Database Engine (IDAPI) – ядро доступа к данным.

За более чем 25-летнюю историю развития реляционных баз выработался ряд новых требований к методам и средствам доступа к данным.За такую долгую историю в промышленном использовании нашли своё применение огромное количество форматов хранения данных.Поэтому одним из основных вопросов дальнейшего развития СУБД стал вопрос о создании единой среды обработки данных.На базе многолетнего опыта создания инструментальных средств компания Borland предоставила разработчикам свою технологию доступа к данным – Borland Database Engine, Известную также как IDAPI (Integrated Database API).Идеология доступа к локальным и клиент/серверным данным существенно отличаются (в одном случае используется навигационный подход, в другом – язык SQL, ориентированный на множество данных). BDE объединяет эти подходы без уменьшения функциональных возможностей кождого из них. Поэтому BDE (IDAPI) положен в основу инструментов создания масштабируемых систем обработки данных, одним из которых является Delphi.

BDE предоставляет единый набор функций (API) обработки локальных и серверных данных. Обращение к различным источникам данных основано на коцепции драйверов. Таким образом обеспечивается интерфейс к наиболее распространённым форматам/способам хранения данных: dBase, Paradox и серверным источникам InterBase, Oracle, Sysbase, Informix, MS SQL-Server.

Когда речь заходит об обработке данных в структуре клиент/сервер следует понимать, что реализация доступа к серверным данным несколько усложняется. В этом случае вводится понятие middleware – некоего среднего звена, отвечающего за взаимодействие универсального интерфейса (в нашем случае IDAPI) с клиентскими средствами сервера БД. В качестве такого middleware для пользователей BDE выступает Borland SQL Links, также реализованный в виде набора драйверов для каждого конкретного сервера. Р ис. 6 отражает такой подход к обработке серверных данных.


      1. Иерархия форм.

Формы баз данных Delphi можно разделить на четыре следующих функциональных класса.

1. Редактирование и ввод. Простая форма, представляющая одну запись одной таблицы.

2. Сетка. Форма, которая отображает несколько строк одной таблицы, как это делается в программах электронных таблиц (каждая строка таблицы базы данных занимает одну строку на экране).

3. Управляющая сетка. Форма, которая отображает несколько строк одной таблицы (каждая строка таблицы базы данных занимает несколько строк экрана).

4. Главная-подчиненная. Форма, которая показывает строки двух или более связанных таблиц.

При разработке приложения прежде всего создаются и сохраняются в хранилище объектов Delphi формы-предки. Затем на их основе создаются все формы, являющиеся потомками.

Р ис.6. Иерархия форм.

2.2.5 Создание псевдонима BDE

Первое, что надо сделать при разработке приложения базы данных с помощью Delphi, - создать псевдоним BDE, представляющий базу данных нашего приложения. Созданный псевдоним будет использоваться в приложении для обращения к реальной базе данных.

Для создания псевдонима мы используем многофункциональное средство Delphi Database Explorer.

Р ис.7. Окно Database Explorer после добавления нового псевдонима BDE.

Далее рассмотрим подробнее некоторые модули отвечающие за связь с базой данных.

      1. Модуль формы fmNew

Если мы выберем пункт меню ФайлНовая модель, тогда вызывается модуль, который отвечает за открытие новой модели.

Рис.8. Форма fmNew.


Модуль состоит из пяти процедур. Рассмотрим только наиболее интересующие нас.

П роцедура TfmNew.BitBtn1Click

Р ис.9. Алгоритм работы процедуры TfmNew.BitBtn1Click

Описываем переменные:

var

s : String;

i : longint;

Если в строке не ввели имя модели тогда вывести сообщение ‘Введите имя модели’

begin

if eNew.Text='' then begin

MessageDlg('Введите имя модели', mtError, [mbOk], 0);

eNew.SetFocus;

exit;

end;

Если не ввели путь к базе данных модели вывести сообщение об ошибке

if ePath.Text='' then begin

MessageDlg('Введите путь к базе данных модели', mtError, [mbOk], 0);

ePath.SetFocus;

exit;

end;

Если не ввели название файла модели вывести сообщение об ошибке

if eModel.Text='' then begin

MessageDlg(‘Введите название файла модели', mtError, [mbOk], 0);

eModel.SetFocus;

exit;

end;

Идентификация имени модели

fmMain.DbPath:=ePath.Text+'\'+eNew.text+'.gdb';

fmMain.Model:=ePath.Text+'\'+eNew.text+'.gdb';

Вырезаем имя файла с текстом формул

s:=UpperCase(eModel.Text);

if (pos('.MDL',s)=0) then begin

s:='';

if pos('.',eModel.Text)=length(eModel.Text)-3

then for i:=1 to length(eModel.Text)-4 do s:=s+eModel.Text[i];

s:=eModel.Text+'.MDL';

end;

fmMain.FModel:=s;

Обработка исключительной ситуации

try fileUtil.copyfile(extractfilepath(application.ExeName)+'base.gdb',ePath.Text+'\'+eNew.text+'.gdb',nil);

except

showmessage(Не найден прототип базы);

exit;

end;

Добавляем параметры подключения к базе данных.

with fmmain.DataBase do begin

Connected:=false;

Params.Clear;

params.Add('user name=sysdba');

params.Add('password=masterkey');

params.Add('server name='+ePath.Text+'\'+eNew.text+'.gdb');

Connected:=true;

end;

Модуль формы fmForm1.


Р ис.10. алгоритм работы процедуры TfmForm1.FormCreate формы fmForm1.


Процедура TfmForm1.FormCreate.

begin

i:=1;

strQ:='select ID,path,MFile from Model';

qMain.Close;

qsec.Close;

with db1 do begin

Connected:=false;

Params.Clear;

params.Add('user name=sysdba');

params.add('password=masterkey');

params.Add('server name='+fmmain.dbPath);

Connected:=true;

end;

model_name:=fmMain.DbPath;

qMain.SQL.Clear;

qSec.SQL.Clear;

qsec.Close;

Выборка имени модели из таблицы ‘Model’

Self.qMain.SQL.Add(strQ);

Self.qMain.Open;

model:=tv.Items.AddFirst(nil,Self.qMain.FieldByName('ID').AsString);

fmMain.FModel:=Self.qMain.FieldByName('MFile').AsString;

Цикл рекурсивной выборки подмоделей и переменных

while i

Self.qMain.First;

Self.qMain.MoveBy(i);

child_model:=tv.Items.AddChild(model,Self.qMain.FieldByName('ID').AsString);

strTmp:=Self.qMain.FieldByName('Path').AsString;

Self.qMain.close;

showchild(child_model, strTmp);

inc(i);

strQ:='select ID,path from Model';

Self.qMain.SQL.Clear;

Self.qMain.SQL.Add(strQ);

Self.qMain.Open;

end;

Выборка параметров моделей из таблицы ‘Params’

i:=0;

strQ:='Select id from params';

Self.qMain.close;

Self.qMain.SQL.Clear;

Self.qMain.SQL.Add(strQ);

Self.qMain.Open;

Заполнение дерева

while i

(tv.Items.AddChild(model,Self.qMain.FieldByName('id').AsString));

Self.qMain.Next;

inc(i);

end;

count_grids:=0;

qMain.Close;

qSec.close;

Визуализация дерева и таблицы

fmMain.SpeedButton3.Enabled:=true;

fmMain.SpeedButton2.Enabled:=true;

fmMain.SpeedButton1.Enabled:=true;

treevisible:=true;

tablevisible:=true;

graphvisible:=true;

model.Expand(true);

end;

Модуль формы fmVar

Форма отвечающая за ввод переменных.


Рис.11. Форма fmVar.

Процедура TfmVar.BitBtn1Click.

Дерево модели может включать в себя переменные, подмодели, а также группы из переменных и подмоделей, но на данном этапе развития проекта понятие группы пока не рассматривается.. Также пока не существует модели макроэкономики, которая была бы структурирована достаточным образом, т.е. в нее кроме переменных входила бы хоть одна подмодель. Таким образом, на данном этапе развития проекта имеет смысл говорить о модели, состоящей только из переменных. Программно это выполнено следующим образом: после ввода имени переменных, комментария и индексов, от которых зависит переменная, из таблицы indexes.db с помощью SQL - запроса выбирается информация по индексам, от которых зависит переменная, и, на основании этой информации, формируется таблица для первоначальных значений. Далее, после того, как пользователь ввел начальные значения переменной, заполняются таблицы inter.db, param.db, params.db и var_value.db. Все это делает процедура класса fmVar.

Р ис.11. алгоритм работы процедуры TfmVar.BitBtn1Click формы fmVar.

var

i,j,num : longint;

Two : Boolean; - имеет значение True, когда переменная зависит от 2-х индексов

begin

if (eVar.Text='') or (lbVar.Items.Count=0) then exit;

if lbVar.Items.Count>2 then begin

MessageDlg('В переменной должно быть не больше двух индексов',mtError,[mbOk],0);

exit;

end;

IndexChance:=not IndexChance;

lbAll.Enabled:=not lbAll.Enabled;

lbVar.Enabled:=not lbVar.Enabled;

sgVar.Enabled:=not sgVar.Enabled;

eVar.Enabled:=not eVar.Enabled;

eRem.Enabled:=not eRem.Enabled;

sgVar.ShowHint:=not sgVar.ShowHint;

if lbVar.Items.Count=2 then Two:=True

else Two:=False;

Кнопка Ok нажата один раз

if not IndexChance then begin

fmMain.qMain.SQL.Clear;

Выборка параметров индексов

fmMain.qMain.SQL.Add('SELECT * from Indexes where ID='+#39+lbVar.Items.Strings[0]+#39+';');

fmMain.qMain.Open;

Количество столбцов таблицы sgVar

sgVar.ColCount:=round((fmMain.qMain.FieldByName('Mx').AsInteger-fmMain.qMain.FieldByName('Mn').AsInteger) div fmMain.qMain.FieldByName('Step').AsInteger+1)+1;

Если переменная зависит от 2-х индексов

if Two then begin

fmMain.qSec.SQL.Clear;

fmMain.qSec.SQL.Add('SELECT * from Indexes where ID='+#39+lbVar.Items.Strings[1]+#39+';');

fmMain.qSec.Open;

Количество строк таблицы sgVar для второго индекса

sgVar.RowCount:=round((fmMain.qSec.FieldByName('Mx').AsInteger-fmMain.qSec.FieldByName('Mn').AsInteger) div fmMain.qSec.FieldByName('Step').AsInteger+1)+1;

end;

Заполнение верхней строки таблицы sgVar значениями индекса

sgVar.FixedRows:=1;

sgVar.FixedCols:=1;

for i:=1 to sgVar.ColCount-1 do

sgVar.Cells[i,0]:=IntToStr(fmMain.qMain.FieldByName('Mn').AsInteger+(i-1)*fmMain.qMain.FieldByName('Step').AsInteger);

Если переменная зависит от 2-х индексов

if Two then begin

Заполнение первого столбца таблицы sgVar значениями второго индекса

for i:=1 to sgVar.RowCount-1 do

sgVar.Cells[0,i]:=IntToStr(fmMain.qSec.FieldByName('Mn').AsInteger+(i-1)*fmMain.qSec.FieldByName('Step').AsInteger); sgVar.Cells[0,0]:=fmMain.qSec.FieldByName('Id').AsString+'\'+fmMain.qMain.FieldByName('Id').AsString;

end

else sgVar.Cells[0,0]:=fmMain.qMain.FieldByName('Id').AsString;

fmMain.qMain.Close;

fmMain.qSec.Close;

end

Кнопка Ok нажата второй раз

else begin

for i:=0 to lbVar.Items.Count-1 do begin

fmMain.qMain.SQL.Clear;

Заносим имя переменной и ее индекс в таблицу Inter

fmMain.qMain.SQL.Add('INSERT INTO Inter VALUES('+#39+eVar.Text+#39+','+#39+lbVar.Items.Strings[i]+#39+',1,'+#39+'v'+#39+');');

fmMain.qMain.ExecSQL;

end;

num:=0;

Заносим в базу данных значения переменных иэ табл. sgVar

for i:=1 to sgVar.ColCount-1 do

for j:=1 to sgVar.RowCount-1 do begin

fmMain.qMain.SQL.Clear;

inc(num);

fmMain.qMain.SQL.Add('INSERT INTO Param VALUES('+#39+eVar.Text+#39+','+#39+lbVar.Items.Strings[0]+#39+','+#39+sgVar.Cells[i,0]+#39+','+IntToStr(num)+');');

fmMain.qMain.ExecSQL;

Заносим в табл. Param имена переменных и их комментарии

if Two then begin

fmMain.qMain.SQL.Clear;

fmMain.qMain.SQL.Add('INSERT INTO Param VALUES('+#39+eVar.Text+#39+','+#39+lbVar.Items.Strings[1]+#39+','+#39+sgVar.Cells[0,j]+#39+','+IntToStr(num)+');');

fmMain.qMain.ExecSQL;

end;

fmMain.qMain.SQL.Clear;

fmMain.qMain.SQL.Add('INSERT INTO Var_value VALUES('+#39+eVar.Text+#39+','+IntToStr(num)+','+#39+sgVar.Cells[i,j]+#39+','+'0);');

fmMain.qMain.ExecSQL;

fmMain.qMain.SQL.Clear;

fmMain.qMain.SQL.Add('INSERT INTO Var_value VALUES('+#39+eVar.Text+#39+','+IntToStr(num)+'," ",'+'-1);');

fmMain.qMain.ExecSQL;

end;

fmMain.qMain.SQL.Clear;

fmMain.qMain.SQL.Add('INSERT INTO Params (id,remark) VALUES('+#39+eVar.Text+#39+','+#39+eRem.Text+#39+')');// changed for MDI

fmMain.qMain.ExecSQL;

Добавляем переменную в дерево переменных

if not(TfmForm1(fmMain.ActiveMDIChild).tv.Selected.HasChildren or not(TfmForm1(fmMain.ActiveMDIChild).tv.Selected.Parent<>nil )) then TfmForm1(fmMain.ActiveMDIChild).tv.Items.AddChild(TfmForm1(fmMain.ActiveMDIChild).tv.Selected.Parent,eVar.Text)

else TfmForm1(fmMain.ActiveMDIChild).tv.Items.AddChild(TfmForm1(fmMain.ActiveMDIChild).tv.Selected,eVar.Text);

Close;

end;

end;

Модуль формы fmSetInter.

Р ис.12. форма fmSetInter.

Р ис.13. алгоритм работы процедуры TfmSetInter.cb1Change формы fmSetInter.

Процедура TfmSetInter.cb1Change.

var

i:integer;

begin

Если минимальное значение изменено

if TComboBox(sender).name='cb1' then begin

Списку максимальных значений присвоить список минимальных

cb2.items:=cb1.items;

Если выбрано мин. значение – удаляем из макс. списка лишнее

if cb1.itemindex<>-1 then for i:=0 to cb1.itemindex-1 do cb2.Items.Delete(0);

end;

Если выбраны все значения – кнопка Ok доступна

if (cb1.ItemIndex<>-1) and (cb2.itemindex<>-1) then OKBtn.enabled:=true

else okBtn.enabled:=False;

Сохраняем значения

min:=cb1.items[cb1.itemindex];

max:=cb2.items[cb2.itemindex];


Модуль формы fmIndex.

Рис.14. форма fmIndex.

Рис.15. алгоритм работы процедуры TfmIndex.FormClose.


var

i : longint;

begin

Курсор в начало таблицы

tIndex.First;

цикл по всем строкам таблицы

for i:=1 to tIndex.RecordCount do begin

условия корректности

if (tIndex.FieldByName('Mn').AsInteger>tIndex.FieldByName('Mx').AsInteger)

or (tIndex.FieldByName('Mn').AsInteger+tIndex.FieldByName('Step').AsInteger>tIndex.FieldByName('Mx').AsInteger)

then begin

сообщение об ошибке

MessageDlg('Введите привильное значение индекса', mtError, [mbOk], 0);

Action:=caNone;

exit;

end;

переход на следущую строку

tIndex.Next;

end;

закрытие таблицы tIndex

tIndex.Active:=False;

end;

Глава 2

ТЕХНОЛОГИЧЕСКАЯ ЧАСТЬ

“ Технология программирования с использованием средств быстрой разработки приложений”

  1. 2. Технология программирования с использованием средств быстрой разработки приложений

    1. 2.1 Введение

Тема данной главы - технология быстрой разработки приложений - RAD (Rapid Application Development). Данная технология сравнительно нова, но она быстро становится популярной, многие производители средств разработки приложений взяли эту технологию на вооружение.

Хотя это и новый подход в программировании, но и до появления RAD–средств делались попытки облегчить труд программиста, сделать этот труд более продуктивным, повысив этим быстродействие и удобство создания приложений. Первоначально появились интегрированные среды разработки - IDE (Integrated Development Environment), объединяющие компилятор, специальный текстовый редактор, ориентированный на работы с текстами на целевом языке программирования и средства отладки - трассировщик—дебаггер и другие. По сравнению с предыдущими средствами программирования это был большой шаг вперед, но затем появились CASE–средства, которые позволяли максимально визуализировать процесс создания программы, но пользоваться ими было чересчур неудобно из-за их негибкости. В большинстве случаев написать достаточно сложную программу было очень трудно. Сейчас эти средства используются там, где подход достаточно однообразен - например при написании средств работы с базами данных.

Средства же быстрой разработки приложений (в дальнейшем - RAD–средства), взяв все лучшее из интегрированных сред разработки и CASE систем, объединили мощь и гибкость работы с исходными текстами с удобством создания графического интерфейса пользователя - GUI (Graphic User Interface). К сожалению, большинство RAD–средств не позволяют визуализировать логику самой программы, но и те методы, которые заложены в современные RAD–средства, позволяют поднять производительность разработки программ в 2-3 раза.

Характеристики

Список файлов ВКР

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7027
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее