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