Разработка базы данных для автоматизированного составления графика дежурств и учёта рабочего времени службы охраны предприятия

Описание предметной области и разработка программы для автоматизированного составления графика и табеля по учету рабочего времени службы охраны предприятия средствами Embracadero Builder C++. Инсталляция, общий дизайн и тестирование проекта базы данных.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 05.08.2013
Размер файла 3,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

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

- в помещениях операторов ЭВМ уровень шума не должен превышать 65 дБА;

- относительная влажность воздуха в холодный и теплый период года при категории работ - легкая - 1а и легкая -1б - 40-60 процентов;

- скорость движения воздуха должна составлять от 0,1 до 0,2 м/сек в зависимости от вида работ;

- так же, должны быть, соблюдены эргономические факторы: яркость знака (яркость фона), внешняя освещенность экрана, угловой размер знака. [8]

Во время прохождение практики на ЧТПУП «Альтекстрой» рабочее место автора проекта полностью соответствовало выше изложенным требованиям охраны труда.

Заключение

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

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

Программа была реализована с помощью среды разработки Embracadero Builder C++. Дополнительно для реализации программы была использована технология ADO для работы с базами данных, технология OLE серверов для экспорта данных в Ms Excel, технология AlphaSkins для придания визуальной привлекательности программы.

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

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

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

Программа написана под операционную систему Windows. Использование программы предполагает лишь элементарные знания приемов работы в данной среде.

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

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

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

Список использованных источников

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

2. Herbert Schildt. С++: The Complete Reference (Fourth Edition). - М.: Вильямс, 2009г. - 748 c.

3. А. Я. Архангельский. Программирование в С++ Builder. - М. БИНОМ 2003г. - 1160 c.

4. С. Орлов. Учебник “Технология разработки программного обеспечения”. - М.: Издательство "Питер", СПб - 2002г. - 300 с.

5. Коннолли Т., Бегг К., Страчан А. Базы данных: Проектирование, реализация и сопровождение. Теория и практика. Издание второе, исправленное, дополненное. - Издательство "Питер", СПб - 2002г. - 550 с.

6. Палицын В.А. Технико-экономичкское обоснование дипломных проектов. Методические указания. Часть IV. - Мн., 2005 г. - 76 с.

7. Лазаренков А.М. Охрана труда: Учебник. - Мн.: БНТУ, 2004 г. - 497 с.

8. Сокол Т.С. Охрана труда. Дизайн ПРО; 2005 г. - 304 с.

ПРИЛОЖЕНИЕ А

Дополнительная информация по экономическому разделу

Таблица А.1 - Классификация типов программных средств (ПС)

Код

типа

Наименование

типа программных средств

Состав и содержание типа программных средств

1

2

3

1.0

ПС общего назначения

1.1 ПЧС СУВД;

1.2 ПС систем ведения линейных файлов;

1.3 ПС ведения баз данных и линейных файлов;

1.4 ПС информационно-поисковых и информационно-справочных систем;

1.5 ПС ввода информации;

1.6 ПС мониторов телеобработки и сетей ЭВМ;

1.7 ПС окружения СУБД, расширяющие возможности существующих СУБД;

1.8 ПС, расширяющие возможности обработки

2.0

ПС технологии автоматиза-ции программирования АСУ

2.1 ПС автоматизации проектирования для автоматизации проектирования различных АСУ;

2.2 ПС автоматизации программирования;

2.3 ПС технологии программирования (для автоматизации процессов обработки и вывода информации);

2.4 ПС, расширяющие существующие языки программирования для повышения их компактности и простоты пользования;

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

Код

типа

Наименование

типа программных средств

Состав и содержание типа программных средств

3.0

ПС методоориентирован-ных расчетов

3.1 ПС оптимизационных расчетов (обеспечивают решение различного класса задач оптимального планирования и управление производством);

3.2 ПС статистического анализа и прогнозирования (для прогнозирования ТЭП, спроса и т.д.);

3.3 ПС сетевого планирования;

3.4 ПС общей математики;

3.5 ПС имитационного моделирования

4.0

ПС организации вычисли-тельного процесса

4.1 Автоматизация процесса ведения наборов данных, при обеспечении их надежного и систематизированного хранения;

4.2 Повышение производительности ЭВМ и пользователей ПС ВТ;

4.3 Формирование и выдача отчетов о работе ЭВМ;

4.4 Оперативный контроль системы и ресурсов;

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

4.6 ПС данного типа выполнены в основном автономно

5.0

ПС функционального назначения

5.1 ПС системы ППП ИСУП;

5.2 ПС ВТ оперативного управления основным производством;

5.3 ПС ВТ управление технической подготовкой производства

Таблица А.2 - Каталог функций программных средств

Наименование

(содержание) функций

Объем функций

(условных машинных команд)

ЕС ЭВМ ПВЭМ

СМ ЭВМ

С использованием среды разработки приложений

Delphi

(Borland)

C++ Builder (Borland)

Visual C++ (Micro-soft)

1 Ввод, анализ входной информации, генерация кодов и процессор входного языка

Организация ввода информации

600

870

100

110

150

Контроль, предварительная обработка и ввод информации

1810

2100

520

550

450

Анализ входного языка (синтаксический и семантический)

3220

2900

630

660

660

Преобразование операторов входного языка и команды другого языка

2350

3850

1050

1050

980

Обработка входного заказа и формирование таблиц

3675

1550

750

900

1340

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

11250

3260

4300

4300

5100

Синтаксический и семантический анализ входного языка и генерация кодов команд

18250

6800

8700

5400

5400

Процессор языка

23900

3260

3000

2300

2300

Организация ввода/вывода информации в интерактивном режиме

1085

1550

220

220

320

Организация ввода/вывода информации с сети терминалов

9660

2700

3680

3340

3200

таблица А.2

Наименование

(содержание) функций

Объем функций

(условных машинных команд)

ЕС ЭВМ ПВЭМ

СМ ЭВМ

С использованием среды разработки приложений

Delphi

(Borland)

C++ Builder (Borland)

Visual C++ (Microsoft)

Управление вводом/выводом

*

6450

2700

2900

2400

2 Формирование, ведение и обслуживание баз данных

Генерация структуры базы данных

11200

5500

3450

3950

4300

Генерация подсхемы базы данных

5350

3830

1540

1610

2060

Формирование баз данных

6260

7312

1700

1750

2180

Обработка наборов и записей базы данных

7900

9650

2050

2350

2670

Обслуживание базы данных в пакетном режиме

5320

4700

1030

1100

1260

Обслуживание базы данных в интерактивном режиме

15770

9900

3800

4400

6950

Манипулирование данными

26300

7200

8400

8670

9550

Организация поиска и поиск в базе данных

17270

17400

5230

5460

5480

Реорганизация базы данных

1575

*

130

190

220

Загрузки базы данных

12350

*

3150

2950

2780

3 Формирование и обработка файлов

Формирование последовательного файла

2500

2600

340

360

290

Сортировка файла

2100

1270

340

360

290

Автоматическая сортировка файлов

5200

1040

1150

930

Обслуживание файлов

2950

2900

520

540

420

Обработка файлов

3670

2420

750

800

720

Обработка файлов в диалоговом режиме

11830

5130

2400

2600

3050

Обработка группы файлов

26700

6660

4900

5300

6180

Наименование

(содержание) функций

Объем функций

(условных машинных команд)

ЕС ЭВМ ПВЭМ

СМ ЭВМ

С использованием среды разработки приложений

Delphi

(Borland)

C++ Builder (Borland)

Visual C++ (Micro-soft)

Управление файлами

21700

4100

5130

5380

5750

Формирование файла

7400

1200

1100

1080

1020

4 Генерация программ и ПС ВТ, а также настройка ПС ВТ

Генерация рабочих программ

7440

3680

4120

3360

Генерация программ по описания пользователей

16570

40000

10870

12330

9880

Формирование служебных таблиц

3690

4010

570

620

1070

Система генерации ПС ВТ

7880

5350

5120

5340

4980

Система настройки ПС ВТ

1080

3000

250

300

370

5 Управление ПС ВТ, компонентами ПС ВТ и внешними устройствами

Монитор ПС ВТ (управление работой компонентов)

4610

3110

350

360

740

Монитор системы (управление работой комплекса ПС ВТ)

14530

9100

3750

3880

7740

Управление внешними устройствами и объектами

14560

6500

6850

7340

5900

Обработка прерываний

6500

3850

890

730

540

Управление внешней памятью

1430

*

250

210

200

Обработка ошибочных и сбойных ситуаций

5200

*

430

410

410

Обеспечение интерфейса между компонентами

6860

*

730

750

970

6 Отладка прикладных программ, обмен информацией между МД и МЛ, вспомогательные программы функции

Таблица А.2

Наименование

(содержание) функций

Объем функций

(условных машинных команд)

ЕС ЭВМ ПВЭМ

СМ ЭВМ

С использованием среды разработки приложений

Delphi

(Borland)

C++ Builder (Borland)

Visual C++ (Micro-soft)

Отладка прикладных программ в интерактивном режиме

10180

*

4500

4700

4300

Обмен информацией между магнитным диском (МД) и (МЛ)

3450

900

*

*

*

Копирование наборов данных на МЛ и восстановление

5400

6600

*

*

*

Справка и обучение

4450

450

680

680

720

Вспомогательные и сервисные ПС

2430

850

460

490

580

7 Расчетные задачи, формирование и вывод на внешние носители (АЦПУ) документов сложной формы и файлов

Математическая статистика и прогнозирование

11180

9970

8370

9570

9320

Расчетные задачи (расчет режимов обработки)

34500

*

12600

15300

14800

Расчет показателей

2625

3720

410

500

460

Процессор отчетов

12550

7410

1070

1230

3200

Формирование и вывод на внешние носители

11400

6200

2650

2850

3500

Предварительная обработка и печать файлов

2160

2070

540

560

470

Графический вывод результатов

2030

*

300

310

480

Интерактивный редактор текста

8400

4750

3800

3910

4540

Измерение состояния ресурсов в интерактивной системе

2000

*

650

440

480

* - объем для данного типа ЭВМ определяется экспертным путем

Таблица А.3 - Укрупненные нормы времени на разработку программы (Тн) в зависимости от уточненного объема (Vnc) и группы сложности (чел.- дней)

Объем программы (строк усл.маш.команд)

1 группа сложности ПС ВТ

2 группа сложности ПС ВТ

3 группа сложности ПС ВТ

Номер нормы

1

2

3

4

5

200

300

400

500

600

700

800

900

1000

1200

1400

1600

1800

2000

2200

2400

2600

2800

3000

3200

3400

3600

3800

4000

4200

4400

4600

4800

5000

--

--

--

--

--

--

--

--

51

54

57

60

64

68

73

76

81

86

91

97

103

110

117

124

133

141

151

160

170

--

--

--

--

33

36

38

40

43

45

48

50

54

57

61

64

68

72

76

81

86

92

98

104

111

118

126

134

142

21

23

25

27

28

30

32

34

36

38

40

42

45

48

51

54

57

60

64

68

72

77

82

87

93

99

105

112

119

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

5500

6000

6500

7000

7500

8000

8500

9000

9500

10000

11000

12000

13000

14000

15000

16000

18000

20000

22000

24000

26000

28000

30000

32000

34000

36000

38000

40000

42000

44000

46000

48000

50000

182

194

206

220

235

252

268

288

307

327

349

374

399

427

456

487

520

556

595

636

679

727

775

830

888

950

1016

1087

1161

1242

1328

1420

1620

152

162

172

184

196

210

224

240

256

273

291

312

333

356

380

406

434

464

496

530

566

606

646

692

740

792

847

906

968

1035

1107

1184

1267

127

135

144

154

164

175

187

200

214

228

243

260

278

297

317

339

362

387

414

442

472

505

540

577

617

660

706

755

807

863

923

987

1056

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

Таблица А.4 - Характеристики групп сложности программных средств (ПС)

Группа сложности

Характеристика программного средства

1

ПС, обладающие одной или несколькими из следующих характеристик:

1 Наличие сложного интеллектуального языкового интерфейса с пользователем;

2 Режим работы в реальном времени;

3 Обеспечение телекоммуникационной обработки данных и управление удаленными объектами;

4 Машинная графика;

5 Многомашинные комплексы;

6 Обеспечение существенного распараллеливания вычислений

2

ПС, обладающие одной или несколькими из следующих характеристик:

1 Оптимизационные расчеты;

2 Обеспечение настройки ПС ВТ на изменения структур входных и выходных данных;

3 Настройка ПС на нестандартную конфигурацию технических средств;

4 Обеспечение переносимости ПС;

5 Реализация особо сложных инженерных и научных расчетов

3

ПС, не обладающие перечисленными выше характеристиками

Таблица А.5 - Дополнительные коэффициенты сложности программных средств (ПС)

Характеристика программного средства (ПС)

Значения Кслi

1 Функционирование ПС в расширенной операционной среде (связь с другими ПС)

0,08

2 Интерактивный доступ

0,06

3 Обеспечение хранения, ведения и поиска данных в сложных структурах

0,07

4 Наличие у ПС одновременно нескольких характеристик по таблице А.4:

2 характеристики;

3 характеристики;

свыше 3 характеристик

0,12

0,18

0,26

Таблица А.6 - Оценка значений среднего расхода материалов на разработку и отладку 100 строк кода применения программного средства

Наименование подсистемы

Средний расход материалов руб./100 строк кода

1 Общесистемные задачи: ведение линейных файлов, информационно-поисковые системы и информационно-справочные системы, сбор информации, ввод информации, расширение возможностей средств обработки данных, организация вычислительного процесса

380

2 Задачи расчетного характера

460

3 Оперативное управление производством, расчеты по ценообразованию

220

4 Техническая подготовка производства, транспортное, ремонтное, энергетическое и инструментальное обслуживание производства

250

5 Бухгалтерский учет, финансовые расчеты, учет пенсий и пособий, учет страховых операций, качество продукции

410

6 Управление кадрами

410

7 Технико-экономическое планирование

430

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

430

Коэффициент снижения среднего расхода материалов на разработку и отладку 100 строк кода рекомендуется использовать в пределах от 0,4 до 0,7.

Таблица А.7 - Оценка значений среднего машинного времени на отладку 100 строк исходного кода без применения программного средства

Наименование подсистемы

Средний расход машинного времени, ч/100 строк кода

1 Общесистемные задачи: ведение линейных файлов, информационно-поисковые системы и информационно-справочные системы, сбор информации, ввод информации, расширение возможностей средств обработки данных, организация вычислительного процесса

12

2 Задачи расчетного характера

15

3 Оперативное управление производством, расчеты по ценообразованию

7

4 Техническая подготовка производства, транспортное, ремонтное, энергетическое и инструментальное обслуживание производства

8

5 Бухгалтерский учет, финансовые расчеты, учет пенсий и пособий, учет страховых операций, качество продукции

13

6 Управление кадрами

13

7 Технико-экономическое планирование

13

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

13

ПРИЛОЖЕНИЕ Б

Текст программы

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

struct rab {

int ostch;

int oP;

bool prModif; // флаг отмечающий модификацию праздников

double NOD; // нужно отработать за месяц

bool NODmodif; // флаг модификация NOD

int kolD; // кол-во отработанных дежурств

};

std::vector<std::vector<int> > Gr; // конечный график дежурств

std::vector<rab>KD; // кол-во дежурств и параметры каждого человека

std::vector<rab>KDITAL;

int Shtraf;

int ShtrafForRek;

int GenPos;

size_t n;

size_t m;

std::vector<std::vector<int> > LabelsDay; // массив для обозначений приоритетных дней;

std::vector<int>Klv_Rab_v_sm; // массив хранящий требуемое кол-во рабочих в смену

std::vector<bool>WorkDay; // массив для хранения и обозначений не рабочих дней

std::vector<bool>HolDay; // массив для обозначения праздников

int StartDay;

int MCPC, MCPR; позиция указателя мыши

std::vector<TDateTime>masDDate;

int rozm;

std::vector<TDateTime>masRabDDate;

int rozmRD;

bool IsMouseButtonDown;

//штрафы меток

const int ShT1 = 10;

const int ShT2 = 20;

const int ShT3 = 100;

const int ShT4 = 25;

const int ShT5 = 5;

const int ShT6 = 5;

struct hourResult

int dn; // дневные часы

int nc; // ночные часы

int pr; // праздничные часы

};

TWindowState WSF13;

int TMPPS;

int TekStraf;

__int64 vari;

std::vector<int>DayStraf;

int GenDay;

std::vector<std::vector<int> > Graf;

std::vector<std::vector<int> > Grafik;

std::vector<std::vector<rab> > KDTemp;

std::vector<std::vector<int> > Mr;

std::vector<rab>KDtmp;

std::vector<bool>Mrb;

bool IsWork;

int DayS;

int prd;

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

//подготовка для генерации

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

void predGenerations() {

Shtraf = 0;

for (size_t i = 0; i < m; i++) {

KD[i].ostch = KD[i].kolD = KD[i].NOD = 0;

KD[i].prModif = KD[i].NODmodif = false;

}

int KolvoRabVSM[4];

KolvoRabVSM[0] = StrToInt(Form5->sEdit1->Text);

KolvoRabVSM[1] = StrToInt(Form5->sEdit2->Text);

KolvoRabVSM[2] = StrToInt(Form5->sEdit6->Text);

KolvoRabVSM[3] = StrToInt(Form5->sEdit7->Text);

Klv_Rab_v_sm.resize(Form11->kolDay * 2);

for (int Nday = 1; Nday <= Form11->kolDay * 2; Nday++) {

int CoutWorkers;

if (Nday % 2 == 0) {

if (WorkDay[(Nday / 2) - 1] == true)

Klv_Rab_v_sm[Nday - 1] = KolvoRabVSM[1];

else

Klv_Rab_v_sm[Nday - 1] = KolvoRabVSM[3];

}

else {

if (WorkDay[((Nday - 1) / 2)] == true)

Klv_Rab_v_sm[Nday - 1] = KolvoRabVSM[0];

else

Klv_Rab_v_sm[Nday - 1] = KolvoRabVSM[2];

}

}

for (int Nday = 1; Nday <= Form11->kolDay * 2; Nday++) {

int kr = Klv_Rab_v_sm[Nday - 1];

int klvd = 0;

double pl;

for (size_t i = 0; i < m; i++)

if (LabelsDay[i][Nday - 1] != 3)

klvd++;

pl = (double)kr / klvd;

for (size_t i = 0; i < m; i++)

if (LabelsDay[i][Nday - 1] != 3)

KD[i].NOD += pl;

}

for (size_t i = 0; i < m; i++) {

KD[i].NOD = SimpleRoundTo(KD[i].NOD, 0);

}

int j = 0;

for (DM->Workers->First(); !(DM->Workers->Eof); DM->Workers->Next()) {

if (DM->WorkersDolgnosti_kod->AsInteger == 3) {

KD[j].ostch = DM->WorkersPC->AsInteger;

KD[j].kolD = DM->WorkersRazn->AsInteger;

KD[j].NOD += DM->WorkersRazn->AsInteger;

j++;

}

}

KDITAL.resize(m);

for (size_t j = 0; j < m; j++) {

KDITAL[j].ostch = KD[j].ostch;

KDITAL[j].oP = 0;

KDITAL[j].kolD = KD[j].kolD;

KDITAL[j].NOD = KD[j].NOD;

}

Form11->PredgenerationRek();

}

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

void __fastcall TForm11::PredgenerationRek() {

DayStraf.resize(n);

vari = 0;

for (size_t i = 0; i < n; i++)

DayStraf[i] = 0;

KDtmp.resize(m);

Graf.resize(m);

for (size_t i = 0; i < m; ++i)

Graf[i].resize(n);

for (size_t i = 0; i < m; i++)

for (size_t j = 0; j < n; j++)

Graf[i][j] = 0;

Grafik.resize(m);

for (size_t i = 0; i < m; ++i)

Grafik[i].resize(n);

for (size_t i = 0; i < m; i++)

for (size_t j = 0; j < n; j++)

Grafik[i][j] = 0;

Mr.resize(n);

for (size_t i = 0; i < n; ++i)

Mr[i].resize(Klv_Rab_v_sm[i]);

for (size_t i = 0; i < n; i++)

for (int j = 0; j < Klv_Rab_v_sm[i]; j++)

Mr[i][j] = -1;

KDTemp.resize(n);

for (size_t i = 0; i < n; ++i)

KDTemp[i].resize(m);

for (size_t i = 0; i < n; i++)

for (size_t j = 0; j < m; j++) {

KDTemp[i][j].ostch = KD[j].ostch;

KDTemp[i][j].oP = 0;

KDTemp[i][j].kolD = KD[j].kolD;

KDTemp[i][j].NOD = KD[j].NOD;

KDTemp[i][j].prModif = KDTemp[i][j].NODmodif = false;

}

Mrb.resize(m);

for (size_t i = 0; i < m; i++)

Mrb[i] = false;

}

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

// используется для частичной генерации графиков

void __fastcall TForm11::dayGen(int start, int end) {

// сначала будни деньб ноч, очтальные день ночь.

for (int NDay = start; NDay <= end; NDay++) {

if (NDay != 1)

for (int i = 0; i < m; i++) {

KDTemp[NDay - 1][i].ostch = KDTemp[NDay - 2][i].ostch;

KDTemp[NDay - 1][i].oP = KDTemp[NDay - 2][i].oP;

KDTemp[NDay - 1][i].kolD = KDTemp[NDay - 2][i].kolD;

}

else

for (int i = 0; i < m; i++) {

KDTemp[NDay - 1][i].ostch = KDITAL[i].ostch;

KDTemp[NDay - 1][i].oP = 0;

KDTemp[NDay - 1][i].kolD = KDITAL[i].kolD;

}

bool IsDaySm;

int CoutWorkers = Klv_Rab_v_sm[NDay - 1];

if (NDay % 2 == 0)

IsDaySm = false;

else

IsDaySm = true;

int dan;

if (NDay % 2 == 0)

dan = NDay / 2;

else

dan = ((NDay - 1) / 2) + 1;

int KolRbVib = 0;

for (KolRbVib = 0; KolRbVib < CoutWorkers; KolRbVib++) {

int min = 10000;

for (size_t i = 0; i < m; i++)

if ((KDTemp[NDay - 1][i].kolD < min) &&

(KDTemp[NDay - 1][i].ostch == 0) && (LabelsDay[i][NDay - 1] != 3)) {

min = KDTemp[NDay - 1][i].kolD;

}

bool isPriorSet = false;

int kode = 0;

for (int ikm = 0; ikm < 3; ikm++) {

switch(ikm) {

case 0:

kode = 1;

break;

case 1:

kode = 0;

break;

case 2:

kode = 2;

break;

}

for (size_t i = 0; i < m; i++)

if ((KDTemp[NDay - 1][i].kolD == min) && (KDTemp[NDay - 1][i].ostch == 0) && (LabelsDay[i][NDay - 1] == kode)) {

KDTemp[NDay - 1][i].kolD++;

KDTemp[NDay - 1][i].NODmodif = true;

if (Form11->retBoolHolDay

(IsDaySm, EncodeDate(Form11->YearGen, Form11->MounthGen, dan))) {

KDTemp[NDay - 1][i].oP += 1;

KDTemp[NDay - 1][i].prModif = true;

}

if (IsDaySm)

KDTemp[NDay - 1][i].ostch = 3;

else

KDTemp[NDay - 1][i].ostch = 5;

Grafik[i][NDay - 1] = 1;

isPriorSet = true;

break;

}

if (isPriorSet)

break;

}

}

if (NDay != 1)

DayStraf[NDay - 1] = DayStraf[NDay - 2];

bool IsAllGreen = true;

int klv_green = 0;

for (size_t i = 0; i < m; i++) {

if ((Grafik[i][NDay - 1] == 1) && (LabelsDay[i][NDay - 1] != 1))

IsAllGreen = false;

if (LabelsDay[i][NDay - 1] == 1)

klv_green++;

}

if ((IsAllGreen) && (klv_green > 0)) {

DayStraf[NDay - 1] += 0;

}

else {

for (size_t i = 0; i < m; i++) {

// если зеленая метка не отмечена

if ((LabelsDay[i][NDay - 1] == 1) && (Grafik[i][NDay - 1] != 1))

DayStraf[NDay - 1] += ShT1;

// отмечена краная метка

if ((LabelsDay[i][NDay - 1] == 2) && (Grafik[i][NDay - 1] == 1))

DayStraf[NDay - 1] += ShT2;

if ((LabelsDay[i][NDay - 1] == 3) && (Grafik[i][NDay - 1] == 1))

DayStraf[NDay - 1] += ShT3;

if (KDTemp[NDay - 1][i].prModif) {

KDTemp[NDay - 1][i].prModif = false;

if (KDTemp[NDay - 1][i].oP > 0)

DayStraf[NDay - 1] += ShT5 * (KDTemp[NDay - 1][i].oP) +

(KDTemp[NDay - 1][i].oP * KDTemp[NDay - 1][i].oP);

}

if (KDTemp[NDay - 1][i].NODmodif == true) {

KDTemp[NDay - 1][i].NODmodif = false;

int b = int(KDTemp[NDay - 1][i].NOD);

if (KDTemp[NDay - 1][i].kolD > b)

DayStraf[NDay - 1] += int

(KDTemp[NDay - 1][i].kolD - KDTemp[NDay - 1][i].NOD) * ShT4;

}

}

}

////////////////////////////////////////////////////

// уменьшение времени до сл. выхода

for (size_t i = 0; i < m; i++)

if (KDTemp[NDay - 1][i].ostch > 0)

KDTemp[NDay - 1][i].ostch--;

}

}

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

// поиск решения перебором

int RekyrsionGeneration(int dayG, int newD, int Pred) {

TekStraf = 0;

if ((Klv_Rab_v_sm[dayG - 1] == 0) && (newD == -1) && (dayG - 1 != 0) && (dayG != Pred))

return 1;

bool IsDaySm;

if (dayG % 2 == 0)

IsDaySm = false;

else

IsDaySm = true;

int dan;

if (dayG % 2 == 0)

dan = dayG / 2;

else

dan = ((dayG - 1) / 2) + 1;

for (int i = 0; i < m; i++) {

Graf[i][dayG - 1] = 0;

}

switch(newD) {

case 0: {

for (int i = dayG - 1; i < n; i++)

for (int j = 0; j < Klv_Rab_v_sm[i]; j++)

Mr[i][j] = 0;

if (dayG - 1 == 0) {

for (size_t j = 0; j < m; j++) {

KDTemp[dayG - 1][j].ostch = KDITAL[j].ostch;

KDTemp[dayG - 1][j].oP = 0;

KDTemp[dayG - 1][j].kolD = KDITAL[j].kolD;

}

for (size_t j = 0; j < Klv_Rab_v_sm[dayG - 1]; j++)

Mr[dayG - 1][j] = j;

}

else {

for (size_t j = 0; j < m; j++) {

KDTemp[dayG - 1][j].ostch = KDTemp[dayG - 2][j].ostch;

KDTemp[dayG - 1][j].oP = KDTemp[dayG - 2][j].oP;

KDTemp[dayG - 1][j].kolD = KDTemp[dayG - 2][j].kolD;

}

for (size_t i = 0; i < m; i++) {

Mrb[i] = true;

if (KDTemp[dayG - 1][i].ostch > 0)

Mrb[i] = false;

}

for (size_t j = 0; j < Klv_Rab_v_sm[dayG - 1]; j++)

for (size_t i = 0; i < m; i++)

if (Mrb[i]) {

Mr[dayG - 1][j] = i;

Mrb[i] = false;

break;

}

}

break;

}

case -1

: {

if ((dayG - 1 == 0) || (dayG == StartDay)) {

if (dayG - 1 == 0)

for (size_t j = 0; j < m; j++) {

KDTemp[dayG - 1][j].ostch = KDITAL[j].ostch;

KDTemp[dayG - 1][j].oP = 0;

KDTemp[dayG - 1][j].kolD = KDITAL[j].kolD;

}

else if (dayG - 1 != 0)

for (size_t j = 0; j < m; j++) {

KDTemp[dayG - 1][j].ostch = KDTemp[dayG - 2][j].ostch;

KDTemp[dayG - 1][j].oP = KDTemp[dayG - 2][j].oP;

KDTemp[dayG - 1][j].kolD = KDTemp[dayG - 2][j].kolD;

}

bool IsNext = true;

if (Klv_Rab_v_sm[dayG - 1] > 0)

while (IsNext) {

Mr[dayG - 1][Klv_Rab_v_sm[dayG - 1] - 1]++;

IsNext = false;

for (int i = Klv_Rab_v_sm[dayG - 1] - 1; i > -1; i--)

if (i == 0) {

if (Mr[dayG - 1][i] > m - 1)

return-5;

}

else if (Mr[dayG - 1][i] > m - 1) {

Mr[dayG - 1][i] = 0;

Mr[dayG - 1][i - 1]++;

}

for (int i = 0; i < Klv_Rab_v_sm[dayG - 1]; i++)

if (KDTemp[dayG - 1][Mr[dayG - 1][i]].ostch > 0) {

IsNext = true;

break;

}

for (int i = 0; i < Klv_Rab_v_sm[dayG - 1] - 1; i++)

for (int j = i + 1; j < Klv_Rab_v_sm[dayG - 1]; j++)

if (Mr[dayG - 1][i] == Mr[dayG - 1][j]) {

IsNext = true;

break;

}

}

}

else {

for (size_t j = 0; j < m; j++) {

KDTemp[dayG - 1][j].ostch = KDTemp[dayG - 2][j].ostch;

KDTemp[dayG - 1][j].oP = KDTemp[dayG - 2][j].oP;

KDTemp[dayG - 1][j].kolD = KDTemp[dayG - 2][j].kolD;

}

bool IsNext = true;

// ShowMessage( - 1);

if (Klv_Rab_v_sm[dayG - 1] > 0)

while (IsNext) {

Mr[dayG - 1][Klv_Rab_v_sm[dayG - 1] - 1]++;

IsNext = false;

for (int i = Klv_Rab_v_sm[dayG - 1] - 1; i > -1; i--)

if (Mr[dayG - 1][0] > m - 1) {

return 1;

}

else if (Mr[dayG - 1][i] > m - 1) {

Mr[dayG - 1][i] = 0;

Mr[dayG - 1][i - 1]++;

}

for (int i = 0; i < Klv_Rab_v_sm[dayG - 1]; i++)

if (KDTemp[dayG - 1][Mr[dayG - 1][i]].ostch > 0) {

IsNext = true;

break;

}

for (int i = 0; i < Klv_Rab_v_sm[dayG - 1] - 1; i++)

for (int j = i + 1; j < Klv_Rab_v_sm[dayG - 1]; j++)

if (Mr[dayG - 1][i] == Mr[dayG - 1][j]) {

IsNext = true;

break;

}

}

}

break;

}

}

for (size_t j = 0; j < Klv_Rab_v_sm[dayG - 1]; j++) {

Graf[Mr[dayG - 1][j]][dayG - 1] = 1;

KDTemp[dayG - 1][Mr[dayG - 1][j]].kolD++;

KDTemp[dayG - 1][Mr[dayG - 1][j]].NODmodif = true;

if (Form11->retBoolHolDay(IsDaySm, EncodeDate(Form11->YearGen,

Form11->MounthGen, dan))) {

KDTemp[dayG - 1][Mr[dayG - 1][j]].oP += 1;

KDTemp[dayG - 1][Mr[dayG - 1][j]].prModif = true;

}

if (IsDaySm)

KDTemp[dayG - 1][Mr[dayG - 1][j]].ostch = 3;

else

KDTemp[dayG - 1][Mr[dayG - 1][j]].ostch = 5;

}

for (size_t j = 0; j < m; j++)

if (KDTemp[dayG - 1][j].ostch > 0)

KDTemp[dayG - 1][j].ostch--;

bool IsAllGreen = true;

int klv_green = 0;

for (size_t i = 0; i < m; i++) {

if ((Graf[i][dayG - 1] == 1) && (LabelsDay[i][dayG - 1] != 1))

IsAllGreen = false;

if (LabelsDay[i][dayG - 1] == 1)

klv_green++;

}

if ((IsAllGreen) && (klv_green > 0)) {

TekStraf += 0;

}

else {

for (int i = 0; i < m; i++) {

if ((LabelsDay[i][dayG - 1] == 1) && (Graf[i][dayG - 1] != 1))

TekStraf += ShT1;

if ((LabelsDay[i][dayG - 1] == 2) && (Graf[i][dayG - 1] == 1))

TekStraf += ShT2;

if ((LabelsDay[i][dayG - 1] == 3) && (Graf[i][dayG - 1] == 1))

TekStraf += ShT3;

if (KDTemp[dayG - 1][i].prModif) {

KDTemp[dayG - 1][i].prModif = false;

if (KDTemp[dayG - 1][i].oP > 0)

TekStraf += ShT5 * (KDTemp[dayG - 1][i].oP) +

(KDTemp[dayG - 1][i].oP * KDTemp[dayG - 1][i].oP);

}

if (KDTemp[dayG - 1][i].NODmodif == true) {

KDTemp[dayG - 1][i].NODmodif = false;

int b = int(KDTemp[dayG - 1][i].NOD);

if (KDTemp[dayG - 1][i].kolD > b)

TekStraf += int

(KDTemp[dayG - 1][i].kolD - KDTemp[dayG - 1][i].NOD) * ShT4;

}

}

}

if (dayG - 1 == 0)

DayStraf[dayG - 1] = TekStraf;

else

DayStraf[dayG - 1] = DayStraf[dayG - 2] + TekStraf;

if ((dayG == Pred) && (DayStraf[dayG - 1] == 0))

return-4;

if ((dayG == Pred) && (DayStraf[dayG - 1] < Shtraf))

return 3;

if (DayStraf[dayG - 1] >= Shtraf) // генерация продолжаеться с этим днем

return-1;

if (dayG != Pred)

return 0;

}

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

//экспорт в MS Excel

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

void __fastcall TForm13::toExcelCell(int c1, int c2, AnsiString data) {

try {

vVarCell = vVarSheet.OlePropertyGet("Cells").OlePropertyGet

("Item", c1, c2);

vVarCell.OlePropertySet("Value", data.c_str());

}

catch(...) {

}

}

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

void __fastcall TForm13::toExcelCellBorderWidth

(int c1, int c2, AnsiString data, double CWidth) {

try {

vVarCell = vVarSheet.OlePropertyGet("Cells").OlePropertyGet

("Item", c1, c2);

vVarCell.OlePropertySet("Value", data.c_str());

vVarCell.OlePropertyGet("Borders", 10).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 7).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 8).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 9).OlePropertySet("LineStyle", 1);

if (CWidth > 0)

vVarCell.OlePropertySet("ColumnWidth", CWidth);

}

catch(...) {

}

}

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

AnsiString __fastcall TForm13::IntToExcelChar(int a) {

AnsiString temp;

if (a > 0) {

if (a < 27)

temp = Char(64 + a);

else {

temp = "A";

temp += Char(64 + a - 26);

}

return temp;

}

return "A";

}

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

void __fastcall TForm13::toExcelRangeBorderWidth

(AnsiString data, double CWidth) {

vVarCell = vVarSheet.OlePropertyGet("Range", data.c_str());

vVarCell.OlePropertyGet("Borders", 10).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 7).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 8).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 9).OlePropertySet("LineStyle", 1);

if (CWidth > 0)

vVarCell.OlePropertySet("ColumnWidth", CWidth);

}

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

void __fastcall TForm13::toExcelRangeBorderM(AnsiString data, AnsiString Val) {

vVarCell = vVarSheet.OlePropertyGet("Range", data.c_str());

vVarCell.OleProcedure("Merge");

vVarCell.OlePropertySet("Value", Val.c_str());

vVarCell.OlePropertyGet("Borders", 10).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 7).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 8).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 9).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertySet("HorizontalAlignment", -4108);

vVarCell.OlePropertySet("VerticalAlignment", -4108);

}

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

void __fastcall TForm13::Rekvizit() {

Application->ProcessMessages();

AnsiString s = LMN[Form11->MounthGen - 1];

toExcelCell(14, 2, "Структурное подразделение: служба охраны");

toExcelCell(4, 32, "Утверждаю");

toExcelCell(5, 31, "Директор " + Form14->PRName);

toExcelCell(6, 31, "_________________" + Form14->DRName);

toExcelCell(7, 31, "_________________" + IntToStr(RetYear()) + " года.");

toExcelCell(10, 7, "Табель учета рабочего времени");

toExcelCell(11, 7, "службы охраны " + Form14->PRName);

toExcelCell(12, 7, "за " + s + " месяц " + Form11->YearGen + " года.");

Application->ProcessMessages();

}

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

void __fastcall TForm13::Shapka(int Smec) {

Application->ProcessMessages();

AnsiString s;

for (int i = 5; i <= Form11->kolDay + 4; i++) {

s = IntToExcelChar(i) + IntToStr(Smec + 1) + ":" + IntToExcelChar(i)

+ IntToStr(Smec + 3);

vVarCell = vVarSheet.OlePropertyGet("Range", s.c_str());

vVarCell.OleProcedure("Merge");

s = IntToStr(i - 4);

vVarCell.OlePropertySet("Value", s.c_str());

vVarCell.OlePropertySet("HorizontalAlignment", -4108);

vVarCell.OlePropertySet("VerticalAlignment", -4160);

vVarCell.OlePropertyGet("Borders", 10).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 7).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 8).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 9).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertySet("ColumnWidth", 2);

// vVarCell.OlePropertySet("RowHeight", 12.75);

}

toExcelCell(Smec, 1, "№");

toExcelCell(Smec + 1, 1, "п.п");

s = "A" + IntToStr(Smec) + ":A" + IntToStr(Smec + 3);

toExcelRangeBorderWidth(s.c_str(), 2.43);

toExcelCell(Smec, 2, "Фамилия,");

toExcelCell(Smec + 1, 2, "имя, ");

toExcelCell(Smec + 2, 2, "отчество");

s = "B" + IntToStr(Smec) + ":B" + IntToStr(Smec + 3);

toExcelRangeBorderWidth(s.c_str(), 12.57);

toExcelCell(Smec, 3, "Должность");

s = "C" + IntToStr(Smec) + ":C" + IntToStr(Smec + 3);

toExcelRangeBorderWidth(s.c_str(), 9);

toExcelCell(Smec, 4, "Время ");

toExcelCell(Smec + 1, 4, "работы");

s = "D" + IntToStr(Smec) + ":D" + IntToStr(Smec + 3);

toExcelRangeBorderWidth(s.c_str(), 8.71);

s = "E" + IntToStr(Smec) + ":" + IntToExcelChar(Form11->kolDay + 4)

+ IntToStr(Smec);

vVarCell = vVarSheet.OlePropertyGet("Range", s.c_str());

vVarCell.OleProcedure("Merge");

vVarCell.OlePropertySet("Value", "Числа месяца");

vVarCell.OlePropertyGet("Borders", 10).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 7).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 8).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertyGet("Borders", 9).OlePropertySet("LineStyle", 1);

vVarCell.OlePropertySet("HorizontalAlignment", -4108);

vVarCell.OlePropertySet("VerticalAlignment", -4108);

s = IntToExcelChar(Form11->kolDay + 5) + IntToStr(Smec)

+ ":" + IntToExcelChar(Form11->kolDay + 5) + IntToStr(Smec + 3);

toExcelCell(Smec + 1, Form11->kolDay + 5, "Дней");

toExcelRangeBorderWidth(s.c_str(), 4.43);

toExcelCell(Smec, Form11->kolDay + 6, "Расчетная");

toExcelCell(Smec + 1, Form11->kolDay + 6, "норма");

s = IntToExcelChar(Form11->kolDay + 6) + IntToStr(Smec)

+ ":" + IntToExcelChar(Form11->kolDay + 9) + IntToStr(Smec + 1);

toExcelRangeBorderWidth(s.c_str(), -1);

toExcelCell(Smec + 2, Form11->kolDay + 6, "дн.");

toExcelCell(Smec + 3, Form11->kolDay + 6, "час.");

s = IntToExcelChar(Form11->kolDay + 6) + IntToStr(Smec + 2)

+ ":" + IntToExcelChar(Form11->kolDay + 6) + IntToStr(Smec + 3);

toExcelRangeBorderWidth(s.c_str(), 3.57);

toExcelCell(Smec + 2, Form11->kolDay + 7, "ноч.");

toExcelCell(Smec + 3, Form11->kolDay + 7, "час.");

s = IntToExcelChar(Form11->kolDay + 7) + IntToStr(Smec + 2)

+ ":" + IntToExcelChar(Form11->kolDay + 7) + IntToStr(Smec + 3);

toExcelRangeBorderWidth(s.c_str(), 3.43);

toExcelCell(Smec + 2, Form11->kolDay + 8, "празд.");

toExcelCell(Smec + 3, Form11->kolDay + 8, "час.");

s = IntToExcelChar(Form11->kolDay + 8) + IntToStr(Smec + 2)

+ ":" + IntToExcelChar(Form11->kolDay + 8) + IntToStr(Smec + 3);

toExcelRangeBorderWidth(s.c_str(), 5);

toExcelCell(Smec + 2, Form11->kolDay + 9, "Итого");

s = IntToExcelChar(Form11->kolDay + 9) + IntToStr(Smec + 2)

+ ":" + IntToExcelChar(Form11->kolDay + 9) + IntToStr(Smec + 3);

toExcelRangeBorderWidth(s.c_str(), 4.57);

AnsiString sqwe = "A1:AN" + IntToStr(10 * 2 + 19 + 4);

vVarCell = vVarSheet.OlePropertyGet("Range", sqwe.c_str());

vVarCell.OlePropertyGet("Font").OlePropertySet("Size", StrToInt(eWidth));

// vVarCell.OlePropertyGet("Font").OlePropertySet("Name", "Arial Cyr");

vVarCell.OlePropertyGet("Font").OlePropertySet("Name", eFont.c_str());

Application->ProcessMessages();

}

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

void __fastcall TForm13::StrInExcel(int GridStr, int ExcelStr) {

AnsiString s, s1, sd;

toExcelCell(ExcelStr, 1, ZColorStringGrid2->Cells[0][GridStr]);

toExcelRangeBorderWidth("A" + IntToStr(ExcelStr) + ":A" + IntToStr

(ExcelStr + 1), 0);

s = ZColorStringGrid2->Cells[1][GridStr];

s1 = "";

for (int i = s.Length() - 3; i <= s.Length(); i++)

s1 += s[i];

s.Delete(s.Length() - 4, s.Length());

toExcelCell(ExcelStr, 2, s);

toExcelCell(ExcelStr + 1, 2, s1);

toExcelRangeBorderWidth("B" + IntToStr(ExcelStr) + ":B" + IntToStr(ExcelStr + 1), 0);

sd = ZColorStringGrid2->Cells[2][GridStr];

if (sd == "Начальник службы охраны") {

toExcelCell(ExcelStr, 3, "Нач.сл.");

toExcelCell(ExcelStr + 1, 3, "охраны");

}

else if (sd == "Заместитель начальника службы охраны") {

toExcelCell(ExcelStr, 3, "Зам.нач.");

toExcelCell(ExcelStr + 1, 3, "охраны");

}

else if (sd == "Старший охранник") {

toExcelCell(ExcelStr, 3, "Старший");

toExcelCell(ExcelStr + 1, 3, "охранник");

}

else

toExcelCell(ExcelStr, 3, sd);

toExcelRangeBorderWidth("C" + IntToStr(ExcelStr) + ":C" + IntToStr

(ExcelStr + 1), 0);

toExcelCellBorderWidth(ExcelStr, 4, ZColorStringGrid2->Cells[3][GridStr],

0);

toExcelCellBorderWidth(ExcelStr + 1, 4,

ZColorStringGrid2->Cells[3][GridStr + 1], 0);

toExcelCell(ExcelStr, Form11->kolDay + 5,

ZColorStringGrid2->Cells[Form11->kolDay + 4][GridStr]);

toExcelRangeBorderWidth(IntToExcelChar(Form11->kolDay + 5) + IntToStr

(ExcelStr) + ":" + IntToExcelChar(Form11->kolDay + 5) + IntToStr(ExcelStr + 1),0);

toExcelCell(ExcelStr, Form11->kolDay + 6,

ZColorStringGrid2->Cells[Form11->kolDay + 5][GridStr]);

toExcelRangeBorderWidth(IntToExcelChar(Form11->kolDay + 6) + IntToStr

(ExcelStr) + ":" + IntToExcelChar(Form11->kolDay + 6) + IntToStr(ExcelStr + 1),0);

toExcelCell(ExcelStr, Form11->kolDay + 7,

ZColorStringGrid2->Cells[Form11->kolDay + 6][GridStr]);

toExcelRangeBorderWidth(IntToExcelChar(Form11->kolDay + 7) + IntToStr

(ExcelStr) + ":" + IntToExcelChar(Form11->kolDay + 7) + IntToStr(ExcelStr + 1),0);

toExcelCell(ExcelStr, Form11->kolDay + 8,

ZColorStringGrid2->Cells[Form11->kolDay + 7][GridStr]);

toExcelRangeBorderWidth(IntToExcelChar(Form11->kolDay + 8) + IntToStr

(ExcelStr) + ":" + IntToExcelChar(Form11->kolDay + 8) + IntToStr(ExcelStr + 1),0);

toExcelCell(ExcelStr, Form11->kolDay + 9,

ZColorStringGrid2->Cells[Form11->kolDay + 8][GridStr]);

toExcelRangeBorderWidth(IntToExcelChar(Form11->kolDay + 9) + IntToStr

(ExcelStr) + ":" + IntToExcelChar(Form11->kolDay + 9) + IntToStr(ExcelStr + 1),0);

for (int i = 5; i < Form11->kolDay + 5; i++) {

toExcelCellBorderWidth(ExcelStr, i,

ZColorStringGrid2->Cells[i - 1][GridStr], 0);

toExcelCellBorderWidth(ExcelStr + 1, i,

ZColorStringGrid2->Cells[i - 1][GridStr + 1], 0);

}

}

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

void __fastcall TForm13::DATA() {

int pc = 0;

int prc = 0;

int prcList = 70 / (KLV_List_GY + KLV_List_TY);

vVarSheet = vVarSheets.OlePropertyGet("Item", 1);

Rekvizit();

Shapka(15);

for (int i = 4, g = 19; i < 24 && i < ZColorStringGrid2->RowCount;

i += 2, g += 2) {

StrInExcel(i, g);

pc = i;

prc = g;

}

ProgressBar1->Position += prcList;

Application->ProcessMessages();

for (int i = 2; i <= KLV_List_TY; i++) {

vVarSheet = vVarSheets.OlePropertyGet("Item", i);

toExcelCell(1, 1, "Страница " + IntToStr(i));

Shapka(5);

for (int j = pc + 2, g = 9, kz = 0; j < ZColorStringGrid2->RowCount;

j += 2, g += 2, kz++) {

StrInExcel(j, g);

pc = j;

prc = g;

if (kz == 15)

break;

}

ProgressBar1->Position += prcList;

Application->ProcessMessages();

}

toExcelCell(prc + 4, 14,

"Начальник охраны " + Form14->OXRName);

vVarSheet = vVarSheets.OlePropertyGet("Item", KLV_List_TY + 1);

RekvizitGY();

ShapkaGY(15);

for (int i = 2, g = 17; i < 22 && i < ZColorStringGrid1->RowCount;

i += 2, g += 2) {

StrInExcelGY(i, g);

pc = i;

prc = g;

}

ProgressBar1->Position += prcList;

Application->ProcessMessages();

for (int i = KLV_List_TY + 2; i <= KLV_List_GY + KLV_List_TY; i++) {

vVarSheet = vVarSheets.OlePropertyGet("Item", i);

toExcelCell(1, 1, "Страница " + IntToStr(i - KLV_List_TY));

ShapkaGY(5);

for (int j = pc + 2, g = 7, kz = 0; j < ZColorStringGrid1->RowCount;

j += 2, g += 2, kz++) {

StrInExcelGY(j, g);

pc = j;

prc = g;

if (kz == 15)

break;

}

ProgressBar1->Position += prcList;

Application->ProcessMessages();

}

toExcelCell(prc + 4, 14,

"Начальник охраны " + Form14->OXRName);

}

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

void __fastcall TForm13::PS() {

vVarSheet.OlePropertyGet("PageSetup").OlePropertySet("LeftMargin", 0);

vVarSheet.OlePropertyGet("PageSetup").OlePropertySet("RightMargin", 0);

vVarSheet.OlePropertyGet("PageSetup").OlePropertySet("TopMargin", 0);

vVarSheet.OlePropertyGet("PageSetup").OlePropertySet("BottomMargin", 0);

vVarSheet.OlePropertyGet("PageSetup").OlePropertySet("HeaderMargin", 0);

vVarSheet.OlePropertyGet("PageSetup").OlePropertySet("FooterMargin", 0);

vVarSheet.OlePropertyGet("PageSetup").OlePropertySet("Orientation", 2);

}

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

void __fastcall TForm13::UnitExcel() {

AnsiString s = "";

vVarApp = CreateOleObject("Excel.Application");

IsActiv = true;

fStart = true;

if (Visibl)

vVarApp.OlePropertySet("Visible", true);

vVarBooks = vVarApp.OlePropertyGet("Workbooks");

vVarApp.OlePropertySet("SheetsInNewWorkbook", KLV_List_TY + KLV_List_GY);

vVarBooks.OleProcedure("Add");

vVarBook = vVarBooks.OlePropertyGet("Item", 1);

vVarSheets = vVarBook.OlePropertyGet("Worksheets");

for (int i = 1; i <= KLV_List_TY; i++) {

s = "ТУРВ лист " + IntToStr(i);

vVarSheet = vVarSheets.OlePropertyGet("Item", i);

vVarSheet.OlePropertySet("Name", s.c_str());

PS();

}

for (int i = KLV_List_TY + 1; i <= KLV_List_TY + KLV_List_GY; i++) {

s = "ГУРВ лист " + IntToStr(i - KLV_List_TY);

vVarSheet = vVarSheets.OlePropertyGet("Item", i);

vVarSheet.OlePropertySet("Name", s.c_str());

vVarSheet.OlePropertyGet("PageSetup").OlePropertySet("LeftMargin", 2.5);

PS();

}

vVarSheet = vVarSheets.OlePropertyGet("Item", 1); }

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

void __fastcall TForm13::SaveExcel() {

if (fStart) {

// Отключить вывод сообщений с вопросами типа "Заменить файл..."

vVarApp.OlePropertySet("DisplayAlerts", false);

// Сохранить книгу в папке по умолчанию (Мои документы)

// или в файле по указанию

AnsiString vAsCurDir1 = FileName;

vVarApp.OlePropertyGet("Workbooks").OlePropertyGet("Item", 1)

.OleProcedure("SaveAs", vAsCurDir1.c_str());

// Закрыть открытое приложение Excel

ProgressBar1->Position = 100;

ShowMessage("Документ успешно создан!");

if (IsVisibleDocument) {

vVarApp.OlePropertySet("Visible", true);

}

else

vVarApp.OleProcedure("Quit");

fStart = false;

}

}

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

void __fastcall TForm13::ExitExcel() {

if (fStart) {

// vVarApp.OleProcedure("Close");

vVarApp.OleProcedure("Quit");

fStart = false;

}

}

ПРИЛОЖЕНИЕ В

Диаграммы UML

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

Рисунок В.2 - Общий принцип генерации расписания

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


Подобные документы

  • Определение общих требований к организации автоматизированного рабочего места. Создание модели автоматизированного рабочего места менеджера фирмы "Информстиль". Разработка базы данных и описание алгоритма программы по учету продаж вычислительной техники.

    дипломная работа [2,9 M], добавлен 03.07.2015

  • Анализ предметной области и описание основных функциональных подсистем автоматизированного рабочего места администратора кинотеатра "Мир". Разработка инфологической модели базы данных и заполнение форм данных. Обеспечение безопасности и доступа к данным.

    курсовая работа [4,4 M], добавлен 27.12.2014

  • Общие сведения по использованию базы данных. Описание предметной области программы. Выбор средств программирования для разработки приложений, технология работы. Оценка автоматизированного рабочего места продавца компакт-дисков в среде Borland C++ Builder.

    курсовая работа [1,3 M], добавлен 24.12.2010

  • Автоматизация учета рабочего времени сотрудников войсковой части №63180. Проектирование баз данных, алгоритм решения задачи, описание архитектуры программы и реализация функционального назначения программы. Расчет себестоимости программного продукта.

    дипломная работа [1,7 M], добавлен 12.09.2016

  • Анализ использования рабочего времени. Создание базы данных для хранения и обработки информации. Управление пользователями. Интерфейс программы. Работа со списком мероприятий, с модулями "задачи", "заявки", "регламенты", "события" и "отчётность".

    дипломная работа [3,3 M], добавлен 19.01.2017

  • Возможности создания баз данных средствами программного продукта SQL. Изучение предметной области и разработка проекта базы данных по учету студентов "Журнал классного руководителя". Задачи реализации программного средства, его тестирование и отладка.

    курсовая работа [3,7 M], добавлен 07.12.2012

  • Разработка базы данных с целью автоматизации процессов составления, ведения и распространения информации об расписании занятий в спортивном комплексе "Маяк". Анализ предметной области. Разработка алгоритмов работы программы и приложения пользователя.

    дипломная работа [1,0 M], добавлен 12.07.2015

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

    курсовая работа [2,1 M], добавлен 15.06.2014

  • Общее описание предметной области и бизнес-процессов. Описание подразделов "Продажа продукции" с помощью Use Case Diagram. Прецедент операции над данными справочников. Создание базы данных в SQL Server. Проектировнаие таблиц, отчетов и запросов.

    курсовая работа [337,2 K], добавлен 23.04.2015

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

    дипломная работа [644,5 K], добавлен 19.02.2013

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