Защита базы данных Картотеки книг

 













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

тема работы: «Защита базы данных Картотеки книг»


Введение


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

Проектируемая система в данной курсовой работе была выполнена при помощи средств - Microsoft SQL Server. Microsoft SQL Server это универсальный пример системы клиент / сервер. Компьютерная архитектура клиент / сервер - это тип распределенной модели для хранения данных, получения к ним доступа и их обработка.

Задача курсовой работы состоит в том, что бы разграничить доступ пользователей к объектам SQL Server, которое поможет автоматизировать деятельность и повысить эффективность работы библиотеки. В данной базе должно соблюдаться разграничение прав доступа к ее содержимому. Основные операции с базой данных были реализованы на структурированном языке запроса Transact SQL, который позволяет формировать функциональные запросы.


1.Проектная часть


.1 Особенности организации


Картотека книг, для которой разрабатывается база данных, занимается предоставлением услуг для населения.

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

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


Таблица 1. Объекты базы данных

ОбъектыНазначениеТаблицыtbl_AuthorsХранит информацию об авторахtbl_KnigiХранит информацию о книгахAuthot_KnigaПромежуточная таблицаtbl_IzdatelstvoХранит информацию об издательствахNalichieНаличие книг в библиотекеReaderХранит информацию о читателяхtbl_UchetУчет взятых и возвращенных книгПредставленияFor_MenegПросмотр общей информации по базе данных менеджеромFor_ReadorsПросмотр общей информации по базе данных библиотекарямиRead_DolgОтображает задолжности читателейRead_InteresОтображает интересы читателей в выборе книгХранимые процедурыAdd_AvtorПозволяет добавить автора в базу данныхAdd_IzdatelПозволяет добавить издательство в базу данныхAdd_KnigПозволяет добавить книгу в базу данныхAdd_NalichПозволяет добавить книгу список наличия книг в библиотекеAdd_ReadorПозволяет добавить читателя в базу данныхAdd_VzaylПозволяет учитывать взятую книгуХранимые процедурыDel_AvtorПозволяет удалить автора из базы данныхDel_IzdatelПозволяет удалить издательство из базы данныхDel_KnigПозволяет удалить книгу из базы данныхDel_NalichПозволяет удалить книгу из списка наличия книг в библиотекеDel_ReadorПозволяет удалить читателя из базы данныхSearch_KnigaОтбирает нужную книгу по одному из параметровUpd_ReadorПозволяет удалить читателя из базы данныхUpd_VzaylПозволяет учитывать возвращенную книгу

Анализ особенностей организации уже на первом этапе позволяет выделить следующие таблицы:

-авторы;

-книги;

-автор книги;

-издательство;

-наличие (книг в библиотеке);

-читатели;

-учет (взятых и возвращенных книг).

Пользователи должны иметь возможность просмотреть необходимую им информацию. Эта задача реализуется через представления.

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


1.2 Предварительное определение групп пользователей


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


Таблица 2. Должности и функциональные обязанности работников

ДолжностьВыполняемые ФункцииМенеджер (manager)Регистрация поступивших книг и удаление испорченных или потерянных, просмотр всей информации по библиотеке, определение цены книги.Библиотекарь (bibliotekar)Регистрация читателей (занесение сведений о читателях), учет взятых и возвращенных книг.Администратор БД (adm)Обслуживание базы данных, администрирование.Читатель (reader)Просмотр перечня книг в библиотеке.

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


1.3 Создание базы данных


Создание файлов базы данных

Создание базы данных библиотеки со следующими параметрами;

Имя базы данных Biblioteka;

Имя файла базы данных Biblio_Data.MDF;

Минимальный размер 5 Мегабайт;

Приращения 20%;

Имя файла журнала транзакций Biblio_Log.LDF;

Минимальный размер 5 Мегабайт;

Приращения 10%.

Для создания базы данных в Transact SQL используется команда CREATE DATEBASE, синтаксис команды представлен ниже.

Create Database Biblioteka(Name = Biblioteka _Data,= 'd:\ Biblioteka\Biblio_Data.MDF',= 5MB,= 20%),on

(Name = Biblioteka _Log,= 'd:\ Biblioteka\Biblio_Log.LDF', = 5MB,

Filegrowth = 10%)

Создание таблиц базы данных

Для создания таблиц используется команда CREATE TABLE. Синтаксис команд создания таблиц представлен ниже.

Создание таблицы tbl_Authors (авторы) с первичным ключом ID_avt.

CREATE TABLE tbl_Authors (

[ID_avt] [int] IDENTITY (1, 1) NOT NULL,

[Name_av] [varchar] (15) NOT NULL,

[Otchestvo] [varchar] (15) NULL,

[Familia] [varchar] (20) NOT NULL,

[Strana_av] [varchar] (15) NOT NULLKEY (ID_avt)

)

Данная таблица предназначена для хранения данных об авторах книг. Состав атрибутов таблицы представлен в таблице 3.

Таблица 3. Описание таблицы tbl_Authors

НаименованиеТипОписание назначенияID_avtintНужен для определения номера автораName_avVarchar, 15Требуется для описания имени автораOtchestvoVarchar, 15Требуется для описания отчества автораFamiliaVarchar, 20Требуется для описания фамилии автораStrana_avVarchar, 15Страна автора

Создание таблицы tbl_Knigi (книги) с первичным ключом ID_ knig.

CREATE TABLE tbl_Knigi (

[ID_knig] [int] IDENTITY (1, 1) NOT NULL,

[Nazvanie] [varchar] (50) NOT NULL,

[kol_Straniz] [int] NOT NULL,

[Ganr] [varchar] (30) NOT NULL,

[ISBN] [varchar] (13) NULL KEY (ID_knig)

)

Таблица хранит информацию о книгах. Состав атрибутов таблицы представлен в таблице 4.


Таблица 4. Описание таблицы tbl_Knigi

НаименованиеТипОписание назначенияID_knigintНужен для определения номера книгиNazvanieVarchar, 50Требуется для описания названия книгиkol_StranizintКоличество страницGanrVarchar, 30Жанр книгиISBNVarchar, 13ISBN книги

CREATE TABLE Author_Kniga (

[RID_avt] [int] NOT NULL,

[RID_knig] [int] NOT NULL

)

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


Таблица 5. Описание таблицы Author_Kniga

НаименованиеТипОписание назначенияRID_avtintНужен для определения номера автораRID_knigintНужен для определения номера книги

Создание таблицы tbl_Izdatelstvo (издательство) с первичным ключом ID_ izd.

CREATE TABLE tbl_Izdatelstvo (

[ID_izd] [int] IDENTITY (1, 1) NOT NULL,

[Name_iz] [varchar] (20) NOT NULL,

[Strana_iz] [varchar] (15) NOT NULL,

[Adress] [varchar] (60) NOT NULLKEY (ID_izd)

)

Таблица хранит данные об издательствах. Состав атрибутов таблицы представлен в таблице 6.


Таблица 6. Описание таблицы tbl_Izdatelstvo

НаименованиеТипОписание назначенияID_izdintНужен для определения номера издательстваName_izVarchar, 20Требуется для описания названия издательстваStrana_izVarchar, 15Страна издательстваAdressVarchar, 60Адрес издательства

CREATE TABLE Nalichie (

[RID_kniga] [int] NOT NULL,

[RID_izd] [int] NOT NULL,

[God_izd] [int] NOT NULL,

[Kol_bib] [int] NOT NULL,

[Cena_bib] [money] NOT NULL


)

Таблица представляет собой перечень книг, которые имеются в наличии в данной библиотеке. Состав атрибутов таблицы представлен в таблице 7.


Таблица 7. Описание таблицы Nalichie

НаименованиеТипОписание назначенияID_knigintНужен для определения номера книгиNazvanieVarchar, 50Требуется для описания названия книгиkol_StranizintКоличество страницGanrVarchar, 30Жанр книгиISBNVarchar, 13ISBN книгибаза картотека данные администрирование

Создание таблицы Reader (читатель) с первичным ключом ID_ Read.

CREATE TABLE Reader (

[ID_Read] [int] IDENTITY (1, 1) NOT NULL,

[Name_read] [varchar] (15) NOT NULL,

[Familia_read] [varchar] (20) NOT NULL,

[Strana_read] [varchar] (15) NOT NULL,

[Gorod] [varchar] (30) NOT NULL,

[Ul] [varchar] (20) NOT NULL,

[Dom] [int] NOT NULL,

[Kv] [int] NULL,

[Tel] [varchar] (15) NULLKEY (ID_Read)

)

Данная таблица предназначена для хранения данных о пользователях библиотеки. Состав атрибутов таблицы представлен в таблице 8.

Таблица 8. Описание таблицы Reader

НаименованиеТипОписание назначенияID_ReadintНужен для определения номера читателяName_readVarchar, 15Требуется для описания имени читателяFamilia_readVarchar, 20Требуется для описания фамилии читателяStrana_readVarchar, 15Страна читателяGorodVarchar, 30ГородUlVarchar, 20УлицаDomintДомKvintКвартираTelVarchar, 15Телефон читателя

Создание таблицы tbl_Uchet (учет) с первичным ключом N_zapis.

CREATE TABLE tbl_Uchet (

[RID_Read] [int] NOT NULL,

[RID_knig] [int] NOT NULL,

[Data_vz] [smalldatetime] NOT NULL,

[Data_back] [smalldatetime] NULL,

[N_zapis] [int] IDENTITY (1, 1) NOT NULL

PRIMARY KEY (N_zapis)

)

Таблица предназначена для учета взятых и возвращенных книг. Состав атрибутов таблицы представлен в таблице 9.


Таблица 9. Описание таблицы tbl_Uchet

НаименованиеТипОписание назначенияRID_ReadintНомер читателяRID_knigintНомер взятой книгиData_vzsmalldatetimeДата взятияData_backsmalldatetimeДата возвращенияN_zapisintНомер записи, упрощает поиск записи

Создание связей между таблицами

Создание связи один ко многим от таблицы tbl_Knigi (книги) к таблице Nalichie (наличие).

Alter table Nalichie add Constraint Nal_knigkey (RID_kniga) References tbl_Knigi delete no action

Создание связи один ко многим от таблицы tbl_Authors (авторы) к таблице Author_Kniga (автор_книга).

Alter table Author_Kniga add Constraint Avt_knigkey (RID_avt) References tbl_Authors delete no action

Создание связи один ко многим от таблицы tbl_Knigi (книги) к таблице Author_Kniga (автор_книга).

Alter table Author_Kniga add Constraint Knig_avtkey (RID_knig) References tbl_Knigi delete no action

Создание связи один ко многим от таблицы tbl_Knigi (книги) к таблице tbl_Uchet (учет).

Alter table tbl_Uchet add Constraint Uch_knigkey (RID_knig) References tbl_Knigi delete no action

Создание связи один ко многим от таблицы Reader (читатели) к таблице tbl_Uchet (учет).

Alter table tbl_Uchet add Constraint Uch_readkey (RID_Read) References Reader delete no action

Создание связи один ко многим от таблицы tbl_Izdatelstvo (издательство) к таблице Nalichie (наличие).

Alter table Nalichie add Constraint Nal_knig_izdkey (RID_izd) References tbl_Izdatelstvo delete no action

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

Создание DTS пакета

Раньше регистрация книг, их авторов и издательств производилась в базе данных Microsoft Access, учет взятых книг велся в MS Excel, список читателей хранился в текстовом файле, чтобы перенести данные в базу данных библиотеки, был разработан DTS пакет.

На рис. 1 показана структура DTS пакета, через который идет наполнение базы данных Biblioteka.

В нем производится заполнение следующих таблиц: tbl_Authors, tbl_Knigi, tbl_Izdatelstvo, Reader, tbl_Uchet.


Рис. 1


Создание представлений


Таблица 10. Представления базы данных

Наименование представленияСостав полейНазначение представленияFor_MenegName_av, Otchestvo, Familia, Strana_av, Nazvanie, kol_Straniz, Ganr, ISBN, Name_iz, Strana_iz, Adress, God_izd, Kol_bib, Cena_bibПросмотр общей информации по базе данных менеджеромFor_ReadorsGanr, Familia, Name_av, Otchestvo, Nazvanie, kol_StranizПросмотр общей информации по базе данных библиотекарямиRead_DolgFamilia_read, Name_read, Nazvanie, Data_vzОтображает задолжности читателейRead_InteresFamilia_read, Name_read, Ganr, NazvanieОтображает интересы читателей в выборе книг

SQL код создания представлений представлен в приложении 2


Создание хранимых процедур


Таблица 11. Хранимые процедуры

Наименование процедурыСостав входных параметровНазначение процедурыAdd_Avtor@Name_avt,@Otch_avt,@Fam_avt,@Str_avtПозволяет добавить автора в базу данныхAdd_IzdatelName_izd,@Str_izd,@AdresПозволяет добавить издательство в базу данныхAdd_Knig@Nazvanie1,@Kol_St1,@Ganr1,@ISBN1Позволяет добавить книгу в базу данныхAdd_Nalich@R,@D,@E,@Godizd,@Kolb,@CenabПозволяет добавить книгу список наличия книг в библиотекеAdd_Reador@Name_R, @Familia_R, @Str_R, @Gorod_R, @Ul_R, @Dom1, @kv1, @tel1Позволяет добавить читателя в базу данныхAdd_Vzayl@D, @E, @fam, @Name, @Nazvan, @DatvzПозволяет учитывать взятую книгуDel_Avtor@Name_avt,@Fam_avtПозволяет удалить автора из базы данныхDel_IzdatelName_izdПозволяет удалить издательство из базы данныхDel_Knig@Nazvanie1,@ISBN1Позволяет удалить книгу из базы данныхDel_Nalich@R,@D,@EПозволяет удалить книгу из списка наличия книг в библиотекеDel_Reador@Name_R, @Familia_RПозволяет удалить читателя из базы данныхSearch_KnigaFamilia, @Name_av, @Nazv_kn, @Ganr, @Name_izОтбирает нужную книгу по одному из параметровUpd_Reador@Name_R, @Familia_R, @Str_R, @Gorod_R, @Ul_R, @Dom1, @kv1, @tel1Позволяет удалить читателя из базы данныхUpd_Vzayl@NzapisПозволяет учитывать возвращенную книгу

SQL код создания хранимых процедур представлен в приложении 2


2. Администрирование сервера и базы данных


.1 Создание пользовательских ролей уровня базы данных


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

В данной курсовой работе будут присутствовать следующие роли:

adm - роль администратора;

Manager - роль менеджера библиотеки;

Bibliotekar - роль библиотекаря;

reader - роль читателя.

Синтаксис команды создания ролей представлен ниже.

sp_addrole 'adm'_addrole 'Manager', 'dbo'_addrole 'Bibliotekar'_addrole 'reader', 'dbo'


2.2 Наделение ролей пользователей правами доступа к объектам базы данных и правами выполнения операторов


В данной базе данных члены роли Manager могут создавать представления, хранимые процедуры, стандартные значения, правила. Синтаксис команды предоставления прав на выполнение этих операторов для роли Manager:

Grant create view to Managercreate procedure to Managercreate default to Managercreate rule to Manager

Для управления правами доступа интерфейс Transact - SQL SQL Server содержит инструкции GRANT, REVOKE и DENY

Предоставление роли manager права доступа на выбор (SELECT), добавление (INSERT), изменении (UPDATE) информации в представлении For_meneg:

grant select, insert, update on For_meneg to manager

Члены роли manager также имеют право на выполнение хранимых процедур Add_Avtor, Add_Izdatel, Add_Knig, Add_Nalich, Del_Avtor, Del_Izdatel, Del_Knig, Del_Nalich, Search_Kniga.

Синтаксис команд для этой роли приведен ниже:


grant execute on Add_Avtor to managerexecute on Add_Izdatel to managerexecute on Add_Knig to managerexecute on Add_Nalich to managerexecute on Del_Avtor to managerexecute on Del_Izdatel to managerexecute on Del_Knig to managerexecute on Del_Nalich to managerexecute on Search_Kniga to manager


Для роли Bibliotekar предоставляются права доступа на просмотр, добавление, изменение информации в представлениях Read_Dolg, Read_Interes, а так же на просмотр информации в представлении For_meneg:


grant select, insert, update on Read_Dolg to bibliotekarselect, insert, update on Read_Interes to bibliotekarselect on For_meneg to bibliotekar


Предоставление права на выполнение таких хранимых процедур, как Add_Reador, Upd_Reador, Del_Reador, Add_Vzayl, Upd_Vzayl для роли Bibliotekar будет выглядеть следующим образом:


grant execute on Add_Reador to bibliotekarexecute on Del_Reador to bibliotekarexecute on Add_Vzayl to bibliotekarexecute on Upd_Vzayl to bibliotekarexecute on Upd_Reador to bibliotekar


Так как члены роли Reader могут только просматривать справочную информацию по базе данных, они имеют право просмотра информации в представлении For_Readors:

grant select on For_Readors to reader


2.3 Создание пользователей базы данных


SQL Server имеет два уровня бюджетов пользователей. Первый уровень - это идентификатор пользователя, второй уровень - собственно пользователь. Идентификатор пользователя (login) служит для присоединения к SQL Server. Пользователь (users) - это объекты, с помощью которых SQL Server управляет правами доступа, позволяющими взаимодействовать с такими ресурсами, как таблицы и хранимые процедуры в определенной базе данных.

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


Sp_addlogin 'adm'_addlogin 'meneg'

Sp_addlogin 'bibl1'

Sp_addlogin 'bibl2'_addlogin 'read'


Определение базы данных 'Biblioteka' в качестве базы данных по умолчанию


sp_defaultdb 'adm', ' Biblioteka'_defaultdb 'meneg', ' Biblioteka'_defaultdb 'bibl1', ' Biblioteka'_defaultdb 'bibl2', ' Biblioteka'_defaultdb 'read', ' Biblioteka'


Создание пользователя adm и предоставление ему серверной роли sysadmin.


Sp_adduser 'adm'_addsrvrolemember 'adm', 'sysadmin'

Создание оставшихся пользователей и включение их в роли:

Sp_adduser 'meneg'_adduser ' bibl1'_adduser ' bibl2'_adduser ' read'_addrolemember 'Manager', 'meneg'_addrolemember 'Bibliotekar', 'bibl1'_addrolemember 'Bibliotekar', 'bibl2'_addrolemember 'reader', 'read'


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

Revoke all to public



3. Обслуживание базы данных


3.1 Использование устройств резервного копирования


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

Дифференциальная копия базы данных будет проходить в обеденный перерыв, то есть в 13:00, потому что до данного времени база данных успевает пополниться новой информацией.

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

Создание устройства резервного копирования

В базе данных резервное копирование будет производиться на диск.

Создание диска резервного копирования.

sp_addumpdevice 'DISK', 'Copy_Bibl', 'd:\ backup\Copy_Bibl.bak'

Восстановление базы данных

Так как ведется полная и дифференциальная архивация базы данных то методы восстановление её при сбое будет различные. Если база данных вышла из строя до 13:00, то потребуется только восстановление полной резервной копии. Если же сбой произошёл после 13:00, то придётся восстановить полную резервную копию и после её дифференциальную копию.

Полное восстановление базы данных.database Biblioteka from Copy_Bibl with file=1, norecovery

Восстановление дифференциальной копии.

restore database Biblioteka from Copy_Bibl with file=2, recovery

3.2 Создание операторов, оповещений, работ


Создание оператора работ

Сообщение оператору Admin будет отсылаться по сети, в случае невыполнения копирования.

Создание работ

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

Эта работа создает полную копию в 19:00 каждый день, кроме воскресенья, так как в выходные база не пополняется новыми данными.

В случае не выполнения копирования отсылается оповещение оператору Admin.

Создание работы для дифференциального копирования.

Эта работа создает дифференциальную копию в 13:00 каждый день, кроме воскресенья.

В случае не выполнения копирования также отсылается оповещение оператору Admin.

Создание оповещений

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

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

Создание оповещения о неудачном завершении полного копирования базы данных.


3.3 Настройка связанных серверов


В данной картотеке книг предполагается использование базы данных другого офиса для согласования названий книг и их библиотечной стоимости. Так как необходимая база данных находится на другом сервере, следует провести настройку связанных серверов. Доступ к данным удаленного сервера могут иметь пользователи adm и meneg. На удаленном сервере им будут соответствовать пользователи Admin и meneger.



Указываем, что для удаленного сервера пользователь adm переходит в пользователя Admin, а meneg переходит в meneger.



Так же следует настроить доступ к удаленным данным и возможность вызова удаленных процедур.



Заключение


Данная курсовая работа предполагала создание и администрирование базы данных для картотеки книг или библиотеки. Задачей являлось разграничение доступа к объектам базы данных и повышение эффективности работы библиотеки.

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

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

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

База данных разработана с учетом всех современных тенденций развития вычислительной техники и СУБД. Реализация разработанной базы данных осуществлена при помощи средств Microsoft SQL Server 2000.



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


1.Администрирование Microsoft SQL Server 2000. Учебный курс MCSA/ MCSE, MCDBA/ Пер с англ. - 2-е изд., испр. - М.: Издательско-торговый дом «Русская редакция», 2002. - 640 стр.

2.Кевин Хоуг. MCSE/MCSD: SQL Server 7.0. Проектирование баз данных. Учебное руководство. М.: Лори, 2000.

.Мамаев Е.В. Microsoft SQL Server 2000. - СПб.: БХВ-Петербург, 2002.

.Энциклопедия SQL. Дж. Грофф, П. Вайнберг. - СПб.: Питер, 2003. - 869 с.

5.Ю. Тихомиров Microsoft SQL Server 7.0 - СПб.: БХВ - Петербург, 2001. - 720 с.: ил.


КУРСОВАЯ РАБОТА тема работы: «Защита базы данных Картотеки книг» Введение Данная курс

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ