83705

Разработка приложения для предметной области «Сбор сведений о писателях и их литературных произведениях»

Курсовая

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

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

Русский

2015-03-16

252.8 KB

22 чел.

РОССИЙСКАЯ ФЕДЕРАЦИЯ

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Институт математики и компьютерных наук

Кафедра программного обеспечения

КУРСОВАЯ РАБОТА

по курсу: «Языки программирования»

на тему: «Разработка приложения для предметной области «Сбор сведений о

писателях и их литературных произведениях»

Выполнил:

Студент ИБ136 группы

Тарасова Оксана Васильевна

Проверил:

Плотоненко Юрий Анатольевич

Тюмень 2014

Оглавление

АННОТАЦИЯ 3

Глава1 Системы хранения данных 4

Глава 2 Реализация программного обеспечения 6

2.1 Постановка задачи 6

2.2 Алгоритмическая схема решения задачи 8

2.3 Описание классов 9

2.4 Основные используемые алгоритмы и их описание 11

2.5 Описание пользовательского интерфейса 19

Заключение 24

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

АННОТАЦИЯ

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

Глава1 Системы хранения данных

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

 Система управления базами данных - это совокупность языковых и программных средств, которая осуществляет доступ к данным, позволяет их создавать, менять и удалять, обеспечивает безопасность данных и т.д. В общем СУБД - это система, позволяющая создавать базы данных и манипулировать сведениями из них.

 Реляционные базы данных, как мы уже знаем, состоят из таблиц. Каждая таблица состоит из столбцов (их называют полями или атрибутами) и строк (их называют записями или кортежами). Таблицы в реляционных базах данных обладают рядом свойств. Основными являются следующие:

  1. В таблице не может быть двух одинаковых строк. В математике таблицы, обладающие таким свойством, называют отношениями - по-английски relation, отсюда и название - реляционные.
  2. Столбцы располагаются в определенном порядке, который создается при создании таблицы. В таблице может не быть ни одной строки, но обязательно должен быть хотя бы один столбец.
  3. У каждого столбца есть уникальное имя (в пределах таблицы), и все значения в одном столбце имеют один тип (число, текст, дата...).
  4. На пересечении каждого столбца и строки может находиться только атомарное значение (одно значение, не состоящее из группы значений). Таблицы, удовлетворяющие этому условию, называют нормализованными.

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

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

К основным понятиям иерархической структуры относятся уровень, узел и связь. Узел - это совокупность атрибутов данных, описывающих некоторый объект. На схеме иерархического дерева узлы представляются вершинами графа. Каждый узел на более низком уровне связан только с одним узлом, находящимся на более высоком уровне. Иерархическое дерево имеет только одну вершину, не подчиненную никакой другой вершине и находящуюся на самом верхнем - первом уровне. Зависимые (подчиненные) узлы находятся на втором, третьем и т. д. уровнях. Количество деревьев в базе данных определяется числом корневых записей. К каждой записи базы данных существует только один иерархический путь от корневой записи.

Глава 2 Реализация программного обеспечения

2.1 Постановка задачи

 Цель данной работы - создание базы данных «Сбор сведений о писателях и их литературных произведениях», предназначенной для хранения, сбора и накапливания информации о писателях, их произведениях, жанрах произведений, об издательствах, а так же для формирования трех следующих отчетов:

  1.  Предпочитаемый автором жанр (будет формироваться в MS Excel).
  2.  Поиск первого произведения автора (будет формироваться в MS Excel).
  3.  Расчет возраста авторов (будет формироваться в MS Word).

 Клиентское приложение будет состоять из:

  1.  основной формы, которая содержит меню;
  2.  четырех форм, которые отображают таблицы данных и меню для работы с таблицами;
  3.  четырех форм, для работы с каждой из таблиц .

 Достижение цели определяется последовательным выполнением следующих задач:

  1.  определение перечня информации, которая будет храниться в базе данных;
  2.  разработка базы данных в формате XML;
  3.  разработка клиентской части.

 Программа должна предоставлять возможности:

  1.  добавление данных;
  2.  редактирование данных;
  3.  удаление данных;
  4.  поиск по таблице;
  5.  фильтрация данных;
  6.  возможность вывода отчетов в файлы Microsoft Word;
  7.   возможность вывода отчетов в таблицы Microsoft Exсel.

2.2 Алгоритмическая схема решения задачи

Отчет(Excel)

Начало

Отчет(Word)

Отчет(Excel)

Автор

Жанр

Произведение

Издательство

Добавление

Добавление

Удаление

Удаление

Изменение

Изменение

Поиск

Поиск

Фильтрация

Фильтрация

Выход

Добавление

Удаление

Изменение

Поиск

Фильтрация

Добавление

Удаление

Изменение

Поиск

Фильтрация

Алгоритмическая схема (Рис.1)

2.3 Описание классов

Класс Form1:

У класса существует таблица, которая помогает в составлении отчетов формата MS Excel, но она не выводится на саму форму, т.к. в этом нет необходимости.

Методы:

  1.  CreateTable(): создание каркаса таблицы;
  2.  CreateTable1(): создание каркаса таблицы;
  3.  ReadXml(): заполнение таблицы данными;
  4.  ReadXml1(): заполнение таблицы данными;
  5.  Otchet(int k): вывод отчета формата MS Excel;
  6.  Otchet1():вывод отчета формата MS Word;

Класс Автор:

Поля представлены в таблице вида:

id

Name

SecondName

Burn

Death

Методы:

  1.  WriteToXMLDocument: добавление элемента;
  2.  DeletePerson: удаление элемента;
  3.  ReWrite(): изменение элемента;
  4.  ReadXMLDocument: поиск элемента;
  5.  CreateTable(): создание каркаса таблицы;
  6.  ReadXml(): заполнение таблицы данными;
  7.  filtr(): фильтрация данных;

Класс Жанр:

Поля представлены в таблице вида:

id

Author

Creation

Genre

 Методы:

  1.  WriteToXMLDocument: добавление элемента;
  2.  DeletePerson: удаление элемента;
  3.  ReWrite(): изменение элемента;
  4.  ReadXMLDocument: поиск элемента;
  5.  CreateTable(): создание каркаса таблицы;
  6.  ReadXml(): заполнение таблицы данными;
  7.  filtr(): фильтрация данных;

Класс Произведение:

Поля представлены в таблице вида:

id

Title

Author

Year

Publishing

 Методы:

  1.  WriteToXMLDocument: добавление элемента;
  2.  DeletePerson: удаление элемента;
  3.  ReWrite(): изменение элемента;
  4.  ReadXMLDocument: поиск элемента;
  5.  CreateTable(): создание каркаса таблицы;
  6.  ReadXml(): заполнение таблицы данными;
  7.  filtr(): фильтрация данных;

Класс Издательство:

Поля представлены в таблице вида:

id

Name

Founder

Year

 Методы:

  1.  WriteToXMLDocument: добавление элемента;
  2.  DeletePerson: удаление элемента;
  3.  ReWrite(): изменение элемента;
  4.  ReadXMLDocument: поиск элемента;
  5.  CreateTable(): создание каркаса таблицы;
  6.  ReadXml(): заполнение таблицы данными;
  7.  filtr(): фильтрация данных;

2.4 Основные используемые алгоритмы и их описание

(все примеры взяты из функций связанных с таблицей «жанр», отличие от остальных функций только в количестве атрибутов, их названий и типе)

Создание и заполнение таблиц:

  1.  Эта функция отвечает за заполнение таблицы, в ней используется еще одна функция: CreateTable(), отвечающая за создание таблицы;

private DataTable ReadXml()

       {

           DataTable dt = null;

               //загружаем xml файл

               XDocument xDoc = XDocument.Load(@"../../Genre_bd.xml");

               //создаём таблицу

               dt = CreateTable();

           DataRow newRow = null;

               XmlDocument xd = new XmlDocument();

               FileStream fs = new FileStream(@"../../Genre_bd.xml", FileMode.Open);

               xd.Load(fs);

               XmlNodeList list = xd.GetElementsByTagName("genre1");

               //получаем все узлы в xml файле

           int w=0;

           List<string> aut=new List<string>();

           List<string> gen = new List<string>();

           for (int i = 0; i < list.Count; i++)

           {

               gen.Clear();

               string maxs = "";

               bool prA = false;

               string prgen = "";

               int max = 0;

               XmlElement Author = (XmlElement)xd.GetElementsByTagName("author")[i];

               string Aut = Author.InnerText;

               for (int j = 0; j < aut.Count; j++)

               {

                   if (aut[j] == Aut)

                   {

                       prA = true;

                       break;

                   }

               }

               if (!prA)

               {

                   aut.Add(Aut);

                   for (int k = i; k < list.Count; k++)

                   {

                       XmlElement Author1 = (XmlElement)xd.GetElementsByTagName("author")[k];

                       XmlElement Genr = (XmlElement)xd.GetElementsByTagName("genre")[k];

                       prgen = Genr.InnerText;

                       string aut1 = Author1.InnerText;

                       if (Aut == aut1)

                       {

                           gen.Add(prgen);

                       }

                   }

                   for (int k = 0; k < gen.Count; k++)

                   {

                       int kol = 0;

                       for (int q = 0; q < gen.Count; q++)

                       {

                           if (gen[k] == gen[q])

                           {

                               kol++;

                           }

                       }

                       if (kol > max)

                       {

                           max = kol;

                           maxs = gen[k];

                       }

                   }

                   newRow = dt.NewRow();

                   w++;

                   //получаем значение атрибута

                   newRow["id"] = w;

                   newRow["name"] = Aut;

                   newRow["genre"] = maxs;

                   dt.Rows.Add(newRow);

               }

           }

               fs.Close();

           return dt;

       }

  1.  Эта функция отвечает за создание таблицы:

private DataTable CreateTable()

       {

           //создаём таблицу

           DataTable dt = new DataTable("genres");

           //создаём три колонки

           DataColumn colID = new DataColumn("Id", typeof(Int32));

           DataColumn colName = new DataColumn("Name", typeof(String));

           DataColumn colSureName = new DataColumn("Genre", typeof(String));

           //добавляем колонки в таблицу

           dt.Columns.Add(colID);

           dt.Columns.Add(colName);

           dt.Columns.Add(colSureName);

           return dt;

       }

Добавление записи:

private void WriteToXMLDocument(string filepath)

       {

           XmlDocument xd = new XmlDocument();

           FileStream fs = new FileStream(filepath, FileMode.Open);

           xd.Load(fs);

           XmlNodeList list = xd.GetElementsByTagName("genre1");

           //создаем тег

           XmlElement genre1 = xd.CreateElement("genre1");

           //создаем поля

           XmlElement Name = xd.CreateElement("author");

           XmlElement Creation = xd.CreateElement("creation");

           XmlElement Genre = xd.CreateElement("genre");

           //создаем записи

           XmlText tName = xd.CreateTextNode(textBox1.Text);

           XmlText tCreation = xd.CreateTextNode(textBox2.Text);

           XmlText tGenre = xd.CreateTextNode(textBox3.Text);

           //забиваем значение в поля

           Name.AppendChild(tName);

           Creation.AppendChild(tCreation);

           Genre.AppendChild(tGenre);

           //забиваем поля в тег

           genre1.AppendChild(Name);

           genre1.AppendChild(Creation);

           genre1.AppendChild(Genre);

           // ЗАбиваем запись в документ  

           xd.DocumentElement.AppendChild(genre1);

           fs.Close();         // Закрываем поток  

           xd.Save(filepath); // Сохраняем файл  

       }

Удаление записи:

internal static void DeletePerson(string filepath, string pid)

       {

           bool f = false;

           XmlDocument doc = new XmlDocument();

           doc.Load(filepath);

           XmlNodeList cl = doc.DocumentElement.ChildNodes;

           for (int i = 0; i < cl.Count; i++)

               if (i == Convert.ToInt32(pid) - 1)

               {

                   doc.DocumentElement.RemoveChild(cl[i]);

                   doc.Save(filepath);

                   f = true;

                   break;

               }

               if(!f)

                   MessageBox.Show("Элемент не найден");

       }

Поиск записи:

private void ReadXMLDocument(string filepath)

       {

           string name, creation, genre;

           // Объявляем и забиваем файл в документ  

           XmlDocument xd = new XmlDocument();

           FileStream fs = new FileStream(filepath, FileMode.Open);

           xd.Load(fs);

           XmlNodeList list = xd.GetElementsByTagName("genre1"); // Создаем и заполняем лист по тегу   

           for (int i = 0; i < list.Count; i++)

           {         

               XmlElement Name = (XmlElement)xd.GetElementsByTagName("author")[i];      

               XmlElement Creation = (XmlElement)xd.GetElementsByTagName("creation")[i];  

               XmlElement Genre = (XmlElement)xd.GetElementsByTagName("genre")[i];

               if ((i + 1).ToString() == textBox1.Text) // Если наткнулся на нужный айдишник  

               {

                   // Вставляем в переменные текст из тегов  

                   name = Name.InnerText;

                   creation = Creation.InnerText;

                   genre = Genre.InnerText;

                   // Заполняем поля на форме  

                   textBox2.Text = name;

                   textBox3.Text = creation;

                   textBox4.Text = genre;

                   break;

               }

               else

               {

                   textBox2.Text = "не найдено";

                   textBox3.Text = "не найдено";

                   textBox4.Text = "не найдено";

               }

           }

           // Закрываем поток  

           fs.Close();

       }

Изменить запись:

 Сначала используется функция поиска записи в таблице, и если такая запись находится, то программа разрешает провести изменение:

private void ReWrite()

       {

           // Объявляем и забиваем файл в документ  

           XmlDocument xd = new XmlDocument();

           FileStream fs = new FileStream(@"../../Genre_bd.xml", FileMode.Open);

           xd.Load(fs);

           XmlNodeList list = xd.GetElementsByTagName("genre1");

           for (int i = 0; i < list.Count; i++)

           {

               if ((i + 1).ToString() == textBox1.Text)

               {

                   XmlElement Name = (XmlElement)xd.GetElementsByTagName("author")[i];      

                   XmlElement Creation = (XmlElement)xd.GetElementsByTagName("creation")[i];  

                   XmlElement Genre = (XmlElement)xd.GetElementsByTagName("genre")[i];

                   Name.InnerText = textBox2.Text;

                   Creation.InnerText = textBox3.Text;

                   Genre.InnerText = textBox4.Text;

               }

           }

           fs.Close();         // Закрываем поток  

           xd.Save(@"../../Genre_bd.xml"); // Сохраняем файл  

       }

Фильтрация данных:

 Реализуется путем совмещения функций поиска и заполнения таблицы

private DataTable filtr()

       {

           string name, creation, genre;

           bool n=false;

           bool s=false;

           bool b=false;

           DataTable dt = null;

           dt = CreateTable();

           DataRow newRow = null;

           // Объявляем и забиваем файл в документ  

           XmlDocument xd = new XmlDocument();

           FileStream fs = new FileStream(@"../../Genre_bd.xml", FileMode.Open);

           xd.Load(fs);

           int id=0;

           XmlNodeList list = xd.GetElementsByTagName("genre1"); // Создаем и заполняем лист по тегу  

           for (int i = 0; i < list.Count; i++)

           {        

               XmlElement Name = (XmlElement)xd.GetElementsByTagName("author")[i];      

               XmlElement Creation = (XmlElement)xd.GetElementsByTagName("creation")[i];  

               XmlElement Genre = (XmlElement)xd.GetElementsByTagName("genre")[i];

               // Вставляем в переменные текст из тегов  

               name = Name.InnerText;

               creation = Creation.InnerText;

               genre = Genre.InnerText;

                   if ((textBox16.Text == name) || (textBox16.Text == ""))

                       n = true;

                   if ((textBox17.Text == creation) || (textBox17.Text == ""))

                       s = true;

                   if ((textBox18.Text == genre) || (textBox18.Text == ""))

                       b = true;

                   if (n && s && b )

                   {

                       //создаём новую запись

                       newRow = dt.NewRow();

                       id++;

                       //получаем значение атрибута

                       newRow["id"] = id;

                       newRow["author"] = name;

                       newRow["creation"] = creation;

                       newRow["genre"] = genre;

                       

                       dt.Rows.Add(newRow);

                   }

                   n = false;

                   s = false;

                   b = false;

           }

           // Закрываем поток  

           fs.Close();

           return dt;

       }

Открытие отчета (MS Word):

private void Otchet1()

       {

           //создаем документ

           Microsoft.Office.Interop.Word.Application application = new Microsoft.Office.Interop.Word.Application();

           Object missing = Type.Missing;

           application.Documents.Add(ref missing, ref missing, ref missing, ref missing);

           Microsoft.Office.Interop.Word.Document doc = application.ActiveDocument;

           Microsoft.Office.Interop.Word.Range range = doc.Paragraphs[doc.Paragraphs.Count].Range;

           string name, surename, burn, death; //переменные для преобразования  

           // Объявляем и забиваем файл в документ  

           XmlDocument xd = new XmlDocument();

           FileStream fs = new FileStream(@"../../Author_bd.xml", FileMode.Open);

           xd.Load(fs);

           XmlNodeList list = xd.GetElementsByTagName("author"); // Создаем и заполняем лист по тегу "user"

           int x = list.Count+1;

           //создем таблицу с необходимыми параметрами

           doc.Tables.Add(range, x, 3, ref missing, ref missing);

           //название колонок

           doc.Tables[1].Cell(1, 1).Range.Text = "№";

           doc.Tables[1].Cell(1, 2).Range.Text = "Фамилия Имя";

           doc.Tables[1].Cell(1, 3).Range.Text = "Годы жизни";

           int k = 2;

           for (int i = 0; i < list.Count; i++)

           {          

               XmlElement Name = (XmlElement)xd.GetElementsByTagName("name")[i];      

               XmlElement SecondName = (XmlElement)xd.GetElementsByTagName("secondname")[i];   

               XmlElement Burn = (XmlElement)xd.GetElementsByTagName("burn")[i];

               XmlElement Death = (XmlElement)xd.GetElementsByTagName("death")[i];

               //находим неоходимые сведенья

                   name = Name.InnerText;

                   surename = SecondName.InnerText;

                   burn = Burn.InnerText;

                   death = Death.InnerText;

               //вычисляем годы жизни

               int GJ=int.Parse(death)-int.Parse(burn);

               //заполняем таблицу

                   doc.Tables[1].Cell(k, 1).Range.Text = (k-1).ToString();

                   doc.Tables[1].Cell(k, 2).Range.Text = name+" "+surename;

                   doc.Tables[1].Cell(k, 3).Range.Text = GJ.ToString();

                   k += 1;

           }

           //характеристики таблицы

           Word.Border[] borders = new Word.Border[6];

           Word.Table tbl = doc.Tables[doc.Tables.Count];

           borders[0] = tbl.Borders[Word.WdBorderType.wdBorderLeft];

           borders[1] = tbl.Borders[Word.WdBorderType.wdBorderRight];

           borders[2] = tbl.Borders[Word.WdBorderType.wdBorderTop];

           borders[3] = tbl.Borders[Word.WdBorderType.wdBorderBottom];

           borders[4] = tbl.Borders[Word.WdBorderType.wdBorderHorizontal];

           borders[5] = tbl.Borders[Word.WdBorderType.wdBorderVertical];

           foreach (Word.Border border in borders)

           {

               border.LineStyle = Word.WdLineStyle.wdLineStyleSingle;

               border.Color = Word.WdColor.wdColorBlack;

           }

           application.Visible = true;//вывод на экран

       }

Вывод отчета (MS Excel):

private void Otchet(int k)

       {

           //создаем документ и переменные для него

           object misValue = System.Reflection.Missing.Value;

           Excel.Application xlApp = new Excel.Application();

           Excel.Workbook xlWorkBook= xlApp.Workbooks.Add(misValue);

           Excel.Worksheet xlWorkSheet= (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

               //ширина для столбцов

               for (int i = 2; i < 4;i++ )

                   xlWorkSheet.Columns[i].ColumnWidth = 30; ;

           //определяем какие заголовки у таблицы должны быть

               if (k == 1)

               {

                   xlWorkSheet.Cells[1, 2] = "Автор";

                   xlWorkSheet.Cells[1, 3] = "Жанр";

               }

               else

               {

                   xlWorkSheet.Cells[1, 2] = "Автор";

                   xlWorkSheet.Cells[1, 3] = "Произведение";

               }

               //заполняем таблицу данными из "невидимой" dataGridView1

               for (int i = 1; i <= dataGridView1.RowCount - 1; i++)

               {

                   for (int j = 0; j <= dataGridView1.ColumnCount - 1; j++)

                   {

                       DataGridViewCell cell = dataGridView1[j, i-1];

                       xlWorkSheet.Cells[i + 1, j + 1] = cell.Value;

                   }

               }

                   xlApp.Visible=true;//выводим на экран

                   releaseObject(xlWorkSheet);

                   releaseObject(xlWorkBook);

                   releaseObject(xlApp);

               

       }

       //используетя для очищения памяти

       private void releaseObject(object obj)

       {

           try

           {

               System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);

               obj = null;

           }

           catch (Exception ex)

           {

               obj = null;

               MessageBox.Show("Возникло исключение при создании объекта " + ex.ToString());

           }

           finally

           {

               GC.Collect();

           }

       } 

2.5 Описание пользовательского интерфейса

Внимание!!!                                                                                                                                                         Во всех методах пунктов меню предусмотрена защита от попытки ввода неправильных (по типу) или «пустых» данных.

 При запуске программы отображается форма, содержащая главное меню. В меню расположены кнопки: Жанр, Автор, Произведение, Издательство и три кнопки вывода отчетов и Выход. (Рис. 2) При нажатии Выход окно программы закрывается.

Рис. 2. Главное меню клиентского приложения.

 Кнопки: Автор, Жанр, Произведение, Издательство, содержат таблицы, с информацией. А так же присутствует функции фильтрации данных и возвращение исходной таблицы и меню с основными функциями работы с таблицей. (Рис. 3)

 

Рис. 3. Окно таблицы «Жанр» с фильтром и меню.

 Пункт меню «Добавить» в таблице, осуществляет добавление записи в таблицу (при условии что формат введенных данных правилен). (Рис. 4).

Рис.4. «Добавить»

 Пункт меню «Удалить», осуществляет удаление записи (Рис.5)

Рис.5 «Удалить»

 Пункт меню «Изменить запись», осуществляет изменение записи (Рис.6)

Рис.6 «Изменить запись»

 Пункт меню «Поиск по id», осуществляет поиск по номеру в таблице (Рис.7)

Рис.7 «Поиск по id»

 Кнопки Отчет1… и Отчет2… создают отчеты в формате MS Excel. (Рис. 8.1, 8.2)

Рис. 8.1 Отчет1 в приложении MS Excel.

Рис. 8.2 Отчет2 в приложении MS Excel.

 Кнопка Отчет3… создает отчет в формате MS Word. (Рис. 8.3)

Рис. 8.3 Отчет в приложении MS Word

Заключение

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

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

 

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

Книги и учебники:

1. Грейвс Марк. Проектирование баз данных на основе XML.: Вильям, 2002;

2. Информационные системы и базы данных. Организация и проектирование.: Владислав Пирогов, 2009;

3. Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML.: Токмаков Г.П., 2010;

Ресурсы интернет:

4. http://msdn.microsoft.com/;

5. http://www.fvn2009.narod.ru/Manuscripts/Algorithmization/algorithm8.htm.


 

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

25927. Контакторы электромагнитные. Назначение контакторов. Контакторы постоянного и переменного тока. Конструктивные особенности. Выбор контакторов 42 KB
  Контакторы постоянного и переменного тока. Классификация электромагнитных контакторов Общепромышленные контакторы классифицируются: по роду тока главной цепи и цепи управления включающей катушки постоянного переменного постоянного и переменного тока; по числу главных полюсов от 1 до 5; по номинальному току главной цепи от 15 до 4800 А; по номинальному напряжению главной цепи: от 27 до 2000 В постоянного тока; от 110 до 1600 В переменного тока частотой 50 60 500 1000 2400 8000 10 000 Гц; по номинальному напряжению включающей...
25928. Магнитные пускатели. Назначение пускателей. Схема включения. Выбор пускателей 24.5 KB
  Магнитные пускатели. Характеристики пускателей Современные магнитные пускатели классифицируются: по назначению нереверсивные реверсивные наличию или отсутствию тепловых реле и кнопок управления степени защиты от воздействия окружающей среды уровням коммутируемых токов рабочему напряжению катушки. Магнитные пускатели применяются для управления электрическими нагрузками в диапазоне мощностей от 75 до 80 кВт. Чаще всего пускатели располагают максимальной защитой от перегрузок недопустимой продолжительности и от токов повышенной...
25929. Виды щелей дугогасительных устройств. Перемещение дуги под воздействием магнитного поля. Гашение дуги с помощью дугогасительной решетки. Виды дугогасительных решеток 33 KB
  Перемещение дуги под воздействием магнитного поля. Гашение дуги с помощью дугогасительной решетки. Дугогасительное устройство узел высоковольтного выключателя предназначенный для гашения электрической дуги которая возникает на контактах выключателя при размыкании цепи. Гашение дуги в Д.
25930. Способы гашения электрической дуги. Область применения 47.5 KB
  Способы гашения электрической дуги. Способы гашения дуги в коммутационных аппаратах до 1 кВ. Удлинение дуги при быстром расхождении контактов: чем длинее дуга тем большее напряжение необходимо для ее существования. Деление длинной дуги на ряд коротких дуг.
25931. Разъединители. Назначение. Конструктивное исполнение. Принцип действия. Условия выбора 31.5 KB
  Разъединители аппараты которые предназначены для включения и отключения участков электрических цепей под напряжением при отсутствии нагрузочного тока. Разъединитель и механизм его привода должны надежно удерживаться во включенном положении при протекании тока К3. Как мы уже говорили они должны надежно работать при номинальном режиме а также при перегрузках и сквозных токах короткого замыкания. При больших токах контакты выполняют из нескольких до восьми параллельных пластин.
25932. Отделители и короткозамыкатели. Назначение. Конструктивное исполнение. Принцип действия. Условия выбора. Совместная работа отделителей и короткозамыкателей 25 KB
  Для замены выключателей на стороне высокого напряжения используются короткозамыкатели и отделители. Отделитель служит для отключения обесточенной цепи высокого напряжения за малое время не более 01 сек. Короткозамыкатели и отделители устанавливаются на стороне высшего напряжения РУ малоответственных потребителей когда в целях экономии площади и стоимости РУ выключатели предусмотрены только на стороне низшего напряжения. Отделители и короткозамыкатели устанавливаются на стороне высшего напряжения в менее ответственных РУ в целях экономии...
25933. Реакторы. Назначение. Конструктивное исполнение. Принцип действия. Условия выбора. Сдвоенные реакторы 26 KB
  Реакторы. Сдвоенные реакторы. Для ограничения ударного тока короткого замыкания применяют токоограничивающие реакторы. По этой причине реакторы выполняют без стальных сердечников несмотря на то что при этом для поддержания такого же значения индуктивности их приходится делать больших размеров и массы.
25934. Измерительные трансформаторы тока и напряжения. Назначение. Конструктивное исполнение. Принцип действия. Условия выбора 26 KB
  Измерительные трансформаторы тока и напряжения. Трансформатор напряжения трансформатор предназначеный для преобразования высокого напряжения в низкое в цепях РЗиА. Применение трансформатора напряжения позволяет изолировать логические цепи защиты и цепи измерения от цепи высокого напряжения. Виды трансформаторов напряжения Заземляемый трансформатор напряжения однофазный трансформатор напряжения один конец первичной обмотки которого должен быть наглухо заземлен или трехфазный трансформатор напряжения нейтраль первичной обмотки которого...
25935. Разрядники: назначение, конструкция, принцип действия. Вентильные и трубчатые разрядники. Нелинейные ограничители перенапряжения (ОПН): назначение, конструкция, принцип действия. Условия выбора 52.5 KB
  Нелинейные ограничители перенапряжения ОПН: назначение конструкция принцип действия. В результате пробоя в трубке возникает интенсивная газогенерация и через выхлопное отверстие образуется продольное дутье достаточное для погашения дуги . ОПН Ограничитель перенапряжения нелинейный ОПН это разрядник без искровых промежутков. Активная часть ОПН состоит из последовательного набора варисторов.