Автор работы: Пользователь скрыл имя, 25 Декабря 2013 в 23:50, курсовая работа
Разработать систему, помогающую обслуживать библиотеку. Система должна предусматривать режимы ведения системного каталога, отражающего перечень областей знаний, по которым имеются книги в библиотеке. Внутри библиотеки области знаний в систематическом каталоге могут иметь уникальный внутренний номер и полное наименование. Каждая книга может содержать сведения из нескольких областей знаний. Каждая книга в библиотеке может присутствовать в нескольких экземплярах.
Задание.
Задание на курсовую работу в соответствии с выбранным вариантом.
Анализ. Предметная область.
Описание предметной области.
Перечень и описание сущностей и атрибутов базы данных.
Проектирование. Нормализация базы данных. Схема данных.
Нормализации базы данных (методом ER-диаграмм).
Схема данных.
Перечень и описание таблиц и их полей (с указанием типов данных и ограничений) в сводной таблице.
Программная часть.
Тестирование. Результаты тестирования.
Сопровождение. Руководство пользователя.
Список использованной литературы
Приложение 1. Исходный текст приложения.
Федеральное государственное
бюджетное образовательное
"Чувашский государственный
университет имени И.Н.
Факультет информатики и вычислительной техники
Дисциплина: базы данных
Курсовая работа
Библиотека
Выполнил ст. гр. ИВТ-11-10
Волкова А.А
Проверил Буланкина Е.Ю.
Чебоксары 2013
Содержание
Задание на курсовую работу в соответствии с выбранным вариантом.
Разработать систему, помогающую обслуживать библиотеку. Система должна предусматривать режимы ведения системного каталога, отражающего перечень областей знаний, по которым имеются книги в библиотеке. Внутри библиотеки области знаний в систематическом каталоге могут иметь уникальный внутренний номер и полное наименование. Каждая книга может содержать сведения из нескольких областей знаний. Каждая книга в библиотеке может присутствовать в нескольких экземплярах.
Предусмотреть следующие ограничения на информацию в системе:
Разработать систему, помогающую обслуживать библиотеку. Система должна предусматривать режимы ведения системного каталога, отражающего перечень областей знаний, по которым имеются книги в библиотеке. Внутри библиотеки области знаний в систематическом каталоге могут иметь уникальный внутренний номер и полное наименование. Каждая книга может содержать сведения из нескольких областей знаний. Каждая книга в библиотеке может присутствовать в нескольких экземплярах.
В библиотеке ведется картотека читателей. На каждого читателя в картотеку заносятся следующие сведения:
Каждому читателю присваивается уникальный номер читательского билета. Читатель не должен одновременно держать более одного экземпляра книги одного названия. Каждая книга, хранящаяся в библиотеке, характеризуется следующими параметрами:
Каждая книга в библиотеке может присутствовать в нескольких экземплярах. Каждый экземпляр имеет следующие характеристики:
В случае отсутствия данного экземпляра книги должны быть записаны следующие сведения:
Каждый экземпляр книги может находиться на руках только у одного читателя. Предусмотреть следующие ограничения на информацию в системе:
Сущности базы данных:
Перечень и описание всех атрибутов базы данных:
№ |
Имя атрибута |
Описание |
1. |
КодЧитателя |
Уникальный код читателя |
2. |
ФИО |
Фамилия, имя, отчество читателя |
3. |
Адрес |
Адрес проживания читателя |
4. |
Телефон |
Телефон читателя |
5. |
ДатаРождения |
Дата рождения читателя |
6. |
КодКниги |
Уникальный код книги |
7. |
Название |
Название книги |
8. |
ФамАвтора |
Фамилия автора книги |
9. |
ФамСоавторов |
Фамилия соавторов книги |
10. |
МестоИздания |
Место издания книги |
11. |
Издательство |
Издательство книги |
12. |
КолСтраниц |
Количество страниц в книге |
13. |
КолЭкземпляров |
Количество экземпляров книги |
14. |
КодЭкземпляра |
Уникальный код экземпляра |
15. |
КодОблЗнани |
Уникальный код области знаний |
16. |
Описание |
Описание области знаний |
17. |
КодИстории |
Уникальный код истории |
18. |
ДатаВыдачи |
Дата выдачи книги |
19. |
ДатаВозврата |
Дата возврата книги читателем |
20. |
ГодИздания |
Год издания книги |
Имя атрибута |
Тип |
Описание |
Читатель | ||
КодЧитателя |
Уникальный код читателя | |
ФИО |
Фамилия, имя, отчество читателя | |
Адрес |
Адрес проживания читателя | |
Телефон |
Телефон читателя | |
ДатаРождения |
Дата рождения читателя | |
Книги | ||
КодКниги |
Уникальный код книги | |
Название |
Название книги | |
ФамАвтора |
Фамилия автора книги | |
ФамСоавторов |
Фамилия соавторов книги | |
МестоИздания |
Место издания книги | |
Издательство |
Издательство книги | |
ГодИздания |
Год издания книги | |
КолСтраниц |
Количество страниц в книге | |
КолЭкземпляров |
Количество экземпляров книги | |
Экземпляр | ||
КодЭкземпляра |
Уникальный код экземпляра | |
КодКниги |
Уникальный код книги | |
КодИстории |
Уникальный код истории | |
ОблатьЗнаний | ||
КодОблЗнани |
Уникальный код области знаний | |
Описание |
Описание области знаний | |
История | ||
КодИстории |
Уникальный код истории | |
КодЭкземпляра |
Уникальный код экземпляра | |
КодЧитателя |
Уникальный код читателя | |
ДатаВыдачи |
Дата выдачи книги | |
ДатаВозврата |
Дата возврата книги читателем | |
ОблЗнанийКнииги | ||
КодКниги |
Уникальный код книги | |
КодОблЗнаний |
Уникальный код области знаний |
Запросы
Запрос для отображении информации о читателе
select k.КодКниги, e.КодЭкземпляра, k.Название, o.Описание, i.КодИстории, ch.КодЧитателя
from Читатель ch
inner join История i
on ch.КодЧитателя=i.КодЧитателя
inner join Экземпляр e
on i.КодЭкземпляра=e.
inner join Книги k
on e.КодКниги=k.КодКниги
inner join ОблЗнанийКниги ok
on k.КодКниги=ok.КодКниги
inner join ОблЗнаний o
on ok.КодОблЗнаний=o.КодОблЗнаний
where ch.ФИО='Афанасьев Виктор Николаевич'
group by k.КодКниги, e.КодЭкземпляра, k.Название,o.КодОблЗнаний, o.Описание, i.КодИстории, ch.КодЧитателя
Запрос выведении информации об истории
select История.КодИстории,Читатель.
Хранимая процедура
Добавление новой записи в таблицу ОблЗнаний
USE [BDCur]
GO
/****** Object: StoredProcedure [dbo].[NewOblZ] Script Date: 06/09/2012 16:57:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ==============================
-- Author: BDCur
-- Create date:
-- Description:
-- ==============================
ALTER PROCEDURE [dbo].[NewOblZ]
-- Add the parameters for the stored procedure here
@Описание nchar(50)
AS insert into ОблЗнаний(Описание) values(@Описание)
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT @Описание
END
Проверка даты выдачи книги и даты возврата книги (дата выдачи должен быть раньше даты возвращения книги)
USE [BDCur]
GO
/****** Object: StoredProcedure [dbo].[date_test] Script Date: 06/13/2012 15:04:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ==============================
-- Author: BDCur
-- Create date:
-- Description:
-- ==============================
ALTER PROCEDURE [dbo].[date_test]
-- Add the parameters for the stored procedure here
@date_vi date,
@date_vo date
AS
BEGIN
declare @a int
set @a=(select datediff(DAY,@date_vi,@date_vo
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT @a
RETURN @a
END
Проверка дат на корректность ввода
USE [BDCur]
GO
/****** Object: StoredProcedure [dbo].[date_test2] Script Date: 06/13/2012 15:09:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ==============================
-- Author: BDCur
-- Create date:
-- Description:
-- ==============================
ALTER PROCEDURE [dbo].[date_test2]
-- Add the parameters for the stored procedure here
@Дата_выдачи nvarchar(50),
@Дата_возврата nvarchar(50)
AS
BEGIN
declare @a int
declare @b int
declare @c int
set @a=1;
set @b=0;
set @a=(select ISDATE(@Дата_выдачи))
set @b=(select ISDATE(@Дата_возврата))
set @c=@a*@b
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT @Дата_выдачи,@Дата_возврата,@a
return @a
END
Транзакции
Добавление новой записи в таблицу История и редактирование таблицы Экземпляр
USE [BDCur]
GO
/****** Object: StoredProcedure [dbo].[NewHistory] Script Date: 06/09/2012 16:59:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ==============================
-- Author: DBCur
-- Create date:
-- Description:
-- ==============================
ALTER PROCEDURE [dbo].[NewHistory]
-- Add the parameters for the stored procedure here
@КодЭкземпляра int = NULL,
@КодЧитателя int = NULL,
@ДатаВыдачи date = '1960-01-01',
@ДатаВозврата date = '1960-01-01'
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
BEGIN TRANSACTION
DECLARE @re int
DECLARE @pe int
DECLARE @ta TABLE (qw int NULL);--OUTPUT inserted.КодИстории into @ta
insert into История(КодЭкземпляра,
--OUTPUT inserted.* into @pe
set @re=(select qw from @ta)
--set @re=(SELECT КодИстории FROM История where КодЭкземпляра=@КодЭкземпляра and КодЧитателя=@КодЧитателя and ДатаВыдачи=@ДатаВыдачи and ДатаВозврата=@ДатаВозврата)
set @pe=(select КодИстории from Экземпляр where КодЭкземпляра=@КодЭкземпляра)
update Экземпляр set КодИстории=@re where КодЭкземпляра=@КодЭкземпляра and КодИстории is NULL
IF @@ERROR=1
ROLLBACK TRANSACTION
IF @pe is NULL
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT @КодЭкземпляра, @КодЧитателя,@ДатаВыдачи, @ДатаВозврата,@pe,@re
END
Листинг программы
Unit1.cpp
//----------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "modul.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#include "Unit6.h"
#include "Unit7.h"
#include "Unit9.h"
//----------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int de=1;
void del_his(){
Form1->Label3->Visible=0;
Form1->Label3->Enabled=0;
Form1->Button10->Visible=0;
Form1->Button10->Enabled=0;
return;
}
void searh(){
Form1->Button11->Visible=0;
Form1->Button11->Enabled=0;
return;
}
//----------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Form1->Caption="История";
del_his();
searh();
}
//----------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->DBGrid1->DataSource=
de=1;