Курсовая работа на тему: Создание и разработка информационной системы видео-контента

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

Но если вдруг:

Вам нужна качественная учебная работа (контрольная, реферат, курсовая, дипломная, отчет по практике, перевод, эссе, РГР, ВКР, диссертация, шпоры...) с проверкой на плагиат (с высоким % оригинальности) выполненная в самые короткие сроки, с гарантией и бесплатными доработками до самой сдачи/защиты - ОБРАЩАЙТЕСЬ!

Курсовая работа на тему: Создание и разработка информационной системы видео-контента

СОДЕРЖАНИЕ

 

Введение

1. Описание предметной области

2. Постановка задачи и обзор методов ее решения

3. Модели представления системы и их описание

4. Информационная модель системы и ее описание

5. Обоснование технических и программных средств

6. Описание алгоритмов функционирования системы

7. Руководство пользователя

8. Результаты тестирования разработанной системы и оценка выполнения задач

Заключение

Литература

Приложение А. (обязательное) Функциональная модель

Приложение Б. (обязательное) UML-диаграммы

Приложение В. (обязательное) Модели представления Базы данных

Приложение Г. (обязательное) SQL скрипт

Приложение Д. (обязательное) Блок-схема

Приложение Е. (обязательное) Листинг программы

 

 

ВВЕДЕНИЕ

 

Целью данной курсовой работы является создание и разработка информационной системы видео-контента. Данная информационная система (ИС) содержит основные сведения полезные для видео-контента. В качестве информационной системы выступает база данных, написанная в программе mysql. Такая база данных необходима для упрощения организации работы, поскольку имеется большой объем видео-контента. База данных - это совокупность взаимосвязанных данных, которые используются несколькими приложениями. В базе данных сведения из каждого источника сохраняются в отдельной таблице. При работе с данными из нескольких таблиц устанавливаются связи между таблицами. Для поиска и отбора данных, удовлетворяющих определенным условиям, создается запрос. Запросы позволяют также обновить, добавить или удалить записи, выполнить встроенные или специальные вычисления. Для просмотра, ввода или удаления данных прямо в таблице применяются формы. Форма позволяет отобрать данные из одной или нескольких таблиц и вывести их на экран, используя стандартный или созданный пользователем макет.

Видео-контент выставляет на просмотр большой объём информации в котором очень сложно ориентироваться. Задачами данного курсового проекта является реализовать необходимость поиска нужного видео-контента или же занесения видео или изменение каких-то неточных данных, или удаление ненужного видео-контента, а так же содержание сведений о совершенных просмотрах. Эти и другие задачи значительно проще решить, если имеется база данных видео-контента. Таким образом, база данных создается для автоматизации учета видео-контента. Разрабатываемая база данных предназначена для быстрого и эффективного обновления данных, быстрой и легкой навигации в имеющемся ассортименте видео-контента, что позволяет облегчить, упростить и систематизировать .

1. ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ

 

Предметной областью для данного проекта является формирование базы данных видео-контента

Работа видео-контента является довольно сложным и трудоёмким процессом. Для учёта видео-контента необходимо оформлять и вести довольно большое количество информации ( видео файлов  и т.д.).

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

Основные данные, которые использовались в данной информационной системе, были данные о видео-контенте:

- уникальный номер видео-контента,

- имя видео-контента,

- количество видео-контента,

- уникальный номер

- уникальный номер автора,

Можно сделать выводы, что при автоматизации видео-контента работа  станет не только более лёгкой, но это ускорит работу при просмотре видео-контента.

На начальной стадии разработки данной функциональной системы был поэтапно составлен процесс просмотра видео-контента. Для графического описания модели был использован стандарт IDEF0 (Integration Definition for Functions Modeling - методология функционального моделирования, предназначенная для описания бизнес-процессов).

На контекстной диаграмме верхнего уровня (Приложение А, рисунок А.1) представлена функциональная модель «видео-контент», а также определены потоки входных и выходных данных, механизмы ограничения и управления данными.

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

Рисунок А.2 (Приложение А) отображает декомпозицию контекстной диаграммы.

 

2. ПОСТАНОВКА ЗАДАЧИ И ОБЗОР МЕТОДОВ ЕЕ РЕШЕНИЯ

 

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

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

База данных предполагает ввод-вывод следующих данных:

1.   1.   Вводить данные о просмотре;

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

В информационной системе предполагается наличие следующих функций:

1.   1.   Ввод, редактирование и удаление информации об пользователях;

2.   2.   Ввод, редактирование и удаление данных об просмотрах;

3.   3.   Формирование данных о просмотре;

4.   4.   Список пользователей.

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

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

 

3. МОДЕЛИ ПРЕДСТАВЛЕНИЯ СИСТЕМЫ И ИХ ОПИСАНИЯ

 

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

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

Рассмотрим данные диаграммы.

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

В данной диаграмме вариантов использования (Приложение Б, рисунок Б.1) в роли актёров выступают покупатель и программист. Программист, как видно из диаграммы, может управлять данными (добавлять видео-контент, изменять данные, искать видео-контент по определённому критерию), однако для этого ему необходимо подключиться к серверу. Пользователь, также может просматривать данные о видео-контентах, а также смотреть видео-контент.

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

Для демонстрации диаграммы последовательности рассмотрим диаграмму добавления видео-контента в базу данных (Приложение Б, рисунок Б.2). Действие начинается при нажатии кнопки «Добавить видео-контент» (посылается запрос о добавлении книги в базу данных). После обработки запроса, посылается новый запрос на Server о взятии нужной информации об издательстве, так как при добавлении видео-контента пользователь выбирает просмотр данного видео-контента. Такая же операция проделывается и для автора. На Server обрабатывается запрос и посылается новый запрос на book sfinal для получения необходимой информации об  видео-контенте. На books final обрабатывается запрос и посылается информация на Server, а с Server на Client. На Client обрабатывается полученная информация и посылается новый запрос о добавлении видео-контента в базу. После того как видео-контент добавляется в базу данных, на Client приходит сообщение, что видео-контент добавлена в базу данных.

Диаграмма классов описывает структуру системы, показывая её классы, их атрибуты и операторы, а также взаимосвязи этих классов.

На рисунке Б. 3 и рисунке Б. 4 (Приложение Б) изображены диаграмма классов клиента и диаграмма классов сервера соответственно.

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

На рисунке Б. 5 (Приложение Б) изображена диаграмма состояний для данной системы. Диаграмма компонентов показывает разбиение программной системы на структурные компоненты и связи между компонентами.

На рисунке Б. 6 (Приложение Б) изображена диаграмма компонентов для данной системы. Диаграмма развёртывания предназначена для визуализации элементов и компонентов программы, существующих лишь на этапе ее исполнения. На рисунке Б. 7 (Приложение Б) изображена диаграмма развёртывания для данной системы.

4. ИНФОРМАЦИОННАЯ МОДЕЛЬ СИСТЕМЫ И ЕЕ ОПИСАНИЕ

 

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

Процесс построения информационной модели состоит из следующих шагов:

1. Определение сущностей;

2.Определение зависимостей между сущностями;

3.Задание первичных и альтернативных ключей;

4. Определение атрибутов сущностей;

5.Составление логической (logical) модели;

6. Переход к физическому (physical) описанию модели.

Так можно сделать вывод, что в erwin существуют два уровня представления и моделирования - логический и физический.

Рассмотрим каждый уровень по отдельности.

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

Проанализировав данную предметную область, в проекте было решено создать три сущности (рисункеВ.1 (Приложение В)):

- файлы;

- видео файлы;

- видео.

Рассмотрим каждую сущность по отдельности.

Сущность «видео-контента» содержит информацию обо всех видео и имеет следующие атрибуты:

      ⎫ Idbook – уникальный номер файла;

      ⎫ Namebook – название видео файла;

      ⎫ Yearofpublish – видео;

      ⎫ Count – количество, имеющихся видео-контентов;

      ⎫ Price – просмотры видео-контентов;

      ⎫ Idathor – уникальный номер пользователя;

      ⎫ Idpublish – уникальный номер видео-контента;

Сущность «видео-контента» содержит информацию об просматриваемых видео-контентах и имеет следующие атрибуты:

      ⎫ Idpublish – уникальный номер видео-контента;

      ⎫ Name – название видео-контента;

Сущность «видео файла» содержит информацию об авторах книг и имеет следующие атрибуты:

      ⎫ Idathor – уникальный номер видео файла;

      ⎫ Nameathor – видео файл;

Сущность «видео» содержит информацию о просмотре видео имеет следующие атрибуты:

      ⎫ Idpurchase – уникальный номер видео;

      ⎫ Idbook – уникальный номер видео просмотра;

      ⎫ Price – пользователь;

      ⎫ Date_T – дата просмотра.

Сущности «файлы» и «видео файлы» и «видео» соединены между собой связями FK_publish_book (связь «один ко многим»), FK_athor_book (связь «один ко многим») и FK_book_purchase (связь «один ко многим»). Первая связь говорит о том, что одноиздательство может предлагать магазинубольшое разнообразие видео-контента. Вторая связь говорит о том, что в просмотре может быть файлов видео-контента.

Второй (физический) уровень модели Erwin, зависит от конкретной СУБД, содержит имена объектов, индексы и типы данных (рисункеВ.2 (Приложение В)).

Если все атрибуты являются простыми и их нельзя разделить на составные части (без потери смысла), то сущность находиться в первой нормальной форме. Для того чтобы привести данную систему учёта видео-контента к первой нормальной форме, необходимо разделить сложные атрибуты на атомарные, связать сущности связью «один ко многим».Атрибуты, хранящие замысловатую информацию, необходимо разделить на более простые. Проанализировав данную систему работы видео-контента, можно сделать вывод, что данная модель находиться в первой нормальной форме.

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

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

 

5. ОБОСНОВАНИЕ ТЕХНИЧЕСКИХ И ПРОГРАММНЫХ СРЕДСТВ РАЗРАБОТКИ

 

Задача построения логической и физической моделей базы данных была реализована с помощью использования локального средства технологии еrwin. Erwin - средство концептуального моделирования БД, использующее методологию IDEF1.X. Данное средство было выбрано т.к. оно позволило не только построить логическую и физическую модели базы данных, но и осуществить последующий реинжиниринг существующей БД, т.е. сгенерировать, созданную в еrwin информационную модель в СУБД mysql Workbench5.2 CE.

В качестве целевой базы данных была выбрана СУБД.

Сам проект написан на языке программирования Java, чему поспособствовал ряд факторов.

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

Во-вторых, язык Java является полностью объектно-ориентированным языком, даже в большей степени, чем С++. Все сущности в языке Java являются объектами, за исключением лишь некоторых основных типов, например, чисел.

В-третьих, на языке Java намного проще разрабатывать программы, не содержащие ошибок. Разработчики языка Java снабдили его средствами, позволяющими исключить саму возможность создавать программы, в которых были бы скрыты наиболее распространённые ошибки. Для этого в языке Java сделано следующее:

- исключена возможность явного выделения и освобождения памяти;

- введены истинные массивы и запрещена арифметика указателей;

- исключена возможность перепутать оператор присваивания с оператором сравнения на равенство;

- исключено множественное наследование. Оно заменено на понятие интерфейс.

В-четвёртых, обладая большой библиотекой программ для передачи данных на основе протоколов TCP/IP, язык Java предоставляет мощный и удобный механизм для работы в сети.

В-пятых, в языке Java довольно лёгкий механизм организации многопоточности. Потоки в языке Java могут использовать преимущества многопроцессорных систем, что делает этот язык привлекательным для разработки серверов.

И, наконец, язык Java во многих отношениях является более динамичным, чем языки С или С++. Он был разработан так, чтобы легко адаптироваться к постоянно изменяющейся среде. В библиотеки можно свободно добавлять новые методы и объекты, не причиняя никакого вреда.

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

 

6. ОПИСАНИЕ АЛГОРИТМОВ ФУНКЦИОНИРОВАНИЯ СИСТЕМЫ

 

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

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

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

После того как клиент выбирает операцию добавления видео-контента, серверу посылается объект класса Dialog с информацией номера сообщения и строки с запросом в базу данных:

 

This.outnetstream.writeobject(new Dialog("1", sqlcurrency));

 

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

На следующем этапе будет выполняться запрос для добавления издательства в базу данных, в таблицу издательство (publish):

 

String sqlcurrency = "INSERT INTO athor (nameathor) VALUES ('" +

jnameathor.gettext() + "');";

 

Описание:

Nameathor– имя видео-контента;

Jnameathor.gettext() – получения имени видео-контента из текстового поля для ввода;

После запросы вызываются методы исполнения:

 

Sqlcommand.executeupdate(inmsg.getnexttype());

 

Аналогичным способом реализуются и остальные запросы на выполнение команд пользователя.

 

7. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

 

Для начала запускается серверная часть (рисунок 7.1).

 

 

Рисунок 7.1 – Запуск серверной части

 

После запуска сервера можно запускать клиентскую часть приложения (рисунок 7.2).

 

 

Рисунок 7.2 – Запуск клиентской части

 

После запуска клиента необходимо выбрать пункт меню «Подключение к серверу», после чего появиться окно «Соединение с сервером» (рисунок 7.3), в котором необходимо порт серверного компьютера.

 

 

Рисунок 7.3 – Соединение с сервером

 

При нажатии кнопки «Подключиться» появляется окно клиента, в котором мы продолжаем работу (рисунок 7.4).

 

 

Рисунок 7.4 – Окно клиента после подключения

 

После подключения к серверу пользователю будет доступны следующие операции:

      •   Добавление видео-контента в базу данных;

      •   Добавление видео в базу данных;

      •   Добавление видео-контента в базу данных;

      •   Редактирование данных;

      •   Удаление данных;

      •   Просмотр базы данных;

      •   Добавление видео-контента в корзину пользователя;

      •   Просмотр корзины пользователя;

      •   Оплата корзины;

      •   Просмотр просмотров за день;

      •   Поиск видео-контента по заданному критерию.

 

 

8. РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ РАЗРАБОТАННОЙ СИСТЕМЫ И ОЦЕНКА ВЫПОЛНЕНИЯ ЗАДАЧ

 

Для тестирования разработанной системы «видео-контента» следует её запустить и проверить работоспособность всех имеющихся операций.

Для начала проверим операцию добавления видео-контента.

Если пользователь некорректно ввёл данные о книге, то высветится окно о некорректном вводе. Рассмотрим пример добавления видео-контента в базу данных. Так таблица, содержащая данные о видео-контентах, выглядит изначально (рисунок 8.1):

 

 

Рисунок 8.1 – Данные о видео-контентах

 

При выборе в главном меню пункта «Добавить видео-контент» появляется окно «видео-контента», в котором необходимо вписать имя видео-контента и выбрать интересующий видео-контент (рисунок 8.2):

 

 

Рисунок 8.2 – Ввод данных о видео-контенте

После добавления видео-контента будет отображаться в таблице, содержащей информацию о просмотрах (рисунок 8.3):

 

 

Рисунок 8.3 – Отображение добавленного видео-контента в таблице

 

Аналогичным способом добавляется новый видео-контент и видео в базу данных.

Рассмотрим пример редактирования данных об видео-контенте. Выбираем нужную ячейку для редактирования, изменяем данные на нужные нам, жмем клавишу «Enter». Появляется окно с данными и уже внесенными изменениями (рисунок 8.4).

 

 

Рисунок 8.4 – Редактирование данных

 

Также при просмотре базы данных пользователь может удалить видео-контента при нажатие на кнопки «Удалить книгу», просмотреть видео-контент при нажатии кнопки «просмотр». Пользователь может просмотреть данные о просмотре при нажатии кнопки «Просмотр видео-контента» (рисунок 8.5).

 

 

Рисунок 8.5 – Отображение видео-контента корзины

 

Аналогичным способом можно проделать и остальные похожие действия.

Поиск книг осуществляется по заданным критериям. Продемонстрируем работу операции «Поиск» на примере. Для этого необходимо ввести необходимые критерии, после чего в таблице отобразиться вся информация об искомом видео-контенте (рисунок 8.7):

 

 

Рисунок 8.7 – Ввод данных для поиска

 

Оценив работу программы, можно сделать выводы:

      •   В программе предусмотрен удобный и понятный интерфейс;

      •   Выполнены все поставленные задачи;

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

      •   Программа выполнена в архитектуре клиент-сервер;

      •   Предусмотрена работа одновременно с несколькими клиентами.

 

 

ЗАКЛЮЧЕНИЕ

 

Целью данного курсового проекта являлась разработка эффективной системы «видео-контента».

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

Приложение поддерживает «клиент – серверную» архитектуру.

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

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

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

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

автоматизация программный учет книга

 

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

 

1. Википедия [Электронный ресурс]. - Электронные данные. – Режим доступа: http://ru.wikipedia.org

2. Справочник программиста [Электронный ресурс]. - Электронные данные. – Режим доступа: http://ci.ru

3. Буч, Г. UML Руководство пользователя / Г. Буч. – М.: Вильямс, 2005. – 260с.

4. Гольцман, В. MySQL 5.0. Библиотека программиста / В. Гольцман. – СПб.: Питер Ком, 2006. – 253 с.

5. Федотова, Д. CASE – технологии: Практикум. – М.: Горячая линия -Телеком, 2005. – 160с

6. Хорстманн, К.JAVA2. Библиотека профессионала. Основы. Том 1. 8-е издание. Пер.с англ. – М: ООО «И.Д.Вильямс», 2009 – 816с

7. Хорстманн, К. Хорстманн и Г. Корнелл. JAVA2. Том 2. Тонкости программирования. Пер. с англ. – М: ООО «Вильямс», 2003 – 1120с

 

 

ПРИЛОЖЕНИЕ А (обязательное)

 

Функциональная модель

 

 

Рисунок А.1 - Контекстная диаграмма верхнего уровня

 

 

Рисунок А.2 - Декомпозиция контекстной диаграммы

 

ПРИЛОЖЕНИЕ Б (обязательное)

 

UML-диаграммы

 

 

Рисунок Б.1 - Диаграмма вариантов использования

 

Продолжение приложения Б

 

 

Рисунок Б.2 - Диаграмма последовательности

 

 

Продолжение приложения Б

 

 

 

Продолжение приложения Б

 

 

Рисунок Б. 3 - Диаграмма классов для клиентского приложения

 

Продолжение приложения Б

 

 

Рисунок Б. 4 - Диаграмма классов для серверного приложения

 

 

Рисунок Б. 5- Диаграммы классов пакета BooksCollection

 

 

Рисунок Б. 6 -Диаграмма состояний

 

Продолжение приложения Б

 

 

Рисунок Б. 7 - Диаграмма компонентов

 

 

Рисунок Б. 8 - Диаграмма развёртывания

 

ПРИЛОЖЕНИЕ В (обязательное)

 

Модели представления Базы данных

 

 

 

Рисунок В. 1 - Логическая модель представления системы учета книг в магазине

 

 

Рисунок В. 2 - Физическая модель представления системы учета книг в магазине

 

 

ПРИЛОЖЕНИЕ Г (обязательное)

 

SQL – скрипт

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,

UNIQUE_CHECKS=0;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,

FOREIGN_KEY_CHECKS=0;

SET @OLD_SQL_MODE=@@SQL_MODE,

SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `books1` DEFAULT CHARACTER

SET utf8 COLLATE utf8_general_ci ;

USE `books1`;

CREATE TABLE IF NOT EXISTS `books1`.`publish` (

`Idpublish` INT(11) NOT NULL AUTO_INCREMENT ,

`Name` VARCHAR(50) NOT NULL ,

PRIMARY KEY (`Idpublish`) )

ENGINE = innodb

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_general_ci;

CREATE TABLE IF NOT EXISTS `books1`.`book` (

`Idbook` INT(11) NOT NULL AUTO_INCREMENT ,

`namebook` VARCHAR(50) NOT NULL ,

`yearofpublish` INT(11) NULL DEFAULT NULL ,

`Count` VARCHAR(50) NULL DEFAULT NULL ,

`Price` INT(11) NULL DEFAULT NULL ,

`Idathor` INT(11) NOT NULL ,

`Idpublish` INT(11) NOT NULL ,

PRIMARY KEY (`Idbook`) ,

INDEX `FK_book_publish` (`Idpublish` ASC) ,

INDEX `FK_book_athor` (`Idathor` ASC) ,

CONSTRAINT `FK_book_publish`

FOREIGN KEY (`Idpublish` )

REFERENCES `books1`.`publish` (`Idpublish` )

ONDELETECASCADE

ON UPDATE CASCADE,

CONSTRAINT `FK_book_athor`

FOREIGN KEY (`Idathor` )

REFERENCES `books1`.`athor` (`Idathor` )

ON DELETE CASCADE

ON UPDATE CASCADE)

ENGINE = innodb

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_general_ci;

CREATE TABLE IF NOT EXISTS `books1`.`athor` (

`Idathor` INT(11) NOT NULL AUTO_INCREMENT ,

`nameathor` VARCHAR(50) NOT NULL ,

PRIMARY KEY (`Idathor`) )

ENGINE = innodb

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_general_ci;

CREATE TABLE IF NOT EXISTS `books1`.`purchase` (

`Idpurchase` INT(11) NOT NULL AUTO_INCREMENT ,

`IdBook` INT(11) NOT NULL ,

`Price` INT(11) NULL DEFAULT NULL ,

`Date_T` TimeStamp NOT NULL DEFAULT NOW(),

PRIMARY KEY (`Idpurchase`) ,

INDEX `FK_purchase_book` (`Idbook` ASC) ,

CONSTRAINT `FK_purchase_book`

FOREIGN KEY (`Idbook` )

REFERENCES `books1`.`book` (`Idbook` )

ON DELETE CASCADE

ON UPDATE CASCADE)

ENGINE = InnoDB

DEFAULT CHARACTER SET = utf8

COLLATE = utf8_general_ci;

SET SQL_MODE=@OLD_SQL_MODE;

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

 

 

ПРИЛОЖЕНИЕ Д (обязательное)

 

Блок-схема

 

 

 

ПРИЛОЖЕНИЕ Е (обязательное)

 

Листинг программы

 

Листинг некоторых главных функций программы

 

packageServerShlyks;

importjava.io.IOException;

importjava.net.ServerSocket;

importjava.net.Socket;

importjava.sql.*;

importjava.util.Calendar;

public class server_frame extends javax.swing.JFrame {

staticint count = 1, quit=0;

private static Connection connection = null;

int a = 8189;

public static String pass = "";

publicserver_frame() {

initComponents();

Port.setVisible(true);

}

@SuppressWarnings("unchecked")

// <editor-fold defaultstate="collapsed" desc="Generated Code">

private void initComponents() {

jScrollBar1 = new javax.swing.JScrollBar();

Port = new javax.swing.JDialog();

jLabel2 = new javax.swing.JLabel();

PortID = new javax.swing.JFormattedTextField();

OkServer = new javax.swing.JButton();

jLabel3 = new javax.swing.JLabel();

jpass = new javax.swing.JTextField();

Port.setTitle("Ввод порта сервера");

Port.setBackground(newjava.awt.Color(153, 153, 153));

Port.setForeground(new java.awt.Color(204, 0, 0));

Port.setLocationByPlatform(true);

Port.setMinimumSize(new java.awt.Dimension(350, 200));

Port.addWindowListener(new java.awt.event.WindowAdapter() {

public void windowClosing(java.awt.event.WindowEventevt) {

PortWindowClosing(evt);

}

});

jLabel2.setFont(new java.awt.Font("Batang", 1, 14));

jLabel2.setText("Ввод порта сервера");

jLabel2.setMaximumSize(new java.awt.Dimension(102, 14));

PortID.setBorder(new

javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAIS

ED));

try {

PortID.setFormatterFactory(new

javax.swing.text.DefaultFormatterFactory(new

javax.swing.text.MaskFormatter("####")));

} catch (java.text.ParseException ex) {

ex.printStackTrace();

}

PortID.setText("8189");

PortID.setDisabledTextColor(new java.awt.Color(255, 255, 255));

PortID.setFont(new java.awt.Font("Bookman Old Style", 0, 14));

PortID.setSelectionColor(new java.awt.Color(255, 255, 255));

OkServer.setBackground(new java.awt.Color(255, 255, 255));

OkServer.setFont(new java.awt.Font("Batang", 0, 11));

OkServer.setText("ПОДТВЕРДИТЬ");

OkServer.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.sw

ing.border.BevelBorder.RAISED));

OkServer.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEventevt) {

OkServerActionPerformed(evt);

}

});

jLabel3.setFont(new java.awt.Font("Batang", 1, 14));

jLabel3.setText("Введитепароль");

jLabel3.setMaximumSize(new java.awt.Dimension(102, 14));

jpass.setFont(new java.awt.Font("Batang", 0, 14));

jpass.setText("12345");

javax.swing.GroupLayoutPortLayout = new

javax.swing.GroupLayout(Port.getContentPane());

Port.getContentPane().setLayout(PortLayout);

PortLayout.setHorizontalGroup(

PortLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA

DING)

.addGroup(PortLayout.createSequentialGroup()

.addGap(40, 40, 40)

.addGroup(PortLayout.createParallelGroup(javax.swing.GroupLayout.Align

ment.LEADING)

.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addGap(30, 30, 30)

.addGroup(PortLayout.createParallelGroup(javax.swing.GroupLayout.Align

ment.LEADING)

.addComponent(jpass, javax.swing.GroupLayout.PREFERRED_SIZE, 49,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(PortID, javax.swing.GroupLayout.PREFERRED_SIZE, 50,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addContainerGap(98, Short.MAX_VALUE))

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,

PortLayout.createSequentialGroup()

.addContainerGap(138, Short.MAX_VALUE)

.addComponent(OkServer, javax.swing.GroupLayout.PREFERRED_SIZE,

114, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(123, 123, 123))

);

PortLayout.setVerticalGroup(

PortLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEA

DING)

.addGroup(PortLayout.createSequentialGroup()

.addContainerGap()

.addGroup(PortLayout.createParallelGroup(javax.swing.GroupLayout.Align

ment.BASELINE)

.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(PortID, javax.swing.GroupLayout.PREFERRED_SIZE, 28,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addGap(18, 18, 18)

.addGroup(PortLayout.createParallelGroup(javax.swing.GroupLayout.Align

ment.BASELINE)

.addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE)

.addComponent(jpass, javax.swing.GroupLayout.PREFERRED_SIZE,

javax.swing.GroupLayout.DEFAULT_SIZE,

javax.swing.GroupLayout.PREFERRED_SIZE))

.addGap(18, 18, 18)

.addComponent(OkServer, javax.swing.GroupLayout.PREFERRED_SIZE,

30, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(27, 27, 27))

);

jLabel2.getAccessibleContext().setAccessibleName("Вводпортасервера:");

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOS

E);

setTitle("Серверзапущен");

javax.swing.GroupLayout layout = new

javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING

)

.addGap(0, 252, Short.MAX_VALUE)

);

layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING

)

.addGap(0, 281, Short.MAX_VALUE)

);

pack();

}// </editor-fold>

private void OkServerActionPerformed(java.awt.event.ActionEventevt) {

a = Integer.parseInt(PortID.getText());

pass = jpass.getText();

Port.setVisible(false);

System.out.println(Calendar.getInstance().getTime() + "

Серверработает...");

try {

inti = 1;

ServerSocket s = new ServerSocket(a);

while (quit!=1) {

Socket incoming = s.accept();

System.out.println("Клиент №" + count);

Runnable r = new ServerS(incoming, i);

Thread t = new Thread(r);

t.start();

count++;

}

} catch (IOException e) {

}

}

private void PortWindowClosing(java.awt.event.WindowEventevt) {

quit=1;

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

newserver_frame().setVisible(false);

}

});

}

// Variables declaration - do not modify

privatejavax.swing.JButtonOkServer;

privatejavax.swing.JDialog Port;

privatejavax.swing.JFormattedTextFieldPortID;

privatejavax.swing.JLabel jLabel2;

privatejavax.swing.JLabel jLabel3;

privatejavax.swing.JScrollBar jScrollBar1;

privatejavax.swing.JTextFieldjpass;

// End of variables declaration

}

packageclientshlyks;

importjava.io.IOException;

importjava.io.ObjectInputStream;

importjava.io.ObjectOutputStream;

importjava.net.Socket;

importjava.net.UnknownHostException;

/**

*

* @author Viktoriya

*/

public class SocketClass extends Socket {

private static SocketClass _instance = null;

private static ObjectInputStreaminNetStream;

private static ObjectOutputStreamoutNetStream;

privateSocketClass(String host, intportNum) throws

UnknownHostException, IOException {

super(host, portNum);

}

public static synchronized SocketClassgetInstance(String host, int port)

throws

UnknownHostException, IOException {

if (_instance == null) {

_instance = new SocketClass(host, port);

SocketClass.setOutNetStream(newObjectOutputStream(_instance.getOutput

Stream()));

SocketClass.setInNetStream(new

ObjectInputStream(_instance.getInputStream()));

}

return _instance;

}

publicObjectInputStreamgetInNetStream() {

returninNetStream;

}

publicObjectOutputStreamgetOutNetStream() {

returnoutNetStream;

}

public static void setInNetStream(ObjectInputStreaminNetStream) {

SocketClass.inNetStream = inNetStream;

}

public static void setOutNetStream(ObjectOutputStreamoutNetStream) {

SocketClass.outNetStream = outNetStream;

}

}

private void viewing() {

if ("Издательство".equals(myFlag)) {

try {

outNetStream.writeObject(new Dialog("3", "SELECT * FROM publish"));

} catch (IOException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

Dialog message = new Dialog();

PublishList object = new PublishList();

DefaultTableModeljTempTableModel = new DefaultTableModel();

jTempTableModel.setColumnIdentifiers(this.Vector1);

Vector tableData = new Vector();

try {

object = (PublishList) inNetStream.readObject();

} catch (IOException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

} catch (ClassNotFoundException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

for (int i = 0; i <object.getSizeOfList(); i++) {

VectorrowData = newVector();

rowData.add(object.getPublishOfList(i).getKey());

rowData.add(object.getPublishOfList(i).getName());

tableData.add(rowData);

jTempTableModel.addRow(rowData);

}

DefaultTableModeljTableModel = jTempTableModel;

jTable1.setModel(jTableModel);

tm = jTable1.getModel();

tm.addTableModelListener(new TableModelListener() {

@Override

public void tableChanged(TableModelEventtme) {

if (tme.getType() == 0) {

String sqlCom;

if (tme.getColumn() != 0) {

sqlCom = "UPDATE publish Set " + Vector1[tme.getColumn()] + " = '" + tm.getValueAt(tme.getFirstRow(), tme.getColumn()) + "' WHERE Idpublish = " + tm.getValueAt(tme.getFirstRow(), 0);

} else {

sqlCom = "UPDATE publish Set " + Vector1[tme.getColumn()] + " = '" + tm.getValueAt(tme.getFirstRow(), tme.getColumn()) + "' WHERE Idpublish = " + tm.getValueAt(tme.getFirstRow(), 0);

}

System.out.println(sqlCom);

try {

outNetStream.writeObject(new Dialog("1", sqlCom));

} catch (IOException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

}

viewing();

}

});

}

if ("Издательство".equals(myFlag)) {

try {

outNetStream.writeObject(new Dialog("3", "SELECT * FROM publish"));

} catch (IOException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

Dialog message = new Dialog();

PublishList object = new PublishList();

DefaultTableModeljTempTableModel = new DefaultTableModel();

jTempTableModel.setColumnIdentifiers(this.Vector1);

Vector tableData = new Vector();

try {

object = (PublishList) inNetStream.readObject();

} catch (IOException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

} catch (ClassNotFoundException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

for (int i = 0; i <object.getSizeOfList(); i++) {

Vector rowData = new Vector();

rowData.add(object.getPublishOfList(i).getKey());

rowData.add(object.getPublishOfList(i).getName());

tableData.add(rowData);

jTempTableModel.addRow(rowData);

}

DefaultTableModeljTableModel = jTempTableModel;

jTable1.setModel(jTableModel);

tm = jTable1.getModel();

tm.addTableModelListener(new TableModelListener() {

@Override

public void tableChanged(TableModelEventtme) {

if (tme.getType() == 0) {

String sqlCom;

if (tme.getColumn() != 0) {

sqlCom = "UPDATE publish Set " + Vector1[tme.getColumn()] + " = '" +

tm.getValueAt(tme.getFirstRow(), tme.getColumn()) + "' WHERE Idpublish

= " + tm.getValueAt(tme.getFirstRow(), 0);

} else {

sqlCom = "UPDATE publish Set " + Vector1[tme.getColumn()] + " = '" +

tm.getValueAt(tme.getFirstRow(), tme.getColumn()) + "' WHERE Idpublish

= " + tm.getValueAt(tme.getFirstRow(), 0);

}

System.out.println(sqlCom);

try {

outNetStream.writeObject(new Dialog("1", sqlCom));

} catch (IOException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

}

viewing();

}

});

}

if ("Покупка".equals(myFlag)) {

try {

outNetStream.writeObject(new Dialog("10", "SELECT purchase.*,

book.NameBook FROM purchase, book WHERE

book.IdBook=purchase.Idpurchase"));

} catch (IOExceptionex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

Dialog message = new Dialog();

PurchaseList object = new PurchaseList();

DefaultTableModeljTempTableModel = new DefaultTableModel();

jTempTableModel.setColumnIdentifiers(this.Vector4);

Vector tableData = new Vector();

try {

object = (PurchaseList) inNetStream.readObject();

} catch (IOException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

} catch (ClassNotFoundException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

for (int i = 0; i <object.getSizeOfList(); i++) {

Vector rowData = new Vector();

rowData.add(object.getPurchaseOfList(i).getKey());

rowData.add(object.getPurchaseOfList(i).getNameBook());

rowData.add(object.getPurchaseOfList(i).getPrice());

rowData.add(object.getPurchaseOfList(i).getDate());

tableData.add(rowData);

jTempTableModel.addRow(rowData);

}

DefaultTableModeljTableModel = jTempTableModel;

jTable1.setModel(jTableModel);

tm = jTable1.getModel();

tm.addTableModelListener(new TableModelListener() {

@Override

public void tableChanged(TableModelEventtme) {

if (tme.getType() == 0) {

String sqlCom;

if (tme.getColumn() != 0) {

sqlCom = "UPDATE purchase Set " + Vector4[tme.getColumn()] + " = '" +

tm.getValueAt(tme.getFirstRow(), tme.getColumn()) + "' WHERE

Idpurchase = " + tm.getValueAt(tme.getFirstRow(), 0);

} else {

sqlCom = "UPDATE purchase Set " + Vector4[tme.getColumn()] + " = '" +

tm.getValueAt(tme.getFirstRow(), tme.getColumn()) + "' WHERE

Idpurchase = " + tm.getValueAt(tme.getFirstRow(), 0);

}

System.out.println(sqlCom);

try {

outNetStream.writeObject(new Dialog("1", sqlCom));

} catch (IOException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

}

viewing();

}

});

}

if ("Книга".equals(myFlag)) {

try {

outNetStream.writeObject(new Dialog("6", "SELECT book.*,

publish.Name, athor.NameAthor FROM book, publish, athor WHERE

publish.Idpublish=book.Idpublish AND athor.Idathor=book.Idathor"));

} catch (IOException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

Dialog message = new Dialog();

BookList object = new BookList();

DefaultTableModeljTempTableModel = new DefaultTableModel();

jTempTableModel.setColumnIdentifiers(this.Vector3);

Vector tableData = new Vector();

try {

object = (BookList) inNetStream.readObject();

} catch (IOException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

} catch (ClassNotFoundException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

for (int i = 0; i <object.getSizeOfList(); i++) {

Vector rowData = new Vector();

rowData.add(object.getBookOfList(i).getKey());

rowData.add(object.getBookOfList(i).getName());

rowData.add(object.getBookOfList(i).getAge());

rowData.add(object.getBookOfList(i).getCount());

rowData.add(object.getBookOfList(i).getPrice());

rowData.add(object.getBookOfList(i).getNamePublish());

rowData.add(object.getBookOfList(i).getNameAthor());

tableData.add(rowData);

jTempTableModel.addRow(rowData);

}

DefaultTableModeljTableModel = jTempTableModel;

jTable1.setModel(jTableModel);

tm = jTable1.getModel();

tm.addTableModelListener(new TableModelListener() {

@Override

public void tableChanged(TableModelEventtme) {

if (tme.getType() == 0) {

String sqlCom;

if (tme.getColumn() != 0) {

sqlCom = "UPDATE book Set " + Vector3[tme.getColumn()] + " = '" +

tm.getValueAt(tme.getFirstRow(), tme.getColumn()) + "' WHERE Idbook =

" + tm.getValueAt(tme.getFirstRow(), 0);

} else {

sqlCom = "UPDATEbookSet " + Vector3[tme.getColumn()] + " = '" +

tm.getValueAt(tme.getFirstRow(), tme.getColumn()) + "' WHEREIdbook =

" + tm.getValueAt(tme.getFirstRow(), 0);

}

System.out.println(sqlCom);

try {

outNetStream.writeObject(new Dialog("1", sqlCom));

} catch (IOException ex) {

Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);

}

}

viewing();

}

});

}

}

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