Создание информационной модели



 

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

Правила, которые используются в информационной модели:

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

2. Все сделки, совершаемые в УК, регистрируются в справочнике «Сделки в УК» пользователем.

3. События по сделкам группируются по видам: сделки по продаже или сделки по покупке.

4. Цена одной ценной бумаги вычисляется путём деления суммы сделки на количество купленных/проданных ЦБ.

5. Плановая дата оплаты по сделке указывается в документе, подтверждающем совершение сделки.

6. Оплата по сделке может быть частями.

7. Фактическая дата оплаты – это дата оплаты последней части суммы по сделке.

Информационная модель создается с помощью Microsoft Office Excel 2003. Реализация информационной модели представлена в приложении 1.

 

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

 

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

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

 

Рис. 3. Форма ввода параметров отчёта «Регистр внутреннего учёта

сделок с ценными бумагами»

 

Параметры, необходимые для формирования отчёта «Регистр внутреннего учёта сделок с ценными бумагами»:

- управляющая компания – указывается название УК (данный параметр является обязательным для заполнения);

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

- период – указывается начальная и конечная дата формирования отчёта (данный параметр является обязательным для заполнения).

Описание работы пользователя с Системой описано в Руководстве пользователя (приложение 2).

 

Реализация программного кода

 

Реализация программного кода осуществлялась на типовом языке Java, при этом использовались стандартные библиотеки и собственные разработки компании Лоис.

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

1. Графический интерфейс пользователя (Graphic User Interface – GUI) содержит:

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

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

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

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

2. Работа с базами данных осуществляется при помощи:

1) Oracle TopLink JDBC интерфейс – отображает Java-объекты на реляционные таблицы. Основные объекты TopLink:

· сессия – объект, с помощью которого можно записывать и считывать данные;

· ExpressionBuilder – построитель выражений;

· ExecuteQuery – генерирует SQL-запрос, выполняет и передаёт результат ReportQuery.

2) СУБД Oracle – многомерная база данных.

Каждый объект имеет свой программный модуль, например, время совершения сделки - ru.lois.date.Vrema.

Справочники хранятся в библиотеке - ru.lois.nsi.*. Для реализации программного кода используется несколько типов справочников, например, справочник акций - ru.lois.nsi.cenniebumagi.Akcia, справочник клиентов - ru.lois.nsi.klient.Klient, справочник сделок - ru.lois.nsi.sdelka.Sdelka и др.

3. Работа с отчетами Excel осуществляется при помощи библиотека XL Report, которая позволяет производить манипуляции с данными и передавать их в MS Office Excel.

Реализация программного модуля для формирования отчёта «Регистр внутреннего учёта сделок с ценными бумагами» представлена в приложении 3.
Заключение

 

В результате написания курсовой работы в компании ЛОИС были закреплены пройденные в университете теоретические знания, приобретены практические навыки по проектированию и разработке информационных систем. Это было достигнуто путём решения задачи, связанной с формированием отчёта «Регистр внутреннего учёта сделок с ценными бумагами».

Данная задача была разбита на несколько подзадач:

1) исследование предметной области – ценные бумаги и увеличение активов при помощи совершения сделок с ними;

2) создание концептуальной модели – отражение предметной области при помощи понятий реального мира;

3) построение информационной модели – написание функционального теста для программистов-кодеров;

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

5) создание программного модуля и интегрирование его в систему – на языке Java и дополнительных надстроек и библиотек к нему.

 


Приложение 1 Руководство пользователя

 

Формирование отчета "Регистр внутреннего учёта сделок с ценными бумагами"

 

Описание применения

 

Управляющая компания принимает активы клиентов в доверительное управление.

Управляющая компания совершает биржевые и внебиржевые сделки по покупке/продаже ценных бумаг.

Сотрудники УК осуществляют ведение оперативного учёта в Системе - регистрируют в системе операции по движению ценных бумаг в соответствии с совершёнными сделками. При необходимости сотрудники УК формируют отчёт "Регистр внутреннего учёта сделок с ценными бумагами".

Для формирования отчёта «Регистр внутреннего учёта сделок с ценными бумагами» в Системе должны быть зарегистрированы операции по движению ценных бумаг в соответствии с совершенными сделками. Если сделки с ценными бумагами были совершены самой УК, то сотрудники УК регистрирует эти данные в Системе. Если же сделки были совершены брокерами на бирже, то данные по этим сделкам регистрируются брокерами во внешней системе LoisCapitalMarket, а уже из неё Система подгружает эти данные и обрабатывает их при нажатии на кнопку Импорт/Экспорт.

 

1. Регистрация параметров сделок с ценными бумагами

 

1.1. Начните работу со справочником сделок

Перейдите в группу задач «Справочники». На панели объектов выберите пункт «Сделки в УК». Система отобразит в рабочей области структуру зарегистрированных сделок (рис. 4.).

Рис. 4. Справочник сделок

 

1.2. Регистрация данных в справочнике сделок

Для формирования отчёта «Регистр внутреннего учёта сделок с ценными бумагами» в Системе должен быть заполнен справочник сделок. Пользователь регистрирует данные в справочнике сделок. Чтобы добавить новое значение в справочник, нажмите кнопку «Создать». Система откроет форму для регистрации параметров сделки (рис. 5.).

Рис. 5. Форма для регистрации параметров сделки

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

 

2.  Порядок формирования отчёта

 

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

2.1. Начните работу с выбора регистра учёта

Перейдите в группу задач «Отчёты». На панели объектов выберите пункт «Регистры учёта». Система отобразит в рабочей области виды регистров учёта. Затем выберите отчёт «Регистр внутреннего учёта сделок с ценными бумагами» (Рис. 6.).

Рис. 6. Выбор регистра учета

 

2.2. Введите параметры формирования отчета

· Выбор УК

Данный параметр является обязательным для заполнения. Нажмите кнопку . Появится окно, в котором указан перечень всех управляющих кампаний (Рис. 7.). Выберите название УК из списка и нажмите кнопку .

Рис. 7. Выбор УК

 

· Выбор клиента

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

Рис. 8. Выбор клиента

 

· Выбор периода формирования отчёта

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

 

 

2.3. Сформируйте отчёт

Нажмите кнопку . Система сформирует выбранный отчёт и выведет их в MS Excel. Вы можете распечатать отчёт средствами MS Excel. Если клиент не был выбран, то формируется отчёт, в котором отображаются все сделки с ценными бумагами за конкретный период. Если клиент был выбран, то в отчёте указываются только данные, относящиеся к нему (Рис. 9.).

Рис. 9. Отчёт «Регистр внутреннего учёта сделок с ценными бумагами»

 


Приложение 2 Информационная модель

 

Таблица 1 Ценные бумаги

Таблица 2 Клиенты

Код Краткое наименование Договор ДУ
ЮЛ-14 Попов Анатолий Николаевич ДУ 14-ЮЛ
ЮЛ-147 ДУ MJBKL ДУ 147-ЮЛ
ФЛ-1265 Суханов Игорь Игнатьевич ДУ ФЗ-1265
ЮЛ-456 Евсеев Юрий Олегович ДУ 456-ЮЛ
ЮЛ-956 Носкова Анна Васильевна ДУ 956-ЮЛ
ЮЛ-102 ДУ ЖУКОВ Г.И. ДУ 102-ЮЛ

                   Таблица 3 Сделки

 


Таблица 4 Отчёт «Регистр внутреннего учёта сделок с ценными бумагами»

 

 


Приложение 3 Программный код

 

package ru.lois.pm.lam.otceti.registrvnutrucetasdelok;

 

import java.math.BigInteger;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.Date;

import java.util.Iterator;

import java.util.List;

 

import oracle.toplink.expressions.Expression;

import oracle.toplink.expressions.ExpressionBuilder;

import oracle.toplink.queryframework.ReadAllQuery;

import oracle.toplink.sessions.Session;

import ru.lois.Util.QBE.ExpressionUtils;

import ru.lois.bean.PreobrazovatelIdentificirovanih;

import ru.lois.date.LDate;

import ru.lois.date.Vrema;

import ru.lois.nsi.VidiOu;

import ru.lois.nsi.cenniebumagi.Akcia;

import ru.lois.nsi.cenniebumagi.VidInstrumenta;

import ru.lois.nsi.dogovor.DogovorDU;

import ru.lois.nsi.klient.Klient;

import ru.lois.nsi.sdelka.Sdelka;

import ru.lois.nsi.sdelka.SdelkaBean;

import ru.lois.nsi.sdelka.SdelkaFasad;

import ru.lois.nsi.sdelka.TipSdelki;

import ru.lois.nsi.sdelka.VidSdelki;

import ru.lois.ogranicenia.para.DatePair;

import ru.lois.pm.lam.otceti.ucetdensredstv.RegistriUcetaParametri;

import ru.lois.utilities.LCollections;

 

public class RegistrVnutrUcetaSdelok

{

public List сформировать(RegistriUcetaParametri параметры, Session сессия)

{

 

   ExpressionBuilder b = new ExpressionBuilder();

   Expression ограничение = b.get(Sdelka.АКТИВНО).equal(true);

   BigInteger[] клиенты = PreobrazovatelIdentificirovanih.преобрразовать(параметры.getКлиенты());

   if (параметры.период != null && параметры.период.getKonecPerioda() != null

           && параметры.период.getNacaloPerioda() != null)

   {

       Expression ограничениеНаПериод = ExpressionUtils.сПо(b.get(Sdelka.ДАТА),

               new DatePair(параметры.период.getNacaloPerioda(),

                       LDate.получитьКонецДня(параметры.период.getKonecPerioda())));

       ограничение = ограничение.and(ограничениеНаПериод);

   }

   if (!LCollections.isПусто(клиенты))

   {

       Expression ограничениеПоКлиентам = b.get(Sdelka.ДОГОВОР_ДУ)

               .get(DogovorDU.КЛИЕНТ_ДОГОВОРА)

               .get(Klient.ID)

               .in(клиенты);

       ограничение = ограничение.and(ограничениеПоКлиентам);

   }

   ReadAllQuery query = new ReadAllQuery(Sdelka.class, ограничение);

   List сделки = (List) сессия.executeQuery(query);

   List строки = new ArrayList();

   for (Iterator iter = сделки.iterator(); iter.hasNext();)

   {

       Sdelka сделка = (Sdelka) iter.next();

       if (!LDate.содержитВремя(сделка.getДата()))

           сделка.setДата(LDate.установиВремя(сделка.getДата(), new Vrema(0, 0)));

       строки.add(new StrokaOtchetaSdelok(сделка.getИдентификатор(),

               сделка.getДата(),

               сделка.getМестоСовершения() != null ? сделка.getМестоСовершения().getНазвание()

                       : "",

               сделка.getДоговорДУ() != null ? сделка.getДоговорДУ()

                       .getКлиентДоговора()

                       .getСубъект()

                       .getИдентификатор() : "",

               сделка.getДоговорДУ() != null ? сделка.getДоговорДУ()

                       .getКлиентДоговора()

                       .getКод() : "",

               сформироватьЗаписку(сделка),

               сделка.getСторона() != null ? сделка.getСторона().getИдентификатор() : "",

               понятьТипСделки(сделка),

               сделка.getДоговорДУ() != null ? сделка.getДоговорДУ().getНомер() : "",

               (сделка.getВидСделки() != null)

                       || (!сделка.getВидСделки().equals(VidSdelki.НЕ_ОПРЕДЕЛЕН)) ? сделка.getВидСделки()

                       .getНазвание()

                       : "",

               сделка.getПредмет() != null ? сделка.getПредмет().getЭмитент().getНазвание()

                       : "",

               определитьВидЦБ(сделка),

               сделка.getКоличество(),

               сделка.getЦенаЦБ() != null ? сделка.getЦенаЦБ().getSumma() : null,

               сделка.getСуммаСделки() != null ? сделка.getСуммаСделки().getSumma() : null,

               сделка.getЦенаЦБ() != null ? сделка.getЦенаЦБ().getValuta().getНазвание() : "",

               сделка.getСуммаСделки() != null ? сделка.getСуммаСделки()

                       .getValuta()

                       .getНазвание() : "",

               сделка.getСтавкаРЕПО(),

               сделка.getТип().equals(TipSdelki.СОБСТВЕННАЯ_ВНЕБИРЖЕВАЯ) ? сделка.getПланДатаПеререгистрации()

                       : null,

               сделка.getТип().equals(TipSdelki.СОБСТВЕННАЯ_ВНЕБИРЖЕВАЯ) ? сделка.getПланДатаОплаты()

                       : null,

               сделка.getТип().equals(TipSdelki.СОБСТВЕННАЯ_ВНЕБИРЖЕВАЯ) ? оперделитьФактДатуПеререгистрации(сделка,

                       сессия)

                       : null,

               сделка.getТип().equals(TipSdelki.СОБСТВЕННАЯ_ВНЕБИРЖЕВАЯ) ? оперделитьФактДатуОплаты(сделка,

                       сессия)

                       : null));

 

   }

   Collections.sort(строки, new Comparator()

   {

 

       public int compare(Object o1, Object o2)

         {

           StrokaOtchetaSdelok первый = (StrokaOtchetaSdelok) o1;

           StrokaOtchetaSdelok второй = (StrokaOtchetaSdelok) o2;

           return (LDate.formatДляСортировкиПоСтроке(первый.getДата()) + "|" + первый.getНомер()).compareTo(LDate.formatДляСортировкиПоСтроке(второй.getДата())

                   + "|" + второй.getНомер());

       }

 

   });

   return строки;

}

 

private Date оперделитьФактДатуПеререгистрации(Sdelka сделка, Session сессия)

 {

   if (сделка.getТип().equals(TipSdelki.НЕ_ОПРЕДЕЛЕН))

       return null;

   if (сделка.getТип().equals(TipSdelki.БРОКЕРСКАЯ_БИРЖЕВАЯ))

       return сделка.getПланДатаПеререгистрации();

   SdelkaFasad фасад = new SdelkaFasad();

   фасад.узнатьФактическуюДатуПеререгистрации((SdelkaBean) фасад.создатьБин(сделка), сессия);

   return фасад.getДата();

 

}

 

private Date оперделитьФактДатуОплаты(Sdelka сделка, Session сессия)

{

   if (сделка.getТип().equals(TipSdelki.НЕ_ОПРЕДЕЛЕН))

       return null;

   if (сделка.getТип().equals(TipSdelki.БРОКЕРСКАЯ_БИРЖЕВАЯ))

       return сделка.getПланДатаОплаты();

   SdelkaFasad фасад = new SdelkaFasad();

   return фасад.расчетФактическойДаты((SdelkaBean) фасад.создатьБин(сделка), сессия);

 

}

 

private String сформироватьЗаписку(Sdelka сделка)

{

 

   if (сделка.getТип().equals(TipSdelki.БРОКЕРСКАЯ_БИРЖЕВАЯ))

       return "б/н от " + LDate.format(LDate.получитьСледующийРабочийДень(сделка.getДата()));

   if (!сделка.getТип().equals(TipSdelki.НЕ_ОПРЕДЕЛЕН))

       return сделка.getИдентификатор() + " от " + LDate.format(сделка.getДата());

   return "";

 

}

 

private String понятьТипСделки(Sdelka сделка)

{

   if (сделка.getТип().equals(TipSdelki.БРОКЕРСКАЯ_БИРЖЕВАЯ))

       return сделка.getТип().getНазвание().toLowerCase();

   if (!сделка.getТип().equals(TipSdelki.НЕ_ОПРЕДЕЛЕН))

       return "Во исполнение договора ДУ";

   return "";

 

}

 

private String определитьВидЦБ(Sdelka сделка)

{

   if (сделка.getПредмет() == null)

       return "";

   if (сделка.getПредмет().getВидОу().equals(VidiOu.АКЦИЯ))

       return ((Akcia) сделка.getПредмет()).getВидИнструмента().getНазвание().toLowerCase();

   if (сделка.getПредмет().getВидОу().equals(VidiOu.ОБЛИГАЦИЯ))

       return VidInstrumenta.ОБЛИГАЦИИ.getНазвание().toLowerCase();

   return VidInstrumenta.ВЕКСЕЛЬ.getНазвание().toLowerCase();

 

}

}

 

 


Дата добавления: 2019-11-16; просмотров: 94; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!