Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОМУ ПРОЕКТУ по дисциплине ОБЪЕКТНООРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 27.11.2024

Министерство образования и науки Российской Федерации

Федеральное  государственное бюджетное образовательное учреждение высшего профессионального образования

«Санкт-Петербургский государственный электротехнический университет

“ЛЭТИ” им.В.И.Ульянова (Ленина) »

Кафедра ВТ

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОМУ ПРОЕКТУ

по дисциплине «ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ»

«Создание программного комплекса средствами объектно-ориентированного программирования»

Выполнил студент Янин А.В.

Факультет КТИ

Группа № 1307

Руководитель Павловский М.Г.

Подпись преподавателя __________

Санкт-Петербург

2013 г

1.Техническое задание

1.1 Введение

Программный комплекс (ПК) администрирования библиотеки данных ГИБДД предназначен для использования в составе системы программно-информационного обеспечения учета и администрирования  внесения и списания из базы данных нарушителей.

1.2 Основание для разработки

Основанием для разработки ПК «Учет, редактирования, внесение и удаление сведений о нарушителях» является курсовой проект по дисциплине «Объектно-ориентированное программирование».

1.3 Назначение разработки

ПК «Учет, редактирования, внесение и удаление сведений о нарушителях» должен входить в состав автоматизированной системы учета и администрирования информации, и предназначен для автоматизации деятельности лица (ОЛ), ответственного за учет данных о нарушителях.

ПК «Учет, редактирования, внесение и удаление сведений о нарушителях» предназначен для автоматизации следующих процессов:

  1. учет и администрирование информации о добавлении нарушителей в БД;
  2. учет и администрирование информации о удалении нарушителей из БД;
  3. получение справочной информации о нарушителях в БД;

1.4 Требования к программе

1.4.1 Требования к функциональным характеристикам

1.4.1.1 Перечень функций

ПК «Учет, редактирования, внесение и удаление сведений о нарушителях» должен обеспечивать выполнение следующих функций:

  1.  просмотр, добавление, удаление и изменение в базы данных (БД);
  2.  выдача справочной информации, хранимой в БД, по запросам ОЛ.

1.4.1.2 Требования к составу выполняемых функций

1.4.1.2.1 Функция «просмотр, добавление, удаление и изменение в базы данных (БД)»

Ввод, просмотр, добавление, удаление и изменение в БД должны обеспечивать ведение и хранение данных о нарушителях и об отчётах о нарушениях.

1.4.1.2 Требования к организации и форме представления выходных данных

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

1.4.1.3 Требования к организации и форме представления входных данных

Входная информация для задачи «Учет, редактирования, внесение и удаление сведений о нарушителях» содержится в БД. Ввод исходных данных должен осуществляется ОЛ в режиме диалога. Вводимые данные являются значениями характеристик (атрибутов) информационных объектов.  

1.4.2 Требования к надежности

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

1.4.3 Условия эксплуатации

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

1.4.4 Требование к составу и параметрам технических средств

Задача должна решаться на ПЭВМ типа IBM РС или совместимой с ней с процессором Pentium III 500 и выше, ОЗУ не менее  128Мб, HDD не менее 4 Гб, монитор SVGA (цветной)15", видеокарта 64 Мб, клавиатура 102 кл., манипулятор типа "мышь".

1.4.5 Требование к информационной и программной совместимости

Выходная и входная информация ПК «Учет, редактирования, внесение и удаление сведений о нарушителях» должна быть удобна для визуального восприятия. ПК должен быть выполнен на языке программирования высокого уровня Java и должен быть совместим с операционной системой Windows.

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

  1. закрытые и открытые члены классов;
  2. наследование;
  3. конструкторы с параметрами;
  4. абстрактные базовые классы;
  5. виртуальные функции;
  6. обработка исключительных ситуаций;
  7. динамическое создание объектов.

1.5 Требования к программной документации

Программная документация (ПД) должна удовлетворять требованиям стандартов ЕСПД.

Документация должна быть представлена в следующем составе:

  1.  описание процесса проектирования ПК;
  2.  руководство оператора;
  3.  исходные тексты ПК.

1.6 Стадии и этапы разработки

  1.  Разработка технического задания;
  2.  Описание вариантов использования ПК;
  3.  Создание прототипа интерфейса пользователя;
  4.  Разработка объектной модели ПК;
  5.  Построение диаграмм программных классов;
  6.  Описание поведения ПК;
  7.  Построение диаграмм действий;

1.7 Порядок контроля и приемки

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

2 Проектирование ПК

2.1 Описание вариантов использования ПК

Развернутое описание функциональных требований осуществляется на этапе проектирования комплекса. Для того чтобы детализировать требования, необходимо выделить процессы, происходящие в заданной предметной области. Описание таких процессов на UML выполняется в виде прецедентов (use case). Прецеденты являются сценарием или вариантом использования ПК при взаимодействии с внешней средой.  Они являются продолжением описаний требований и функциональных спецификаций, указанных в техническом задании. Прецедент изображается в виде эллипса, в котором содержится имя прецедента. Название прецедента обязательно включает в себя глагол, выражающий суть выполняемой функции. С помощью прецедентов описывается функционирование  ПК с точки зрения внешнего пользователя, который называется в  UML актором (actor). Актор представляет собой любую внешнюю по отношению к моделируемой системе сущность (человек, программная система, устройство), которая взаимодействует с системой и использует ее функциональные возможности для достижения определенных целей или решения частных задач. Актор на диаграмме изображается пиктограммой в виде человечка, под которым указано его имя. Совокупность функций, реализуемых ПК, изображается в виде диаграммы (use case diagram). Для построения диаграммы необходимо определить акторы, прецеденты (функции) и взаимоотношение между акторами и прецедентами, и между прецедентами, если один прецедент расширяет или использует другой. В языке UML для вариантов использования и действующих лиц поддерживается несколько типов связей. Это связи коммуникации (communication), использования (uses) и расширения (extends).

Связь коммуникации — это связь между прецедентом и актором. На языке UML связь коммуникации изображают в виде стрелки. Направление стрелки показывает, кто инициирует коммуникацию. При задании коммуникации необходимо указать данные, которые вводит или получает пользователь. Кроме данных на концах стрелки можно указать кратности отношения, которые характеризуют количество взаимодействующих между собой акторов и прецедентов. На диаграммах прецедентов наиболее распространенными являются две формы записи кратности 1 и 1 .. *. Первая форма записи означает, что один актор (прецедент) участвует во взаимодействии, а вторая форма записи, что один или несколько акторов (прецедентов) участвуют во взаимодействии.

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

Связь расширения задается в том случае, если необходимо показать родственные отношения между двумя прецедентами. Один из них является базовым, а другой его расширением. Базовый прецедент не зависит от расширяющих прецедентов и способен функционировать без них. С другой стороны, расширяющие прецеденты без базового прецедента функционировать не могут. Связи расширения изображают в виде стрелки со словом «extends» (расширение), которая имеет направление от базового прецедента к расширяемому.

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

Диаграмма прецедентов представлена на рис. 2.1.

Рис.2.1 Диаграмма прецедентов

2.3 Создание прототипа интерфейса пользователя

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

Рис. 2.2 –экранная форма ввода пароля; рис.2.3 –главное экранная форма; В табл. 2.1 представлено описание экранных форм.

Рис. 2.2.Экранная форма входа и регистрации

Рис.2.3. Главное экранная форма

Таблица 2.1

Экранная форма

Элементы управления

Действия пользователя

Отклик системы

Главная экранная форма

Кнопки:

«Создать»

«Сохранить txt»,

«Открыть txt»,

«Добавить строку»,

«Удалить строку»,

«Создать отчёт в PDF»

«Создать отчёт в HTML»

«Сохранить xml»,

«Открыть xml»,

Нажать кнопку «Создать»

Вывести диалоговое окно создания новой БД.

Нажать кнопку «Сохранить txt»

Вывести диалоговое окно сохранения данных.

Сохранить данные по полученному адресу в формате TXT.

Нажать кнопку «Открыть txt»

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

Нажать кнопку «Добавить строку»

Добавить в данные пустую строку, отразить это в экранной форме.

Нажать кнопку

«Удалить строку»

Удалить выделенную строку из данных, отобразить это в экранной форме.

Нажать кнопку

«Создать отчёт в PDF»

Сохранить данные в формате PDF.

Нажать кнопку

«Создать отчёт в HTML»

Сохранить данные в формате HTML.

Нажать кнопку «Сохранить xml»

Вывести диалоговое окно сохранения данных.

Сохранить данные по полученному адресу в формате XML.

Нажать кнопку «Открыть xml»

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

Экранная форма ввода пароля

Кнопки:

«ОК»

«Help»

Ввести пароль и нажать кнопку «ОК»

Проверить пароль и осуществить вход в систему.

Нажать кнопку «Help»

Вывести сообщение справки

2.3. Разработка объектной модели ПК

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

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

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

Ассоциация между сущностями отражает некоторое бинарное отношение между ними. Ассоциация обозначается проведенной между сущностями линией, с которой связывается определенное имя. Имя записывается в глагольной форме,  и оно должно отражать семантический смысл отношения. Стрелка на линии указывает, в каком направлении нужно читать имя. На концах линии могут содержаться выражения, определяющие количественную связь между экземплярами сущности (кратность). Кратность определяет, сколько экземпляров одной сущности может быть ассоциировано с одним экземпляром другой сущности. Примеры кратностей:

0 ..* - нуль или больше,

1 .. * - один или больше,

1 – ровно один.

Необходимо устанавливать отношения ассоциации между двумя сущностями в том случае, если объект одной сущности должен знать об объекте другой. Прежде всего, следует включать в модель те ассоциации, которые отражают структурные отношения («содержит», «включает», «хранит» и т.д.), или те, которые должны сохраняться в течение некоторого времени.

Диаграмма сущностей представлена на рис. 2.7. Детальное описание операций представлено в табл. 2.2.

Рис. 2.7. Диаграмма сущностей

Таблица 2.2

Сущность

Имя операции

Параметры операции

Тип возвращаемого значения

Назначение операции

Вид

Название

Тип

Список нарушителей

Создать

Вх.

Фамилия

Строка

БД

Создаёт пустой txt-файл

Вх.

Номер

Строка

Вх.

Нарушение

Строка

Вх.

Дата ТО

Строка

Вх.

Отчёт

Строка

Открыть txt

Вх.

Фамилия

Строка

БД

Загружает данные в таблицу из txt-файла

Вх.

Номер

Строка

Вх.

Нарушение

Строка

Вх.

Дата ТО

Строка

Вх.

Отчёт

Строка

Сохранить txt

Вых.

Фамилия

Строка

БД

Сохраняет данные в таблицы в txt-файл

Вых.

Номер

Строка

Вых.

Нарушение

Строка

Вых.

Дата ТО

Строка

Вых.

Отчёт

Строка

Добавить строку

Вх.

Строка

Пустая строка

Пусто

Добавляет пустую строку для заполнения в список нарушителей

Удалить строку

Вх.

Строка

Номер строки

Пусто

Удаляет выбранную строку из списка нарушителей

Сохранить PDF

Вых.

Фамилия

Строка

Пусто

Сохраняет данные в таблицы в pdf-файл

Вых.

Номер

Строка

Вых.

Нарушение

Строка

Вых.

Дата ТО

Строка

Вых.

Отчёт

Строка

Сохранить HTML

Вых.

Фамилия

Строка

Пусто

Сохраняет данные в таблицы в HTML-файл

Вых.

Номер

Строка

Вых.

Нарушение

Строка

Вых.

Дата ТО

Строка

Вых.

Отчёт

Строка

Открыть xml

Вх.

Фамилия

Строка

БД

Загружает данные в таблицу из xml-файла

Вх.

Номер

Строка

Вх.

Нарушение

Строка

Вх.

Дата ТО

Строка

Вх.

Отчёт

Строка

Сохранить xml

Вых.

Фамилия

Строка

БД

Сохраняет данные в таблицы в xml-файл

Вых.

Номер

Строка

Вых.

Нарушение

Строка

Вых.

Дата ТО

Строка

Вых.

Отчёт

Строка

2.4 Построение диаграммы программных классов

Диаграмма классов (class diagram) иллюстрирует спецификации будущих программных классов и интерфейсов. Она строится на основе объектной модели. В описание класса указываются три раздела: имя класса, состав компонентов класса и методы класса. Графически класс изображается в виде прямоугольника. Имя программного класса может совпадать с именем сущности или быть другим. Но поскольку для записи идентификаторов переменных  в языках программирования используют латинские буквы, то и  имена программных классов и имена их атрибутов, как правило, записываются латинскими буквами. Атрибуты и операции класса перечисляются в горизонтальных отделениях этого прямоугольника. Атрибутам и методам классов должны быть присвоены права доступа. Права доступа помечаются специальными знаками:

+  - означает открытый (public) доступ;

—  - означает скрытый (private) доступ;

# - означает наследуемый (protected) доступ.

При описании атрибутов после двоеточия указывается их тип, а при описании методов класса возвращаемое значение (для конструкторов возвращаемое значение не указывается).

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

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

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

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

Диаграмма классов представлена на рис. 2.8.

Рис.2.8. Диаграмма классов

2.5 Описание поведения ПК

Поведение ПК представляет собой описание того, какие действия выполняет ПК, без определения механизма их реализации. Одной из составляющей такого описания является диаграмма последовательностей (seguence diagram). Диаграмма последовательностей является схемой, которая для определенного сценария прецедента показывает генерируемые пользователями и объектами события (запросы) на выполнение некоторой операции и их порядок. Диаграммы последовательности имеют две размерности: вертикальная представляет время, горизонтальная - различные объекты. Чтобы построить диаграмму последовательностей необходимо выполнить следующие действия:

  1. Идентифицировать пользователей и объекты программных классов, участвующие в начальной стадии реализации сценария прецедента, и их изображения  в виде прямоугольников расположить наверху в одну линию. Для каждого пользователя и объекта нарисовать вертикальную пунктирную линию, которая является линией их жизни. Внутри  прямоугольника указываются подчеркнутое имя объекта и имя класса, к которому принадлежит объект.
  2. Из объектной модели выбрать те операции, которые участвуют в реализации сценария. Если такие операции не были определены при построении диаграммы программных классов, то необходимо их описать и внести в модель.
  3. На диаграмме последовательностей каждому запросу на выполнение операции должна соответствовать горизонтальная линия со стрелкой, начинающаяся от вертикальной линии того пользователя или объекта, который вызывает операцию, и заканчивающаяся на линии жизни того пользователя или объекта, который будет ее выполнять. Над стрелкой указывается номер операции, число итераций, имя операции и в скобках ее параметры. После  описания операции может следовать комментарий, поясняющий смысл операции и начинающийся со знака "//".

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

На диаграмме последовательностей можно описать вызов операции по условию (конструкция if-else) и показать моменты создания и уничтожения объектов. Если объект создается или уничтожается на отрезке времени, представленном на диаграмме, то его линия жизни начинается и заканчивается в соответствующих точках, в противном случае линия жизни объекта проводится от начала до конца диаграммы. Символ объекта рисуется в начале его линии жизни; если объект создается не в начале диаграммы, то сообщение о создании объекта рисуется со стрелкой, проведенной к символу объекта. Если объект уничтожается не в конце диаграммы, то момент его уничтожения помечается большим крестиком "Х".

Диаграмма последовательностей для операции копирования строк полученных в БД в список объектов представлена на рис. 2.9. Диаграмма последовательностей для операции получения данных из БД представлена на рис. 2.10.

Рис.2.9 Диаграмма последовательностей для операции копирования строк из БД в список

2.6 Построение диаграммы действий

Диаграмма действий (activity diagram) строится для сложных операций. Основным направлением использования диаграмм деятельности является визуализация особенностей реализации операций классов, когда необходимо представить алгоритмы их выполнения. Графически диаграмма деятельности представляется в форме графа деятельности, вершинами которого являются  действия, а дугами — переходы от одного действия к другому. Она очень похожа на блок-схемы алгоритмов. Каждая диаграмма деятельности должна иметь единственное начальное и единственное конечное состояние. Диаграмму деятельности принято строить таким образом, чтобы действия следовали сверху вниз. Отличительной чертой диаграммы действий является то, что в ней можно отобразить параллельные процессы. Для этой цели используется специальный символ (линия синхронизации), который позволяет задать разделение и слияние потоков управления. При этом разделение имеет один входящий переход и несколько выходящих, а слияние, наоборот, имеет несколько входящих переходов и один выходящий.

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

Диаграмма действий представлена на рис. 2.11.

Рис. 2.11 Диаграмма действий

3. Руководство оператора

3.1 Назначение программы

ПК «Учет, редактирования, внесение и удаление сведений о нарушителях» должен входить в состав автоматизированной системы учета и администрирования информации, и предназначен для автоматизации деятельности ОЛ, ответственного за учет списка нарушителей.

В рамках ПК «Учет, редактирования, внесение и удаление сведений о нарушителях» ОЛ может:

  1. добавлять, править и удалять информацию о нарушителях;
  2. просматривать информацию о нарушителях в отчёте;

3.2 Условия выполнения программы

ПК предназначен для функционирования под операционной средой Windows (XP, 2x) при поддержке MS Access.

Персональная электронно-вычислительная машина (ПЭВМ) должна обладать следующими характеристиками:

  1. тип процессора Pentium III 500 и выше;
  2. объем ОЗУ – не менее 128Мб;
  3. объем жесткого диска – не менее 4Гб;
  4. видеокарта – 64Мб;
  5. стандартная клавиатура;
  6.  манипулятор типа "мышь".

3.3 Описание задачи

В ПК должны храниться сведения о нарушителях. Администратор библиотеки базы данных может добавлять, изменять и удалять эти сведения. Ему может потребоваться следующая информация:

  1.  фамилия владельца машины с указанным номером;
  2.  перечень нарушений, совершённых владельцем машины;
  3.  дата прохождения машиной технического осмотра;
  4.  отчёт о нарушениях правил.

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

  1. закрытые и открытые члены классов;
  2. наследование;
  3. конструкторы с параметрами;
  4. абстрактные базовые классы;
  5. виртуальные функции;
  6. обработка исключительных ситуаций;
  7. динамическое создание объектов.

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

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

3.4 Входные и выходные данные

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

Входная информация для задачи «Учет, редактирование, внесение и удаление сведений о нарушителях» содержится в приходно-расходной документации. Ввод исходных данных должен осуществляется ОЛ в режиме диалога. Вводимые данные являются значениями характеристик (атрибутов) информационных объектов. Вводимая информация может выбираться или набираться из списка предлагаемых значений.

3.5 Выполнение программы

3.5.1 Подготовка к запуску (осуществляется один раз после установки ПК на ЭВМ)

В источники данных (ODBC) добавить драйвер баз данных MS Access с именем MicrosoftBases. В качестве базы данных указать полный путь к БД ПК dbase.mdb.

3.5.2. Запуск программы

При запуске программы на экране появится диалоговое окно представленное на рис. 3.1.

 

Рис. 3.1 Окно ввода пароля

Рис. 3.1.2. Пароль не принят.

Рис. 3.1.2. Пароль принят.

Далее появится окно с выбором начала работы.

Рис. 3.2 Диалог выбора начального действия.

И наконец появится главное диалоговое окно.

Рис 3.3. Главное окно программы.

3.5.3. Выполнение основных функций

3.5.3.1 Начало работы

Если при появлении окна (рис 3.2) выбрать создать файл то появится диалог создания нового файла

Рис.3.4 Создание нового файла.

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

Рис 3.5 Создан новый файл.

Если при появлении окна (рис 3.2) выбрать открыть файл то появится диалог открытия файла 

3.6 Диалог открытия файла

И далее произойдёт загрузка файла в БД.

3.7 Файл открыт.

3.5.3.2 Добавление информации в БД

Информацию можно добавить 2 способами: создав новую строку (рис. 3.8) или загрузив двумя способами данные из файла(рис. 3.9).

Рис 3.8 Добавлена пустая строка .

Рис. 3.9 Загружен XML-файл

3.5.3.3 Удаление информации из БД.

 Информацию можно удалить 2 способами: удалив выбранную строку строку (рис. 4.0) или создав новый файл.(рис. 4.1).

Рис. 4.0 Удалены все строки кроме первой.

Рис. 4.1 Создан новый файл.

3.5.3.4 Сохранение БД

Сохранить БД можно 2-мя способами: в формате txt или xml. Если информация не была сохранена вручную она сохранится автоматически в xml-файл backup.xml и при следующем запуске автоматически загрузится этот файл. В случае повреждения файла backup.xml или невозможности его прочтения появится сообщение и диалоговое окно с выбором дальнейших действий.

Рис. 4.2 Сохранение файла.

Рис. 4.3. Файл автосохранения в проводнике.

 

Рис 4.4. Сообщения о автосохранении и неудачной загрузке автосохранения.

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

Отчёт можно создать двумя способами – нажав сохранить в PDF или HTML.

Рис. 4.5. Отчёт сохранён в PDF 

Рис. 4.5. Отчёт сохранён в HTML

 

Рис. 4.5. Сообщение о успешном создании отчёта.

  1.  Исходные тексты ПК

package kurs;

import java.awt.BorderLayout;

import java.awt.Component;

import java.awt.FileDialog;

import javax.swing.*;

import javax.swing.table.DefaultTableModel;

import javax.swing.table.TableModel;

import javax.swing.table.TableRowSorter;

import org.omg.CORBA.Environment;

import java.awt.event.*;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Attr;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NamedNodeMap;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import org.xml.sax.SAXException;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import java.io.File;

public class PoliceList {

 

 final static public Object shared = new Object();

 private JFrame policelist;

 private DefaultTableModel model;

 private JToolBar toolBar;

 private JScrollPane scroll;

 private JTable violation; // violation - нарушения

 private JTextField violatorName;

 private JButton search;

 // ------------ Кнопки -------------

 private JButton txtNew;

 private JButton txtSave;

 private JButton txtOpen;

 private JButton add;

 private JButton delete;

 private JButton htmlSave;

 private JButton pdfSave;

 private JButton xmlSave;

 private JButton xmlOpen;

 // ------------------

 private class MyException extends Exception {

 public MyException() {

  super("Вы не ввели фамилию нарушителя для поиска");

 }

}

 private void checkName(JTextField bName) throws MyException,

  NullPointerException {

 String sName = bName.getText();

 if (sName.contains("Фамилия") || sName.length() == 0)

  throw new MyException();

}

 public void show() throws Exception {

   

 policelist = new JFrame("ГИБДД. Сведения о нарушениях v2.0. ");

 policelist.setSize(1200, 300);

 policelist.setLocation(100, 100);

 policelist.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 // ------------------

 txtNew = new JButton(new ImageIcon("./ico/txtNew.png"));

 txtSave = new JButton(new ImageIcon("./ico/txtSave.png"));

 txtOpen = new JButton(new ImageIcon("./ico/txtOpen.png"));

 add = new JButton(new ImageIcon("./ico/add.png"));

 delete = new JButton(new ImageIcon("./ico/delete.png"));

 htmlSave = new JButton(new ImageIcon("./ico/htmlSave.png"));

 pdfSave = new JButton(new ImageIcon("./ico/pdfSave.png"));

 xmlSave = new JButton(new ImageIcon("./ico/xmlSave.png"));

 xmlOpen = new JButton(new ImageIcon("./ico/xmlOpen.png"));

 // ------------------

 // ------------------

 txtNew.setToolTipText("Создать");

 txtSave.setToolTipText("Сохранить");

 txtOpen.setToolTipText("Загрузить");

 add.setToolTipText("Добавить");

 delete.setToolTipText("Удалить");

 pdfSave.setToolTipText("Сохранить в PDF");

 htmlSave.setToolTipText("Сохранить в HTML");

 xmlSave.setToolTipText("Сохранить в XML");

 xmlOpen.setToolTipText("Загрузить в XML");

 // ------------------^

 toolBar = new JToolBar("Panel");

 // ------------------v

 toolBar.add(txtNew);

 toolBar.add(txtSave);

 toolBar.add(txtOpen);

 toolBar.add(add);

 toolBar.add(delete);

 toolBar.add(pdfSave);

 toolBar.add(htmlSave);

 toolBar.add(xmlSave);

 toolBar.add(xmlOpen);

 // ------------------^

 policelist.setLayout(new BorderLayout());

 policelist.add(toolBar, BorderLayout.NORTH);

 // Создание таблицы и инициализация одной строки.

 String[] columns = { "Фамилия", "Номер", "Нарушение", "Дата ТО",

   "Отчёт о нарушениях" };

 String[][] data = {};

 model = new DefaultTableModel(data, columns);

 violation = new JTable(model);

 scroll = new JScrollPane(violation);

   

 // *******Загрузка бэкапа при старте программы *************

 try {

  xmlOpenIN file = new xmlOpenIN(null, model, violation);

 } catch (Exception e) {

  JOptionPane.showMessageDialog(policelist, " Автосохранённый файл\nповреждён или не найден.", "Ошибка сохранения.", JOptionPane.WARNING_MESSAGE);

  // Открыть или создать

  Object[] options = {"Открыть TXT", "Создать TXT", "Продолжить без открытия"};

    

    Component frame = null; int n = JOptionPane.showOptionDialog(frame,

    "Хотите загрузить каталог нарушений?", "Запуск программы",

    JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,

    options, options[1]);

    if (n==0)

    {

    

     txtOpen file = new txtOpen(null, model, policelist);

    

    }

    if (n==1)

    {

       txtNew file = new txtNew(null, model, policelist);  

    }

  // TODO Auto-generated catch block

  e.printStackTrace();

 }

 // ************************************************************

 // ************************* Сортировка стобцов ****************

 TableRowSorter<TableModel> sorter = new TableRowSorter(model);

 violation.setRowSorter(sorter);

 // *************************************************************

 policelist.add(scroll, BorderLayout.CENTER);

 violatorName = new JTextField("Фамилия");

 search = new JButton("Поиск нарушителя");

 JPanel searchPanel = new JPanel();

 searchPanel.add(violatorName);

 searchPanel.add(search);

 // ****************Сохранить в HTML*****************************

 htmlSave.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent arg0) {

   try{

   htmlSave file = new htmlSave(model, policelist);

   JOptionPane.showMessageDialog(policelist, "Сохранено в HTML.", "Файл успешно сохранён!", 1);

   }catch (Exception e)

   {

    JOptionPane.showMessageDialog(policelist, "Сохранить в HTML не удалось.", "Ошибка сохранения.", 0);

   }

  }

 });

 // *************************************************************

 // ********************Сохранить в XML**************************

 xmlSave.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent arg0) {

   try {

    xmlSave file = new xmlSave(null, model, policelist);

    } catch (Exception e) {

    JOptionPane.showMessageDialog(policelist, "Сохранить в XML не удалось.", "Ошибка сохранения.", 0);

    // TODO Auto-generated catch block

    e.printStackTrace();

   }

  }

 });

 // *************************************************************

 // ********************Открыть XML******************************

 xmlOpen.addActionListener(new ActionListener() {

  public void actionPerformed (ActionEvent arg0){

   

   try {

    xmlOpen file=new xmlOpen(null, model, policelist);

   } catch (Exception e) {

    JOptionPane.showMessageDialog(policelist, "Открыть файл не удалось.", "Ошибка открытия.", 0);

    // TODO Auto-generated catch block

    e.printStackTrace();

   }

  }

 });

 // *************************************************************

 // *******************Сохранить в PDF***************************

 pdfSave.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent arg0) {

   try

   {

    pdfSave file = new pdfSave(model, policelist);

    JOptionPane.showMessageDialog(policelist, " Сохранено в PDF.", "Файл успешно сохранён!", 1);

   }

   catch (Exception e)

   {

    JOptionPane.showMessageDialog(policelist, "Сохранить в PDF не удалось.", "Ошибка сохранения.", 0);

   }

  }

 });

 // *************************************************************

 // *******************Сохранить в TXT**************************

 txtSave.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent arg0) {

   try {

    txtSave file = new txtSave(null, model, policelist);

    } catch (Exception e) {

    // TODO Auto-generated catch block

    JOptionPane.showMessageDialog(policelist, "Сохранить в TXT не удалось.", "Ошибка сохранения.", 0);

    e.printStackTrace();

   }

  }

 });

 // **************************************************************

 // **********************Открыть TXT*****************************

 txtOpen.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent arg0) {

   try {

    txtOpen file = new txtOpen(null, model, policelist);

   } catch (Exception e) {

    JOptionPane.showMessageDialog(policelist, "Открыть файл не удалось.", "Ошибка открытия.", 0);

    // TODO Auto-generated catch block

    e.printStackTrace();

   }

  }

 });

 // ****************************************************************************************************************************************

 // ********************************** Создать

 // ********************************************************************************************

 txtNew.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent arg0) {

   try {

    txtNew file = new txtNew(null, model, policelist);

   } catch (Exception e) {

    JOptionPane.showMessageDialog(policelist, "Создать файл не удалось.", "Ошибка создания.", 0);

    // TODO Auto-generated catch block

    e.printStackTrace();

   }

  }

 });

 // ****************************************************************************************************************************************

 // ************************************ Реакция кнопки добавления

 // *************************************************************************

 add.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent arg0) {

   model.addRow(new Object[] {});

  }

 });

 // ****************************************************************************************************************************************

 // ************************************ Реакция кнопки удаления

 // ***************************************************************************

 delete.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent arg0) {

   System.out.println("Selected Row: "

     + violation.getSelectedRow());

   model.removeRow(violation.getSelectedRow());

  }

 });

 // ****************************************************************************************************************************************

 // ************************************ Проверка кнопки поиска

 // ***************************************************************************

 search.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent arg0) {

   try {

    checkName(violatorName);

   } catch (NullPointerException ex) {

    JOptionPane.showMessageDialog(policelist, ex.toString());

    return;

   } catch (MyException myEx) {

    JOptionPane.showMessageDialog(null, myEx.getMessage());

    return;

   }

   JOptionPane.showMessageDialog(policelist, "Поиск завершён!");

  }

 });

 // ****************************************************************************************************************************************

 // ****************************** Диалоговое сообщение при выходе из программы

 // ************************************************************

 policelist.addWindowListener(new WindowListener() {

  public void windowClosing(WindowEvent event) {

   JOptionPane.showMessageDialog(policelist, "       Выход из программы.\nТекущий процесс будет сохранён.",

     "Внимание!", JOptionPane.WARNING_MESSAGE);

   try {

    xmlSaveOUT file = new xmlSaveOUT(null, model);

   } catch (Exception e) {

    JOptionPane.showMessageDialog(policelist, "       Не удалось создать файл автосохранения.",

      "Критическая ошибка!", JOptionPane.WARNING_MESSAGE);

    // TODO Auto-generated catch block

    e.printStackTrace();

   }

  }

  @Override

  public void windowActivated(WindowEvent arg0) {

   // TODO Auto-generated method stub

  }

  @Override

  public void windowClosed(WindowEvent arg0) {

   // TODO Auto-generated method stub

  }

  @Override

  public void windowDeactivated(WindowEvent arg0) {

   // TODO Auto-generated method stub

  }

  @Override

  public void windowDeiconified(WindowEvent arg0) {

   // TODO Auto-generated method stub

  }

  @Override

  public void windowIconified(WindowEvent arg0) {

   // TODO Auto-generated method stub

  }

  @Override

  public void windowOpened(WindowEvent arg0) {

   // TODO Auto-generated method stub

  }

 });

 // ****************************************************************************************************************************************

 

 

 policelist.add(searchPanel, BorderLayout.SOUTH);

 policelist.setVisible(true);

}

 public Node item(int temp) {

 // TODO Auto-generated method stub

 return null;

}

 public int getLength() {

 // TODO Auto-generated method stub

 return 0;

}

 public static void main(String[] args) throws Exception {

  new PoliceList().show();

}

}

Заключение

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

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

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




1. 03.14 вторник Русский язык 3 ч
2. Статья- О природе фундаментальных констант
3. Встановіть відповідність- Квітень 1947 р
4. Естествознание эпохи Античности и Средневековья
5. Дидактичні основи побудови підручників з природничо-математичних дисциплін для початкових шкіл України
6. рефератов немецких статей для французского журнала Анналы химии и физики
7. зующнх состояние российской экономики п 1997 г
8. Витрати підприємства
9. Доклад- Примеры изменений типов русловых процессов
10. Социально-психологическая характеристика менеджера в сфере экономики, банковского дела
11.  Загальна характеристика діяльності підприємства 2
12. Роль внеклассных воспитательных мероприятий в нравственном развитии личности
13. Воздух опьянял Круто спускающиеся вниз улицы которые разделяли странную архитектуру чужого город
14. Частная собственность Украин
15. 1 1 Соціальна справедливість і соціальна рівність
16. Информатика и вычислительная техника
17. Принципы организации и деятельности суда
18. История Московского метрополитена
19. Основные типы финансирования
20. контрольна робота 1 питання далі ~ обговорення питань на стор