Материал: Программирование учета перевозок в карьере горно-обогатительного комбината

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Исходные данные для расчета:

предполагаемое число операторов (q) - 800;

коэффициент сложности программы (C) - 1,4;

коэффициент коррекции программы (p) - 0,1;

коэффициент увеличения затрат труда вследствие недостаточного описания задачи (B) - 1,3;

коэффициент квалификации программиста (K) - 0,8

заработная плата программиста - 20 грн/час;

стоимость машинного времени, необходимого для отладки программы на ЭВМ - 9 грн./час.

Трудоемкость можно рассчитать по формуле:

 человеко-часов, (3.1)

где to - затраты труда на подготовку и описание поставленной задачи (принимается = 50);- затраты труда на исследование алгоритма решения задачи;- затраты труда на разработку блок-схемы алгоритма;п - затраты труда на программирование по готовой блок-схеме;отл - затраты труда на отладку программы на ЭВМ;д - затраты труда на подготовку документации.

Составляющие затраты труда определяются исходя из условного числа операторов в разрабатываемом ПО.

Условное число операторов:

, (3.2)

- предполагаемое число операторов (q = 800).- коэффициент сложности программы. Коэффициент сложности задачи С характеризует относительную сложность программы по отношению к так называемой типовой задаче, реализующей стандартные методы решения, сложность которой принята равной единице (величина С лежит в пределах от 1,25 до 2). Для данного программного продукта, с учетом большого количества и разнообразия обрабатываемой информации и сложности составления отчетов, коэффициент сложности задачи возьмем 1,4.

р - коэффициент коррекции программы в ходе ее разработки. Коэффициент коррекции программы p - увеличение объема работ за счет внесения изменений в алгоритм или программу по результатам уточнения постановок. В данном случае программа не требовала многочисленных доработок. С учетом этого возьмем коэффициент равный 0,1.=800 *1,4*(1+0,1)=1232

Затраты труда на изучение описания задачи определяется с учетом уточнения описания и квалификации программиста.

, (3.3)

- коэффициент увеличения затрат труда вследствие недостаточного описания задачи. Коэффициент увеличения затрат труда в зависимости от сложности задачи принимается от 1,2 до 1,5, вследствие недостаточного описания решения задачи примем B = 1,3.

K - коэффициент квалификации программиста, определяемый от стажа работы по данной специальности. Коэффициент составляет: для работающих до двух лет - 0,8; от двух до трех лет - 1,0; от трех до пяти лет - 1,1 - 1,2; от пяти до семи - 1,3 - 1,4; свыше семи лет - 1,5 - 1,6. Поэтому примем К = 0,8.

t u =(1232*1,3)/(80*0,8)=25 чел.-часов.

Затраты труда на разработку алгоритма решения задачи:

 , (3.4)

a=1232/(22,5*0,8)=68,4 чел.-часов.

Затраты на составление программы по готовой блок-схеме:

, (3.5)

n=1232/(22,5*0,8)=68,4 чел.-часов.

Затраты труда на отладку программы при условии автономной отладки одного задания:

, (3.6)

отл =1232/(4,5*0,8)=342,2 чел.-часов.

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

к отл =1,5*t отл , (3.7)

к отл=1,5*342,2=513,3 чел.-часов.

Затраты на подготовку документации:

, (3.8)

где tдр - трудоемкость подготовки материалов и рукописи;до - трудоемкость редактирования, печати и оформления документации.

Трудоемкость подготовки материалов и рукописи определяется по формуле:

 , (3.9)

др=1232/(17,5*0,8)=88 чел.-часов.

Трудоемкость редактирования, печати и оформления документации:

, (3.10)

до=0,75*88=66 чел.-часов.

Затраты на подготовку документации составят:д = 88 + 66 = 154 чел.-часов.

Получаем трудоемкость разработки ПО:= 50+25+68,4+68,4+513,3+154 = 879,2 чел.-часов

Таким образом, трудоемкость разработки программного обеспечения составляет 879,2 чел.-часов.

3.2    Затраты на создание программного обеспечения

Затраты на создание ПО (Кпо) включают затраты на заработную плату разработчиков программы (Зз/п), определяемую умножением суммарной трудоемкости разработки ПО (t) на среднюю заработную плату программиста с начислениями и стоимости машинного времени на отладку.

(3.11)

Заработная плата разработчиков определяется по формуле:

, (3.12)

где t - общая трудоемкость, чел.-часов.пр - средняя часовая заработная плата программиста, грн/час.пр = 20 грн./час.

З зп=879,2 *20=17584 грн.

Стоимость машинного времени, необходимого для отладки программы на ЭВМ:

, (3.13)

где tотл - трудоемкость отладки программы на ЭВМ, ч.

Смч - стоимость машинного времени ЭВМ грн/ч.

З мв= 513,3*9=4620 грн.

Затраты на создание программного обеспечения составят:

Кпо= 17584 + 4620 = 22204 грн.

Определенные таким образом затраты на создание программного обеспечения являются одноразовыми капитальными затратами на создание АС.

Ожидаемый период создания ПО:

 мес., (3.14)

где Bk - число разработчиков;- месячный фонд рабочего времени (при 40 часовой рабочей неделе Fp=176 часов).

Т=879,2/(1*176)=5 мес.

Таким образом, ожидаемая длительность разработки составит 5 месяцев, а затраты на создание программного обеспечения - 22204 грн.

Выводы

В данном дипломном проекте разрабатывается программное обеспечение для учета перевозок в карьере горно-обогатительного комбината. Затраты на создание программного обеспечения составили 22204 грн, длительность разработки - 5 месяцев.

Выводы

В данной бакалаврской работе была разработана система учета перевозок руды и вскрышных пород являющаяся частью системы управления всего карьера ГОК.

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

Актуальность разработанной системы определяется насущной потребностью перехода украинских предприятий на максимальное использование местных полезных ископаемых, таких как уголь, руда и др. Это позволит предприятиям менее зависеть от внешних поставок.

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

Разработанное программное обеспечение имеет дружественный пользователю интерфейс и невысокую стоимость.

Программное обеспечение было разработано в среде Embarcadero Delphi 2010 с использованием СУБД Firebird 2.5 и является полностью готовым к использованию программным продуктом.

В экономическом разделе дипломного проекта определена трудоемкость, длительность разработки и выполнена оценка затрат на создание программного продукта

Список литературы

1.   Р. Сигнор, О. Стегман. Использование ODBC для доступа к базам данных. - М.: БИНОМ, Научная книга, 1998. - 384 с.

2.      Проектирование, разработка и анализ программного обеспечения систем реального времени. Сергей Зыль., БХВ-Петербург, 2010 г., 336 стр.

.        Базы данных (7-е изд.). Фуфаев Э.В., Фуфаев Д.Э., Академия, 2012.- 320 стр.

.        Объектно-ориентированное программирование. Концепции разработки. Б.Майер, Русская Редакция, 2004 г., 600 стр.

.        Технологии объектно-ориентированного программирования (2-е издание). Павел Хорев, Академия, 2008 г., 448 стр.

.        Delphi. Профессиональное программирование. Дмитрий Осипов, Символ-Плюс, 2006г., 1056 стр.

7.      Firebird руководство разработчика баз данных <#"896757.files/image038.jpg">

Отчет о работе машин


Отчет по экскаваторам


Отчет о транспортных расстояниях


Отчет по горным массам


Приложение Б

unit gok_pass, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, DBCtrls, Unit1, Grids, DBGrids, Mask, DBCtrlsEh;= class(TForm): TEdit;: TDBLookupComboBox;: TButton;: TLabel;: TLabel;ButtonVhodClick(Sender: TObject);FormActivate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrPass;

{$R *.dfm}gok_move;

procedure TFrPass.ButtonVhodClick(Sender: TObject);

beginEdPass.text<>dm.DSetDisp.Fields[2].Value then begin.MessageBox('Пароль введен неверно','Вход в систему',MB_ICONERROR);.Text:='';.Visible:=true;.Visible:=false;.Disp.Text:=dm.DSetDisp.Fields[0].Value;.DispPass.Text:=dm.DSetDisp.Fields[2].Value;;

procedure TFrPass.FormActivate(Sender: TObject);

begin.DSetDisp.Refresh;;

end.gok_chpass

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Unit1, StdCtrls, Mask, DBCtrls, Grids, DBGrids, Buttons;= class(TForm): TDBEdit;: TDBEdit;: TDBEdit;: TDBEdit;: TEdit;: TLabel;: TBitBtn;: TLabel;: TEdit;: TLabel;BitBtn1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrChPass;

implementation

{$R *.dfm}TFrChPass.BitBtn1Click(Sender: TObject);

begindbeditpass.Text<>editpassold.Text then begin.MessageBox('Пароли не совпадают','Изменение данных',MB_ICONERROR);;;.DSetForDispPass.Edit;.DSetForDispPass.Fields[4].Value:=EditPass.Text;.DSetForDispPass.Post;.MessageBox('Пароль изменен','Изменение данных',MB_ICONINFORMATION);;

end.gok_drivers

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, DBGrids, Unit1, ExtCtrls, DBCtrls;= class(TForm): TDBGrid;

{ Private declarations }

{ Public declarations };: TFrDrivers;

implementation

{$R *.dfm}.gok_brig

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Unit1, StdCtrls, Mask, DBCtrls, Grids, DBGrids, Buttons;= class(TForm): TDBEdit;: TDBEdit;: TLabel;: TLabel;: TDBGrid;: TDBEdit;: TDBEdit;: TLabel;: TLabel;: TDBGrid;: TDBEdit;: TDBEdit;: TLabel;: TLabel;: TDBGrid;: TDBEdit;: TDBEdit;: TLabel;: TLabel;: TDBGrid;: TBitBtn;: TDBEdit;: TDBEdit;: TDBEdit;: TDBEdit;: TLabel;: TDBLookupComboBox;: TLabel;: TLabel;: TEdit;: TDBEdit;BitBtn2Click(Sender: TObject);BitBtn1Click(Sender: TObject);FormActivate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrBrig;

{$R *.dfm}gok_move;

procedure TFrBrig.BitBtn2Click(Sender: TObject);

begin.DSetBrig1.Edit;.DSetBrig1.Fields[4].Value:=dm.DSetDisp.Fields[0].Value;.DSetBrig1.Fields[7].Value:=dm.DSetDisp.Fields[1].Value;.DSetBrig1.Post;.DSetBrig1.Close;.DSetBrig1.Open;.Disp.Text:=dm.DSetDisp.Fields[0].Value;('Замена диспетчера' + dm.DSetBrig1.Fields[7].Value + 'диспетчером' + dm.DSetDisp.Fields[1].Value);;

procedure TFrBrig.BitBtn1Click(Sender: TObject);

beginEditNumBrig.Text<>''then begin.Disp.Text:=dm.DSetDisp.Fields[0].Value;.brig.Text:=editnumbrig.Text;

{showmessage(dm.DSetBrig1.Fields[4].Value);(dm.DSetBrig1.Fields[7].Value);(dm.DSetDisp.Fields[1].Value);}('Выполнена замена бригады на текущую смену. Диспетчер: ' + editdisp.text + ' бригада № ' + EditNumBrig.Text);.MessageBox('Не выбрана бригада','Назначение диспетчера',MB_ICONERROR)

end;TFrBrig.FormActivate(Sender: TObject);

begin.DSetDisp2.Close;.DSetDisp2.Parameters[0].Value:=StrToInt(FrMap.Disp.Text);.DSetDisp2.Open;;

end.gok_dcar

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Unit1, StdCtrls, Buttons, Grids, DBGrids, DBCtrls;= class(TForm): TDBGrid;: TBitBtn;: TBitBtn;: TDBLookupComboBox;: TDBLookupComboBox;: TLabel;: TLabel;: TButton;BitBtnDCarYesClick(Sender: TObject);BitBtn1Click(Sender: TObject);Button1Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrDCar;

implementation

{$R *.dfm}gok_move;TFrDCar.BitBtnDCarYesClick(Sender: TObject);

beginApplication.MessageBox('Подтвердить данное назначение на текущую смену?','Назначение водителей',MB_YESNO+MB_ICONQUESTION)=IDNO then exit;;

procedure TFrDCar.BitBtn1Click(Sender: TObject);

begin.DSetDCar.Edit;.DSetDCar.Fields[2].Value:=dm.DSetDrForSp.Fields[0].Value;.DSetDCar.Post;.DSetDCar.Close;.DSetDCar.Open;;

procedure TFrDCar.Button1Click(Sender: TObject);

begin.DSetDCar.Edit;.DSetDCar.Fields[1].Value:=dm.DSetCar.Fields[0].Value;.DSetDCar.Post;.DSetDCar.Close;.DSetDCar.Open;;.Reports, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Mask, DBCtrlsEh, Unit1, DBCtrls, ExtCtrls, Buttons;= class(TForm): TDBLookupComboBox;: TDBLookupComboBox;: TLabel;: TLabel;: TLabel;: TBitBtn;: TBitBtn;: TLabel;: TPanel;: TPanel;: TLabel;: TBitBtn;: TBitBtn;: TBitBtn;: TBitBtn;: TBitBtn;: TBitBtn;: TPanel;: TLabel;: TPanel;: TLabel;: TButton;: TButton;: TLabel;: TMaskEdit;: TLabel;: TLabel;: TMaskEdit;: TBitBtn;: TButton;: TButton;: TPanel;: TLabel;: TBitBtn;Button1Click(Sender: TObject);BitBtn1Click(Sender: TObject);BitBtn2Click(Sender: TObject);BitBtn3Click(Sender: TObject);BitBtn4Click(Sender: TObject);BitBtn6Click(Sender: TObject);BitBtn8Click(Sender: TObject);Button2Click(Sender: TObject);BitBtn11Click(Sender: TObject);Button3Click(Sender: TObject);Button4Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TFrReports;

implementationRep1, Rep2,Rep4, Rep5, Rep6, graf1, graf2, unit2, graffuel;

{$R *.dfm}TFrReports.Button1Click(Sender: TObject);

begin.DSRep1.Close;.DSRep1.Parameters[0].Value:=dm.DSetShift.Fields[0].Value;.DSRep1.Parameters[1].Value:=dm.DSetCar.Fields[0].Value;.DSRep1.Open;.Show;.frxReport1.ShowReport;

//showmessage(dm.DSetCar.Fields[0].Value);

//FrRep1.frxReport1.Print;;

procedure TFrReports.BitBtn1Click(Sender: TObject);

begin.DSRep1.Close;.DSRep1.Parameters[0].Value:=dm.DSetShift.Fields[0].Value;.DSRep1.Parameters[1].Value:=dm.DSetCar.Fields[0].Value;.DSRep1.Open;.Show;.frxReport1.ShowReport;;

procedure TFrReports.BitBtn2Click(Sender: TObject);

begin.DSRep1.Close;.DSRep1.Parameters[0].Value:=dm.DSetShift.Fields[0].Value;.DSRep1.Parameters[1].Value:=dm.DSetCar.Fields[0].Value;.DSRep1.Open;.Show;.frxReport1.Print;;

procedure TFrReports.BitBtn3Click(Sender: TObject);

begin.DSetRep2.Close;.DSetRep2.Parameters[0].Value:=dm.DSetShift.Fields[0].Value;.DSetRep2.Open;.Show;.frxReport2.ShowReport;;

procedure TFrReports.BitBtn4Click(Sender: TObject);

begin.DSetRep2.Close;.DSetRep2.Parameters[0].Value:=dm.DSetShift.Fields[0].Value;.DSetRep2.Open;.Show;.frxReport2.Print;;

procedure TFrReports.BitBtn6Click(Sender: TObject);

begin.DSetRep4.Close;.DSetRep4.Parameters[0].Value:=dm.DSetShift.Fields[0].Value;.DSetRep4.Open;.Show;.frxReport4.ShowReport;;

procedure TFrReports.BitBtn8Click(Sender: TObject);

begin.DelQueryRep5.ExecSQL;.AddQueryRep5.Parameters[0].Value:=dm.DSetShift.Fields[0].Value;.AddQueryRep5.ExecSQL;.DSetRep5.Close;

//dm.DSetRep5.Parameters[0].Value:=dm.DSetShift.Fields[0].Value;.DSetRep5.Open;.Show;.frxReport5.ShowReport;;TFrReports.Button2Click(Sender: TObject);(MaskEdit1.text <>'01.09.11') then.MessageBox('Неправильно указан период','Итоговые отчеты',MB_ICONERROR).Show;;

procedure TFrReports.BitBtn11Click(Sender: TObject);

begin.DelQueryRep5.ExecSQL;.AddQueryRep5.Parameters[0].Value:=dm.DSetShift.Fields[0].Value;.AddQueryRep5.ExecSQL;.DSetRep6.Close;

//dm.DSetRep5.Parameters[0].Value:=dm.DSetShift.Fields[0].Value;.DSetRep6.Open;.Show;.frxReport5.ShowReport;;

procedure TFrReports.Button3Click(Sender: TObject);

begin(MaskEdit1.text <>'01.09.11')then.MessageBox('Неправильно указан период','Итоговые отчеты',MB_ICONERROR).Show;;

procedure TFrReports.Button4Click(Sender: TObject);

begin.DSetGrafFuel.Close;.DSetGrafFuel.Parameters[0].Value:=dm.DSetShift.Fields[0].Value;.DSetGrafFuel.Parameters[1].Value:=dm.DSetCar.Fields[0].Value;.DSetGrafFuel.Open;.Show;;.

Тексты SQL-запросов

Формирование данных для полей со списком «Пользователь» и «Диспетчер»tWorkers.CodeWorker, [WorkerSurname] & " " & Left([WorkerName],1) & "." & " " & Left([WorkerPatronymic],1) & "." AS FIO, tWorkers.WorkerPasstWorkers(((tWorkers.WorkerDisp)=True));

Формирование данных для поля со списком «Водители»tWorkers.CodeWorker, [WorkerSurname] & " " & Left([WorkerName],1) & "." & " " & Left([WorkerPatronymic],1) & "." AS FIO, tWorkers.WorkerPasstWorkers(((tWorkers.WorkerDisp)=False));

Формирование данных для поля со списком «Машины»tCars.CodeCar, tCars!CarModel & " " & tCars!CarNumberIn AS PPtCars INNER JOIN tCarType ON tCars.CodeCarType = tCarType.CodeCarType(((tCarType.CarTypeFlgEks)=False))

Формирование данных для формы «Экскаваторы»

SELECT tCars.CodeCar, tCars!CarModel & "-" & tCars!CarNumberIn AS PP, tCars.CarFileSP, tCars.CarFilePR, tCars.CarFileRP

FROM tCars INNER JOIN tCarType ON tCars.CodeCarType = tCarType.CodeCarType(((tCarType.CodeCarType)=2));

Формирование данных для формы «Назначение на смену»

SELECT tDCar.*, tCars!CarModel & " " & tCars!CarNumberIn AS CarM, [WorkerSurname] & " " & tWorkers!WorkerName & " " & tWorkers!WorkerPatronymic AS FIO, tWorkers.WorkerTabNum

FROM (tDCar INNER JOIN tWorkers ON tDCar.CodeWorker = tWorkers.CodeWorker) INNER JOIN tCars ON tDCar.CodeCar = tCars.CodeCar(((tCars.CodeCarType)<>2) AND ((tWorkers.WorkerDisp)=False));

Добавление данных о сотрудниках и машинах, работающих в данную смену

INSERT INTO tDriverCar ( CodeShift, CodeCar, CodeWorker, CodeWorker2 )

SELECT Forms!FrDo!spshift AS Shift, tDcar2.CodeCar, tDcar2.CodeWorker, tDcar2.CodeWorker2tDcar2(((tDcar2.DCar2Brig)=:b));

Добавление данных о рейсах машинINTO tTrip ( CodeShift, CodeCar, CodeCarPP, CodeUnload, TripTimeBegin, TripTimeEnd, TripMass, TripDistance, TripCounterFuel, TripFuel, TripPathTime )

SELECT Forms!FrDo!spshift AS smena, Forms!FrDo!spcar AS car, Forms!FrDo!speks AS pp, Forms!FrDo!sppr AS pr, IIf((Round(Forms!FrDo!fplusbegin,0)+Minute([TripTimeEnd]))>=60,Hour([TripTimeEnd])+1 & ":" & Minute([TripTimeEnd])+Round(Forms!FrDo!fplusbegin,0)-60,Hour([TripTimeEnd]) & ":" & Minute([TripTimeEnd])+Round(Forms!FrDo!fplusbegin,0)) AS timebegin, IIf((Round(Forms!FrDo!fpathtime,1)+Forms!FrDo!fplusbegin+Minute([TripTimeEnd]))>=60,Hour([TripTimeEnd])+1 & ":" & Minute([TripTimeEnd])+Round(Forms!FrDo!fpathtime,1)+Forms!FrDo!fplusbegin-60,Hour([TripTimeEnd]) & ":" & Minute([TripTimeEnd])+Round(Forms!FrDo!fpathtime,1)+Forms!FrDo!fplusbegin) AS timeend, tCars!CarGP AS gp, Forms!FrDo!fdist AS dist, Round(tTrip!TripCounterFuel-(tCars!CarFuel/100*Forms!FrDo!fdist),1) AS fuel, Round(tCars!CarFuel/100*Forms!FrDo!fdist,2) AS rashod, Round(Forms!FrDo!fpathtime,1) AS pathtimetCarType INNER JOIN (tTrip INNER JOIN tCars ON tTrip.CodeCar = tCars.CodeCar) ON tCarType.CodeCarType = tCars.CodeCarType(((tTrip.CodeTrip)=GetLastTrip()));