Автор: Пользователь скрыл имя, 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
private void Librarian_Load(object sender, EventArgs e)
{
using
(MySqlConnection connection = new MySqlConnection(Util.
{
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"].
Util.SetColumnNameLibrarian(
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(
{
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.
{
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);
}
}
Помимо
возможности добавления\
Когда
книга с одной полки
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
Когда из таблицы 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
Когда
в таблицу 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
Транзакции
объединяют несколько запросов в
один. Если выполнился первый и второй,
но не выполнился третий, но ничего не
произойдет и вызовется функция
RollBack, т.е. откат назад до самого низшего
запроса, иначе, если все запросы выполнились
и данные изменены, вызывается Commit. Можно
сказать, что транзакции – это «Всё или
ничего». В данном случае транзакции используются
при добавлении в таблицу Information новой
записи. Эта таблица содержит в себе внешние
ключи, объединяющие 3 таблицы: Readers, Librarian
и Books. Так вот, изначально добавляется
читатель, берущий книгу, затем библиотекарь,
который ему эту книгу выдает, и в конце
мы попадаем в таблицу books и сморим, имеется
ли эта книга в наличии. Если книга есть,
то транзакция завершена успешно, иначе
откатываемся назад и выводим соответствующее
сообщение.
Информация о работе Разработка приложения для учета книг в библиотеке