Смекни!
smekni.com

Разработка имитационной модели системы массового обслуживания (стр. 2 из 2)

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,"Общее время работы &bsol;t&bsol;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&bsol;r&bsol;n",hr,min,sek);

strcat (str,a);

strcat (str,"Номер аппарата обслуживания &bsol;t");

for (j=0; j<m_CountOch; j++) {sprintf (a,"%d&bsol;t",j+1); strcat (str,a); }

strcat (str,"&bsol;r&bsol;n");

strcat (str,"Время работы аппарата&bsol;t&bsol;t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%s&bsol;t",m_Table2. GetTextMatrix (n+2,3+4*j)); strcat (str,a); }

strcat (str,"&bsol;r&bsol;n");

strcat (str,"Время простоя аппарата&bsol;t&bsol;t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%s&bsol;t",m_Table2. GetTextMatrix (n+3,3+4*j)); strcat (str,a); }

strcat (str,"&bsol;r&bsol;n");

strcat (str,"Общее количество клиентов &bsol;t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d&bsol;t",OCH. kol1 [j]); strcat (str,a); }

strcat (str,"&bsol;r&bsol;n");

strcat (str,"Количество обслуженных клиентов&bsol;t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d&bsol;t",OCH. Obsluzh1 [j] -1); strcat (str,a); }

strcat (str,"&bsol;r&bsol;n");

strcat (str,"Количество выбывших клиентов&bsol;t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d&bsol;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,"Общее время работы &bsol;t&bsol;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&bsol;r&bsol;n",hr,min,sek);

strcat (str,a);

strcat (str,"Номер аппарата обслуживания &bsol;t");

for (int j=0; j<m_CountOch; j++) {sprintf (a,"%d&bsol;t&bsol;t",j+1); strcat (str,a); }

strcat (str,"&bsol;r&bsol;n");

strcat (str,"Время работы аппарата&bsol;t&bsol;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&bsol;t&bsol;t",hr,min,sek);

strcat (str,a);

}

strcat (str,"&bsol;r&bsol;n");

strcat (str,"Время простоя аппарата&bsol;t&bsol;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&bsol;t&bsol;t",hr,min,sek);

strcat (str,a);

}

strcat (str,"&bsol;r&bsol;n");

strcat (str,"Общее количество клиентов &bsol;t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d&bsol;t&bsol;t",OCH. kol1 [j]); strcat (str,a); }

strcat (str,"&bsol;r&bsol;n");

strcat (str,"Количество обслуженных клиентов&bsol;t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d&bsol;t&bsol;t",OCH. Obsluzh1 [j] -1); strcat (str,a); }

strcat (str,"&bsol;r&bsol;n");

strcat (str,"Количество выбывших клиентов&bsol;t");

for (j=0; j<m_CountOch; j++)

{sprintf (a,"%d&bsol;t&bsol;t",OCH. Vib1 [j] -1); strcat (str,a); }

COtchDlg m_Otch;

UpdateData ();

m_Otch. m_Show=str;

UpdateData (FALSE);

KillTimer (ID_TIMER1);

NTime=FALSE;

}