Разработка базы данных для автоматизированного составления графика дежурств и учёта рабочего времени службы охраны предприятия
Описание предметной области и разработка программы для автоматизированного составления графика и табеля по учету рабочего времени службы охраны предприятия средствами 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 |
|
200300400500600700800900100012001400160018002000220024002600280030003200340036003800400042004400460048005000 |
----------------515457606468737681869197103110117124133141151160170 |
--------33363840434548505457616468727681869298104111118126134142 |
2123252728303234363840424548515457606468727782879399105112119 |
1234567891011121314151617181920212223242526272829 |
|
550060006500700075008000850090009500100001100012000130001400015000160001800020000220002400026000280003000032000340003600038000400004200044000460004800050000 |
1821942062202352522682883073273493743994274564875205565956366797277758308889501016108711611242132814201620 |
1521621721841962102242402562732913123333563804064344644965305666066466927407928479069681035110711841267 |
1271351441541641751872002142282432602782973173393623874144424725055405776176607067558078639239871056 |
303132333435363738394041424344454647484950515253545556575859606162 |
Таблица А.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,120,180,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