Министерство образования инауки
Республики Казахстан
Карагандинский государственныйтехнический университет
КУРСОВАЯ РАБОТА
по дисциплине Разработка базданных
Тема: Разработка программного обеспеченияпо управлению базой данных «График учета рабочего времени на шахте им. Т.Кузембаева
2009
Содержание
Введение
Задание
1. Выбор СУБД
2. Концептуальная модель
3. Логическая модель данных
4. Нормализация отношений
5. Основная часть
6. SQL – запросы
7. Интерфейс программы
8. Отчеты
Заключение
Список используемых источников
Введение
Современная жизнь немыслима без эффективного управления. Важнойкатегорией являются системы обработки информации, от которых во многом зависитэффективность работы любого предприятия ли учреждения. Такая система должна:
· обеспечивать получение общих и/илидетализированных отчетов по итогам работы;
· позволять легко определятьтенденции изменения важнейших показателей;
· обеспечивать получение информации,критической по времени, без существенных задержек;
· выполнять точный и полный анализданных.
Современные СУБД в основном являются приложениями Windows, так как данная среда позволяет более полно использовать возможностиперсональной ЭВМ, нежели среда DOS. Снижение стоимости высокопроизводительных ПКобусловил не только широкий переход к среде Windows, гдеразработчик программного обеспечения может в меньше степени заботиться ораспределении ресурсов, но также сделал программное обеспечение ПК в целом иСУБД в частности менее критичными к аппаратным ресурсам ЭВМ.
Среди наиболее ярких представителей систем управления базами данных можноотметить: Lotus Approach, Microsoft Access, Borland dBase, Borland Paradox, Microsoft Visual FoxPro,Microsoft Visual Basic,а также баз данных Microsoft SQL Serverи Oracle, используемые в приложениях, построенных потехнологии «клиент-сервер». Фактически, у любой современной СУБД существуетаналог, выпускаемый другой компанией, имеющий аналогичную область применения ивозможности, любое приложение способно работать со многими форматамипредставления данных, осуществлять экспорт и импорт данных благодаря наличиюбольшого числа конвертеров. Общепринятыми, также, являются технологи,позволяющие использовать возможности других приложений, например, текстовых процессоров,пакетов построения графиков и т.п., и встроенные версии языков высокого уровня(чаще – диалекты SQL и/или VBA) и средства визуальногопрограммирования интерфейсов разрабатываемых приложений. Поэтому уже не имеетсущественного значения, на каком языке и на основе какого пакета написаноконкретное приложение, и какой формат данных в нем используется. Более того,стандартом «де-факто» стала «быстрая разработка приложений» или RAD(от английского Rapid Application Development), основанная на широко декларируемом в литературе «открытом подходе», тоесть необходимость и возможность использования различных прикладных программ итехнологий для разработки более гибких и мощных систем обработки данных.Поэтому в одном ряду с «классическими» СУБД все чаще упоминаются языкипрограммирования Visual Basic 4.0 и Visual C++, которые позволяют быстро создавать необходимыекомпоненты приложений, критичные по скорости работы, которые трудно, а иногданевозможно разработать средствами «классических» СУБД. Современный подход куправлению базами данных подразумевает также широкое использование технологии«клиент-сервер».
Таким образом, на сегодняшний день разработчик не связан рамкамикакого-либо конкретного пакета, а в зависимости от поставленной задачи можетиспользовать самые разные приложения. Поэтому, более важным представляетсяобщее направление развития СУБД и других средств разработки приложений внастоящее время.
Актуальность задачи составления расписания обусловлена важностьюпрактических приложений. Как и другие разделы прикладной математики, методытеории расписаний позволяют решать задачи, возникающие экономике и управлении,информатике и электротехнике, исследовании операций и организациипроизводственных процессов. Задачи составления расписаний являются задачамиоптимизации и носят самый общий характер. Они возникают там, где существуетвозможность выбора той или иной очередности выполнения работ на производстве,при составлении расписания движения поездов и самолетов, обслуживании клиентовв сервисных системах, составление расписаний занятий в учебных заведениях ит.д.
Задание
В рамках данной курсовой работы необходимо разработать программноеобеспечение по управлению базой данных « График учета рабочего времени на шахтеим. Т. Кузембаева в цехе «Автоматика»» с использованием СУБД. Программноеобеспечение должно обеспечивать просмотр, редактирование, вставку записей базыданных, формирование запросов и отчетов. В качестве исходных данных начальникомвышеуказанного цеха были переданы готовые графики нескольких прошедших месяцев.По этим графикам следует установить закономерности и правила их составления,для осуществления этой задачи программным путем. Приложение должно учитыватьвозможный отпуск у рабочего, а также государственные праздники. Приложениедолжно предусматривать возможность сохранения сгенерированных графиков в БД.
Программный продукт должен:
1. Хранить информацию о рабочих цеха.
2. Хранить информацию огосударственных праздниках
3. Сохранять и загружатьсгенерированные графики
4. Автоматически генерировать графикучета рабочего времени для выбранного пользователем месяца.
5. Сообщать об ошибке, возникающей вслучае недостаточного количества рабочих для выполнения определенных функций.
6. Отображать информацию о выходных ипраздничных днях, отпусках, а также сменах каждого рабочего
Составление графика учета рабочего времени имеет следующие правила:
· Выходить на работу в выходной деньв первую смену могут только рабочие, имеющие статус «Вентиляторщик, работающийв выходные»
· Дежурить (ходить не в первуюсмену) могут только рабочие, имеющие статус «Дежурный»
· Остальные рабочие выходят только впервую смену по будним и не праздничным дням
· Выделить визуально рабочих состатусом статус «Вентиляторщик, работающий в выходные» и «Вентиляторщик, не работающийв выходные»
· Каждый день в каждую смену долженвыходить хотя бы один рабочий
· Желательное максимальноеколичество рабочих дней без выходных – 5
· После четвертой смены нельзявыходить сразу в первую
· Одному рабочему нежелательнодежурить только в третью и четвертую смены (т.к. выход в эти смены более высокооплачивается). Необходимо распределить такие дежурства более равномерно
· Количество рабочих дней в месяцравно количеству дней в месяце без субботы, воскресенья, а также государственныхпраздников
· После четвертой смены желательнопредусмотреть два выходных
1. Выбор СУБД
Разработка проекта проводится в Borland Delphi. В качестве СУБД былвыбран MS Access как пакет MS Office, который в настоящее время сильно распространен натерритории нашего государства. В связи с тем что приложение разрабатывается длянужд стороннего лица, то целесообразно применять MS Accessв качестве СУБД, что несомненно облегчит понимание приложения пользователем.Данный выбор позволит избежать проблем, которые бы возникли при развертывании MS SQL сервера. MS SQL требуетадминистрирования (нужно выполнять какие то административные действия, типарезервного копирования и т. п., когда для Access нужно просто скопироватьфайл), которое на предприятии не будет проводиться, и сервер оно на многотяжелее в использовании, для обычных пользователей.
Для работы с базами данных в Delphi есть несколько наборовкомпонентов. Так как Microsoft встроила в свои продукты разработки технологиюдоступа к данным ADO (Active Data Objects), для реализации настоящего приложения используются компоненты сзакладки ADO. Работа с базами данных Access идетчерез специальную надстройку DAO, которая устанавливается на компьютер вместе с Office,либо как отдельная установка. Для доступа к базам данных MS Access используется ADO драйвер «Microsoft Jet 4.0 OLE DB Provider».
Microsoft Access обладает всеми чертами классической системы управлениябазами данных (СУБД). Access – это не только мощная, гибкая и простая виспользовании СУБД, но и система для разработки приложений баз данных. К числунаиболее мощных средств Access относятся средства разработки объектов – мастера,которые можно использовать для создания таблиц, запросов, различных типов форми отчетов. В Microsoft Access включены мастера, помогающие производить анализструктуры данных, импортировать электронные таблицы и текстовые данные,повышать быстродействие приложения, создавать и настраивать одно из более, чемдвадцати типов приложений с использованием встроенных шаблонов. Чтобы полностьюавтоматизировать работу приложения, можно использовать макросы для связыванияданных с формами и отчетами. Большинство приложений можно создать, не написавни единой строки программного кода. Однако при необходимости построениядействительно сложного приложения можно использовать язык программирования –Visual Basic для приложений.
К областям применения Microsoft Access можно отнести следующие:
· в малом бизнесе (бухгалтерский учет, ввод заказов, ведение информациио клиентах, ведение информации о деловых контактах);
· в работе по контракту (разработка внутриотраслевых приложений, разработкамежотраслевых приложений);
· в крупных корпорациях (приложения для рабочих групп, системы обработкиинформации);
· в качестве персональной СУБД (справочник по адресам, ведение инвестиционногопортфеля, поваренная книга, каталоги книг, пластинок, видеофильмов и т. п.).
Рассмотрим основные определения, связанные с разработкой баз данных.Краткий словарь терминов приведен в приложении 1.
База данных (БД, data base, DB) –совокупность взаимосвязанных данных, используемых под управлением СУБД.
В самом общем смысле база данных – это набор записей и файлов,организованных специальным образом.
Система управления базой данных (СУБД, DBMS) – программнаясистема, обеспечивающая определение физической и логической структуры базыданных, ввод информации и доступ к ней.
Возможности СУБД: система управления базами данных предоставляетвозможность контролировать задание структуры и описание данных, работу с ними иорганизацию коллективного пользования информацией. СУБД также существенноувеличивает возможности и облегчает каталогизацию и ведение больших объемовхранящейся в многочисленных таблицах информации. СУБД включает в себя триосновных типа функций: определение (задание структуры и описание) данных, обработкиданных и управление данными.
Основные функции СУБД следующие:
Определение данных. Определяется,какая именно информация будет храниться в базе данных, задается структураданных и их тип (например, количество цифр или символов), а также указываетсято, как данные будут связаны между собой. Задаются форматы и критерии проверкиданных.
Обработка данных. Данные можнообрабатывать самыми различными способами. Можно выбирать любые поля,фильтровать и сортировать данные. Можно объединять данные с другой связаннойинформацией и вычислять итоговые значения.
Управление данными. Указываютсяправила доступа к данным, их корректировки и добавления новой информации. Можнотакже определить правила коллективного пользования данными.
2. Концептуальнаямодель
В приложении представленаконцептуальная модель настоящей базы данных.
Концептуальная модель (англ.conceptual model) — это определённое множество понятий и связей междуними, являющихся смысловой структурой рассматриваемой предметной области.
Концептуальная модель — модель предметной области, состоящей из перечня взаимосвязанных понятий,используемых для описания этой области, вместе со свойствами ихарактеристиками, классификацией этих понятий, по типам, ситуациям, признакам вданной области и законов протекания процессов в ней. (Толковый словарь поискусственному интеллекту).
3. Логическаямодель
Логическая модель данныхотражает логические связи между сущностями базы данных. Ниже представленалогическая модель базы данных «График учета рабочего времени на шахте им. Т. Кузембаева в цехе«Автоматика» ».
Информацию о рабочих цехасодержит таблица «Рабочие», содержащая следующие атрибуты:
1. «ID» — уникальный идентификаторрабочего, выполняющий роль первичного ключа (счетчик);
2. «WokerName» — ФИО рабочего (текстовый);
3. «TabNumber» — табельный номар рабочего(числовой)
4. «LinkProfession» — код профессии рабочего (числовой),является вторичным ключом поля «ID»таблицы «Профессия»;
5. «LinkStatus» — код статуса рабочего (числовой),является вторичным ключом поля «ID»таблицы «Статус»;
Информацию о профессиирабочего хранится в таблице «Профессия», содержащая следующие атрибуты:
1. «ID» — уникальный идентификаторпрофессии, выполняющий роль первичного ключа (счетчик);
2. «NameProfession» — название профессии (текстовый);
Информацию о статусерабочего хранится в таблице «Статус», содержащая следующие атрибуты:
1. «ID» — уникальный идентификатор статуса,выполняющий роль первичного ключа (счетчик);
2. «NameStatus» — название статуса (текстовый);
Информацию об отпускахрабочих содержит таблица «Отпуски», содержащая следующие атрибуты:
1. «ID» — уникальный идентификаторрабочего, выполняющий роль первичного ключа (счетчик);
2. «LinkWoker» — код ФИО рабочего (числовой),является вторичным ключом поля «ID»таблицы «Рабочие»;
3. «DateBegin» — дата начала отпуска (дата/время)
4. «Length» — продолжительность отпуска(числовой);
Информацию о сохраненныхграфиках содержит таблица «Сохраненные_ графики», содержащая следующиеатрибуты:
1. «ID» — уникальный идентификаторсохранения, выполняющий роль первичного ключа (счетчик);
2. «NameGraphic» — название сохраненного графика(текстовый);
3. «DateOfSave» — дата сохранения графика(дата/время);
4. «LinkMonthNum» — код месяца сохраненного графика(числовой), является вторичным ключом поля «ID» таблицы «Месяцы»;
5. «YearNum» — год сохраненного графика(числовой);
Информацию о графиках содержиттаблица «Графики», содержащая следующие атрибуты:
1. «ID» — уникальный идентификатор графика,выполняющий роль первичного ключа (счетчик);
2. «LinkSaveID» — код номера сохранения графика(числовой), является вторичным ключом поля «ID» таблицы «Сохраненные графики»;
3. «DateOfCell» — дата ячейки (дата/время);
4. «LinkWoker» — код ФИО рабочего (числовой),является вторичным ключом поля «ID»таблицы «Рабочие»;
5. «LinkTypeOfDay» — код типа дня (числовой), являетсявторичным ключом поля «ID»таблицы «Типы_дней»;
Информацию о месяцесохраненного графика хранится в таблице «Месяцы», содержащая следующиеатрибуты:
1. «ID» — уникальный идентификатор месяца,выполняющий роль первичного ключа (счетчик);
2. «MonthName» — название месяца (текстовый);
Информацию выходных дняхв связи с государственными праздниками хранится в таблице «Выходные»,содержащая следующие атрибуты:
1. «ID» — уникальный идентификаторвыходного дня, выполняющий роль первичного ключа (счетчик);
2. «DateCelebrate» — дата выходного дня (дата/время);
3. «LinkName» — код названия выходного дня всвязи с праздником (числовой), является вторичным ключом поля «ID» таблицы «Праздники»;
Информацию названиигосударственных праздниках хранится в таблице «Праздники», содержащая следующиеатрибуты:
1. «ID» — уникальный идентификатор праздника,выполняющий роль первичного ключа (счетчик);
2. «Title» — название государственногопраздника (текстовый);
Наглядно связь междутаблицами изображена на Рисунке 3.1
/>
Рисунок 3.1 – Связи междутаблицами БД «График учета рабочего времени на шахте им. Т. Кузембаева в цехе«Автоматика» »
4. Нормализацияотношений
Нормальная форма —требование, предъявляемое к структуре таблиц в теории реляционных баз данныхдля устранения из базы избыточных функциональных зависимостей между атрибутами(полями таблиц). Процесс преобразования базы данных к виду, отвечающемунормальным формам, называется нормализацией.
Каждая нормальная формапредставляет собой определённое условие, которому должна соответствоватьтаблица базы данных. Если таблица не соответствует нормальной форме, она можетбыть приведена к ней (нормализована) за счёт декомпозиции, то есть разбиения нанесколько таблиц, связанных между собой. Теоретически, в результатенормализации объём БД должен уменьшиться. Принципиальным здесь является то, чтонормализация — обратимый процесс, из группы таблиц, получившихся придекомпозиции, всегда можно получить в точности исходную таблицу. Таким образом,нормализация не сокращает объём информации, хранимой в БД, а лишь устраняетинформацию, которая может быть вычислена.
/>Типы нормальных форм. Нормализацияможет применяться к таблице, первоначально отвечающей следующим требованиям:
· Таблица содержитнуль или более записей.
· Все записитаблицы имеют одно и то же множество полей, причём одноимённые поля относятся кодинаковым типам данных.
· Таблица не можетсодержать двух полностью идентичных записей.
Обычно выделяют шестьнормальных форм:
/>Первая нормальная форма (1NF).Таблица находится в первой нормальной форме, если каждый её атрибут атомарен ивсе строки различны. Под выражением «атрибут атомарен» понимается,что атрибут может содержать только одно значение. Таким образом, несоответствуют 1NF таблицы, в полях которых могут храниться списки значений. Дляприведения таблицы к 1NF обычно требуется разбить таблицу на несколько отдельныхтаблиц.
/>Вторая нормальная форма (2NF).Таблица находится во второй нормальной форме, если она находится в первойнормальной форме, и при этом любой её атрибут, не входящий в состав первичногоключа, функционально полно зависит от первичного ключа. Функционально полнаязависимость означает, что атрибут функционально зависит от всего первичногоключа, но при этом не находится в функциональной зависимости от какой-либо егочасти.
/>Третья нормальная форма (3NF). Таблицанаходится в третьей нормальной форме, если она находится во второй нормальнойформе, и при этом любой её неключевой атрибут функционально зависит только отпервичного ключа.
/>Нормальная форма Бойса-Кодда(BCNF)Таблица находится в BCNF, если она находится в третьей нормальной форме,и при этом отсутствуют функциональные зависимости атрибутов первичного ключа отнеключевых атрибутов. Данная нормальная форма — это модификация третьейнормальной формы. Таблица может находиться в 3NF, но не в BCNF, только в одном случае:если она имеет, помимо первичного ключа, ещё по крайней мере один составной возможныйключ, и по крайней мере один из атрибутов таблицы входит и в первичный, и ввозможный ключи. Такое бывает достаточно редко, в остальном 3NF и BCNFэквивалентны.
/>Четвёртая нормальная форма (4NF).Таблицанаходится в 4NF, если она находится в BCNF и не содержит нетривиальныхмногозначных зависимостей. Многозначная зависимость не является функциональной,она существует в том случае, когда из факта, что в таблице содержится некотораястрока X, следует, что в таблице обязательно существует некоторая определённаястрока Y.
/>Пятая нормальная форма (5NF).Таблицанаходится в 5NF, если она находится в 4NF и любая многозначная зависимостьсоединения в ней является тривиальной.
Основываясь наконцептуальной модели, создаем следующие сущности: Рабочие, Праздники, Отпуска,Статус, Выходные, Профессия, Сохраненные графики, Месяцы, Графики, Типы дней.
Сущность «Сохраненные_графики»имеет следующие атрибуты:
ID,NameGraphic, DateOfSave, LinkMonthNum, YearNum.
Сущность «Рабочие» имеет следующие атрибуты: ID, WokerName, TabNumber, LinkProfession, LinkStatus.
Сущность «Выходные» имеетатрибуты: ID, DateCelebrate, LinkName.
Таким образом в даннойбазе данных отношения находятся в третьей нормальной форме, т.к. все записиатомарные, значения одного атрибута одного и того же типа, порядок следованияатрибутов в таблице не существенен, во всех отношениях первичный ключ состоитиз одного атрибута, в отношениях нет транзитивных зависимостей.
5. Основнаячасть
/>
/>
На данной блок схемепредставлен общий алгоритм составления графика учета рабочего времени. Дляболее детального изучения алгоритма можно посмотреть приложение Б в которомпомещен исходный код с подробными комментариями. При запуске приложениепроверяет, существует ли файл базы данных, если он не найден, происходитдинамическое создание структуры базы данных с заполнением первоначальныхзначений в поля.
6. SQLзапросы
Для базы данных «График учета рабочего времени нашахте им. Т. Кузембаева в цехе «Автоматика» » выполнены следующие запросы:
· Подсчетколичества записей в таблице
FunctionSQL_CountRows(table:string;Connection:TADOConnection):integer;
var
str:_Recordset;
request:string;
begin
request :='SELECT COUNT(ID) FROM ' + table;
STR :=Connection.Execute(request);
result :=integer(str.Fields.Item[0].Value);
end;
где table – передаваемый в функцию параметр –название таблицы;
· Получениезначений атрибутов из таблицы «Отпуски», для заполнения массива, хранящего этизначения для последующих вычислений.
request :='SELECT LinkWoker, DateBegin, Length FROM ОТПУСКИ';
STR :=ADOConnection1.Execute(request);
· Получениезначений атрибутов из таблицы «Рабочие», для заполнения массива, хранящего этизначения для последующих вычислений
request :='SELECT WokerName, LinkStatus, TabNumber FROM РАБОЧИЕ';
STR :=ADOConnection1.Execute(request);
· Пометка выходныхдней в массиве дней месяца из таблицы, в которой хранятся данные о выходныхднях «Выходные».
withsql_CreateQuery(ADOConnection1) do begin
SQL.Text :='SELECT DateCelebrate FROM ВыходныеWHERE DateCelebrate BETWEEN :Date1 and :Date2';
withParameters do begin
ParseSQL(SQL.Text,true);
ParamValues['Date1']:= Date1;
ParamValues['Date2']:= Date2;
end;
Open;
while not(EOF)do begin
MonthInfo[DayOfTheMonth(TDateTime(FieldValues['DateCelebrate']))]:= DayCelebrate;
next;
end;
Close;
Free;
end;
· Сохранение названия сохраненногографика, даты сохранения в таблицу «Сохраненные_графики».
procedureSaveToSavedGraphic(NameBD:string; DateOfSave:TDateTime; MonthNum,YearNum:integer);
begin
withsql_CreateQuery(ADOConnection1) do begin
SQL.Text :='INSERT INTO Сохраненные_графики (NameGraphic, DateOfSave, LinkMonthNum,YearNum) VALUES(:p1, :p2, :p3, :p4)';
withparameters do begin
ParseSQL(SQL.Text,true);
ParamValues['p1']:= NameBD;
ParamValues['p2']:= DateOfSave;
ParamValues['p3']:= MonthNum;
ParamValues['p4']:= YearNum;
end;
ExecSQL();
Close;
Free;
end;
end;
· Процедурасохранения самого графика в таблицу «Графики», с указанием ID сохранения в таблице«Сохраненные_графики».
procedureSaveToGraphic(IDNum, LinkWoker, LinkTypeOfDay:integer; DateOfCell:TDateTime);
begin
withsql_CreateQuery(ADOConnection1) do begin
SQL.Text :='INSERT INTO Графики (LinkSaveId, LinkWoker,LinkTypeOfDay, DateOfCell) VALUES(:p1, :p2, :p3, :p4)';
withparameters do begin
ParseSQL(SQL.Text,true);
ParamValues['p1']:= IDNum;
ParamValues['p2']:= LinkWoker + 1;
ParamValues['p3']:= LinkTypeOfDay;
ParamValues['p4']:= DateOfCell;
end;
ExecSQL();
Close;
Free;
end;
· Получение ID последней добавленной в таблицустроки.
functionGetLastID(conn:TADOConnection):integer;
begin
result := 0;
withsql_CreateQuery(conn) do begin
SQL.Text :='SELECT @@IDENTITY';
Open();
if Not (eof)then begin
result :=Fields.Fields[0].Value;
end;
Close();
Free;
end;
end;
request :='CREATE TABLE Профессия ' + '( ' +
ID IDENTITY(1, 1) CONSTRAINT PK_Profession_ID PRIMARY KEY, '+
nameProfessionCHAR(255) NOT NULL UNIQUE '+ ')';
Conn.Execute(request);
request :='CREATE TABLE Статус ' + '( ' +
' ID IDENTITY(1, 1) CONSTRAINT PK_Profession_ID PRIMARY KEY, ' +
nameStatusCHAR(255) NOT NULL UNIQUE '+ ')';
Conn.Execute(request);
request :='CREATE TABLE Рабочие ' +'( ' +
' ID IDENTITY(1, 1) CONSTRAINT PK_Woker_ID PRIMARY KEY, ' +
' WokerNameCHAR(128) NOT NULL, ' +
' TabNumberINTEGER, ' +
' LinkProfessionINTEGER not null CONSTRAINT LINK_Profession_ID ' +
' REFERENCESПрофессия(ID), ' +
' LinkStatusINTEGER not null CONSTRAINT LINK_Status_ID ' +
' REFERENCESСтатус(ID)' + ')';
Conn.Execute(request);
request :='CREATE TABLE Отпуски ' + '( ' +
' ID IDENTITY(1, 1) CONSTRAINT PK_Holidays_ID PRIMARY KEY, ' +
' LinkWokerINTEGER not null CONSTRAINT LINK_Woker_ID ' +
' REFERENCESРабочие(ID), ' +
' DateBeginDate, ' +
' LengthINTEGER ' + ')';
Conn.Execute(request);
request :='CREATE TABLE Типы_дней ' + '( ' +
' ID INTEGERUNIQUE, ' +
' NameOfTypeCHAR(128) ' + ')';
Conn.Execute(request);
request :='CREATE TABLE Месяцы ' + '( ' +
' ID INTEGERUNIQUE, ' +
' MonthNameCHAR(128) ' + ')';
Conn.Execute(request);
request :='CREATE TABLE Сохраненные_графики ' + '( ' +
' ID IDENTITY(1, 1) CONSTRAINT PK_SavedGraphic_ID PRIMARY KEY, ' +
' NameGraphicCHAR(128), ' +
' DateOfSaveDATE, ' +
' LinkMonthNumINTEGER not null CONSTRAINT LINK_Month_ID ' +
' REFERENCESМесяцы(ID), ' +
' YearNumCHAR(128) ' + ')';
Conn.Execute(request);
request :='CREATE TABLE Графики ' + '( ' +
' ID IDENTITY(1, 1) CONSTRAINT PK_Graphic_ID PRIMARY KEY, ' +
' LinkSaveIDINTEGER not null CONSTRAINT LINK_SavedGraphics_ID ' +
' REFERENCES Сохраненные_графики(ID), ' +
' DateOfCell DATE, ' +
' LinkWokerINTEGER not null CONSTRAINT LINK_Woker_IDN ' +
' REFERENCESРабочие(ID), ' +
' LinkTypeOfDayINTEGER not null CONSTRAINT LINK_TypeOfDay_ID ' +
' REFERENCESТипы_дней(ID) ' + ')';
Conn.Execute(request);
request :='CREATE TABLE Праздники ' + '( ' +
' ID IDENTITY(1, 1) CONSTRAINT PK_Celebrate_ID PRIMARY KEY, ' +
' TitleCHAR(128) ' + ')';
Conn.Execute(request);
request :='CREATE TABLE Выходные ' + '( ' +
' ID IDENTITY(1, 1) CONSTRAINT PK_DateCelebrate_ID PRIMARY KEY, ' +
' DateCelebrateDATE, ' +
' LinkNameINTEGER not null CONSTRAINT LINK_HOL_ID' +
' REFERENCESПраздники(ID) ' + ')';
Conn.Execute(request);
//---------------------------------Заполнение полей значениями------------------
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (0,''Январь '')';
Conn.Execute(request);
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (1,''Февраль '')';
Conn.Execute(request);
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (2,''Март '')' ;
Conn.Execute(request);
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (3,''Апрель '')';
Conn.Execute(request);
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (4,''Май '')';
Conn.Execute(request);
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (5,''Июнь '')';
Conn.Execute(request);
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (6,''Июль '')';
Conn.Execute(request);
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (7,''Август '')';
Conn.Execute(request);
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (8,''Сентябрь '')';
Conn.Execute(request);
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (9,''Октябрь '')';
Conn.Execute(request);
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (10,''Ноябрь '')';
Conn.Execute(request);
request :='INSERT INTO Месяцы(ID, MonthName)'+
' VALUES (11,''Декабрь '')';
Conn.Execute(request);
//------------------------------------------------------------------------------------/
request :='INSERT INTO Типы_дней(ID, NameOfType)'+
' VALUES (0,''Смена1 '')';
Conn.Execute(request);
request :='INSERT INTO Типы_дней(ID, NameOfType)'+
' VALUES (1,''Смена2 '')';
Conn.Execute(request);
request :='INSERT INTO Типы_дней(ID, NameOfType)'+
' VALUES (2,''Смена3 '')';
Conn.Execute(request);
request :='INSERT INTO Типы_дней(ID, NameOfType)'+
' VALUES (3,''Смена4 '')';
Conn.Execute(request);
request :='INSERT INTO Типы_дней(ID, NameOfType)'+
' VALUES (4, ''Нерабочий день '')';
Conn.Execute(request);
request :='INSERT INTO Типы_дней(ID, NameOfType)'+
' VALUES (5,''Отпуск '')';
Conn.Execute(request);
//------------------------------------------------------------------------------------/
request :='INSERT INTO Профессия(ID, NameProfession)'+
' VALUES (1,''ПЭС '')';
Conn.Execute(request);
request :='INSERT INTO Профессия(ID, NameProfession)'+
' VALUES (2,''ДЭС '')';
Conn.Execute(request);
//------------------------------------------------------------------------------------/
request :='INSERT INTO Статус(ID, NameStatus)'+
' VALUES (1, ''Вентиляторщик, работающий в выходные '')';
Conn.Execute(request);
request :='INSERT INTO Статус(ID, NameStatus)'+
' VALUES (2, ''Вентиляторщик, не работающий в выходные '')';
Conn.Execute(request);
request :='INSERT INTO Статус(ID, NameStatus)'+
' VALUES (3,''Дежурный '')';
Conn.Execute(request);
request :='INSERT INTO Статус(ID, NameStatus)'+
' VALUES (4,''Рабочий'')';
Conn.Execute(request);
//------------------------------------------------------------------------------------/
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (1,''Забудский С. Ю.'',78704, 1, 1)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (2, ''Ивановский А. В.'',79856, 1, 1)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (3, ''Палагушкин Б. А.'',79485, 1, 1)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (4, ''Девяткин А. М.'',55288, 1, 1)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (5,''Филонов М. Л.'',107083, 2, 2)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (6,''Васекин С. А.'',79446, 1, 3)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (7, ''Статилко В. В.'',78715, 1, 3)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (8,''Васильев А. Д.'',55337, 1, 3)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (9,''Матейко А. В.'',55681, 1, 3)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (10,''Чирок А. Н.'',55844, 1, 3)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (11,''Никулин А. Н.'',67128, 1, 4)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (12,''Букин Б. И.'',52696, 1, 2)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (13,''Сибгатулин Р. И.'',104624, 1, 3)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (14,''Сибгатулин Р. И.'',71763, 1, 3)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (15, ''Денисенко В. В.'',80087, 1, 3)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (16, ''Аборонов В. И.'',55780, 1, 3)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (17,''Симулин С. Г.'',86149, 1, 4)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (18,''Майер В. В.'',109859, 1, 4)';
Conn.Execute(request);
request :='INSERT INTO Рабочие(ID, WokerName, TabNumber, LinkProfession, LinkStatus)'+
' VALUES (19,''Гетц А. В.'',109525, 1, 1)';
Conn.Execute(request);
//------------------------------------------------------------------------------------/
request :='INSERT INTO Праздники(ID, Title)'+
' VALUES (1, ''Новый год'')';
Conn.Execute(request);
request :='INSERT INTO Праздники(ID, Title)'+
' VALUES (2, ''Международный женский день'')';
Conn.Execute(request);
request :='INSERT INTO Праздники(ID, Title)'+
' VALUES (3,''Наурыз мейрамы'')';
Conn.Execute(request);
request :='INSERT INTO Праздники(ID, Title)'+
' VALUES (4, ''Праздник единства народа Казахстана'')';
Conn.Execute(request);
request :='INSERT INTO Праздники(ID, Title)'+
' VALUES (5, ''День Победы'')';
Conn.Execute(request);
request :='INSERT INTO Праздники(ID, Title)'+
' VALUES (6, ''День Конституции Республики Казахстан'')';
Conn.Execute(request);
request :='INSERT INTO Праздники(ID, Title)'+
' VALUES (7, ''День республики'')';
Conn.Execute(request);
request :='INSERT INTO Праздники(ID, Title)'+
' VALUES (8, ''День Независимости'')';
Conn.Execute(request);
//------------------------------------------------------------------------------------/
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (1,''01.01.2008'', 1)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (2,''02.01.2008'', 1)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (3,''08.03.2008'', 2)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (4,''22.03.2008'', 3)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (5,''01.05.2008'', 4)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (6,''09.05.2008'', 5)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (7,''30.08.2008'', 6)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (8,''25.10.2008'', 7)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (9,''16.12.2008'', 8)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (10,''17.12.2008'', 8)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (11,''15.12.2007'', 8)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (12,''16.12.2007'', 8)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (13,''17.12.2007'', 8)';
Conn.Execute(request);
request :='INSERT INTO Выходные(ID, DateCelebrate, LinkName)'+
' VALUES (14,''08.31.2007'', 2)';
Conn.Execute(request);
//------------------------------------------------------------------------------------/
request :='INSERT INTO Отпуски(ID, LinkWoker, DateBegin, Length)'+
' VALUES (1,14, ''08.11.2007'', 26)';
Conn.Execute(request);
request :='INSERT INTO Отпуски(ID, LinkWoker, DateBegin, Length)'+
' VALUES (2,16, ''18.12.2007'', 26)';
Conn.Execute(request);
request :='INSERT INTO Отпуски(ID, LinkWoker, DateBegin, Length)'+
' VALUES (3,2, ''24.12.2007'', 20)';
Conn.Execute(request);
request :='INSERT INTO Отпуски(ID, LinkWoker, DateBegin, Length)'+
' VALUES (4,9, ''01.11.2007'', 10)';
Conn.Execute(request);
request :='INSERT INTO Отпуски(ID, LinkWoker, DateBegin, Length)'+
' VALUES (5,6, ''01.11.2007'', 18)';
Conn.Execute(request);
7. Интерфейс программы
Интерфейс программысостоит из 3 окон. При запуске программы открывается главное окно,представленное на рисунке 7.1
/>
Рис 7.1 – Главное окно
На главной формеприложения находится главное меню, содержащее пункты Файл, Справочник, Справка.Пункты меню распадаются на подменю
Файл -> Открыть,Сохранить, Предварительный просмотр, Печать; Справочники -> Справочникрабочих, Справочник отпусков, Справочник праздников, Справочник названийпраздников;
Справка -> О программе.
Команда «Открыть»вызывает окно выбора для загрузки названия и дата ранее сохраненных графиков,представленное на рисунке 7.2
/>
Рисунок 7.2 – окнооткрытия ранее сохраненных графиков
Команда «Сохранить» вызываетсяокно сохранения графика, в котором нужно указать ему название. Окнопредставлено на Рисунке 7.3
/>
Рисунок 7.3 – Окносохранения графика
Команда «Предварительныйпросмотр» рассматривается в разделе «Отчеты».
Команда «Справочникрабочих», вызывает окно содержащее сведения о рабочих, предоставляющеевозможность добавления или изменения данных о рабочих. Окно представлено наРисунке 7.4
/>
Рисунок 7.4 – Окносправочника рабочих
Команда «Справочникотпусков», вызывает окно содержащее сведения об отпусках рабочих,предоставляющее возможность добавления или изменения данных об отпусках. Окнопредставлено на Рисунке 7.5
/>
Рисунок 7.5 — Окносправочника отпусков
Команда «СправочникПраздников», вызывает окно содержащее сведения о государственных праздниках,предоставляющее возможность добавления или изменения данных о дате празднования.Окно представлено на Рисунке 7.6
/>
Рисунок 7.7 – Окносправочника праздников
Команда «Справочникназваний праздников», вызывает окно содержащее сведения о названиягосударственных праздников, предоставляющее возможность добавления илиизменения данных о названии праздника. Окно представлено на Рисунке 7.8
/>
Рисунок 7.8 – ОкноСправочника названий праздников
Команда «О программе»вызывает окно, содержащее сведения о разработчике и краткое описание созданногоприложения. Окно представлено на Рисунке 7.9
/>
Рисунок 7.9 – Окно «Опрограмме»
Внизу формы расположенвыпадающий список для выбора месяца генерируемого графика, а также поле выборагода.
Генерация графикаосуществляется по нажатии кнопки «Генерировать график». Результат генерациипредставлен на Рисунке 7.10
/>
Рисунок 7.10 – результатгенерации графика
8. Отчеты
В данной программе можнопросмотреть и распечатать отчет, содержащий информацию о графике учета рабочеговремени на заданный месяц.
Команда «Предварительныйпросмотр» вызывает окно, отображающее как будет выглядеть график на печати.Окно представлено на Рисунке 8.1
/>
Рисунок 8.1 – Окнопредпросмотра печати, отчетпрограммы
Команда «Печать» выводитграфик указанного месяца и года на принтер.
Заключение
В результате выполнения данного курсового проекта было разработаноприложение удобное в обращении, позволяющее хранить необходимые сведения вединой Базе Данных, а также генерировать автоматически график работ, что внастоящее время, необходимо для быстрого и точного принятия решений,относительно расписания работ. Вообще, задача составления расписания являетсядостаточно сложной и актуальной. Необходимость в автоматической генерациирасписания возникает там, где существует возможность выбора той или инойочередности выполнения работ на производстве, при составлении расписаниядвижения поездов и самолетов, обслуживании клиентов в сервисных системах,составление расписаний занятий в учебных заведениях и т.д.
После апробирования данного приложения на предприятии можно судить о том,что в рамках курсовой работы мне удалось создать удовлетворяющую требованиямпредприятия автоматическую генерацию графика учета рабочего времени, свозможностью хранения посредством Базы Данных
Список использованных источников
1. Терлецкая А. М. – лекции по дисциплине «Технология и разработка базданных»;
2. П. Дарахвелидзе, Е. Марков. Разработка web-службсредствами Delphi – СПб: БХВ-Петербург, 2003
3. http://club.shelek.com/viewart.php?id=177