Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Турянський.doc
Скачиваний:
1
Добавлен:
20.08.2019
Размер:
14.99 Mб
Скачать

4.2. Функції бази даних обліку суб’єктів страхування

До функцій бази даних поставленої задачі можна віднести наступні:

  • опрацювання та отримання інформації про страхувальників поліса, страховиків, транспортні засоби та сам поліс;

  • можливість навігації по даним;

  • користувацький інтерфейс та ілюстрування (за рахунок форм);

  • визначення типу полісу на основі аналізу даних страхувальника;

  • аналіз діяльності страхової фірми.

Після розробки структури бази даних можна здійснювати ввід даних.

4.3. Опис розробленого програмного забезпечення

Головна форма має структуру та ряд кнопок, через які підпорядковує до себе «дрібніші» форми. Головна форма призначена для того, щоб користувачеві було зручно керувати доступом до усіх менших форм. За допомогою цієї форми користувач може переглядати усі форми без пошуку їх у списку наявних форм. Структура головної форми зображена на рис. 4.2.

Рис. 4.2. Структура головної форми.

Форма перегляду форм дозволяє швидко передивитись основну інформацію із графічними вставками. Форми – це презентабельний вигляд зображення вмісту таблиць.

Одним із елементів форми є кнопки, які дозволяють виконувати задачі аналізу та прогнозування. Дані засоби розроблені на мові VBA.

Для реалізації механізму продукційних правил використано модулі та запити, які автоматично генеруються. Для цього використано об’єкт DAO Recordset. Цей об’єкт включає в себе перегляди бази даних та дозволяє запускати запити, вказані у вигляді SQL-скрипта.

Частина програмного коду для генерації нового полісу:

Dim str As String

Dim rs As Recordset

Dim numb As String

If typ = "" Then

MsgBox "Не встановлено типу полісу", vbOKOnly, "Повідомлення"

Else

str = "select count(polic_numb) as a from polic"

Set rs = CurrentDb.OpenRecordset(str)

Dim a As Integer

a = rs!a + 1

numb = "polic " & a

str = "INSERT INTO polic ( polic_numb, employee_id, amount_people, type )values ('" & numb & "', " & Me.id & ", 1, '" & typ & "')"

CurrentDb.Execute (str)

str = "insert into polic_strahuvalnyk (polic_id, transport_id, starahyvalnyk_id) values ('" & numb & "', '" & [Forms]![main]![transport]!id _

& "', " & Me.strah & ")"

CurrentDb.Execute (str)

Створено такі модулі:

Для кнопкової форми

Sub Form_Open(Cancel As Integer) – відкриття форми та перевірка, чи це не репліка

Sub Form_Current() – перевірка, чи дана форма відкрита в режимі Модуля

Sub FillOptions() – перевірка, яка кнопка натиснена

Для визначення страхової програми

Sub Command6_Click() – виведеня усіх виплат по даному клієнту

Sub Command14_Click() – визначення типів полісів

Sub Command15_Click() – автоматичне генерування полісу

Для автоматизації дій по полісу

Sub Command18_Click() – для визначення кількості осіб в договорі

Sub Command19_Click() – для визначення суми пільг страхувальника

4.4. Запити

Запити застосовуються користувачем для вибірки з бази даних інформації, яка його цікавить, використовуючи при цьому певні критерії. Результат роботи запиту Access являє собою таблицю, яка називається тимчасовим набором даних.

Запит для визначення можливості страхування по типах полісів:

SELECT [strahuvalnyk].[id] AS strah, [transport].[id] AS transport, [polic_type].[id] AS polic, [strahuvalnyk].[type], year(Now())-year([strahuvalnyk].[data_stag]) AS [Стаж водіння]

FROM strahuvalnyk, transport, polic_type

WHERE ([transport].[type]=[polic_type].[type] Or [polic_type].[type] Is Null) And (year(Now())-year([strahuvalnyk].[data_stag])>=[polic_type].[stag_beg] Or [polic_type].[stag_beg] Is Null) And (year(Now())-year([strahuvalnyk].[data_stag])<=[polic_type].[stag_end] Or [polic_type].[stag_end] Is Null) And ([transport].[category]=[polic_type].[category] Or [polic_type].[category] Is Null) And ([transport].[zona] Like [polic_type].[zona] Or [polic_type].[zona] Is Null);

Запит, який нараховує відсотки страховим агентам за укладені поліси:

SELECT DISTINCT [polic].[type], [polic].[employee_id], Sum([polic].[suma]*[polic_type].[pecent_employee]) AS suma

FROM parametr, polic_type INNER JOIN polic ON [polic_type].[id]=[polic].[type]

WHERE ([polic].[beg]>=[parametr].[datebeg] Or [parametr].[datebeg] Is Null) And ([polic].[beg]<=[parametr].[dateend] Or [parametr].[dateend] Is Null) And ([polic].[type]=[parametr].[type] Or [parametr].[type] Is Null)

GROUP BY [polic].[type], [polic].[employee_id], [parametr].[rep], [polic].[beg]

HAVING (((parametr.rep)="suma_employee"));

Запит, який визначає виплачену суму по типах полісів:

SELECT polic.type, polic_vyplaty.evdate, polic_vyplaty.vyplata_type_id, polic_vyplaty.suma, polic_vyplaty.real

FROM polic INNER JOIN polic_vyplaty ON polic.polic_numb = polic_vyplaty.polic_id;

Запит, який визначає виплачені суми по соціальних групах:

SELECT strahuvalnyk.soc_grypa, soc_grypa.percent, polic.type, Sum(polic.suma) AS suma

FROM (soc_grypa INNER JOIN strahuvalnyk ON soc_grypa.id = strahuvalnyk.soc_grypa) INNER JOIN (polic INNER JOIN polic_strahuvalnyk ON polic.polic_numb = polic_strahuvalnyk.polic_id) ON strahuvalnyk.id = polic_strahuvalnyk.starahyvalnyk_id

WHERE (((strahuvalnyk.type_pers)="головний страхувальник"))

GROUP BY strahuvalnyk.soc_grypa, soc_grypa.percent, polic.type

HAVING (((strahuvalnyk.soc_grypa) Is Not Null));