592

Интерпретатор фиксированной XML-структуры в SQL-запросы

Курсовая

Информатика, кибернетика и программирование

XML, в отличие от HTML, дает возможность сохранения данных в обычном текстовом формате, при этом любой человек или программа, имеют возможность читать и обрабатывать XML-документы. С помощью любого текстового редактора на любой платформе можно просмотреть документ и внести в него необходимые изменения.

Русский

2013-01-06

130 KB

17 чел.

МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

ИНСТИТУТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ

Курсовая работа

Интерпретатор фиксированной XML-структуры в SQL-запросы.

Выполнили:

студенты группы А-13-09

Ладанова Евгения

Ефанов Алексей

Преподаватель:

Пашинцев Владимир

Дмитриевич

Москва, 2012

ВВЕДЕНИЕ

Язык XML привлек к себе уже достаточно много внимания со стороны разработчиков и пользователей Интернет. Сегодня количество приверженцев этой новой технологии стремительно возрастает. Несмотря на то, что XML очень молод и отдельные компоненты этого языка находятся еще в стадии доработки, уже сегодня появляются новые языки, созданные на основе XML, возникают многочисленные Web-сервера, использующие эту технологию для организации хранящейся на них информации.

XML, в отличие от HTML, дает возможность сохранения данных в обычном текстовом формате, при этом любой человек или программа, имеют возможность читать и обрабатывать XML-документы. При этом не требуется специальное программное обеспечение для того, чтобы получить доступ к таким данным.

Таким образом, обеспечивается совместимость при передаче структурированных данных между различными системами обработки информации, преимущественно при передаче таких данных через Интернет.

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

- точно выражены

- расширяемы

- платформо-независимы

XML — это не язык программирования, и не нужно быть программистом, чтобы использовать или изучать его. Компьютеру намного легче создавать и читать данные XML, обеспечивая при этом однозначность их структуры. XML позволяет избежать типичных ошибок при проектировании языков: он является расширяемым, независим от платформы, включает поддержку интернационализации и локализации. XML также полностью совместим с Unicode.

В качестве языка, на котором мы реализуем реляционную базу данных, мы выбрали SQL. Он является   современным   универсальным   программным   средством управления данными. С помощью SQL можно динамически изменять и расширять структуру базы данных даже в то время, когда пользователи обращаются к ее содержимому. Это большое преимущество перед языками статического определения данных, которые запрещают доступ к базе данных во время изменения ее структуры.

Таким образом, SQL обеспечивает максимальную гибкость, так как дает базе данных возможность адаптироваться к изменяющимся требованиям, не прерывая работу приложения, выполняющегося в реальном масштабе времени.

Преимущества языка SQL, на которые стоит обратить внимание, следующие:

· независимость от конкретных СУБД;

· переносимость с одной вычислительной системы на другую;

· наличие стандартов;

· поддержка со стороны компании Microsoft (протокол ODBC);

· реляционная основа;

· высокоуровневая структура, напоминающая английский язык;

· возможность выполнения специальных интерактивных запросов:

· обеспечение программного доступа к базам данных;

· возможность различного представления данных;

· полноценность как языка, предназначенного для работы с базами данных;

· возможность динамического определения данных;

· поддержка архитектуры клиент/сервер.

ЧАСТЬ I. ПОСТАНОВКА ЗАДАЧИ.

ОПРЕДЕЛЕНИЯ КЛЮЧЕВЫХ ПОНЯТИЙ

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

XML (англ. eXtensible Markup Language — расширяемый язык разметки) — рекомендованный Консорциумом Всемирной паутины язык разметки, фактически представляющий собой свод общих синтаксических правил. XML — текстовый формат, предназначенный для хранения структурированных данных (взамен существующих файлов баз данных), для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML). XML является упрощённым подмножеством языка SGML.

SQL (Structured Query Language — «язык структурированных запросов») — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL основывается на исчислении кортежей.

Интерпретатор - программа, анализирующая и тут же выполняющая  построчно команды, по мере поступления её исходного кода на вход.

ПОСТАНОВКА ЗАДАЧИ

      В наше время компьютеры все глубже проникают в различные отрасти , и возникает необходимость хранения информации в базах данных, но не всегда существует возможность прямого доступа к базе. Поэтому, наиболее оптимальным решением при использовании баз данных, не требующих работы в реальном времени, является накапливание информации, до тех пор, пока не появится возможность их непосредственного занесения в базу. В качестве «накопителя», впоследствии именуемого буфером,  удобно использовать файл, в котором данные будут представлены в виде XML-структуры. Так же необходимо предусмотреть возможность редактирования хранящейся информации.

В своей работе мы попытаемся реализовать программу на языке С#, позволяющую производить добавление информации фиксированной структуры в XML файл, ее редактирование, удаление и интерпретацию в SQL-запросы.

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

ОПИСАНИЕ ВХОДНЫХ ДАННЫХ.

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

№ студенческого билета – уникальный идентификационный номер студента, присваиваемый студенту при поступлении и указанный в студенческом билете. Тип данных: целое положительное число.

Фамилия, Имя, Отчество – поля, обязательные к заполнению. Тип данных: строковый.

Пол, Факультет, Группа - поля, не обязательные к заполнению. Тип данных: строковый.

Возраст - поле, не обязательное к заполнению. Тип данных: целое положительное число.


ОПИСАНИЕ ВЫХОДНЫХ ДАННЫХ (РЕЗУЛЬТАТОВ).

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

Пример:

Содержимое файла с XML- структурой:

<student>

<nomer_stud_bilet>3</nomer_stud_bilet>

<Familiya>Черных</Familiya>

<Imya>Светлана</Imya>

<Otchestvo>Игоревна</Otchestvo>

<Age>20</Age>

<Pol>Ж</Pol>

<Fakultet>АВТИ</Fakultet>

<Gruppa>А-01-09</Gruppa>

</student>

Выходные данные:

CREATE TABLE Students (

stud_bil INT(5) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,

Familiya CHAR(20) DEFAULT '' NOT NULL,

Imya CHAR(20) DEFAULT '' NOT NULL,

Otchestvo CHAR(20) DEFAULT '',

Age INT(2) UNSIGNED ZEROFILL DEFAULT '00',

Pol CHAR(20) DEFAULT '' ,

Fakultet CHAR(20) DEFAULT '',

Gruppa CHAR(20) DEFAULT '' )

INSERT INTO Students VALUES

(3,'Черных','Светлана','Игоревна',20,'Ж','АВТИ','А-01-09');


ЧАСТЬ II. РЕШЕНИЕ

Наша программа ориентирована, прежде всего, на пользователя. Для удобства вся информация вводится в форме, где указаны обязательные и необязательные поля. Затем, уже из формы информация записывается в файл в виде XML-структуры. Информацию в этом файле можно редактировать, добавлять и удалять. И основное действие с файлом – это перевод в SQL-запросы, что и является поставленной задачей.

Выбранная нами фиксированная XML-структура файла представлена ниже:

<student>

 <nomer_stud_bilet></nomer_stud_bilet>

 <Familiya></Familiya>

 <Imya></Imya>

 <Otchestvo></Otchestvo>

 <Age></Age>

 <Pol></Pol>

 <Fakultet></Fakultet>

 <Gruppa></Gruppa>

</student>

Создание  файла с данной структурой происходит следующим образом:

  1.  Пользователь выбирает файл, в который нужно произвести запись данных и затем вводит данные в поля на форме.
  2.  При нажатии на кнопку ДОБАВИТЬ происходит проверка на наличие введенного номера зачетной книжки, если он был введен, то происходит проверка на существование данного студента в базе, если данный студент уже существует, или номер студенческого билета не был введен, то выводится соответствующее сообщение.
  3.  Если пункт 2 был выполнен корректно, то происходит проверка на наличие данных в полях, обязательных к заполнению, если нужные поля не заполнены, выводится сообщение об ошибке.
  4.  Если обязательные поля заполнены, происходит считывание  информации с полей и запись соответствующих тегов в файл.

private void Add_student(object sender, EventArgs e)

       {

           Form4 fr4;

           if (textBox1.Text == "")

           {

               fr4 = new Form4();

               fr4.label1.Text = "Не введен номер студенческого билета";

               fr4.ShowDialog();

           }

           else

           {

               if (Student.Validation(textBox1.Text,FilePath))

               {

                   fr4 = new Form4();

                   fr4.label1.Text = "Студент с таким номером студ.билета уже существует";

                   fr4.ShowDialog();

               }

               else

               {

                   if (textBox2.Text == "")

                   {

                       fr4 = new Form4();

                       fr4.label1.Text = "Не введена фамилия студента";

                       fr4.ShowDialog();

                   }

                   else

                   {

                       if (textBox3.Text == "")

                       {

                           fr4 = new Form4();

                           fr4.label1.Text = "Не введено имя студента";

                           fr4.ShowDialog();

                       }

                       else

                       {

                           if (textBox4.Text == "")

                           {

                               fr4 = new Form4();

                               fr4.label1.Text = "Не введено отчество студента";

                               fr4.ShowDialog();

                           }

                           else

                           {

                               sw1 = new StreamWriter(FilePath, true);

                               sw1.WriteLine("<student>");

                               sw1.WriteLine("<nomer_stud_bilet>" + textBox1.Text + "</nomer_stud_bilet>");

                               sw1.WriteLine("<Familiya>" + textBox2.Text + "</Familiya>");

                               sw1.WriteLine("<Imya>" + textBox3.Text + "</Imya>");

                               sw1.WriteLine("<Otchestvo>" + textBox4.Text + "</Otchestvo>");

                               if (textBox6.Text != "")

                               {

                                   sw1.WriteLine("<Age>" + textBox6.Text + "</Age>");

                               }

                               if (textBox5.Text != "")

                               {

                                   sw1.WriteLine("<Pol>" + textBox5.Text + "</Pol>");

                               }

                               if (textBox7.Text != "")

                               {

                                   sw1.WriteLine("<Fakultet>" + textBox7.Text + "</Fakultet>");

                               }

                               if (textBox8.Text != "")

                               {

                                   sw1.WriteLine("<Gruppa>" + textBox8.Text + "</Gruppa>");

                               }

                               sw1.WriteLine("</student>");

                               sw1.WriteLine();

                               sw1.Close();

                               textBox1.Text = "";

                               textBox2.Text = "";

                               textBox3.Text = "";

                               textBox4.Text = "";

                               textBox5.Text = "";

                               textBox6.Text = "";

                               textBox7.Text = "";

                               textBox8.Text = "";

                               

                           }

                       }

                   }

               }

           }

       }

Удаление информации о студенте осуществляется следующим образом:

  1.  Осуществляется поиск записи в файле с заданным параметром.
  2.  Найденная запись о студенте удаляется.

 public static void DeleteStudent(string target, string FilePath)

       {

           string[] readText = File.ReadAllLines(FilePath);

           for (int i = 0; i < readText.Length; i++)

           {

               if (readText[i] == "<student>")

               {

                   i++;

                   string[] data = readText[i].Split(new char[] { '<', '>' });

                   data = Delete(data, 0);

                   if (data[1] == target)

                   {

                       while (readText[i] != "</student>")

                       {

                           readText = Delete(readText, i);

                       }

                       readText = Delete(readText, i - 1);

                       readText = Delete(readText, i - 1);

                       readText = Delete(readText, i - 1);

                       break;

                   }

               }

           }

           File.WriteAllText(FilePath, string.Join(Environment.NewLine, readText));

           StreamWriter sw1 = new StreamWriter(FilePath, true);

           sw1.WriteLine();

           sw1.Close();

       }

Редактирование информации в файле происходит следующим образом:

  1.  Осуществляется поиск записи в файле с заданными параметрами, так как один из параметров в нашей структуре уникальный (номер студенческого билета), то поиск ведется именно по нему.
  2.  Найденная запись о студенте удаляется и записывается новая информация.
  3.  Если не заполнены обязательные поля, выдается сообщение об ошибке.

public static Stud FindStudent(StreamReader sr1, string find)

       {

           bool flag = false;

           Stud res = new Stud();

           while (sr1.Peek() != -1 && flag != true)

           {

               Stud st = new Stud();

               st.flag = false;

               st = Student.LoadStudent(sr1);

               if (st.nom_stud == find)

               {

                   flag = true;

                   st.flag = true;

                   res = st;

               }

           }

           return res;

       }

public static void EditingStudent(Stud st, string target, string FilePath)

       {

           DeleteStudent(target, FilePath);

           StreamWriter sw1 = new StreamWriter(FilePath, true);

           sw1.WriteLine();

           sw1.WriteLine("<student>");

           sw1.WriteLine("<nomer_stud_bilet>" + st.nom_stud + "</nomer_stud_bilet>");

           sw1.WriteLine("<Familiya>" + st.familiya + "</Familiya>");

           sw1.WriteLine("<Imya>" + st.imya + "</Imya>");

           sw1.WriteLine("<Otchestvo>" + st.otchestvo + "</Otchestvo>");

           if (st.age != "")

           {

               sw1.WriteLine("<Age>" + st.age + "</Age>");

           }

           if (st.pol != "")

           {

               sw1.WriteLine("<Pol>" + st.pol + "</Pol>");

           }

           if (st.fakultet != "")

           {

               sw1.WriteLine("<Fakultet>" + st.fakultet + "</Fakultet>");

           }

           if (st.gruppa != "")

           {

               sw1.WriteLine("<Gruppa>" + st.gruppa + "</Gruppa>");

           }

           sw1.WriteLine("</student>");

           sw1.Close();

       }

Для решения поставленной задачи, интерпретирование XML-структуры в SQL-запросы, был использован метод рекурсивного спуска. Далее поясним в чем суть метода и его преимущества.

Метод рекурсивного спуска.

В лексическом анализе существуют  две модели анализаторов: автоматная и на «жесткой» логике. В анализаторе на «жесткой» логике лексика «зашита» в управляющие конструкции программы (ветвления, циклы), т.е. непосредственно в алгоритмическую часть. В результате анализатор настроен на единственный вариант лексики.

В автоматной модели лексика «зашита» в управляющие таблицы конечного автомата (КА), т.е. по существу является данными. Это позволяет настраивать анализатор на различные варианты лексики, но требует предварительной работы по проектированию самого КА и построению его управляющих таблиц, либо наличия языка формального языка описания лексики и транслятора с него.

Мы выбрали модель анализатора на «жесткой» логике, так как рассматриваемая нами структура данных является фиксированной.

Мы используем метод рекурсивного спуска, основанный на «зашивании» правил грамматики непосредственно в управляющие конструкции распознавателя. Идеи нисходящего разбора, в нем полностью сохраняются:

·        происходит последовательный просмотр входной строки слева-направо;

·        очередной тег входной строки является основанием для выбора одной из правых частей правил группы при замене текущего нетерминала;

·         обнаружение нетерминала в правой части рекурсивно повторяет этот же процесс.

В методе рекурсивного спуска они претерпевают следующие изменения:

·        каждому нетерминалу соответствует отдельная процедура (функция), распознающая (выбирающая и «закрывающая») одну из правых частей правила, имеющего в левой части этот нетерминал (т.е. для каждой группы правил пишется свой распознаватель);

·        во входной строке имеется указатель (индекс) на текущий «закрываемый символ». Этот символ и является основанием для выбора необходимой правой части правила. Сам выбор «зашит» в распознавателе в виде конструкций if или switch.

·        просмотр выбранной части реализован в тексте процедуры-распознавателя путем сравнения ожидаемого тега правой части и текущего тега входной строки;

·        если в правой части ожидается терминальный символ и он совпадает с очередным символом входной строки, то символ во входной строке пропускается, а распознаватель переходит к следующему символу правой части;

·        несовпадение терминального символа правой части и очередного символа входной строки свидетельствует о синтаксической ошибке;

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

Метод рекурсивного спуска позволяет отойти от канонической формы представления формальных грамматик и проектировать распознаватель частично на содержательном уровне, что делает его более естественным и «читабельным». Это касается, прежде всего, синтаксических конструкций повторения, которые в тексте распознавателя могут быть заменены обычными циклами типа while  или for.  Для этого, группу правил, которая реализует такой цикл, нужно реализовать в виде одного распознавателя, записав в нем соответствующий программный цикл. В теле цикла должна быть часть распознавателя, соответствующая повторяющейся конструкции, а условия продолжения и ограничения цикла должны проверяться соответствующими терминалами.

Второе упрощение заключается в частичном отказе от проверки выбирающих символов в некоторых группах правил. Как известно, явные выбирающие символы имеют место для S-правил. Для аннулирующих правил и правил, начинающихся с нетерминала, их необходимо вычислять. В том случае, если такое правило в группе – единственное, его выбор можно осуществлять по принципу «от противного», т.е. если не встречается ни один из выбирающих символов S-правил. Правда, при этом теряются ветви программы, ответственные за обнаружение ошибок, хотя это поправимо: ошибки могут быть обнаружены правилами более высокого уровня.

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

Реализация этого метода в нашей работе:

public static Stud LoadStudent(StreamReader sr1)

       {

           Stud st = new Stud();

           string start = sr1.ReadLine();

           if (start == "<student>")

           {

               string temp = sr1.ReadLine();

               while (temp != "</student>")

               {

                   string[] data = temp.Split(new char[] { '<', '>' });

                   if (data.Length > 0)

                   {

                       data = Delete(data, 0);

                       if (data[0] == "nomer_stud_bilet" && data[2] == "/nomer_stud_bilet")

                       {

                           st.nom_stud = data[1];

                       }

                       else

                       {

                           if (data[0] == "Familiya" && data[2] == "/Familiya")

                           {

                               st.familiya = data[1];

                           }

                           else

                           {

                               if (data[0] == "Imya" && data[2] == "/Imya")

                               {

                                   st.imya = data[1];

                               }

                               else

                               {

                                   if (data[0] == "Otchestvo" && data[2] == "/Otchestvo")

                                   {

                                       st.otchestvo = data[1];

                                   }

                                   else

                                   {

                                       if (data[0] == "Age" && data[2] == "/Age")

                                       {

                                           st.age = data[1];

                                       }

                                       else

                                       {

                                           if (data[0] == "Pol" && data[2] == "/Pol")

                                           {

                                               st.pol = data[1];

                                           }

                                           else

                                           {

                                               if (data[0] == "Fakultet" && data[2] == "/Fakultet")

                                               {

                                                   st.fakultet = data[1];

                                               }

                                               else

                                               {

                                                   if (data[0] == "Gruppa" && data[2] == "/Gruppa")

                                                   {

                                                       st.gruppa = data[1];

                                                   }

                                               }

                                           }

                                       }

                                   }

                               }

                           }

                       }

                   }

                   temp = sr1.ReadLine();

               }

           }

           return st;

       }

Для упрощения ориентирования в объектно-ориентированном представлении результатов работы алгоритмов, приведём описание структуры классов с помощью UML диаграммы классов1.

1 В UML (англ. Unified Modeling Language – унифицированный язык моделирования) диаграмма классов является типом диаграммы статической структуры. Она описывает структуру системы, показывая её классы, их атрибуты и операторы, а также взаимосвязи этих классов.  

ЧАСТЬ III. ТЕСТИРОВАНИЕ

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

В ходе тестирования необрабатываемых ошибок выявлено не было.


ЗАКЛЮЧЕНИЕ

       В наше время компьютеры все глубже проникают в различные отрасти , и возникает необходимость хранения информации в базах данных, но не всегда существует возможность прямого доступа к базе. Поэтому, наиболее оптимальным решением при использовании баз данных, не требующих работы в реальном времени, является накапливание информации, до тех пор, пока не появится возможность их непосредственного занесения в базу. В качестве «накопителя», впоследствии именуемого буфером,  удобно использовать файл, в котором данные будут представлены в виде XML-структуры. Так же необходимо предусмотреть возможность редактирования хранящейся информации.

В своей работе мы представили программу на языке С#, позволяющую производить добавление информации фиксированной структуры в XML файл, ее редактирование, удаление и интерпретацию в SQL-запросы.

Список литературы.

  1.  Ахо Альфред В., Лам Моника С., Сети Рави, Ульман Джеффри Д. Компиляторы: принципы, технологии и инструментарий, 2-е изд. : Пер. с англ. – М. : ООО «И. Д. Вильямс», 2008 – 1184 с. : ил. – Парал. тит. англ.

  1.  


 

А также другие работы, которые могут Вас заинтересовать

43145. Разработка пакета автоматизации делопроизводства предприятия 36 KB
  Создать шаблон включающий: логотип рисунок надпись MS Wordrt. В шаблоне создать и или модифицировать стили не менее 5. Создать базу данных в которой реализован автоматизированный учет продаж оказания услуг аналогично тому который реализован в книге Учет MS Excel. Создать таблицы схему данных обеспечить подстановку.
43146. Программа – тест: «Годны ли вы к службе в армии?» 915 KB
  Польза тестов для человека. С давних времен каждый человек пытается узнать о себе что-то больше, чем уже знает. С развитием психологии большое количество людей узнают о некоторых чертах своего характера, которые в нем присутствуют, но он не обращал раньше на них внимание. Узнать больше о своей личности помогают тесты. Они представляют собой интересные вопросы, в результате которых можно получить определенную характеристику на человека. Наиболее популярны тесты, которые касаются взаимоотношений между людьми и личности человека, в общем.
43148. Анализ эффективности использования материальных ресурсов на ОАО «Химрезерв» 531.5 KB
  Основной задачей деятельности любого предприятия является оптимизация его производственной программы, которая позволяет увеличить прибыль или достичь ожидаемых социальных эффектов. В связи с этим постоянно существует потребность в усовершенствовании существующих и внедрении принципиально новых подходов к управлению материальными сырьевыми ресурсами, которые являются одним из основных компонентов производственного процесса в промышленности. Важную роль в повышении эффективности их использование на предприятии играет, прежде всего, правильная организация бухгалтерского учета и анализа как источника информации для принятия управленческих решений.
43149. Розробка плана-конспекту уроку з використанням інтерактивної дошки за темою «La peinture française» 1.11 MB
  Ось чому темою для своєї курсової роботи ми обрали саме дослідження роботи з інтерактивною дошкою, що є одним з найпоширеніших представників новітніх технологій у навчанні. Вибір і актуальність цієї теми зумовлені необхідністю ознайомлення з порівняно нещодавно введеним у навчально-виховний процес пристрою та розробки плану уроку з його використанням. Розвиток засобів навчання та можливості їх технічної реалізації суттєво випереджають можливості створення повноцінних методик застосування таких засобів, ось чим можна пояснити брак методик роботи з вищевказаним типом технологій.
43150. Разработка алгоритмического и программного обеспечения для работы с текстовыми файлами 351 KB
  Составить программу которая читает текст из разбитого на строки текстового файла и записывает в выходной файл текст с выравниванием по центру. Имена входного и выходного файлов вводятся пользователем. Цель работы Составить программу которая читает текст из разбитого на строки текстового файла и записывает в выходной файл текст с выравниванием по центру.
43151. Разработка Case-системы 498 KB
  На этапе появления подобных средств термин CSE употреблялся лишь в отношении автоматизации разработки программного обеспечения. Сегодня CSE средства подразумевают процесс разработки сложных ИС в целом: создание и сопровождение ИС анализ формулировка требований проектирование прикладного ПО и баз данных генерацию кода тестирование документирование обеспечение качества конфигурационное управление и управление проектом а также другие процессы. Актуальность курсовой работы заключается в следующем: CSEсистемы существенно сокращают сроки...
43152. Розробка додатку з використанням візуальних компонентів, створення БД та графічних зображень 290 KB
  Організувати меню, пункти якого дозволяють обирати виконання одного з трьох завдань курсової роботи. Передбачити пункт меню допомоги роботи з додатком та коректний вихід з додатку. При виборі пункту меню з одним із завдань, вирішення цього завдання відображується в окремому модальному вікні. Тема першого завдання – використання візуальних компонентів із вкладок компонентів Standart, System, Additional при роботі з масивами даних. Оброблений масив, список даних вивести в таблицю MS Word, створену за допомогою Delphi.
43153. Принятие управленческого решения на основе обработки информации в базе данных 154 KB
  Для каждой единицы техники необходимо хранить её инвентарный номер название устройства его модель год выпуска какому подразделению устройство принадлежит на текущую дату т. Каждый клуб характеризуется следующей информацией: название дата создания город спонсоры ФИО название организации если это не частное лицо главный тренер который тренирует команду клуба в настоящее время необходимо хранить историю о всех тренерах ФИО возраст звание. Также необходимо знать информацию о наличии залов клуба название зала адрес...