Разработка приложения для учета книг в библиотеке

Автор: Пользователь скрыл имя, 11 Апреля 2011 в 11:54, курсовая работа

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

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

Оглавление

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

Введение 4

1. Выбор инструментария 5

2. Разработка предметной области 6

3. Реализация 9

3.1. Реализация на языке высокого уровня 9

3.2 Дополнительные возможности приложения 12

3.2.1. Триггеры 12

3.2.2. Транзакции 13

3.2.3. Экспорт и импорт данных 15

3.3. Создание отчетов 17

Заключение 19

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

Приложение 21

Файлы: 1 файл

Курсовая_работа_по_БД_2.docx

— 302.07 Кб (Скачать)

        private void Librarian_Load(object sender, EventArgs e)

        {

            using (MySqlConnection connection = new MySqlConnection(Util.ConnectionString))

            {

                bEndBuild = false;

                MySqlCommand command = new MySqlCommand("SELECT * FROM librarian", connection);

                MySqlDataAdapter adapter = new MySqlDataAdapter(command);

                dt = new DataTable();

                adapter.Fill(dt);

                dataGridView1.DataSource = dt;

                dataGridView1.Columns["ID"].Visible = false;

                Util.SetColumnNameLibrarian(dataGridView1);

                bEndBuild = true; 

            }

        }

     Приведенный код выполняет соединение с базой  данных и заполнение таблицы Librarian. Остальные таблицы заполняются аналогичным образом.

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

     Создаются хранимые процедуры в СУБД при  помощи функции Create Procedure, вот её код: 

BEGIN

      DECLARE str varchar(100);

    SET @str = CONCAT('SELECT * FROM ', tablename, ' WHERE ', columnname, ' LIKE ''', valuename, '%''') ;

      PREPARE str from @str;

    EXECUTE str;

END

      
         Хранимая процедура MyFind имеет 3 входных параметра: имя таблицы, имя столбца и значение, которое необходимо найти.

     В клиентском приложение для этого  используются классы описанные выше (MySqlConnection, MySqlCommand, MySqlDataAdapter), а также классы, позволяющие получить результат запроса в виде таблицы со структурой соответствующей структуре таблицы в базе. Пример выполнения хранимой процедуры из клиентского приложения показан в следующем примере кода - вызов процедуры для заполнения таблицы результатами поиска: 

MySqlCommand command = new MySqlCommand("CALL MyFind('" + tablename + "', '" + columnname + "', '" + value + "')", connection); 

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

public static void TableSearch(DataGridView table, string tablename, string columnname, string value)

        {

            using (MySqlConnection connection = new MySqlConnection(ConnectionString))

            {

                connection.Open();

                MySqlCommand command = new MySqlCommand("CALL MyFind('" + tablename + "', '" + columnname + "', '" + value + "')", connection);

                MySqlDataAdapter adapter = new MySqlDataAdapter(command);

                DataTable dt = new DataTable();

                adapter.Fill(dt);

                table.DataSource = dt;

                table.Columns["ID"].Visible = false;

                SetColumnNames(table, tablename);

            }

        } 

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

     Процедура сортировки:

 

public static void SortTable(DataGridView table, string[] columns, string tableName){

            using (MySqlConnection connection = new MySqlConnection(Util.ConnectionString))

            {

                connection.Open();

                MySqlCommand command = new MySqlCommand("", connection);

                command.CommandText = "DROP View temp";

                command.ExecuteNonQuery();

               // MySqlCommand command = new MySqlCommand("CREATE VIEW  AS SELECT * FROM ", connection);

                command.CommandText = "CREATE VIEW temp AS SELECT * FROM " + tableName;

                if (columns.Length != 0)

                {

                    command.CommandText += " ORDER BY " + columns[0];

                    for(int i = 1; i < columns.Length; i++){

                        command.CommandText += ", " + columns[i];

                    } 

                }

                command.ExecuteNonQuery();

                command.CommandText = "SELECT * FROM temp";

                MySqlDataAdapter adapter = new MySqlDataAdapter(command);

                DataTable dt = new DataTable();

                adapter.Fill(dt);

                table.DataSource = dt;

                table.Columns["ID"].Visible = false;

                SetColumnNames(table, tableName);

            }

        } 
 
 

      
   
 

 

    1. Дополнительные  возможности приложения

3.2.1. Триггеры

 

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

  1. UPDATE: когда строка изменяется

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

    BEGIN

          if NEW.SHelf_ID <> OLD.SHELF_ID THEN

         IF NEW.SHELF_ID <> 0 THEN

             UPDATE `shelf` SET `shelf`.`Count_of_books` = `shelf`.`Count_of_books` + 1

                    WHERE ID = NEW.Shelf_ID;

            END IF;

            IF OLD.SHELF_ID <> 0 THEN

             UPDATE `shelf` SET `shelf`.`Count_of_books` = `shelf`.`Count_of_books` - 1

                    WHERE ID = OLD.Shelf_ID;

            END IF;

        END IF;

    END 

  1. DELETE: когда строка удалена из таблицы

    Когда из таблицы books удаляется строка, в поле count_books таблицы shelf значение конкретной книги уменьшается на 1.

    BEGIN

          IF OLD.SHELF_ID <> 0 THEN

             UPDATE `shelf` SET `shelf`.`Count_of_books` = `shelf`.`Count_of_books` - 1

                    WHERE ID = OLD.Shelf_ID;

        END IF;

    END 

  1. INSERT - когда новая строка вставлена в таблицу

    Когда в таблицу books добавляется новая строка, т.е. книга, в таблице shelf в поле count_books значение увеличивается на 1. 

    BEGIN

          IF NEW.SHELF_ID <> 0 THEN

             UPDATE `shelf` SET `shelf`.`Count_of_books` = `shelf`.`Count_of_books` + 1

                    WHERE ID = NEW.Shelf_ID;

        END IF;

    END 

      1. Транзакции
 

Транзакции  объединяют несколько запросов в  один. Если выполнился первый и второй, но не выполнился третий, но ничего не произойдет и вызовется функция  RollBack, т.е. откат назад до самого низшего запроса, иначе, если все запросы выполнились и данные изменены, вызывается Commit. Можно сказать, что транзакции – это «Всё или ничего». В данном случае транзакции используются при добавлении в таблицу Information новой записи. Эта таблица содержит в себе внешние ключи, объединяющие 3 таблицы: Readers, Librarian и Books. Так вот, изначально добавляется читатель, берущий книгу, затем библиотекарь, который ему эту книгу выдает,  и в конце мы попадаем в таблицу books и сморим, имеется ли эта книга в наличии. Если книга есть, то транзакция завершена успешно, иначе откатываемся назад и выводим соответствующее сообщение. 

Информация о работе Разработка приложения для учета книг в библиотеке