Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
График_рабочего.rtf
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
39 Мб
Скачать
☆

5. Основная часть

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

6. Sql запросы

Для базы данных «График учета рабочего времени на шахте им. Т. Кузембаева в цехе «Автоматика» » выполнены следующие запросы:

  • Подсчет количества записей в таблице

Function SQL_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);

  • Пометка выходных дней в массиве дней месяца из таблицы, в которой хранятся данные о выходных днях «Выходные».

with sql_CreateQuery(ADOConnection1) do begin

SQL.Text := 'SELECT DateCelebrate FROM Выходные WHERE DateCelebrate BETWEEN :Date1 and :Date2';

with Parameters 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;

  • Сохранение названия сохраненного графика, даты сохранения в таблицу «Сохраненные_графики».

procedure SaveToSavedGraphic(NameBD:string; DateOfSave:TDateTime; MonthNum, YearNum:integer);

begin

with sql_CreateQuery(ADOConnection1) do begin

SQL.Text := 'INSERT INTO Сохраненные_графики (NameGraphic, DateOfSave, LinkMonthNum, YearNum) VALUES(:p1, :p2, :p3, :p4)';

with parameters 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 сохранения в таблице «Сохраненные_графики».

procedure SaveToGraphic(IDNum, LinkWoker, LinkTypeOfDay:integer; DateOfCell:TDateTime);

begin

with sql_CreateQuery(ADOConnection1) do begin

SQL.Text := 'INSERT INTO Графики (LinkSaveId, LinkWoker, LinkTypeOfDay, DateOfCell) VALUES(:p1, :p2, :p3, :p4)';

with parameters 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 последней добавленной в таблицу строки.

function GetLastID(conn:TADOConnection):integer;

begin

result := 0;

with sql_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, '+

nameProfession CHAR(255) NOT NULL UNIQUE '+ ')';

Conn.Execute(request);

request := 'CREATE TABLE Статус ' + '( ' +

' ID IDENTITY (1, 1) CONSTRAINT PK_Profession_ID PRIMARY KEY, ' +

nameStatus CHAR(255) NOT NULL UNIQUE '+ ')';

Conn.Execute(request);

request := 'CREATE TABLE Рабочие ' +'( ' +

' ID IDENTITY (1, 1) CONSTRAINT PK_Woker_ID PRIMARY KEY, ' +

' WokerName CHAR(128) NOT NULL , ' +

' TabNumber INTEGER , ' +

' LinkProfession INTEGER not null CONSTRAINT LINK_Profession_ID ' +

' REFERENCES Профессия(ID) , ' +

' LinkStatus INTEGER not null CONSTRAINT LINK_Status_ID ' +

' REFERENCES Статус(ID)' + ')';

Conn.Execute(request);

request := 'CREATE TABLE Отпуски ' + '( ' +

' ID IDENTITY (1, 1) CONSTRAINT PK_Holidays_ID PRIMARY KEY , ' +

' LinkWoker INTEGER not null CONSTRAINT LINK_Woker_ID ' +

' REFERENCES Рабочие(ID) , ' +

' DateBegin Date , ' +

' Length INTEGER ' + ')';

Conn.Execute(request);

request := 'CREATE TABLE Типы_дней ' + '( ' +

' ID INTEGER UNIQUE, ' +

' NameOfType CHAR(128) ' + ')';

Conn.Execute(request);

request := 'CREATE TABLE Месяцы ' + '( ' +

' ID INTEGER UNIQUE, ' +

' MonthName CHAR(128) ' + ')';

Conn.Execute(request);

request := 'CREATE TABLE Сохраненные_графики ' + '( ' +

' ID IDENTITY (1, 1) CONSTRAINT PK_SavedGraphic_ID PRIMARY KEY , ' +

' NameGraphic CHAR(128) , ' +

' DateOfSave DATE , ' +

' LinkMonthNum INTEGER not null CONSTRAINT LINK_Month_ID ' +

' REFERENCES Месяцы(ID) , ' +

' YearNum CHAR(128) ' + ')';

Conn.Execute(request);

request := 'CREATE TABLE Графики ' + '( ' +

' ID IDENTITY (1, 1) CONSTRAINT PK_Graphic_ID PRIMARY KEY, ' +

' LinkSaveID INTEGER not null CONSTRAINT LINK_SavedGraphics_ID ' +

' REFERENCES Сохраненные_графики(ID) , ' +

' DateOfCell DATE , ' +

' LinkWoker INTEGER not null CONSTRAINT LINK_Woker_IDN ' +

' REFERENCES Рабочие(ID) , ' +

' LinkTypeOfDay INTEGER not null CONSTRAINT LINK_TypeOfDay_ID ' +

' REFERENCES Типы_дней(ID) ' + ')';

Conn.Execute(request);

request := 'CREATE TABLE Праздники ' + '( ' +

' ID IDENTITY (1, 1) CONSTRAINT PK_Celebrate_ID PRIMARY KEY , ' +

' Title CHAR(128) ' + ')';

Conn.Execute(request);

request := 'CREATE TABLE Выходные ' + '( ' +

' ID IDENTITY (1, 1) CONSTRAINT PK_DateCelebrate_ID PRIMARY KEY , ' +

' DateCelebrate DATE , ' +

' LinkName INTEGER 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);