~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(); }