# CPP_Study_2005_1/BasicBusSimulation/남상협 ¶

• 작성자 : 01 남상협
• 일시 : 05.08.12 10:43

# 데이터 ¶

```~cpp
100
20 30 25 50 30 24 50
```

# Source ¶

```~cpp
//Simulation.cpp
#include <fstream>
#include <vector>
#include <iostream>
#include "BusSimulation.h"
using namespace std;

void main()
{
ifstream fin("data.txt");
BusSimulation busSimulation(fin);
busSimulation.printResult(cout);
}
```

```~cpp
//BusSimulation.h
#ifndef _BUS_SIMULATION_H_
#define	_BUS_SIMULATION_H_
#include <iostream>
#include <vector>
#include <fstream>
#include "Bus.h"
using namespace std;
class BusSimulation {
private:
vector<Bus> m_buses;
ifstream &m_fin;
double m_roundDistance;
public:
BusSimulation(ifstream &fin) : m_fin(fin) {}
void increaseTime(int time);
ostream& printResult(ostream &out);
};
#endif
```

```~cpp
//BusSimulation.cpp
#include <iostream>
#include <fstream>
#include <vector>
#include "BusSimulation.h"

{
m_fin>>m_roundDistance;
double velocity=0;
while(m_fin>>velocity)
{
Bus bus(velocity,m_roundDistance);
m_buses.push_back(bus);
}
}
void BusSimulation::increaseTime(int time)
{
for(vector<Bus>::iterator it=m_buses.begin(); it!=m_buses.end(); ++it)
it->increaseTime(time);

}
ostream& BusSimulation::printResult(ostream &out)
{
for(vector<Bus>::iterator it=m_buses.begin(); it!=m_buses.end(); ++it)
out<< it->getPosition()<<"\n";;

return out;
}

{
int minute = 0;
int hour = 0;
out<<"몇시간 후의 버스 위치를 보시겠습니까?"<<"\n"<<"시간 : ";
in>>hour;
out<<"분 : ";
in>>minute;
increaseTime(hour*3600 + minute*60);
return in;
}
```

```~cpp
//Bus.h
#ifndef _BUS_H_
#define _BUS_H_
class Bus {
private:
int m_velocity; // Km/h
double m_position; // Killo meter
int m_roundDistance; // Killo meter
int m_time; // second
public:
Bus(int velocity, int roundDistance) :
m_velocity(velocity), m_roundDistance(roundDistance) {m_time=0; m_position=0;}
void increaseTime(int time) {m_time+=time; m_position+=(time*m_velocity/3600)%m_roundDistance;}
double getPosition(){return m_position;}
};
#endif
```