Программирование комплекса «Библиотека»

Автор работы: Пользователь скрыл имя, 01 Июня 2013 в 18:26, дипломная работа

Краткое описание

Целью данной дипломной работы является создание программного комплекса «Библиотека» (далее ПК «Библиотека») для ведения учета литературы находящийся в библиотеке, а также сотрудников имеющих на руках какие либо материалы из нее.
Задачи исследования: (задачи исследования вытекают из глав твоей дипломной работы, перечисли их по пунктам).
ПК «Библиотека» состоит из двух модулей:
Библиотекарь - представляет собой приложение Windows, в котором и происходит заполнение базы данных информацией о литературе и сотрудниках.
Читатель – этот модуль предназначен для обеспечения сотрудников ОНУТЦ доступа к базе данных книг библиотеки. Модуль читателя представляет собой веб-интерфейс.

Содержание

Введение 3
1. Постановка задачи 6
2. История развития СУБД 8
2.1. Типы и структуры данных 8
2.1.1. Основные типы данных. 8
2.1.2. Обобщенные структуры или модели данных. 9
2.1.3. Методы доступа к данным. 10
2.2. Классификация моделей баз данных 11
2.2.1. Иерархическая модель данных. 11
2.2.2. Сетевая модель данных 12
2.2.3. Реляционная модель данных 15
2.2.4. Постреляционные СУБД. 19
3. Практическая реализация 23
3.1. Пояснения к техническому заданию. 23
3.2. Интерфейс ПК «Библиотека» 24
3.3. Описание программного кода 34
3.3.1 Описание класса Form1. 34
4. Экономическое обоснование 55
5. Инструкция по технике безопасности при работе на компьютере 67

Вложенные файлы: 1 файл

Дипломная работа по проекту ОНУТЦ.docx

— 753.81 Кб (Скачать файл)

            userControlОписание1.Visible = true;

            ActiveUserControl = userControlОписание1;

            userControl11.Visible = false;

            userControlArticle2.Visible = false;

При нажатии на кнопку toolStripButtonЛитра происходит замена окон, с любого активного, на окно «Литература» при этом, не закрывая другие окна и списки, а просто делая их невидимыми и не активными.

        private void toolStripButtonЧитатели_Click_1(object sender, EventArgs e)

            userControl11.Visible = true;

            ActiveUserControl = userControl11;

            userControlОписание1.Visible = false;

            userControlArticle2.Visible = false;

При нажатии на кнопку toolStripButtonЧитатели происходит замена окон, с любого активного, на окно «Читатели» при этом, не закрывая другие окна и списки, а просто делая их невидимыми и не активными.

        private void State_B_Click(object sender, EventArgs e)

           userControlArticle2.Visible = true;

            ActiveUserControl = userControlArticle2;

            userControlОписание1.Visible = false;

            userControl11.Visible = false;

        }

При нажатии на кнопку State_B происходит замена окон, с любого активного, на окно «Статьи» при этом, не закрывая другие окна и списки, а просто делая их невидимыми и не активными.

        private void userControl11_ReadersChanged(object e)

        {

            userControlОписание1.RefreshOutData2(e);

        }

    }

}

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

3.4.2. Программный код класса UserControl1.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Drawing;

using System.Data;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using FirebirdSql.Data.FirebirdClient;

using FirebirdSql.Data.Isql;

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

using FirebirdSql.Data.FirebirdClient; - подключаемое пространство имен обеспечивающее подключение к базе данных Firebird.

using FirebirdSql.Data.Isql; - подключаемое пространство имен обеспечивающее работоспособность SQL запросов по отношению к базе данных firebird.

namespace FBDB_Test

{

    public partial class UserControl1 : UserControl, IMyUserControlInterface

    {

        public delegate void ReadersChangedEventHandler(object e);

        public event ReadersChangedEventHandler ReadersChanged;

        public UserControl1()

        {

            InitializeComponent();

        }

Выше описано создание класса UserControl1, а также глобальное объявление делегата ReadersChangedEventHandler, а также создание события ReadersChanged, отвечающее за привязку книги к читателю. После этого идет инициализация объектов.

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

        public string СтрокаНаДобавление

        {

            get

            {

                return "INSERT INTO READER VALUES(gen_id(gtbn, 1), '" + textF.Text.ToString() + "', '" + textname.Text.ToString() + "', '" + textO.Text.ToString() + "', '" + textdolznost.Text.ToString() + "', '" + textnum.Text.ToString() + "', '" + textcontact.Text.ToString() + "')";

            }

        }

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

        public string СтрокаНаУдаление

        {

            get

            {

                return "DELETE FROM READER WHERE id=" + IDBox.Text;

            }

        }

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

        public string СтрокаНаОбновить

        {

            get

            {

                return "UPDATE READER SET FAMILIA='" + textF.Text.ToString() + "'B_B_name='" + textname.Text.ToString() +"'otchestvo='" + textO.Text.ToString() + "'WORK_PLACE='" + textdolznost.Text.ToString() + "'TFBEL_NUM='" + textnum.Text.ToString() + "'B_B_EMAIL='" + textcontact.Text.ToString() +  "' where id=" + IDBox.Text.ToString();

            }

        }

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

        public void MyRefresh(FbConnection fb)

        {

            Box_Reader.Items.Clear();

            if (fb.State == ConnectionState.Closed)

                fb.Open();

            FbTransaction fbt = fb.BeginTransaction();

            FbCommand SelectSQL = new FbCommand("SELECT * FROM READER", fb);

            SelectSQL.Transaction = fbt;

            FbDataReader reader = SelectSQL.ExecuteReader();

            try

            {

                while (reader.Read())

                {

                    MC_Читатели my = new MC_Читатели();

                    my.ID = reader.GetInt32(0);

                    my.name2 = reader.GetString(2);

                    my.name3 = reader.GetString(3);

                    my.Dolz = reader.GetString(4);

                    my.Mail = reader.GetString(6);

                    my.name = reader.GetString(1);

                    my.Tub_Number = reader.GetString(5);

                    Box_Reader.Items.Add(my);

                }

            }

            finally

            {

                reader.Close();

                fb.Close();

            }

            ReadersChanged(Box_Reader.Items);

        }

Описанный выше код – является методом и одной из важнейших вещей в проекте. Данный метод осуществляет заполнение списков и таблиц, а также их обновление. Список читателей заполняется из класса МС_Читатели, который содержит поля, которые считываются из базы данных.

Ход выполнения этого метода начинается с удаления всех элементов списка, это сделано для того, чтобы записи не повторялись. После чего идет проверка соединения, и если оно закрыто, то мы должны его открыть. Далее создается SQL запрос, на выборку элементов из таблицы в базе данных. После чего создается экземпляр класса МС_Читатели, и происходит заполнение его полей с помощью FbDataReader (объект позволяющий считывать строки из таблиц базы данных). После чего экземпляр этого класса добавляется в список читателей.

После выполнения всех выше описанных действий, закрывается соединение, и закрывается FbDataReader.

        private void checkBox1_CheckedChanged(object sender, EventArgs e)

        {

            labelID.Visible = !labelID.Visible;

            IDBox.Visible = !IDBox.Visible;

        }

Выше описан элемент переключатель, это временный элемент, позволяющий скрыть или отобразить поле ID.

        private void Box_Reader_SelectedIndexChanged_1(object sender, EventArgs e)

        {

            if (Box_Reader.SelectedIndex == -1)

                return;

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

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

            MC_Читатели my = (MC_Читатели)Box_Reader.SelectedItem;

            textname.Text = my.name;

            textF.Text = my.name2;

            textO.Text = my.name3;

            textdolznost.Text = my.Dolz;

            textcontact.Text = my.Mail;

            IDBox.Text = my.ID.ToString();

            textnum.Text = my.Tub_Number;

В этой части события создается экземпляр класса MC_Читатели, а также происходит заполнение полей окна читатели полями содержащимися внутри класса MC_Читатели.

            listView1.Items.Clear();

            FbConnection fb = ((Form1)((TableLayoutPanel)((Panel)this.Parent).Parent).Parent).fb;

            if (fb.State == ConnectionState.Closed)

                fb.Open();

            FbTransaction fbt = fb.BeginTransaction();

            FbCommand SelectSQL = new FbCommand("SELECT * FROM new_table WHERE ID_READER=" + IDBox.Text, fb);

            SelectSQL.Transaction = fbt;

            FbDataReader reader = SelectSQL.ExecuteReader();

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

            try

            {

                while (reader.Read())

                {

                    MC_Литература ml = new MC_Литература();

                    ml.id = reader.GetInt32(0);

                    ml.name = reader.GetString(1);

                    ml.ANNO = reader.GetString(2);

                    ml.header = reader.GetString(3);

                    ml.val = reader.GetString(4);

                    ml.year = reader.GetString(5).ToString();

                    ml.bbk = reader.GetString(6);

                    ml.keywords = reader.GetString(7);

                    ml.price = reader.GetString(8);

                    ml.comment = reader.GetString(9);

                    ml.id_reader = reader.GetInt32(10);

                    listView1.Items.Add(new ListViewItem(new string[]{

                        ml.name+" "+ ml.header}));

                }

            }

            finally

            {

                fbt.Commit();

                fbt.Dispose();

                reader.Close();

                fb.Close();

            }

        }

    }

}

В этой части события мы считываем информацию из базы данных и помещаем ее в класс МС_Литература используя при этом FbDataReader. После считывания добавляем всю информацию в список. По окончанию этих действий мы подтверждаем транзакцию и закрываем соединение с базой данных.

3.4.3. Программный код класса UserControlArticle

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Drawing;

using System.Data;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using FirebirdSql.Data.FirebirdClient;

using FirebirdSql.Data.Isql;

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

using FirebirdSql.Data.FirebirdClient; - подключаемое пространство имен обеспечивающее подключение к базе данных Firebird.

using FirebirdSql.Data.Isql; - подключаемое пространство имен обеспечивающее работоспособность SQL запросов по отношению к базе данных firebird.

namespace FBDB_Test

{

    public partial class UserControlArticle : UserControl, IMyUserControlInterface

    {

        public UserControlArticle()

        {

            InitializeComponent();

        }

Выше описано создание класса UserControlArticle и подключение к нему интерфейса (наследование от IMyUserControlInterface)

        public String СтрокаНаДобавление

        {

            get

            {

                return "INSERT INTO states VALUES(gen_id(gtbn, 1), '" + Autor_Box.Text.ToString() + "', '" + Header_Box.Text.ToString() + "', '" + ANNO_Box.Text.ToString() + "', '" + KW_Box.Text.ToString() + "', '" + Resours_Box.Text.ToString() + "', '" + Pages_Box.Text.ToString() + "')";

            }

        }

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

        public String СтрокаНаУдаление

        {

            get

            {

                return "delete from states where id=" + IDBOX.Text.ToString();

            }

        }

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

        public String СтрокаНаОбновить

        {

            get

            {

                return "UPDATE states SET autor='" + Autor_Box.Text.ToString() +"',anno='" + ANNO_Box.Text.ToString() +"',header='" + Header_Box.Text.ToString() + "',key_words='" + KW_Box.Text.ToString() + "',B_B_PAGES='" + Pages_Box.Text.ToString() + "',ISTO4NIK='" + Resours_Box.Text.ToString() +  "'where id=" + IDBOX.Text.ToString();   

            }

        }

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

        public void MyRefresh(FbConnection fb)

        {

            List_Artic.Items.Clear();

            if (fb.State == ConnectionState.Closed)

                fb.Open();

            FbTransaction fbt = fb.BeginTransaction();

            FbCommand SelectSQL = new FbCommand("SELECT * FROM states", fb);

            SelectSQL.Transaction = fbt;

            FbDataReader reader = SelectSQL.ExecuteReader();

            try

            {

                while (reader.Read())

                {

                    FBDB_Test.classes.MC_ART my = new FBDB_Test.classes.MC_ART();

                    my.id = reader.GetInt32(0);

                    my.ANNO = reader.GetString(3);

                    my.autor = reader.GetString(1);

                    my.header = reader.GetString(2);

                    my.keywords = reader.GetString(4);

                    my.pages = reader.GetInt32(6);

                    my.res = reader.GetString(5);

                    List_Artic.Items.Add(my);

                }

            }

            finally

            {

                reader.Close();

                fb.Close();

            }

        }

Описанный выше код – является методом и одной из важнейших частей проекта. Данный метод осуществляет заполнение списков и таблиц, а также их обновление. Список читателей заполняется из класса МС_Читатели, который содержит поля, которые считываются из базы данных.

Ход выполнения этого метода начинается с удаления всех элементов списка, это сделано для того, чтобы записи не повторялись. После чего идет проверка соединения, и если оно закрыто, то мы должны его открыть. Далее создается SQL запрос, на выборку элементов из таблицы в базе данных. После чего создается экземпляр класса МС_Читатели, и происходит заполнение его полей с помощью FbDataReader (объект позволяющий считывать строки из таблиц базы данных). Далее экземпляр этого класса добавляется в список читателей.

После выполнения всех выше описанных действий, закрывается соединение, и закрывается FbDataReader.

        private void List_Artic_SelectedIndexChanged(object sender, EventArgs e)

        {

            if (List_Artic.SelectedIndex == -1)

                return;

            FBDB_Test.classes.MC_ART my = (FBDB_Test.classes.MC_ART)List_Artic.SelectedItem;

            ANNO_Box.Text = my.ANNO;

            Header_Box.Text = my.header;

            IDBOX.Text = my.id.ToString();

            KW_Box.Text = my.keywords;

            Pages_Box.Text = my.pages.ToString();

            Resours_Box.Text = my.res;

            Autor_Box.Text = my.autor;

        }

    }

}

Выше описанный код отвечает за заполнение текстовых полей, расположенных рядом со списком статей. Этот код описывает событие клика по элементу списка, при этом заполняются текстовые поля.

Первым действием является проверка на снятие фокуса с элемента, если фокус был снят, поля останутся заполненными. Далее создается экземпляр класса MC_ART с помощью которого заполняются текстовые поля.

3.4.4. Программный код класса  UserControlОписание

Информация о работе Программирование комплекса «Библиотека»