Глава 2. Автоматизация и исчисление показателей численности кадров организации Построение алгоритма программы
Скачать 64.5 Kb.
|
Глава 2. Автоматизация и исчисление показателей численности кадров организации 2.1. Построение алгоритма программы Имеем условие: 45 работников отработали полный календарный месяц; 15 работников отработали 25 календарных дней; 11 работников отработали 20 календарных дней; 7 работников отработали 11 календарных дней. Рассчитать среднесписочную численность работников организации в марте текущего года. Для нахождения среднесписочной численности работников организации необходимо в первую очередь вычислить списочную численность работников за календарные дни (чел/дней): 45*31=1395 (чел/дн.); 15*25=375 (чел/дн.); 11*20=220 (чел/дн.); 7*11=77 (чел/дн.). Найдем среднесписочную численность кадров (формула 1): unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus; type TForm1 = class(TForm) mm1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; lbl1: TLabel; edt1: TEdit; edt2: TEdit; edt3: TEdit; edt4: TEdit; lbl2: TLabel; edt5: TEdit; edt6: TEdit; edt7: TEdit; edt8: TEdit; btn1: TButton; btn2: TButton; lbl3: TLabel; Edit1: TEdit; edt9: TEdit; edt10: TEdit; edt11: TEdit; lbl4: TLabel; edt12: TEdit; procedure N3Click(Sender: TObject); procedure btn1Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure btn2Click(Sender: TObject); procedure edt1KeyPress(Sender: TObject; var Key: Char); procedure edt2KeyPress(Sender: TObject; var Key: Char); procedure edt3KeyPress(Sender: TObject; var Key: Char); procedure edt4KeyPress(Sender: TObject; var Key: Char); procedure edt5KeyPress(Sender: TObject; var Key: Char); procedure edt6KeyPress(Sender: TObject; var Key: Char); procedure edt7KeyPress(Sender: TObject; var Key: Char); procedure edt8KeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; const rab=45; //45 работников rab2=15; // 15 работников rab3=11; // 11 работников rab4=7; // 7 работников rabdn=31; // 31 день rab1dn=25; // 25 дней rab2dn=20; // 20 дней rab3dn=11; // 11 дней var Form1: TForm1; Vrab,Vrab2,Vrab3,Vrab4: Real; Vrabdn, Vrab1dn, Vrab2dn, Vrab3dn:Real; implementation uses Unit2, Unit3; {$R *.dfm} procedure TForm1.N3Click(Sender: TObject); // автоматический ввод значений из условия задачи begin edt1.text:=FloatToStr(rab); edt2.Text:=FloatToStr(rab2); edt3.Text:=FloatToStr(rab3); edt4.Text:=FloatToStr(rab4); edt5.Text:=FloatToStr(rabdn); edt6.Text:=FloatToStr(rab1dn); edt7.Text:=FloatToStr(rab2dn); edt8.Text:=FloatToStr(rab3dn); end; procedure TForm1.btn1Click(Sender: TObject); // решение var ChDn, ChDn1, ChDn2, ChDn3:Real; // чел/дней CC:Real; // среднесписочная численность begin if (edt1.Text='') or (edt2.Text='') or (edt3.Text='') or (edt4.Text='') or (edt5.Text='') or (edt6.Text='') or (edt7.Text='') or (edt8.Text='') then MessageDLG('Одно из полей не заполнено, найди и заполни',mtError,[mbOk],0) else begin Vrab:=StrToFloat(edt1.Text); Vrab2:=StrToFloat(edt2.Text); Vrab3:=StrToFloat(edt3.Text); Vrab4:=StrToFloat(edt4.Text); Vrabdn:=StrToFloat(edt5.Text); Vrab1dn:=StrToFloat(edt6.text); Vrab2dn:=StrToFloat(edt7.Text); Vrab3dn:=StrToFloat(edt8.Text); if (Vrab>=0) and (Vrabdn>=0) then begin ChDn:=Vrab*vrabdn; edit1.text:=FloatToStr(ChDn); end else MessageDLG('Введено некорректное значение в одно из поле. Значение должно быть больше нуля',mtError,[mbOk],0); if (Vrab2>=0) and (Vrab1dn>=0) then begin ChDn1:=Vrab2*vrab1dn; edt9.text:=FloatToStr(ChDn1); end else MessageDLG('Введено некорректное значение в одно из поле. Значение должно быть больше нуля',mtError,[mbOk],0); if (Vrab3>=0) and (Vrab2dn>=0) then begin ChDn2:=Vrab3*vrab2dn; edt10.text:=FloatToStr(ChDn2); end else MessageDLG('Введено некорректное значение в одно из поле. Значение должно быть больше нуля',mtError,[mbOk],0); if (Vrab4>=0) and (Vrab3dn>=0) then begin ChDn3:=Vrab4*vrab3dn; edt11.text:=FloatToStr(ChDn3) end else MessageDLG('Введено некорректное значение в одно из поле. Значение должно быть больше нуля',mtError,[mbOk],0); if (Vrabdn>=0) and (Vrab1dn>=0) and (Vrab2dn>=0) and (Vrab3dn>=0) and (ChDn>=0) and (ChDn1>=0) and (ChDn2>=0) and (ChDn3>=0) then begin CC:=(ChDn+ChDn1+ChDn2+ChDn3)/(Vrabdn+Vrab1dn+Vrab2dn+Vrab3dn); edt12.Text:=FloatToStrf(CC,ffFixed,6,0); end else MessageDLG('Введено некорректное значение в одно из поле. Значение должно быть больше нуля',mtError,[mbOk],0); // ограничения ввода в edit чисел больше 31 if (Vrabdn>=32) then begin MessageDlg('Введено неправильное значение в количество дней 1 графа!',mtError,[mbOk],0); Abort; end; if (Vrab1dn>=32) then begin MessageDlg('Введено неправильное значение в количество дней 2 графа!',mtError,[mbOk],0); Abort; end; if (Vrab2dn>=32) then begin MessageDlg('Введено неправильное значение в количество дней 3 графа!',mtError,[mbOk],0); Abort; end; if (Vrab3dn>=32) then begin MessageDlg('Введено неправильное значение в количество дней 4 графа!',mtError,[mbOk],0); Abort; end; end; end; procedure TForm1.N5Click(Sender: TObject); // открытие условия задачи begin form2.show; end; procedure TForm1.N6Click(Sender: TObject); // открытие справки begin form3.show; end; procedure TForm1.N2Click(Sender: TObject); // выход из программы begin Close; end; procedure TForm1.btn2Click(Sender: TObject); // очистить begin edt1.Text:=''; edt2.Text:=''; edt3.Text:=''; edt4.Text:=''; edt5.Text:=''; edt6.Text:=''; edt7.Text:=''; edt8.Text:=''; edit1.Text:=''; edt9.Text:=''; edt10.Text:=''; edt11.Text:=''; edt12.Text:=''; end; // ограничение на ввод букв procedure TForm1.edt1KeyPress(Sender: TObject; var Key: Char); begin if not (Key in [#8,'0'..'9',',']) then Key:=#0; end; procedure TForm1.edt2KeyPress(Sender: TObject; var Key: Char); begin if not (Key in [#8,'0'..'9',',']) then Key:=#0; end; procedure TForm1.edt3KeyPress(Sender: TObject; var Key: Char); begin if not (Key in [#8,'0'..'9',',']) then Key:=#0; end; procedure TForm1.edt4KeyPress(Sender: TObject; var Key: Char); begin if not (Key in [#8,'0'..'9',',']) then Key:=#0; end; procedure TForm1.edt5KeyPress(Sender: TObject; var Key: Char); begin if not (Key in [#8,'0'..'9',',']) then Key:=#0; end; procedure TForm1.edt6KeyPress(Sender: TObject; var Key: Char); begin if not (Key in [#8,'0'..'9',',']) then Key:=#0; end; procedure TForm1.edt7KeyPress(Sender: TObject; var Key: Char); begin if not (Key in [#8,'0'..'9',',']) then Key:=#0; end; procedure TForm1.edt8KeyPress(Sender: TObject; var Key: Char); begin if not (Key in [#8,'0'..'9',',']) then Key:=#0; end; end. Блок-схема Данная блок-схема позволяет нам подробно рассматривать принцип работы программы автоматизации и исчисления показателей численности кадров. Язык программирования |