|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Разработка имитационной модели системы массового обслуживанияРазработка имитационной модели системы массового обслуживания2 Министерство образования и науки Республики Казахстан Карагандинский государственный технический университет Кафедра ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к курсовому проекту по дисциплине "Прикладная теория систем" Тема: "Разработка имитационной модели системы массового обслуживания" Руководители Студент (группа) Караганда 2009 Содержание
Лифшиц А.Л. Статистическое моделирование СМО, М., 1978. Советов Б.А., Яковлев С.А. Моделирование систем, М: Высшая школа, 1985. Гмурман В.Е. Теория вероятностей и математическая статистика, М: Высшая школа, 2001. Пригодин Н.В. Системный подход в моделироании М., 1986. ПриложениеЛистинг программыvoid CSMODlg:: OnButton1 (){UpdateData ();if (! NTime){timeS=m_StartH*60+m_StartM;timeE=m_EndH*60+m_EndM;timeT=timeS+timeE;int i=timeS;Tm=timeS;m_Table2. SetCols (m_CountOch*4);m_Table2. SetRows (1);m_Table2. SetRows (4);int j=0;while (j< (m_CountOch*4)){m_Table2. SetTextMatrix (0,j,"№"); m_Table2. SetColWidth (j,350);m_Table2. SetTextMatrix (0,j+1,"Получение"); m_Table2. SetColWidth (j+1,700);m_Table2. SetTextMatrix (0,j+2,"Обслужен"); m_Table2. SetColWidth (j+2,700);m_Table2. SetTextMatrix (0,j+3,"Состояние"); m_Table2. SetColWidth (j+3,800);j+=4;}for (i=0; i<1000; i++){OCH. o1 [i] =0; OCH. o2 [i] =0;OCH. kol1 [i] =0; OCH. kol2 [i] =0;OCH. Obsluzh1 [i] =1;OCH. Vib1 [i] =1;OCH. TP [i] =0; OCH. TW [i] =0;stat1 [i] =0;stat2 [i] =0;for (int k=0; k<1000; k++){Kli [i]. num1 [k] =0; Kli [i]. time1 [k] =0; Kli [i]. timeVib [k] =0;Kli2 [i]. num1 [k] =0; Kli2 [i]. time1 [k] =0; Kli2 [i]. timeVib [k] =0;}}OCH. io1=0; OCH. io2=0;Klient=0; Klient2=0;bol=0;}LTimer1=SetTimer (ID_TIMER1,100,NULL);UpdateData (FALSE);}void CSMODlg:: OnTimer (UINT uTime){int i,n,tp;float hr,min,sek;char a [255] ;time_t t;srand ( (unsigned) time (&t));COleSafeArray saRet;DWORD numElements [] = {m_CountOch, 2};saRet. Create (VT_R8, 2, numElements);if (Klient2<=0 && bol! =0){ // очередь с первым приоритетомi=0;tp= (atof (m_Table. GetTextMatrix (1,3)) - atof (m_Table. GetTextMatrix (1,2))) *100;Klient2= (rand ()%tp) *0.01+atoi (m_Table. GetTextMatrix (1,2));++OCH. kol1 [i] ; // общее количество для аппарата++OCH. o2 [i] ; // количество с данным приоритетом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;}elseif ( (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;}elseif ( (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;} |
РЕКЛАМА
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |