Разработка комплекса программ автоматизации процесса регистрации и обработки данных для конкретной организации
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
ый. Если заводим новый, то его сначала настраиваем в зависимости от методики расчета, рисунок 10, после чего приступаем к внесению данных в табличную часть документа.
Рис. 10
После внесения всех проб производим первичный расчет, проверку на выбросы, расчет дисперсий, а так же печать протокола, путем нажатия на кнопки с соответствующими названиями, рисунок 11. В нижнем правом углу формы документа видим табличные и рассчитанные значения Кохрена и Граббса. Далее производим расчет погрешностей (показателя точности методики) с использованием стандартного образца, рисунок 12 и выводим на печать полученный протокол, рисунок 13.
Аналогичным образом делаются расчеты для других задач. Теперь рассмотрим, как это выглядит изнутри. В DataModForm кладется компонент TDataSet, который связывается с необходимой таблицей в базе данных с одной стороны, и, с табличным полем DBGrid, с другой стороны, который, в свою очередь, отображает эти данные. TDataSet позволяет манипулировать этими данными: добавлять, удалять и редактировать при помощи компонента TDBNavigator. При нажатии кнопок навигатора происходит то или иное действие. Когда мы создаем новый или открываем для редактирования уже существующий протокол, транзакция стартует. После занесения в DBGrid числовых значений расчет начинается по нажатию кнопок, которые вызывают события OnClick(), осуществляющие передачу параметров и вызов соответствующих хранимых процедур на сервере. Количество вызываемых процедур определяется выбором рабочей области, а назначение - наименованием кнопок. Когда все расчеты завершаются успешно - данные сохраняются и транзакция подтверждается, после чего можно осуществлять печать протоколов расчета, строить графические схемы, контрольные карты. Ниже приведен пример программного кода модуля DataModForm.
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);RegProtOcenka_DataSetNewRecord(DataSet: TDataSet);ValueListOcenka_DataSetNewRecord(DataSet: TDataSet);ErrorRange_DataSetNewRecord(DataSet: TDataSet);ErrorRange_DataSetBeforePost(DataSet: TDataSet);RegProtOcenka_DataSetBeforeEdit(DataSet: TDataSet);RegProtOcenka_DataSetAfterDelete(DataSet: TDataSet);ValueListOcenka_DataSetAfterDelete(DataSet: TDataSet);ErrorRange_DataSetAfterDelete(DataSet: TDataSet);Metod_DataSetAfterPost(DataSet: TDataSet);Unit_DataSetAfterPost(DataSet: TDataSet);ShuhartValKSRI_DataSetNewRecord(DataSet: TDataSet);ShuhartSpisokKSRI_DataSetNewRecord(DataSet: TDataSet);ShuhartValKSRI_DataSetBeforePost(DataSet: TDataSet);ShuhartValKSRI_DataSetAfterPost(DataSet: TDataSet);ShuhartValKSRI_DataSetAfterDelete(DataSet: TDataSet);ShuhartValKSRI_DataSetAfterEdit(DataSet: TDataSet);ShuhartSpInd_DataSetNewRecord(DataSet: TDataSet);ShuhValInd_DataSetNewRecord(DataSet: TDataSet);ShuhartSpInd_DataSetAfterPost(DataSet: TDataSet);ShuhValInd_DataSetAfterDelete(DataSet: TDataSet);
{ Private declarations }
{ Public declarations };: TDataModForm;Labor, ProtocolOcenka, ShuhartValueKSRI, CardRep, ShuhartValIdn;
{$R *.dfm}TDataModForm.DataModuleCreate(Sender: TObject);.Open;.StartTransaction;;TDataModForm.DataModuleDestroy(Sender: TObject);.Close;;TDataModForm.RegProtOcenka_DataSetNewRecord(DataSet: TDataSet);_NewRec_StoredProc.ExecProc;_DataSetID.AsInteger:=RegProtOcenka_NewRec_StoredProc.Params[0].AsInteger;_DataSetCURDATE.AsDateTime := Date;_DataSetLABOR.AsString := Labor_DataSetLABOR.AsString;_DataSetN_SR.AsInteger := 3;_DataSetN.AsInteger := 1;_DataSetC.AsFloat := 0;_DataSetTIP.AsInteger := 0;_DataSetGRANICA_TIP.AsInteger := 0;_DataSetSOST.AsInteger := 0;_DataSetN2.AsInteger := 2;_DataSet.Post;.CommitRetaining;_DataSet.Edit;;TDataModForm.ValueListOcenka_DataSetNewRecord(DataSet: TDataSet);_NewRec_StoredProc.Params[0].AsInteger := RegProtOcenka_DataSetID.AsInteger;_NewRec_StoredProc.ExecProc;_DataSetNOMER.AsInteger := RegProtOcenka_DataSetID.AsInteger;_DataSetPROBA.AsInteger := Val_NewRec_StoredProc.Params[1].AsSmallInt;_DataSetX1.AsFloat := 0;_DataSetX2.AsFloat := 0;_DataSetX3.AsFloat := 0;_DataSetX4.AsFloat := 0;_DataSetX5.AsFloat := 0;_DataSetX6.AsFloat := 0;;TDataModForm.ErrorRange_DataSetNewRecord(DataSet: TDataSet);_StoredProc.Params[1].AsInteger := RegProtOcenka_DataSetID.AsInteger;_StoredProc.ExecProc;_DataSetNOMER.AsInteger := RegProtOcenka_DataSetID.AsInteger;_DataSetPROBA.AsInteger := ErrorRangeNewrec_StoredProc.Params[0].AsSmallInt;_DataSetX.AsFloat := 0;_DataSetXG.AsFloat:= 0;;TDataModForm.ErrorRange_DataSetBeforePost(DataSet: TDataSet);_DataSetK.AsFloat := ErrorRange_DataSetX.AsFloat -_DataSetXG.AsFloat -_DataSetC.AsFloat;;TDataModForm.RegProtOcenka_DataSetBeforeEdit(DataSet: TDataSet);.Show;;TDataModForm.RegProtOcenka_DataSetAfterDelete(DataSet: TDataSet);.CommitRetaining;;TDataModForm.ValueListOcenka_DataSetAfterDelete(: TDataSet);_StoredProc.Params[0].AsInteger := RegProtOcenka_DataSetID.AsInteger;_StoredProc.ExecProc;.CommitRetaining;_DataSet.Close;_DataSet.Open;;TDataModForm.ErrorRange_DataSetAfterDelete(DataSet: TDataSet);.CommitRetaining;;
TDataModForm.Metod_DataSetAfterPost(DataSet: TDataSet);.CommitRetaining;_DataSet.Close;_DataSet.Open;_DataSet.Last;;TDataModForm.Unit_DataSetAfterPost(DataSet: TDataSet);.CommitRetaining;_DataSet.Close;_DataSet.Open;_DataSet.Last;;TDataModForm.ShuhartValKSRI_DataSetNewRecord(DataSet: TDataSet);_DataSetNOMER.AsInteger := ShuhartSpisokKSRI_DataSetID.AsInteger;_PROBA_StoredProc.Params[0].AsInteger := ShuhartSpisokKSRI_DataSetID.AsInteger;_PROBA_StoredProc.ExecProc;_DataSetPROBA.AsInteger := NEW_PROBA_StoredProc.Params[1].AsSmallInt;;TDataModForm.ShuhartSpisokKSRI_DataSetNewRecord(: TDataSet);_StoredProc.ExecProc;_DataSetID.AsInteger := NewID_StoredProc.Params[0].AsInteger;_DataSetCURDATE.AsDateTime := Date;_DataSet.Post;.CommitRetaining;_DataSet.Edit;.Show;;TDataModForm.ShuhartValKSRI_DataSetBeforePost(DataSet: TDataSet);_DataSetW.AsFloat := ShuhartValKSRI_DataSetX1.AsFloat - ShuhartValKSRI_DataSetX2.AsFloat;ShuhartValKSRI_DataSetW.AsFloat < 0 then_DataSetW.AsFloat := - ShuhartValKSRI_DataSetW.AsFloat;_DataSetW_OTN.AsFloat := (ShuhartValKSRI_DataSetW.AsFloat * 100)/((ShuhartValKSRI_DataSetX1.AsFloat + ShuhartValKSRI_DataSetX2.AsFloat)/2);;TDataModForm.ShuhartValKSRI_DataSetAfterPost(DataSet: TDataSet);.CommitRetaining;;TDataModForm.ShuhartValKSRI_DataSetAfterDelete(: TDataSet);_StoredProc.Params[0].AsInteger := ShuhartSpisokKSRI_DataSetID.AsInteger;_StoredProc.ExecProc;.CommitRetaining;_DataSet.Close;_DataSet.Open;;TDataModForm.ShuhartValKSRI_DataSetAfterEdit(DataSet: TDataSet);.CommitRetaining;;TDataModForm.ShuhartSpInd_DataSetNewRecord(DataSet: TDataSet);_StoredProc.ExecProc;_DataSetID.AsInteger := NewIdInd_StoredProc.Params[0].AsInteger;_DataSetCURDATE.AsDateTime := Date;_DataSet.Post;.CommitRetaining;_DataSet.Edit;.Show;;TDataModForm.ShuhValInd_DataSetNewRecord(DataSet: TDataSet);_DataSetNOMER.AsInteger := ShuhartSpInd_DataSetID.AsInteger;_StoredProc.Params[0].AsInteger := ShuhartSpInd_DataSetID.AsInteger;_StoredProc.ExecProc;_DataSetN.AsInteger := NewNoInd_StoredProc.Params[1].AsInteger;;TDataModForm.ShuhartSpInd_DataSetAfterPost(DataSet: TDataSet);.CommitRetaining;;TDataModForm.ShuhValInd_DataSetAfterDelete(DataSet: TDataSet);_StoredProc.Params[0].AsInteger := ShuhartSpInd_DataSetID.AsInteger;_StoredProc.ExecProc;.CommitRetaining;_DataSet.Close;_DataSet.Open;
end;.
Печать отчетов и построение контрольных карт нам предоставляет набор визуальных компонентов под названием QReport и QRChart. Подведем небольшой итог. При помощи среды Delphi, в достаточно небольшой срок , приблизительно 60 рабочих часов, из которых большую часть времени заняло создание печатных форм отчетов (протоколов) и контрольных карт мне удалось создать Windows приложение, являющееся клиентом для базы данных, и, соответствующее заявленным требованиям в техническом задании. Одним из огромных плюсов такого подхода к решению поставленной задачи является переносимость программного кода из одной версии Delphi в друг