U E D R , A S I H C RSS

Bus Simulation/상협

~cpp 
//BusSimulation.h
/* 계   Meter  minute .
   Km  Hour, Minute  .*/

class Bus {
private:
	int m_people; //   
	double m_velocity; //  K/m
	long m_Minute; //  간
	int m_currentDistance; //   Meter 갔 
	int m_totalSectionLength; //   구간 km
public:
	Bus();
	void SetVelocity(double v) {m_velocity=v;}; //  .
	void SetMinute(int m) {m_Minute=m;};  //     
	void IncreasePassenger(int n) {m_people+=n;}; //  .
	void IncreaseMinute(int t) ;  //  .
	long GetMinute() {return m_Minute;};  //간() 값 .
	int GetDistance() {return m_currentDistance;}; //거()값 .
	int GetPeopleNumber() {return m_people;}; // .
	void IncreaseDistance(double n) {m_currentDistance+=n;}; //  .
};

Bus::Bus()
{
	m_people=0;
	m_velocity=0; //  K/m
	m_Minute=0;
	m_currentDistance=0;
	m_totalSectionLength = 52;  //   구간 52km
}

void Bus::IncreaseMinute(int t) // ..         
{                            //    .
	m_Minute+=t;  //   고
	IncreaseDistance(t*((m_velocity*1000)/60));  //그   
	if(m_currentDistance>=m_totalSectionLength*1000)  //      
	{                                           //    .
                                                    // 간거 55km  50km 결국 5km간.
                                                    // .
		m_currentDistance= m_currentDistance%(m_totalSectionLength*1000);
		m_people=0; //   .
	}
}

class BusSimulation {
private:
	double m_MeterPerMinute_Bus; //  m/m
	double m_KilloPerHour_Bus; //  Km/h
	int m_IncreasePerMinute_People; //   1  
	int m_MinuteOfInterval; //  간격
	int m_ridingSecond; //1   간() 
	int m_BusCapacity; //       
	Bus m_buses[10]; //10   . 
	int m_busStation[10]; // 10개   
	long m_CurrentMinute; //  간 
	long m_DueMinute; //      값
	long m_waitingPeopleInBusStation[10]; //각   
public:
	BusSimulation(); //각 값   
	void Process(); //계 
	void PrintResult(); //결과 
	void IncreaseTime(); //1   감 
	void CheckBusStation(); //각     
	void StationStopProcess(Bus &CheckedBus, int Station); //    
														//   
};



//BusSimulation.cpp
#include <iostream>
using namespace std;
#include "BusSimulation.h"
/*     3/1  */
BusSimulation::BusSimulation()
{
	m_KilloPerHour_Bus = 24;  //  24km/h
	m_MeterPerMinute_Bus = (m_KilloPerHour_Bus*1000)/60; //   m/m
	m_IncreasePerMinute_People = 5;  //   
	m_MinuteOfInterval = 15; // 간격 15
	m_CurrentMinute = 0; //0  
	m_ridingSecond = 1;  
	m_BusCapacity = 100;
	for(int i=0;i<10;i++)
	{
		m_waitingPeopleInBusStation[i] = 0;
	}
	for(i=0;i<10;i++)
		m_buses[i].SetVelocity(m_KilloPerHour_Bus);	
	m_busStation[0]=4;  //  ,  Km
	m_busStation[1]=8;
	m_busStation[2]=16;
	m_busStation[3]=20;
	m_busStation[4]=28;
	m_busStation[5]=24;
	m_busStation[6]=36;
	m_busStation[7]=40;
	m_busStation[8]=44;
	m_busStation[9]=52;

}

void BusSimulation::Process()  //    
{
	m_buses[0].SetMinute(1); // 0  .
	while(m_CurrentMinute!=m_DueMinute) //      .
		IncreaseTime();
}

void BusSimulation::PrintResult() //결과 
{
	cout<<"Bus Simulation\n";
	cout<<"    까? 그  !\n";
	cout<<" : "<<m_KilloPerHour_Bus<<"K/m\t"
		<<"     : "<<m_IncreasePerMinute_People<<"\n";
	cout<<"  까? \n";
	cout<<"간 : ";
	int hour;
	cin>>hour;
	cout<<" : ";
	int minute;
	cin>>minute;
	m_DueMinute = hour*60 + minute;
	Process();
	cout<<"결과 . \n";
	for(int i=0;i<10;i++)
	{
		cout<<i+1<<"   ( ) : "<<m_buses[i].GetDistance()
			<<"Meter\t"<<" : "<<m_buses[i].GetPeopleNumber()<<"\n";
	}
	
}

void BusSimulation::IncreaseTime() //         
{                                  //    .    
                                   //    .
	m_CurrentMinute++;     //   .
	
	for(int i=0;i<10;i++) //0~9 ...
	{
 		if(m_buses[i].GetMinute()!=0)  //     0 ..  
			m_buses[i].IncreaseMinute(1); // , 그   
		if(i!=0 && m_buses[i-1].GetMinute()==m_MinuteOfInterval) // 15    
			m_buses[i].IncreaseMinute(1); //    1 .   
                                                          //  
	}
	for(int j=0;j<10;j++)
		m_waitingPeopleInBusStation[j] += 1; //    .
	CheckBusStation(); //    
}

void BusSimulation::CheckBusStation()
{
	
	for(int i=0;i<10;i++)  //0~9 
	{
		for(int j=0;j<10;j++) //0~9 
			if(m_buses[i].GetDistance()==(m_busStation[j]*1000)) // 
				StationStopProcess(m_buses[i],j); //    
                                                                       //  
	}
}

void BusSimulation::StationStopProcess(Bus &CheckedBus, int Station)
{
	int decreaseNumber = int(CheckedBus.GetPeopleNumber()/4);
	CheckedBus.IncreasePassenger(-(decreaseNumber));
	int peopleCount = m_waitingPeopleInBusStation[Station];
	int sum = peopleCount+CheckedBus.GetPeopleNumber();
	int real_passenger=0;
	if(sum>=m_BusCapacity)
	{
		real_passenger = m_BusCapacity-CheckedBus.GetPeopleNumber();
		m_waitingPeopleInBusStation[Station]-=real_passenger;
	}
	else
	{
		real_passenger = m_waitingPeopleInBusStation[Station];
		m_waitingPeopleInBusStation[Station] = 0;
	}
	CheckedBus.IncreasePassenger(real_passenger);
	int consumptionTime = real_passenger*((m_ridingSecond)/60);
	for(int k=0;k<10;k++)
	{
		if(m_buses[k].GetMinute()!=0)
			m_buses[k].IncreaseMinute(consumptionTime);
	}
}

void main()
{
	BusSimulation ex;
	ex.PrintResult();
}


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