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.0261 sec