главная полезно рефераты ссылки сатьи контакты

Внимание!!!
Все материалы сайта защищены авторским правом, содержат на момент размещения не менее 60% оригинального текста. Материалы предназначены только для выполнения собственной студенческой работы. Любое воспрозведение или иное использование запрещено законом
Кроме того, просим терпимее относиться ко всем видам рекламы на сайте. Так как за счет её и существует наш проект. Спасибо за понимание и удачи вам в поиске нужной информации.


Разработать подсистему учета и регистрации статистической информации по выигрышам тиражей в лото (выигрыши ; выпавшие номера) (Программирование на Java)

СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ.. 2

1. ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ И КЛАССИФИКАЦИЯ СУЩНОСТЕЙ РЕШАЕМОЙ ЗАДАЧИ.. 3

1.1. Тираж.. 4

1.2. Выпавшие номера. 4

1.3. Билет. 4

2. Этапы организации хранилища информации о выигрышах в лотерею    5

3. ПОСТАНОВКА ЗАДАЧИ.. 6

4. ОБЗОР ЛИТЕРАТУРНЫХ ИСТОЧНИКОВ.. 7

5. ТРЕБОВАНИЯ К СИСТЕМЕ.. 9

6. РАЗРАБОТКА МЕТОДОВ И МОДЕЛЕЙ ПРЕДСТАВЛЕНИЯ СИСТЕМЫ    10

7. РАЗРАБОТКА И ПОСТРОЕНИЕ ИНФОРМАЦИОННОЙ МОДЕЛИ.. 13

8.ОБОСНОВАНИЕ ПРИНИМАЕМЫХ РЕШЕНИЙ ПО ВЫБОРУ ТЕХНИЧЕСКИХ И ПРОГРАМНЫХ СРЕДСТВ РЕАЛИЗАЦИИ.. 16

9. ОПИСАНИЕ АЛГОРИТМОВ ПРОГРАММНЫХ МОДУЛЕЙ.. 18

10. ОПИСАНИЕ ТЕСТОВОГО ПРИМЕРА. РУКОВОДСТВА ПОЛЬЗОВАТЕЛЯ   19

11. ОПИСАНИЕ ПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ.. 26

ВЫВОДЫ И ЗАКЛЮЧЕНИЯ.. 27

ЛИТЕРАТУРА.. 28

ПРИЛОЖЕНИЯ.. 29

ВВЕДЕНИЕ

 

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

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

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

Целью работы является разработка подсистемы учета и регистрации статистической информации по выигрышам тиражей в лото. Реализовать возможность добавления / удаления / редактирования / поиска. Использовать: EJB, JSP, Servlets, SYBASE 9.0, SunApp Server 8.0, DHTML.


1. ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ И КЛАССИФИКАЦИЯ СУЩНОСТЕЙ РЕШАЕМОЙ ЗАДАЧИ

 

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

1)                          играющие предварительно покупают билеты, в которых указана определенная последовательность шаров, обеспечивающая выигрыш

2)                          в ходе проведения розыгрыша тиража лото, который проводится периодически по определенным датам, вытаскиваются пронумерованные шары

3)                          последовательность выпадения шаров и их номера определяют выиграл билет или нет, для некоторых разновидностей лото 0 размер выигрыша.

 

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

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

1)    тираж – информация о тираже

2)    билет – распространяемые для данного тиража билеты

3)    выпавшие номер – информация о номерах шаров, выпавших в ходе проведения тиража

 

 

 

 

1.1. Тираж

Сущность «Тираж» содержит информацию о дате проведения розыгрыша.

1.2. Выпавшие номера

Сущность «выпавшие номера» содержит данные о выпавших в ходе проведения очередного тиража шарах. Она характеризуется следующими атрибутами:

- очередность выпадения,

- значение выпавших шаров

1.3. Билет

В данной сущности хранятся данные  по билетам, учитываются следующие атрибуты:

- номер,

- признак выигрыша,

-  сумма выигрыша для выигрышного билета


2. Этапы организации хранилища информации о выигрышах в лотерею

 

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

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

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

Инициирование проекта – бюджет, сроки, структура работ по проекту на этом этапе либо еще не известны, либо сильно размыты. Часто, особенно в крупных организациях процесс подписания договора и предварительной оплаты может длиться не один месяц и чтобы уложиться в отведенные сроки, исполнитель начинает работы по проекту. На этом этапе Заказчик лишний раз может убедиться о надежности исполнителя.

Обследование – подразумевает сбор данных и полный анализ бизнес-процессов, связанных с учетом выигрышей в лотерею.

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

 


3. ПОСТАНОВКА ЗАДАЧИ

 

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

·                    выбрать и провести краткий аналитический обзор литературных источников;

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

·                    разработать информационную модель системы (структуру базы данных);

·                    наполнить разработанную БД соответствующей информацией;

·                    разработать программу;

·                    протестировать программу с использованием разработанной БД;

·                    описать алгоритмы программных модулей;

·                    описать тестовый пример, руководство пользователя;

·                    описать полученные результаты;

·                    оформить пояснительную записку.


4. ОБЗОР ЛИТЕРАТУРНЫХ ИСТОЧНИКОВ

 

Дейтел П.Дж., Дейтел Х.М.  Как программировать на Java. Книга 2. Файлы, сети, базы данных [5] ориентирована на тех читателей, у которых уже есть определенный (хотя бы элементарный) опыт программирования на языке Java. В книгу включены не только главы, относящиеся к «стандартной» тематике, которая обычно не рассматривается в начальных курсах по Java (сюда можно отнести управление исключениями и параллельными потоками, работу с файлами), но и главы, посвященные вопросам, считающимся специальными или «углубленными». Это главы по сетевому программированию (организация систем типа клиент/сервер), связи с базами банных посредством унифицированной схемы JDBC. Обсуждаются также некоторые вопросы и приемы программирования мультимедиа (анимации и звука). Весь изучаемый материал сопровождается содержательными примерами «живого кода. В необязательных разделах глав дается обзор типичных объектно-ориентированных схем проектирования и последовательно разрабатывается пример объектно-ориентированного проектирования большой системы на основе унифицированного языка моделирования (UML).

Фельдман С.К. Система программирования Java без секретов: Как создать безопасное приложение с "нуля" [4] простое и доступное пособие по языку программирования Java. В книге изложены не только тонкости языка программирования Java, но и в систематизированном виде рассматриваются технологии создания Интернет-приложений на основе этого языка, поэтому данное издание также окажет помощь пользователям ПК, которые специализируются на создании приложений для Интернет в системе программирования Java.

Р. Мюллер. Базы данных и UML: Проектирование [3]. Книга посвящается использованию универсального языка моделирования UML (одобренный стандарт группы по управлению объектами) для проектирования баз данных. Подробно, шаг за шагом, раскрыт процесс разработки: от анализа требований к генерации схемы. Особо уделяется внимание вопросу выражения потребностей заказчиков в диаграммах вариантов использования UML и ролей. Книга раскрывает вопрос преобразования сущностей UML в компоненты базы данных, преобразования полученный проект в реляционные, объектно-реляционные и объектно-ориентированные схемы для основных продуктов DBMS.

Раскрыты практические примеры проектов для Oracle, Microsoft, Sybase, Informix, Object Design, POET и других систем управления базами данных.

«Mastering Enterprise JavaBeans» Ed. Roman, Scott Ambler. Книга предназначена для программистов, интересующихся разработкой и внедрением J2EE-приложений. Здесь описаны основные компонентные технологии, составляющие платформу J2EE, а также как разработать и установить J2EE-компоненты, используя инструментарий разработчика J2EE SDK.

Электронный ресурс [8] детально описывает особенности разработки методов, объявления массивов, организации циклов, ввода вывода, создания классов и пр., что, безусловно, очень сильно помогло в написании курсового проекта (разработке кода).

 


5. ТРЕБОВАНИЯ К СИСТЕМЕ

 

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

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

·                    должна быть реализована возможность получать обработанные результаты;

·                    должна быть реализована возможность удаленной работы с приложением (веб-клиент).

Для использования данной тестовой системы на персональном компьютере необходима любая операционная система Windows 98, Millennium, 2000, XP. А также  jsdk 1.4 или более поздние версии. Использовать: в качестве веб-технологий - EJB, JSP, Servlets; в качестве базы данных - SYBASE 9.0; в качестве J2EE-сервера  - SunApp Server 8.1.


6. РАЗРАБОТКА МЕТОДОВ И МОДЕЛЕЙ ПРЕДСТАВЛЕНИЯ СИСТЕМЫ

 

В работе проводится моделирование с использование IDEF0(BPWin), UML (Enterprise Archtect), IDEF1x (ErWin).

1. Важная роль отводится процессу функционального проектирования.

Для регламентирования создания функциональных моделей ПС предназначен стандарт IDEF0 (Integrated Definition Function Modeling), который и реализован в пакете BpWin.

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

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

В основе IDEF0 лежит три базовых принципа:

принцип функциональной декомпозиции – любая функция может быть разбита (декомпозирована) на более простые функции (более понятен термин детализация);

принцип ограничения сложности – количество блоков на диаграмме должно быть не менее двух, но не более шести (условие удобочитаемости);

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

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

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

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

В приложении продемонстрированы диаграммы последовательности, диаграмм классов, кооперирования, состояния и использования, а также диаграммы IDEF0 (BPWin).

2. Унифицированный язык моделирования (UML - Unified Modeling Language) является стандартным инструментом для создания документированных каркасов ("чертежей") программного обеспечения. С помощью UML можно визуализировать, специфицировать, конструировать и документировать процесс разработки программных систем.

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

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

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


7. РАЗРАБОТКА И ПОСТРОЕНИЕ ИНФОРМАЦИОННОЙ МОДЕЛИ

 

При построении информационной модели применялся стандарт IDEF1x, поддерживаемый инструментальной средой Erwin фирмы LogicWorks . ERWin‑ средство разработки структуры базы данных (БД). ERwin сочетает графический интерфейс Windows, инструменты для построения ER-диаграмм, редакторы для создания логического и физического описания модели данных и прозрачную поддержку ведущих реляционных СУБД и настольных баз данных.

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

Диаграмма ERwin строится из трех основных элементов - сущностей, атрибутов и связей. Если рассматривать диаграмму как графическое представление правил предметной области, то сущности являются существительными, а связи — глаголами.

Сущность - логическое понятие. Сущности соответствует таблица в реальной СУБД. В ERwin сущность визуально представляет 3 основных вида информации:

·                   атрибуты, составляющие первичный ключ. Для каждого первичного ключа ERwin создает при генерации структуры БД уникальный индекс;

·                   не ключевые атрибуты;

·                   тип сущности (независимая/зависимая).

Связь — это функциональная зависимость между двумя сущностями (в частности, возможна связь сущности с самой собой). Связь - это понятие логического уровня, которому соответствует внешний ключ на физическом уровне. В ERwin связи представлены 5 основными элементами информации:

·                   связи (идентифицирующая/ неидетифицирующая), полная/неполная категория, специфическая связь);

·                   родительская сущность;

·                   дочерняя (зависимая) сущность;

·                   мощность связи (cardinality);

·                   допустимость пустых (null) значений.

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

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

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

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

·                   определение сущностей;

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

·                   задание первичных и альтернативных ключей;

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

·                   приведение модели к требуемому уровню нормальной формы;

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

·                   генерация базы данных.

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

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


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

 

К программным средствам, выбранным для решения поставленной перед нами задачи относятся:

·                    Enterprise Architect

·                    Sun AppServer 8

Enterprise Architect - это мощный набор UML-инструментов для разработки программного обеспечения через стадии анализа, модели дизайна, испытания и внедрения. Enterprise Architect - это многопользовательский графический инструмент, разработанный для того, чтобы создавать устойчивое и удобное в использовании программное обеспечение.

Enterprise Architect объединяет в себе силу языка UML 2.0 с высокоэффективным, понятным интерфейсом. Данная программа дает возможность расширенного моделирования на рабочем столе, разработки и созданию групп. Поддержка для всех 13 UML 2.0.

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

Для уменьшения стоимости и увеличения скорости проектирования и разработки корпоративного приложения платформа J2EE предлагает компонентный подход к проектированию, разработке, сборке и внедрению корпоративных приложений. Платформа J2EE предлагает модель многоуровневого распределенного приложения, возможность повторного использования компонентов, интегрированный обмен данными на основе XML, унифицированную модель безопасности и гибкое управление транзакциями. Вы не только можете выпускать на рынок инновационное решение для пользователей быстрее, чем раньше, но и Ваши платформо-независимые, основанные на компонентах J2EE-решения больше не привязаны к продуктам и API какого-либо одного производителя. Производители и пользователи обладают свободой выбора продуктов и компонентов, которые наиболее полно удовлетворяют их деловые и технологические требования. Поэтому в  качестве сервера был выбран Sun AppServer 8.

Язык программирования JAVA — весьма популярный в настоящее время язык программирования, обладающий большой гибкостью и обеспечивающий поддержку объектно-ориентированного программирования. Самым главным его козырем является платформенная независимость, т.е. код, написанный в среде Windows, без всяких изменений будет работать в среде Linux и т.п. Это обеспечивается тем, что скомпилированные файлы JAVA представляют собой не самостоятельно исполняемый код, а так называемый байт-код, который исполняется виртуальной машиной JAVA, индивидуальной для каждой платформы.


9. ОПИСАНИЕ АЛГОРИТМОВ ПРОГРАММНЫХ МОДУЛЕЙ

         Обобщенный алгоритм работы клиента показан на рис. 1.

Рис. 1. Обобщенный алгоритм работы.

 


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

Для запуска разработанного программного средства вначале необходимо зарегистрировать в настроить connection pool для сервера базы данных с именем lotoPool и JNDI-name для базы с именем jdbc/loto.

Подключение производиться по url:

http://localhost:8080/loto/index. jsp

Работать необходимо в Internet Explorer (поддержка javascript и css).

При запуске клиента появляется окно, показанное на рис. 2. На данном рисунке видны возможности, которыми обладает клиент.

Рис. 2. Основное окно веб-клиента.

 

Логика приложения организована следующим образом. Отображены 3 таблицы с соответствующими им кнопками управления:

1.                Список тиражей (выводятся все даты проведения тиражей)

2.                Выпавшие номера (отображает список номеров в той же последовательности, как они выпадали)

3.                Реализованные билеты (отображает список билетов).

Возможности добавления, корректировки и удаления записей реализуется по средствам кнопок (рис.3).

Рис. 3. Выбор добавления тиража.

Чтобы  добавить новую запись, необходимо нажать на 1-ую кнопку. В результате мы перейдем на форму, в которой будет предложено заполнить соответствующие поля (рис.4). При нажатии кнопки «Принять» данные будут внесены в базу. При нажатии кнопки «Отменить» данные внесены не будут, и мы перейдем на главную форму.

Рис. 4. Форма заполнения данных по тиражу.

         Результат ввода представлен на рис. 5.

 

Рис. 5. Отображение результатов ввода.

 

Выберем запись для корректировки (рис.6).

Рис.6. Выбор записи для корректировки.

 

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

Рис. 7. Корректировка записи.

 

               Результат изменения записи виден на главной форме (рис. 8). Выберем сразу эту же запись для удаления и нажмем соответствующую кнопку.

Рис. 8. Результат корректировки записи.

 

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

Рис. 9. Форма, подтверждения удаления записи.

Чтобы  добавить новую запись по выпавшим номерам, необходимо нажать на 1-ую кнопку из перечня кнопок, реализующим работу с записями по выпавшим номерам (рис. 10).

Рис.10. Список видов печатных изданий

Как только мы нажали кнопку, мы переходим на форму ввода новых данных (рис.11)..

Рис. 11. Добавление новой записи по выпавшему номеру

 

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

 

Рис. 12. Вызов перегрузки номеров.

 

Чтобы откорректировать запись о выпавшем номере необходимо нажать соответствующую кнопку (рис. 13).

Рис. 13. Выбор корректировки записи о номере.

 

Чтобы удалить запись необходимую запись, выбираем строку в таблице и нажимаем на кнопку удаления (рис. 14).

 

Рис. 14. Выбор записи для удаления.

 

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

Рис. 15. Данные по удаляемой записи.

 

Вывод билетов осуществляется 3-мя способами:

1.    Вывод всего тиража билетов (рис. 16)

2.    Вывод всех выигрышных билетов (рис. 17)

3.    Вывод всех проигрышных билетов (рис. 18)

Рис. 16. Вывод всего тиража.

Рис. 16. Вывод выигрышных билетов.

Рис. 16. Вывод проигрышных билетов.

 

Отображение записей по реализованным билетам можно увидеть на рис. 2. Чтобы  добавить новую запись по билетам, необходимо нажать на соответствующую кнопку из перечня кнопок, реализующим работу с записями по билетам (рис. 17).

Рис. 17. Добавление данных по билетам.

 

Как только мы нажали данную кнопку, мы переходим на форму ввода новых данных (рис.18).

Рис. 18. Добавление записи.

 

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

Рис. 19. Выбор удаления записи.

 


11. ОПИСАНИЕ ПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ

 

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

Разработанная программа может использоваться в любой библиотеке.

В результате выполнения данного курсового проекта были получены и закреплены на практике навыки в работе с языком  JAVA, UML, методиками проектирования IDEF0, IDEF1x, СУБД SQL Anywhere 9 и технологией EJB .


ВЫВОДЫ И ЗАКЛЮЧЕНИЯ

 

В курсовом проекте была разработана подсистема учета и регистрации выигрышей в лотерею. Программа реализована с использованием языка программирования Java, технологий J2EE и Sun Asperser 8 / SQL Anywhere 9. Реализован веб-клиент.

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

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

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

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

 


ЛИТЕРАТУРА

 

1. Леоненков. «Самоучитель UML».

2. http://www.ianywhere.com/

3. Р. Мюллер. Базы данных и UML: Проектирование.– Лори, 2002г. 432 с.

4. Фельдман С.К. Система программирования Java без секретов: Как создать безопасное приложение с "нуля". – Новый издательский дом" , 2005 г. , 347 с.

5. Дейтел П.Дж., Дейтел Х.М.  Как программировать на Java. Книга 2. Файлы, сети, базы данных. – "Бином" · 2005 г., 672 с.

6. http://www.avacco.ru/page.asp?code=electronniy_arhiv

         7.

 



ПРИЛОЖЕНИЯ

 

Рис. 20. Диаграмма IDEF0. Верхний уровень

 

Рис. 21. Диаграмма IDEF0. Уровень 0 – Разработать подсистему учета и регистрации выигрышей в лотерею

 

Рис. 22. Диаграмма IDEF0. Уровень 1 – Разработать

session-компонент

 

Рис. 23. Диаграмма IDEF0. Уровень 1 – Разработать

Web-клиент

Рис. 24. Диаграмма IDEF0. Учет и регистрация выигрышей в лото

Рис. 25. Диаграмма IDEF0. Уровень 0 – Учет и регистрация выигрышей в лото

Рис. 26. Диаграмма IDEF0. Уровень 1 – Запись о выигрышном билете

 

Рис. 24. Диаграмма IDEF1х (ERWin). Логический уровень

Рис. 25. Диаграмма IDEF1х (Erwin). Физический уровень

 

Рис. 26. Диаграмма вариантов использования

 

 

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

 

Рис. 28. Диаграмма компонентов приложения

Рис. 29. Диаграмма развертывания

 Рис. 30 Диаграмма последовательностей (просмотр полного списка выигравших билетов)

 

Рис. 31 Диаграмма состояний для работы приложения в целом
ЛИСТИНГ

В качестве примера приведем код класса sesClient

 

package sesionClient;

 

import fallNumberBean.fallNumberHome;

import fallNumberBean.fallNumberRemote;

 

import javax.ejb.SessionBean;

import javax.naming.NamingException;

import javax.naming.InitialContext;

import javax.rmi.PortableRemoteObject;

import java.util.Collection;

import java.util.Iterator;

 

import editionBean.editionHome;

import editionBean.editionRemote;

import ticketBean.ticketHome;

import ticketBean.ticketRemote;

 

public class sesClient implements SessionBean {

  // ========================================================== //

 

  public String[][] getAllFallNumber(Integer editionID) throws javax.ejb.EJBException {

    String[][] FallNumberInfo = null;

    try {

        fallNumberHome FallNumberH = getFallNumber();

        Collection fallNumberR = FallNumberH.findAllByEdition(getEdition().findByPrimaryKey(editionID));

        Iterator fallNumberRIter = fallNumberR.iterator();

        if(fallNumberRIter.hasNext() && fallNumberR.size()>0) {

          FallNumberInfo = new String[fallNumberR.size()][3];

          int i=0;

          while(fallNumberRIter.hasNext()) {

            fallNumberRemote fallNumberRObject = (fallNumberRemote)fallNumberRIter.next();

            FallNumberInfo[i][0] = fallNumberRObject.getFallNumberID().toString();

            FallNumberInfo[i][1] = String.valueOf(fallNumberRObject.getFallNumberSN());

            FallNumberInfo[i][2] = String.valueOf(fallNumberRObject.getFallNumberValue());

            i++;

          }

        }

    } catch(Exception e) {

        e.printStackTrace();

    }

    return FallNumberInfo;

  }

 

  public String[] getFallNumberInfo(int FallNumberID)

      throws javax.ejb.EJBException {

    String[] FallNumberInfo;

    try {

        fallNumberHome FallNumberH = getFallNumber();

        fallNumberRemote FallNumberR = FallNumberH.findByPrimaryKey(new Integer(FallNumberID));

        FallNumberInfo = new String[2];

        FallNumberInfo[0] = String.valueOf(FallNumberR.getFallNumberSN());

        FallNumberInfo[1] = String.valueOf(FallNumberR.getFallNumberValue());

    } catch(Exception e) {

        e.printStackTrace();

        FallNumberInfo = null;

    }

    return FallNumberInfo;

  }

 

  public void addFallNumber(int FallNumberValue, int FallNumberSN, int editionID)

      throws javax.ejb.EJBException {

    try {

      fallNumberHome FallNumberH = getFallNumber();

      fallNumberRemote FallNumberR = FallNumberH.create(getLastID(FallNumberH.getLastID()),FallNumberValue, FallNumberSN);

      FallNumberR.setEdition(getEdition().findByPrimaryKey(new Integer(editionID)));

    } catch(Exception e) {

        e.printStackTrace();

    }

  }

 

  public void changeFallNumber(int FallNumberID, int FallNumberValue, int FallNumberSN)

      throws javax.ejb.EJBException {

    try {

      fallNumberHome FallNumberH = getFallNumber();

      fallNumberRemote FallNumberR = FallNumberH.findByPrimaryKey(new Integer(FallNumberID));

      FallNumberR.setFallNumberValue(FallNumberValue);

      FallNumberR.setFallNumberSN(FallNumberSN);

    } catch(Exception e) {

        e.printStackTrace();

    }

  }

 

  public void deleteFallNumber(int FallNumberID)

    throws javax.ejb.EJBException {

    try {

        getFallNumber().findByPrimaryKey(new Integer(FallNumberID)).remove();

    } catch(Exception e) {

        e.printStackTrace();

    }

  }

 

  // ========================================================== //

 

 

  public String[][] getAllTicket(Integer editionID) throws javax.ejb.EJBException {

    String[][] ticketInfo = null;

    try {

      ticketHome ticketH = getTicket();

      Collection ticketR = ticketH.findAllByEdition(getEdition().findByPrimaryKey(editionID));

      Iterator ticketRIter = ticketR.iterator();

      if(ticketRIter.hasNext() && ticketR.size()>0) {

        ticketInfo = new String[ticketR.size()][4];

        int i=0;

        while(ticketRIter.hasNext()) {

          ticketRemote ticketRObject = (ticketRemote)ticketRIter.next();

          ticketInfo[i][0] = ticketRObject.getTicketID().toString();

          ticketInfo[i][1] = String.valueOf(ticketRObject.getTicketNumber());

          ticketInfo[i][2] = String.valueOf(ticketRObject.getTicketIsWin());

          ticketInfo[i][3] = String.valueOf(ticketRObject.getTicketWinValue());

          i++;

        }

      }

    } catch(Exception e) {

        e.printStackTrace();

    }

    return ticketInfo;

  }

 

  public String[][] getAllTicketAndWinStatus(int editionID, boolean isWin) throws javax.ejb.EJBException {

    String[][] ticketInfo = null;

    try {

      ticketHome ticketH = getTicket();

      Collection ticketR = ticketH.findAllByEditionAndWinStatus(

          getEdition().findByPrimaryKey(new Integer(editionID)),

          isWin?1:0);

      Iterator ticketRIter = ticketR.iterator();

      if(ticketRIter.hasNext() && ticketR.size()>0) {

        ticketInfo = new String[ticketR.size()][4];

        int i=0;

        while(ticketRIter.hasNext()) {

          ticketRemote ticketRObject = (ticketRemote)ticketRIter.next();

          ticketInfo[i][0] = ticketRObject.getTicketID().toString();

          ticketInfo[i][1] = String.valueOf(ticketRObject.getTicketNumber());

          ticketInfo[i][2] = String.valueOf(ticketRObject.getTicketIsWin());

          ticketInfo[i][3] = String.valueOf(ticketRObject.getTicketWinValue());

          i++;

        }

      }

    } catch(Exception e) {

        e.printStackTrace();

    }

    return ticketInfo;

  }

 

  public String[] getTicketInfo(int ticketID)

      throws javax.ejb.EJBException {

    String[] ticketInfo = null;

    try {

      ticketHome ticketH = getTicket();

      ticketRemote ticketR = ticketH.findByPrimaryKey(new Integer(ticketID));

      ticketInfo = new String[3];

      ticketInfo[0] = String.valueOf(ticketR.getTicketNumber());

      ticketInfo[1] = String.valueOf(ticketR.getTicketIsWin());

      ticketInfo[2] = String.valueOf(ticketR.getTicketWinValue());

    } catch(Exception e) {

        e.printStackTrace();

    }

    return ticketInfo;

  }

 

  public void addTicket(long    TicketNumber,

                        int TicketIsWin,

                        long    TicketWinValue,

                        int     editionID)

      throws javax.ejb.EJBException {

    try {

        ticketHome ticketH = getTicket();

        ticketRemote ticketR = ticketH.create(getLastID(ticketH.getLastID()),TicketNumber,TicketIsWin,TicketWinValue);

        ticketR.setEdition(getEdition().findByPrimaryKey(new Integer(editionID)));

    } catch(Exception e) {

        e.printStackTrace();

    }

  }

 

  public void changeticket(int ticketID,

                           long    TicketNumber,

                           int TicketIsWin,

                           long    TicketWinValue)

      throws javax.ejb.EJBException {

    try {

      ticketHome ticketH = getTicket();

      ticketRemote ticketR = ticketH.findByPrimaryKey(new Integer(ticketID));

      ticketR.setTicketNumber(TicketNumber);

      ticketR.setTicketIsWin(TicketIsWin);

      ticketR.setTicketWinValue(TicketWinValue);

    } catch(Exception e) {

      e.printStackTrace();

    }

  }

 

  public void deleteticket(int ticketID)

    throws javax.ejb.EJBException {

    try {

      getTicket().findByPrimaryKey(new Integer(ticketID)).remove();

    } catch(Exception e) {

        e.printStackTrace();

    }

  }

 

  // ========================================================== //

  public String[][] getAllEdition()

      throws javax.ejb.EJBException {

    String[][] EditionInfo = null;

    try {

        editionHome EditionH = getEdition();

        Collection EditionR = EditionH.findAll();

        Iterator EditionRIter = EditionR.iterator();

        EditionInfo = new String[EditionR.size()][2];

        int i = 0;

        while(EditionRIter.hasNext()) {

          editionRemote EditionRObject = (editionRemote)EditionRIter.next();

          EditionInfo[i][0] = EditionRObject.getEditionID().toString();

          EditionInfo[i][1] = String.valueOf(EditionRObject.getEditionDate());

          i++;

        }

    } catch(Exception e) {

        e.printStackTrace();

    }

    return EditionInfo;

  }

 

  public String[] getEditionInfo(int EditionID)

      throws javax.ejb.EJBException {

    String[] EditionInfo = null;

    try {

        editionHome EditionH = getEdition();

        editionRemote EditionR = EditionH.findByPrimaryKey(new Integer(EditionID));

        EditionInfo = new String[1];

        EditionInfo[0] = String.valueOf(EditionR.getEditionDate());

    } catch(Exception e) {

        e.printStackTrace();

    }

    return EditionInfo;

  }

 

  public void addEdition(String EditionDate)

      throws javax.ejb.EJBException {

    try {

        editionHome EditionH = getEdition();

        EditionH.create(getLastID(EditionH.getLastID()), EditionDate);

    } catch(Exception e) {

        e.printStackTrace();

    }

  }

 

  public void changeEdition(int EditionID, String EditionDate)

      throws javax.ejb.EJBException {

    try {

        editionHome EditionH = getEdition();

        editionRemote EditionR = EditionH.findByPrimaryKey(new Integer(EditionID));

        EditionR.setEditionDate(EditionDate);

    } catch(Exception e) {

        e.printStackTrace();

    }

  }

 

  public void deleteEdition(int EditionID)

    throws javax.ejb.EJBException {

    try {

        editionHome EditionH = getEdition();

        EditionH.findByPrimaryKey(new Integer(EditionID)).remove();

    } catch(Exception e) {

        e.printStackTrace();

    }

  }

 

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

 

  private Integer getLastID(Integer lastID) {

    if(lastID==null) return new Integer(1);

    else return new Integer(lastID.intValue()+1);

  }

 

  private ticketHome getTicket() throws NamingException {

    return (ticketHome)lookupHome("java:comp/env/ejb/ticketRef", ticketHome.class);

  }

 

  private fallNumberHome getFallNumber() throws NamingException {

    return (fallNumberHome)lookupHome("java:comp/env/ejb/fallNumberRef", fallNumberHome.class);

  }

 

  private editionHome getEdition() throws NamingException {

    return (editionHome)lookupHome("java:comp/env/ejb/editionRef", editionHome.class);

  }

 

  private Object lookupHome(String beanRef, Class beanClass)

          throws NamingException

  {

      Object objRef, objRemote;

      InitialContext initialcontext = new InitialContext();

      objRef = initialcontext.lookup(beanRef);

      objRemote = PortableRemoteObject.narrow(objRef, beanClass);

      initialcontext.close();

      return objRemote;

  }

 

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

 

  public void setSessionContext(javax.ejb.SessionContext ctx) { }

  public void ejbCreate() throws javax.ejb.EJBException, javax.ejb.CreateException {}

  public void ejbRemove() { }

  public void ejbActivate() { }

  public void ejbPassivate() { }

Внимание! Для данной работы приложения платные. С их описанием и стоимостью можно ознакомиться здесь

Описание приложений!





Скачать курсовую

Задать вопрос                                                      




Если у вас появилось непреодолимое желание пожертвовать средства на развитие сайта или отблагодарить владельца за бесценный материал :), можете перевести любую сумму на кошелек R200818721914 или Z890150328460.

© studlight 2011-2014