if (m_Table2. GetRows () < (OCH. kol1 [i] +3))
{
m_Table2. SetRows (m_Table2. GetRows () +1); iTabl++;
}
tp= (atof (m_Table. GetTextMatrix (1,5)) - atof (m_Table. GetTextMatrix (1,4))) *100;
Kli2 [i]. time1 [OCH. o2 [i]] =Tm+ (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (1,4));
float prim=Kli2 [i]. time1 [OCH. o2 [i]] ;
Kli2 [i]. timeVib [OCH. o2 [i]] =Tm+rand ()% (m_Vibiv-m_DoVib) +m_DoVib;
Kli2 [i]. num1 [OCH. o2 [i]] =OCH. kol1 [i] ;
// постановка в очередь
hr=floorf (Tm/60);
min=floorf (Tm-hr*60);
sek=floorf ( (Tm*100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);
m_Table2. SetTextMatrix (OCH. kol1 [i],1+i*4,a);
itoa (OCH. kol1 [i],a,10);
m_Table2. SetTextMatrix (OCH. kol1 [i], i*4,a);
if (stat1 [i] ==0&&stat2 [i] ==0)
{
m_Table2. SetTextMatrix (OCH. kol1 [i],3+i*4,"Выполняется");
OCH. CountObsl [i] =2;
Kli2 [i]. Stat [OCH. o2 [i]] =2;
stat2 [i] =1;
}
else
{
m_Table2. SetTextMatrix (OCH. kol1 [i],3+i*4,"Ожидает");
Kli2 [i]. Stat [OCH. o2 [i]] =1;
}
}
Klient2--;
bol=1;
if (Klient<=0)
{
// очередь со вторым приоритетом
int k;
if (bol==0)
i=rand ()%m_CountOch;
if (m_CountOch==1)
{i=0; }
else
{i=m_CountOch;
for (k= (m_CountOch-1); k>=0; k--)
{
if ( (OCH. kol1 [k] -OCH. Obsluzh1 [k]) <= (OCH. kol1 [i] -OCH. Obsluzh1 [i]))
i=k;
else i=i;
}if (i==m_CountOch) i=i-1;
}
++OCH. kol1 [i] ; // общее количество
++OCH. o1 [i] ; // количество с данным приоритетом
if (m_Table2. GetRows () < (OCH. kol1 [i] +3))
{
m_Table2. SetRows (m_Table2. GetRows () +1);
}
if ( (Tm>=480) && (Tm<720))
{
tp= (atof (m_Table. GetTextMatrix (2,3)) - atof (m_Table. GetTextMatrix (2,2))) *100;
Klient= (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (2,2));
tp= (atof (m_Table. GetTextMatrix (2,5)) - atof (m_Table. GetTextMatrix (2,4))) *100;
Kli [i]. time1 [OCH. o1 [i]] =Tm+ (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (2,4));
Kli [i]. timeVib [OCH. o1 [i]] =Tm+rand ()% (m_Vibiv-m_DoVib) +m_DoVib;
}else
if ( (Tm>=720) && (Tm<900))
{
tp= (atof (m_Table. GetTextMatrix (3,3)) - atof (m_Table. GetTextMatrix (3,2))) *100;
Klient= (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (3,2));
tp= (atof (m_Table. GetTextMatrix (3,5)) - atof (m_Table. GetTextMatrix (3,4))) *100;
Kli [i]. time1 [OCH. o1 [i]] =Tm+ (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (3,4));
Kli [i]. timeVib [OCH. o1 [i]] =Tm+rand ()% (m_Vibiv-m_DoVib) +m_DoVib;
}else
if ( (Tm>=900) && (Tm<1200))
{
tp= (atof (m_Table. GetTextMatrix (4,3)) - atof (m_Table. GetTextMatrix (4,2))) *100;
Klient= (rand ()%tp) *0.01+atof (m_Table. GetTextMatrix (4,2));
tp= (atof (m_Table. GetTextMatrix (4,5)) - atof (m_Table. GetTextMatrix (4,4))) *100;
Kli [i]. time1 [OCH. o1 [i]] =Tm+ (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (4,4));
Kli [i]. timeVib [OCH. o1 [i]] =Tm+rand ()% (m_Vibiv-m_DoVib) +m_DoVib;
}
Kli [i]. num1 [OCH. o1 [i]] =OCH. kol1 [i] ;
// постановка в очередь
hr=floorf (Tm/60);
min=floorf (Tm-hr*60);
sek=floorf ( (Tm*100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);
m_Table2. SetTextMatrix (OCH. kol1 [i],1+i*4,a);
itoa (OCH. kol1 [i],a,10);
m_Table2. SetTextMatrix (OCH. kol1 [i], i*4,a);
if (stat1 [i] ==0&&stat2 [i] ==0)
{
m_Table2. SetTextMatrix (OCH. kol1 [i],3+i*4,"Выполняется");
OCH. CountObsl [i] =1;
Kli [i]. Stat [OCH. o1 [i]] =2;
stat1 [i] =1;
}
else
{
m_Table2. SetTextMatrix (OCH. kol1 [i],3+i*4,"Ожидает");
Kli [i]. Stat [OCH. o1 [i]] =1;
}
}
Klient--;
// // // // // // // // выбывание из очереди // // // // // // // // // // // // // // //
int count;
for (int ki=0; ki<m_CountOch; ki++)
{
for (int j=1; j< (OCH. o1 [ki] +1); j++)
{
count=Kli [ki]. num1 [j] ;
if (strcmp (m_Table2. GetTextMatrix (count,3+ki*4),"Выполняется") ==0)
{
// // // // // /
OCH. TW [ki] ++;
if ( (Kli [ki]. time1 [count] <=Tm) && (Kli [ki]. time1 [count] ! =0))
{
m_Table2. SetTextMatrix (count,3+ki*4,"Обслужен");
OCH. Obsluzh1 [ki] ++;
hr=Kli [ki]. time1 [count] /60;
hr=floorf (hr);
min=floorf ( (Kli [ki]. time1 [count])) - hr*60;
sek=floorf ( ( (Kli [ki]. time1 [count]) *100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);
m_Table2. SetTextMatrix (count,2+ki*4,a);
stat1 [ki] =0; break;
}else stat1 [ki] =1;
// // // // // /
}
}
for (j=1; j< (OCH. o2 [ki] +1); j++)
{
count=Kli2 [ki]. num1 [j] ;
if (strcmp (m_Table2. GetTextMatrix (count,3+ki*4),"Выполняется") ==0)
{
OCH. TW [ki] ++;
if ( (Kli2 [ki]. time1 [count] <=Tm) && (Kli2 [ki]. time1 [count] ! =0))
{
m_Table2. SetTextMatrix (count,3+ki*4,"Обслужен");
OCH. Obsluzh1 [ki] ++;
hr= (Kli2 [ki]. time1 [count]) /60;
hr=floorf (hr);
min=floorf ( (Kli2 [ki]. time1 [count]) - hr*60);
sek=floorf ( ( (Kli2 [ki]. time1 [count]) *100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);
m_Table2. SetTextMatrix (count,2+ki*4,a);
stat2 [ki] =0; break;
}else stat2 [ki] =1;
}
}
}
// // // // // // // // // // // // // // // // // // // // // // // // // // // // /
for (ki=0; ki<m_CountOch; ki++)
{
for (int j=1; j< (OCH. o1 [ki] +1); j++)
{
if (strcmp (m_Table2. GetTextMatrix (Kli [ki]. num1 [j],3+ki*4),"Ожидает") ==0)
{
if (stat1 [ki] ==0&&stat2 [ki] ==0)
{
stat1 [ki] =1;
m_Table2. SetTextMatrix (Kli [ki]. num1 [j],3+ki*4,"Выполняется");
goto l1;
}
if (Kli [ki]. timeVib [j] <=Tm)
{
m_Table2. SetTextMatrix (Kli [ki]. num1 [j],3+ki*4,"Выбыл");
Kli [ki]. time1 [Kli [ki]. num1 [j]] =0;
OCH. Vib1 [ki] ++;
hr=Tm/60;
hr=floorf (hr);
min=floorf (Tm-hr*60);
sek=floorf ( (Tm*100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);
m_Table2. SetTextMatrix (Kli [ki]. num1 [j],2+ki*4,a);
}
l1:; }
}
for (j=1; j< (OCH. o2 [ki] +1); j++)
{
if (strcmp (m_Table2. GetTextMatrix (Kli2 [ki]. num1 [j],3+ki*4),"Ожидает") ==0)
{
if (stat1 [ki] ==0&&stat2 [ki] ==0)
{
stat2 [ki] =1;
m_Table2. SetTextMatrix (Kli2 [ki]. num1 [j],3+ki*4,"Выполняется");
goto l2;
}
if (Kli2 [ki]. timeVib [j] <=Tm)
{
m_Table2. SetTextMatrix (Kli2 [ki]. num1 [j],3+ki*4,"Выбыл");
Kli2 [ki]. time1 [Kli2 [ki]. num1 [j]] =0;
OCH. Vib1 [ki] ++;
hr=Tm/60;
hr=floorf (hr);
min=floorf (Tm-hr*60);
sek=floorf ( (Tm*100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);
m_Table2. SetTextMatrix (Kli2 [ki]. num1 [j],2+ki*4,a);
}
l2:; }
}
}
long index [2] ;
for (index [0] =0; index [0] <m_CountOch; index [0] ++)
{
for (index [1] =0; index [1] <2; index [1] ++)
{
double val = OCH. Obsluzh1 [index [0]] -1;
saRet. PutElement (index, &val);
}
}
m_mychart. SetChartData (saRet. Detach ());
m_mychart. Refresh;
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // /
Tm++;
if (Tm>=timeT)
{
KillTimer (ID_TIMER1);
n=m_Table2. GetRows ();
m_Table2. SetRows (n+5);
for (int j=0; j<m_CountOch; j++)
{
m_Table2. SetTextMatrix (n+2,2+j*4,"вр. работы");
hr=floorf (OCH. TW [j] /60);
min=floorf (OCH. TW [j] -hr*60);
sek=floorf ( (OCH. TW [j] *100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);
m_Table2. SetTextMatrix (n+2,3+j*4,a);
OCH. TP [j] =timeE-OCH. TW [j] ;
m_Table2. SetTextMatrix (n+3,2+j*4,"вр. простоя");
hr=floorf (OCH. TP [j] /60);
min=floorf (OCH. TP [j] -hr*60);
sek=floorf ( (OCH. TP [j] *100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f",hr,min,sek);
m_Table2. SetTextMatrix (n+3,3+j*4,a);
}
strcpy (str,"Общее время работы \t\t");
hr=floorf (timeE/60);
min=floorf (timeE-hr*60);
sek=floorf ( (timeE*100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f\r\n",hr,min,sek);
strcat (str,a);
strcat (str,"Номер аппарата обслуживания \t");
for (j=0; j<m_CountOch; j++) {sprintf (a,"%d\t",j+1); strcat (str,a); }
strcat (str,"\r\n");
strcat (str,"Время работы аппарата\t\t");
for (j=0; j<m_CountOch; j++)
{sprintf (a,"%s\t",m_Table2. GetTextMatrix (n+2,3+4*j)); strcat (str,a); }
strcat (str,"\r\n");
strcat (str,"Время простоя аппарата\t\t");
for (j=0; j<m_CountOch; j++)
{sprintf (a,"%s\t",m_Table2. GetTextMatrix (n+3,3+4*j)); strcat (str,a); }
strcat (str,"\r\n");
strcat (str,"Общее количество клиентов \t");
for (j=0; j<m_CountOch; j++)
{sprintf (a,"%d\t",OCH. kol1 [j]); strcat (str,a); }
strcat (str,"\r\n");
strcat (str,"Количество обслуженных клиентов\t");
for (j=0; j<m_CountOch; j++)
{sprintf (a,"%d\t",OCH. Obsluzh1 [j] -1); strcat (str,a); }
strcat (str,"\r\n");
strcat (str,"Количество выбывших клиентов\t");
for (j=0; j<m_CountOch; j++)
{sprintf (a,"%d\t",OCH. Vib1 [j] -1); strcat (str,a); }
LPTSTR sizeF;
LPTSTR *sizeOf;
CStdioFile File ("отчёт. txt",CFile:: modeCreate|CFile:: modeWrite|CFile:: typeBinary);
File. WriteString ( (LPCTSTR) str);
ShellExecute (NULL,NULL,"отчёт. txt",NULL, NULL, SW_SHOWNORMAL);
NTime=FALSE;
}
}
void CSMODlg:: OnButton2 ()
{
KillTimer (ID_TIMER1);
NTime=TRUE;
}
void CSMODlg:: OnButton3 ()
{
char a [255] ;
float hr,min,sek;
strcpy (str,"Общее время работы \t\t");
hr=floorf (timeE/60);
min=floorf (timeE-hr*60);
sek=floorf ( (timeE*100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f\r\n",hr,min,sek);
strcat (str,a);
strcat (str,"Номер аппарата обслуживания \t");
for (int j=0; j<m_CountOch; j++) {sprintf (a,"%d\t\t",j+1); strcat (str,a); }
strcat (str,"\r\n");
strcat (str,"Время работы аппарата\t\t");
for (j=0; j<m_CountOch; j++)
{
hr=floorf (OCH. TW [j] /60);
min=floorf (OCH. TW [j] -hr*60);
sek=floorf ( (OCH. TW [j] *100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f\t\t",hr,min,sek);
strcat (str,a);
}
strcat (str,"\r\n");
strcat (str,"Время простоя аппарата\t\t");
for (j=0; j<m_CountOch; j++)
{
OCH. TP [j] =timeE-OCH. TW [j] ;
hr=floorf (OCH. TP [j] /60);
min=floorf (OCH. TP [j] -hr*60);
sek=floorf ( (OCH. TP [j] *100- (hr*60+min) *100) /60);
sprintf (a,"%2.0f:%2.0f:%2.0f\t\t",hr,min,sek);
strcat (str,a);
}
strcat (str,"\r\n");
strcat (str,"Общее количество клиентов \t");
for (j=0; j<m_CountOch; j++)
{sprintf (a,"%d\t\t",OCH. kol1 [j]); strcat (str,a); }
strcat (str,"\r\n");
strcat (str,"Количество обслуженных клиентов\t");
for (j=0; j<m_CountOch; j++)
{sprintf (a,"%d\t\t",OCH. Obsluzh1 [j] -1); strcat (str,a); }
strcat (str,"\r\n");
strcat (str,"Количество выбывших клиентов\t");
for (j=0; j<m_CountOch; j++)
{sprintf (a,"%d\t\t",OCH. Vib1 [j] -1); strcat (str,a); }
COtchDlg m_Otch;
UpdateData ();
m_Otch. m_Show=str;
UpdateData (FALSE);
KillTimer (ID_TIMER1);
NTime=FALSE;
}