Разработка справочно-информационной системы в среде СУБД

Особенности разработки справочно-информационной системы в среде СУБД для новостного сайта. Проектирование и реализация всех этапов ее создания на персональных ЭВМ с использованием технологии реляционных баз данных. Создание интерфейса для пользователей.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 26.11.2013
Размер файла 1,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Курсовая работа

Тема

Разработка справочно-информационной системы в среде СУБД

Введение

информационный справочный сайт интерфейс

Задание на курсовую работу

Тема курсовой работы - «Разработка справочно-информационной системы в среде СУБД».

Предметная область : №2 - «Новостной сайт»

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

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

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

· не менее пяти связанных таблиц;

· входные формы для заполнения таблиц и работы с ними;

· не менее пяти SQL запросов, обеспечивающих поиск и обработку данных;

· не менее пяти выходных форм отчётов.

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

Анализ предметной области

Выбранная предметная область - новостной сайт.

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

Основные требования, предъявляемые к информационной системе новостного сайта:

· Учёт и хранение новостных статей

· Учёт и хранение информации о пользователях

· Учёт, обработка и хранение комментариев и оценок пользователей

· Простой и удобный интерфейс

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

Основным объектом, хранящимся в БД, являются статьи (публикации) а остальные сущности связаны с ними отношениями.

Список сущностей:

Таблица сущностей и их назначение в БД

Сущность

Назначение

Статьи

Публикации сайта

Категории

Категории статей сайта

Пользователи

Зарегистрированные пользователи

Комментарии

Комментарии пользователей к статьям

Оценки

Оценки пользователей к статьям

Сущность «Статьи» должна включать в себя следующие поля:

· Идентификатор статьи

· Заголовок статьи

· Идентификатор Категории

· Идентификатор опубликовавшего пользователя

· Текст статьи

· Дата публикации

Сущность «Категории» должна включать в себя следующие поля:

· Идентификатор категории

· Название категории

Сущность «Пользователи» должна включать в себя следующие поля:

· Идентификатор пользователя

· Имя пользователя

· Информация о пользователе

Сущность «Комментарии» должна включать в себя следующие поля:

· Идентификатор комментария

· Текст комментария

· Идентификатор статьи которой принадлежит комментарий

· Идентификатор пользователя оставившего комментарий

Сущность «Оценки» должна включать в себя следующие поля:

· Идентификатор пользователя оставившего оценку

· Идентификатор статьи, к которой принадлежит оценка

· Значение оценки

1. Проектирование базы данных

1.1 Разработка модели базы данных типа «сущность-связь»

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

Схема исходных отношений между сущностями

Модель «Сущность-Связь»

1.2 Нормализация исходных отношений до третьей нормальной формы

Нормализация сущности «Статьи»:

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

Связи:

· Идентификатор статьи > Заголовок статьи

· Идентификатор статьи > Идентификатор категории (внешний ключ)

· Идентификатор статьи > Текст статьи

Данное отношение удовлетворяет следующим критериям:

· Атомарность (в одном поле не более одного значения)

· Отсутствие частичных зависимостей от первичного ключа

· Отсутствие транзитивных зависимостей

Вывод:

Данное отношение соответствует третьей нормальной форме.

Нормализация сущности «Категории»:

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

Связи:

· Идентификатор категории > Название категории

Данное отношение удовлетворяет следующим критериям:

· Атомарность (в одном поле не более одного значения)

· Отсутствие частичных зависимостей от первичного ключа

· Отсутствие транзитивных зависимостей

Вывод:

Данное отношение соответствует третьей нормальной форме.

Нормализация сущности «Пользователи»:

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

Связи:

· Идентификатор пользователя > Имя пользователя

· Идентификатор пользователя > Информация о пользователе

Данное отношение удовлетворяет следующим критериям:

· Атомарность (в одном поле не более одного значения)

· Отсутствие частичных зависимостей от первичного ключа

· Отсутствие транзитивных зависимостей

Вывод:

Данное отношение соответствует третьей нормальной форме.

Нормализация сущности «Комментарии»:

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

Связи:

· Идентификатор комментария > Идентификатор статьи (внешний ключ)

· Идентификатор комментария > Идентификатор опубликовавшего пользователя (внешний ключ)

· Идентификатор комментария > Текст комментария

Данное отношение удовлетворяет следующим критериям:

· Атомарность (в одном поле не более одного значения)

· Отсутствие частичных зависимостей от первичного ключа

· Отсутствие транзитивных зависимостей

Вывод:

Данное отношение соответствует третьей нормальной форме.

Нормализация сущности «Оценки»:

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

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

Связи:

· Комбинированный первичный ключ > Оценка

Данное отношение удовлетворяет следующим критериям:

· Атомарность (в одном поле не более одного значения)

· Отсутствие частичных зависимостей от первичного ключа

· Отсутствие транзитивных зависимостей

Вывод:

Данное отношение соответствует третьей нормальной форме.

2. Основные функции системы

Данная система является администраторской частью более крупной информационной системы включающей в себя WEB-интерфейс (сайт) посредством которого конечные пользователи взаимодействуют с информационной системой. Данная же её часть является инструментом администратора при помощи которого он осуществляет роль модератора. Далее перечислены функции доступные администратору в данной части информационной системе:

1. Добавление и удаление категорий новостей

2. Добавление и удаление статей в категории

3. Добавление и удаление пользователей

4. Возможность добавления комментариев к статьям

5. Возможность оставления оценки к статье

6. Возможность создания отчётов

2.1 Выбор СУБД

В качестве СУБД для выполнения данной работы была выбрана Microsoft Access 2007. Причиной выбора а пользу данной СУБД стало желание ознакомиться с её возможностями. Данная смстема имеет широкие возможности по автоматизации некоторых процессов что облегчает некоторые рутинные операции. Мне немного знакома СУБД MySQL, но с ней пришлось-бы больше всего сил потратить на разработку WEB-оболочки. Вслучае Microsoft Access, эти задачи хорошо автоматизированы и можно больше внимания и времени уделить разработке самой информационной системы.

2.2Реализация проекта в СУБД Microsoft Access

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

Создание таблиц данных было реализовано без помощи встроенных средств Access, а при помощи запросов. Ниже приведены структуры таблиц данных.

Таблица статей (Articles)

Имя поля

Тип данных

ArtID

AutoNumber

ArtTitle

Text

CatID

Number

RID

Number

ArtText

Memo

ArtDate

Date/Time

Таблица категорий (Categories)

Имя поля

Тип данных

CatID

AutoNumber

CatName

Text

Таблица пользователей (Readers)

Имя поля

Тип данных

RID

AutoNumber

NickName

Text

RAbout

Text

Таблица комментариев (Comments)

Таблица статей (Articles)

Имя поля

Тип данных

ArtID

AutoNumber

ArtTitle

Text

CatID

Number

RID

Number

ArtText

Memo

ArtDate

Date/Time

2.3 Настройка связей между таблицами

Для установки первичного ключа таблицы оценок был применён запрос:ALTER TABLE Ratings ADD PRIMARY KEY (RID, ArtID)

Для добавления внешнего ключа в таблицу статей был применн запрос:

ALTER TABLE Articles ADD FOREIGN KEY (RID) REFERENCES Readers(RID)

Для добавления внешних ключей в таблицу комментариев были примены запросы:

ALTER TABLE Comments ADD FOREIGN KEY (ArtID) REFERENCES Articles(ArtID)

и

ALTER TABLE Comments ADD FOREIGN KEY (RID) REFERENCES Readers(RID)

Остальные связи были установлены в визуальном редакторе Relationships. В итоге получилась структура связанных данных.

Структура связей

3.Запросы

Запросы создания таблиц

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

CREATE TABLE Articles (ArtID COUNTER PRIMARY KEY, ArtTitle TEXT(100) NOT NULL, CatID LONG NOT NULL, RID LONG NOT NULL, ArtText MEMO, ArtDate DATE)

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

CREATE TABLE Ratings (RID LONG, ArtID LONG, RtValue BYTE)

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

CREATE TABLE Ratings (RID LONG, ArtID LONG, RtValue BYTE)

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

CREATE TABLE Comments(ComID COUNTER PRIMARY KEY, ComText MEMO NOT NULL, ArtID LONG NOT NULL, RID LONG NOT NULL);

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

CREATE TABLE Ratings (RID LONG, ArtID LONG, RtValue BYTE);

Запросы создания первичного ключа

Создание первичного ключа таблицы Articles

ALTER TABLE Ratings ADD PRIMARY KEY (RID, ArtID);

Запросы создания внешнего ключа

Создание первичного ключа таблицы Ratings

ALTER TABLE Comments ADD FOREIGN KEY (RID) REFERENCES Readers(RID);

Создание первичного ключа таблицы Comments

ALTER TABLE Comments ADD FOREIGN KEY (RID) REFERENCES Readers(RID);

Создание второго первичного ключа таблицы Comments

ALTER TABLE Comments ADD FOREIGN KEY (RID) REFERENCES Readers(RID);

Запросы выборки комментариев пользователя

Выборка комментариев пользователей. Применяется для формирования отчёта по комментариям UserComments.

SELECT Comments.RID, Readers.NickName, Articles.ArtTitle, Comments.ComText, Ratings.RtValueFROM ((Articles INNER JOIN Comments ON Articles.ArtID=Comments.ArtID) INNER JOIN Readers ON Comments.RID=Readers.RID) LEFT JOIN Ratings ON (Articles.RID=Ratings.RID) AND (Articles.ArtID=Ratings.ArtID);

Выборка статей за последний год. Применяется для формирования отчёта по статьям LastYearArticles.

SELECT Articles.ArtID, Articles.ArtTitle, Articles.CatID, Articles.RID, Articles.ArtDate, Categories.CatName, Readers.NickNameFROM (Articles INNER JOIN Categories ON Articles.CatID=Categories.CatID) INNER JOIN Readers ON Articles.RID=Readers.RIDWHERE (((Articles.[ArtDate]) Between DateAdd("yyyy",-1,Date()) And Date()));

Выборка трёх самых высоко оцениваемых статей. Применяется для формирования отчёта Top3RatedArticles.

SELECT TOP 3 Articles.ArtTitle, Sum(Ratings.RtValue)/Count(Ratings.RtValue) AS RatingValue FROM Articles INNER JOIN Ratings ON Articles.ArtID=Ratings.ArtIDGROUP BY Articles.ArtTitle ORDER BY (Sum(Ratings.RtValue)/Count(Ratings.RtValue)) DESC;

4. Создание форм

Форма управления статьями

Форма управления статьями

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

5. Форма управления категориями

Форма управления категориями

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

6. Форма управления пользователями

Форма управления пользователями

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

7. Форма управления комментариями

Форма управления комментариями

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

8.

Форма управления оценками

Форма управления оценками

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

9. Создание Подформ

Подформа добавления комментария

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

Подформа добавления оценки

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

Подформа отображения комментариев пользователя

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

10. Создание отчётов

Отчёт по статьям

Данная форма построена на основании данных полученных из запроса:

SELECT Articles.ArtDate, Articles.ArtTitle, Categories.CatName, Readers.NickNameFROM Readers INNER JOIN (Categories INNER JOIN Articles ON Categories.CatID = Articles.CatID) ON Readers.RID = Articles.RID;

Все поля содержащие идентификаторы заменены на связанные с ними значения. Отчёт содержит скрытые поля идентификаторов несущие организационную нагрузку. В заголовок отчёта вставлена кнопка обновления данных запроса.

Отчёт по категориям

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

Отчёт по пользователям

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

Отчёт по комментариям

Данная форма построена на основании данных полученных из запроса:

SELECT Comments.ComText, Articles.ArtTitle, Readers.NickName, Comments.ArtID, Comments.RIDFROM Readers INNER JOIN (Articles INNER JOIN Comments ON Articles.ArtID = Comments.ArtID) ON Readers.RID = Comments.RID;

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

Отчёт по оценкам

Данная форма построена на основании данных полученных из запроса:

SELECT Ratings.*, Articles.ArtTitle, Readers.NickName FROM Readers INNER JOIN (Articles INNER JOIN Ratings ON Articles.ArtID = Ratings.ArtID) ON Readers.RID = Ratings.RID;

Записи в отчёте сгруппированы по сочетанию статьи и пользователя. Отчёт содержит скрытые поля идентификаторов несущие организационную нагрузку. В заголовок отчёта вставлена кнопка обновления данных запроса.

Отчёт по комментариям пользователей

Данная форма построена на основании данных полученных из запроса:

SELECT Comments.RID, Readers.NickName, Articles.ArtTitle, Comments.ComText, Ratings.RtValueFROM ((Articles INNER JOIN Comments ON Articles.ArtID=Comments.ArtID) INNER JOIN Readers ON Comments.RID=Readers.RID) LEFT JOIN Ratings ON (Articles.RID=Ratings.RID) AND (Articles.ArtID=Ratings.ArtID);

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

Отчёт по статьям за последний год

Данная форма построена на основании данных полученных из запроса:

SELECT Articles.ArtID, Articles.ArtTitle, Articles.CatID, Articles.RID, Articles.ArtDate, Categories.CatName, Readers.NickNameFROM (Articles INNER JOIN Categories ON Articles.CatID=Categories.CatID) INNER JOIN Readers ON Articles.RID=Readers.RID WHERE (((Articles.[ArtDate]) Between DateAdd("yyyy",-1,Date()) And Date()));

Записи в отчёте сгруппированы по названию категории. Отчёт содержит скрытые поля идентификаторов несущие организационную нагрузку. В заголовок отчёта вставлена кнопка обновления данных запроса.

Отчёт ТОП-3 статей по оценкам

Данная форма построена на основании данных полученных из запроса:

SELECT TOP 3 Articles.ArtTitle, Sum(Ratings.RtValue)/Count(Ratings.RtValue) AS RatingValueFROM Articles INNER JOIN Ratings ON Articles.ArtID=Ratings.ArtID GROUP BY Articles.ArtTitleORDER BY (Sum(Ratings.RtValue)/Count(Ratings.RtValue)) DESC;

Записи в отчёте сгруппированы по названию статьи. В заголовок отчёта вставлена кнопка обновления данных запроса.

11. Тестирование

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

Выводы

В результате данной работы мною были получены важные навыки в практической организации информационных систем на основе Microsoft Access. В процессе данной работы было интересно замечать разницу между Access и немного знакомой мне СУБД MySQL. Подход создания небольших блоков и их дальнейшее объединение делают процесс разработки намного более быстрым и удобным. К данной работе можно было бы применить систему авторизации для разграничения доступа к ресурсам системы разным пользователям. Кроме плюсов данная СУБД имеет и минусы, а именно: её информационные системы не являются кросс-платформенными, отсутствие системы защиты данных и невысокая скорость работы. Общие впечатления о работе в Microsoft Access положительные, потому что система очень удобная, надёжная и простая.

Приложения

SQL запросы

Название

Команда

Предназн

Применение

CreateTableArticles

CREATE TABLE Articles

(ArtID COUNTER PRIMARY KEY,

ArtTitle TEXT(100) NOT NULL,

CatID LONG NOT NULL,

RID LONG NOT NULL,

ArtText MEMO,

ArtDate DATE)

Создаёт таблицу статей

Применяется для создания таблицы статей

CreateTableCategories

CREATE TABLE Categories

(CatID COUNTER PRIMARY KEY,

CatName TEXT(30) NOT NULL)

Создаёт таблицу категорий

Применяется для создания таблицы категорий

CreateTableReaders

CREATE TABLE Readers

(RID COUNTER PRIMARY KEY,

NickName TEXT(50) UNIQUE NOT NULL,

RAbout TEXT(255))

Создаёт таблицу читателей

Применяется для создания таблицы читателей

CreateTableComments

CREATE TABLE Comments

(ComID COUNTER PRIMARY KEY,

ComText MEMO NOT NULL,

ArtID LONG NOT NULL,

RID LONG NOT NULL)

Создаёт таблицу комментариев

Применяется для создания таблицы комментариев

CreateTableRatings

CREATE TABLE Ratings

(RID LONG,

ArtID LONG,

RtValue BYTE)

Создаёт таблицу оценок

Применяется для создания таблицы оценок

AlterTableRatings(AddPK)

ALTER TABLE Ratings

ADD PRIMARY KEY (RID, ArtID)

Добавляет первичный ключ к таблице оценок

Применяется для создания первичного ключа таблицы оценок

AlterTableArticles(AddFK)

ALTER TABLE Articles

ADD FOREIGN KEY (RID) REFERENCES Readers(RID)

Добавляет внешний ключ к таблице статей

Применяется для создания внешнего ключа таблицы статей

AlterTableComments(AddFK_1)

ALTER TABLE Comments

ADD FOREIGN KEY (ArtID) REFERENCES Articles(ArtID)

Добавляет внешний ключ к таблице комментариев

Применяется для создания внешнего ключа таблицы комментариев

AlterTableComments(AddFK_2)

ALTER TABLE Comments

ADD FOREIGN KEY (RID) REFERENCES Readers(RID)

Добавляет внешний ключ к таблице комментариев

Применяется для создания внешнего ключа таблицы комментариев

LastYearArticles

SELECT Articles.ArtID, Articles.ArtTitle, Articles.CatID, Articles.RID, Articles.ArtDate, Categories.CatName, Readers.NickName

FROM (Articles INNER JOIN Categories ON Articles.CatID=Categories.CatID) INNER JOIN Readers ON Articles.RID=Readers.RID

WHERE (((Articles.[ArtDate]) Between DateAdd("yyyy",-1,Date()) And Date()));

Выбирает статьи опубликов за последний год

Применяется для формирования отчёта по статьям за последний год

Top3RatedArticles

SELECT TOP 3 Articles.ArtTitle, Sum(Ratings.RtValue)/Count(Ratings.RtValue) AS RatingValue

FROM Articles INNER JOIN Ratings ON Articles.ArtID=Ratings.ArtID

GROUP BY Articles.ArtTitle

ORDER BY (Sum(Ratings.RtValue)/Count(Ratings.RtValue)) DESC;

Выбирает три статьи с наиболее высокими оценками

Применяется для формирования отчёта по самым высоко оцениваемым статьям

UserComments

SELECT Comments.RID, Readers.NickName, Articles.ArtTitle, Comments.ComText, Ratings.RtValue

FROM ((Articles INNER JOIN Comments ON Articles.ArtID=Comments.ArtID) INNER JOIN Readers ON Comments.RID=Readers.RID) LEFT JOIN Ratings ON (Articles.RID=Ratings.RID) AND (Articles.ArtID=Ratings.ArtID);

Выбирает комментарии к статьям по пользоват

Применяется для формирования отчёта по комментариям

SELECT Comments.RID, Readers.NickName, Comments.ComText, Comments.ArtID

FROM Readers INNER JOIN Comments ON Readers.RID = Comments.RID;

Выбирает список комментариев по пользоват

Применяется для извлечения данных для формы добавления комментариев

SELECT Comments.RID, Articles.ArtTitle, Comments.ComText

FROM Articles INNER JOIN Comments ON Articles.ArtID = Comments.ArtID;

Выбирает комментарпользоват по статьям

Применяется для извлечения данных для формы редактирован комментариев пользователя

SELECT Articles.ArtDate, Articles.ArtTitle, Categories.CatName, Readers.NickName

FROM Readers INNER JOIN (Categories INNER JOIN Articles ON Categories.CatID = Articles.CatID) ON Readers.RID = Articles.RID;

Выбирает список статей сназваниями категорий и авторов

Применяется для извлечения данных для отчёта по статьям

SELECT Comments.ComText, Articles.ArtTitle, Readers.NickName, Comments.ArtID, Comments.RID

FROM Readers INNER JOIN (Articles INNER JOIN Comments ON Articles.ArtID = Comments.ArtID) ON Readers.RID = Comments.RID;

Выбирает список комментар по статьям

Применяется для извлечения данных для отчёта по комментариям

SELECT Ratings.*, Articles.ArtTitle, Readers.NickName

FROM Readers INNER JOIN (Articles INNER JOIN Ratings ON Articles.ArtID = Ratings.ArtID) ON Readers.RID = Ratings.RID;

Выбирает список оценок по статьям и пользоват

Применяется для извлечения данных для отчёта по оценкам статей

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.