U E D R , A S I H C RSS

Bus Simulation/태훈zyint

comment

한히 10 -_-
;

STL 팩토 -ㅅ-

태훈 ㅋㅋ ㅎㅎ -
- ㅇㅅㅇ;;;; ;;

main.cpp

#include <iostream>
#include <fstream> 
#include <vector>
#include <windows.h> //sleep
#include <string>
#include <conio.h>


const int BusStationNo	= 10;	//   
const int BusNo			= 10;	//   
const long timerate		= 1*60;	//  행할   
#include "class.h"
#include "function.h"


using namespace std;


void gotoxy(int x, int y);
    

int main()
{
	
	BusType bus[BusNo];			//
	int MinuteOfInterval=12*60;	//   sec	
    long waitingPeopleInBusStation[BusStationNo] = {0,0,}; //   
	int IncreasePerMinute_People = 4; //   1   
    int ridingSecond = 2;             //1    ()  

	int LastMovingBusIndex=-1;  //   
	int LastMovingBusStartTime= -1 * MinuteOfInterval;
	int i,j;					//iterator
	long Now=0;

	


	while(1)
	{
		
		Now += timerate;

		//  
		cout <<  endl << " ";
		for(i=0,j=0;i<=bus->BusLanelength();++i)	{
			if(bus->BusStationPos(j)==i) {
				gotoxy(i+j+2,1);
				waitingPeopleInBusStation[j]+= timerate * (IncreasePerMinute_People/60.0);
				cout << waitingPeopleInBusStation[j] ;
				
				gotoxy(i+j+2,2);
				cout << "*";
				j++;
			}
						
			if(i<bus->BusLanelength()) cout << "-";
		}

		gotoxy(1,BusNo+3); 
		for(i=0;i<=bus->BusLanelength()+BusStationNo;++i ) cout<< "-";
		cout << endl;


		// ,  
		if(bus[LastMovingBusIndex+1].ismove()==false && LastMovingBusIndex+1 <= BusNo
		   && Now - LastMovingBusStartTime >= MinuteOfInterval) {
			bus[LastMovingBusIndex+1].start();
			LastMovingBusStartTime=Now;
			LastMovingBusIndex++;
			
		}

		// 
		for(i=0;i<BusNo;++i) {
			if(bus[i].isstation() != -1 ){ // 
				int withdraw = zrnd(0,bus[i].getPassengers()); //   
				int cangetno = bus[i].getBusCapacity() - bus[i].getPassengers(); //   
				long& stationno = waitingPeopleInBusStation[bus[i].isstation()]; //    
				int ride_no =0;
			
				// 
				bus[i].getPassengers(-1 * withdraw);
				cangetno += withdraw;

				// 
				if(stationno < cangetno){ // 태      
					ride_no=stationno;
					while(timerate - ride_no * ridingSecond < 0)
						ride_no--;
					bus[i].getPassengers(ride_no);
					waitingPeopleInBusStation[bus[i].isstation()]=stationno-ride_no;

				} else { //탈      
					ride_no=cangetno;
					while(timerate - ride_no * ridingSecond < 0)
						ride_no--;
					bus[i].getPassengers(ride_no);
					stationno -= ride_no;
				}
				gotoxy(bus[i].getBusPos()+1,1);
				cout << stationno << " ";
				

				bus[i].movebus(timerate - ride_no * ridingSecond);
			} else{ //  
				bus[i].movebus();
			}

			gotoxy(bus[i].getBusPos()+1,i+3);
			cout << i;
			gotoxy(bus[i].getBusPos()+1,BusNo+4);
			cout << i << endl;
		}

		//   
		for(i=0;i<BusNo;++i)
			cout << i << ":" << bus[i].getBusPos() << "," << bus[i].isstation() << ", :" << bus[i].getPassengers() <<endl;
		cout << Now;

		
		

		//Sleep(100);
		//ESC
		//if(getch()==27) break;
		system("cls");
		
	}		
	

	
	
	return 0;
}




void gotoxy(int x, int y)  
{  
        COORD Pos = {x - 1, y - 1};  
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);  
} 


class.h

class BusType
{
public:
	


	int BusLanelength() { return busStation[BusStationNo-1]; } //       
	int BusStationPos(int i) { return busStation[i]; }         //    환
	int getBusPos() { return buspos; } //    
	int pastTime(int sec) { return CurrentMinute += sec; }
	void start() { movingbus=true;} //  .  !
	double movebus(double sec = timerate) {  //  sec   ,  환
		if (!ismove()) return -1; //  &#46468;  .

		buspos += (sec/3600.0)*KilloPerHour_Bus; // 
		
		//      .
		while(buspos > BusLanelength() + BusStationNo+1) buspos -= BusLanelength() + BusStationNo +1;
		pastTime(sec); // 
		return buspos;
	} 
	int isstation(){  //      TRUE
		int i=0;
		while(getBusPos() != busStation[i]+i+1 && i<= BusStationNo-1){
			i++;
		}
		if(BusStationNo-1 < i) return -1; //  
		return i;
	}

	bool ismove() { return movingbus; }      //  ?

	BusType()
	{
		KilloPerHour_Bus   = 50.0;    //  Km/h 
		MeterPerMinute_Bus = KilloPerHour_Bus * ( 1000.0 / 60.0 );  //  m/m 
		BusCapacity = 50;             //    

        busStation[0]=4;  //      ,  Km 
        busStation[1]=8; 
        busStation[2]=16; 
        busStation[3]=20; 
        busStation[4]=24; 
        busStation[5]=28; 
        busStation[6]=36; 
        busStation[7]=40; 
        busStation[8]=44; 
        busStation[9]=52; 

		CurrentMinute = 0;    //  sec
		buspos = 0;
		movingbus=false; //  ?
		passengers=0;
	}
	
	int getBusCapacity() { return BusCapacity;}
	int getPassengers(int n=0) { return passengers+=n; }

private:
	double MeterPerMinute_Bus;    //  m/m 
    double KilloPerHour_Bus;      //  Km/h 


    int BusCapacity;              //     
    int busStation[BusStationNo]; //10  ,      
    long CurrentMinute;           //    sec
    long DueMinute;               //       
    //Bus buses[BusNo];           //10   .  
	int passengers;               //    

	double buspos; //   
	bool movingbus; //  ?
};

function.h

#include <stdlib.h>
#include <time.h>

int zrnd(int start,int end)
{
	int r;
	srand(time(NULL));
	
	r = rand()%(end-start+1) + start;
	return r;
}

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:39
Processing time 0.0289 sec