Skip to content
Snippets Groups Projects
Commit 936a2098 authored by Frederik Simonsen's avatar Frederik Simonsen
Browse files

finn differanse baklengs og fiks av output på rutetabell

parent 2d7914f3
Branches
No related tags found
1 merge request!4Frederik
......@@ -125,12 +125,35 @@ bool Rute::finnesStopp(const int indeks) {
return false;
}
int Rute::finnDifferanse(const int nr) {
/**
* Funksjon for å sjekke om et klokkeslett er gyldig (00:00-23:59)
*
* @param time
* @param minutt
* @return true
* @return false
*/
bool Rute::gyldigTid(const int time, const int minutt) {
if ((time >= 0 && time <= 23) && (minutt >= 0 && minutt <= 59)) {
return true;
} else
return false;
}
int Rute::finnDifferanse(const int nr, const Retning retning) {
int totMin = 0;
for (auto it = stoppene.begin(); it != stoppene.end(); it++) {
totMin += (*it)->hentMin();
if ((*it)->hentNr() == nr)
return totMin;
if (retning == Fram) {
for (auto it = stoppene.begin(); it != stoppene.end(); it++) {
totMin += (*it)->hentMin();
if ((*it)->hentNr() == nr)
return totMin;
}
} else if (retning == Tilbake) {
for (auto it = stoppene.rbegin(); it != stoppene.rend(); it++) {
if ((*it)->hentNr() == nr)
return totMin;
totMin += (*it)->hentMin();
}
}
return -1; // Skal ikke skje
}
......@@ -145,29 +168,76 @@ string Rute::hentNavn(const Retning retning) {
return startSted;
}
/**
*
*
* @param diff - differanse mellom startsted og aktuelt stoppested i minutter
* @param start - faktisk startstedsnavn på ruten
* @param stSted - faktisk navn på aktuellt stoppested
* @see Rute::gyldigTid(...)
*/
void Rute::ruteTabell(const int diff, const string start, const string stSted) {
int startT,
sluttT,
startM,
sluttM,
tidMellom;
int startT, // starttime
startTotal, // regner ut total starttid i minutter
sluttT, // slutt-time
sluttTotal, // regner ut total slutttid i minutter
startM, // startminutter
sluttM, // slutt-minutter
tidMellom, // Tid mellom hver avgang i minutter
tPrint, // hjelpevariabel for å sørge for korrekt utskrift av time
mPrint; // hjelpevariabel for å sørge for korrekt utskrift av minutter
cout << "\nRuteavganger fra startstedet (" << start << ") - "
<< "avslutt med 0 0):\n\n";
cout << "Fra kl. (00:01 - 23:59): ";
cin >> startT >> startM; cin.ignore();
while (startT != 0 || startM != 0) {
cin >> startT >> startM; cin.ignore(); // Leser starttid
while (!gyldigTid(startT, startM)) { // Sørger for at starttid er gyldig
cout << "\nUlovlig klokkeslett. Prøv igjen (tt mm): ";
cin >> startT >> startM; cin.ignore();
}
while (startT != 0 || startM != 0) { // Så lenge bruker ikke taster 0 0
// Leser tid mellom avganger
tidMellom = lesInt("Tid mellom avganger", MINTID, MAXTID);
cout << "Til kl. (" << ((startT < 10) ? "0" : "") << startT
<< ':' << ((tidMellom < 10) ? "0" : "")
<< tidMellom << " - 23:59): ";
startTotal = (startT*60)+startM+tidMellom; // Omregner for sjekk
tPrint = startTotal/60; // Regner ut gyldig utskrift:
mPrint = startTotal%60;
cout << "Til kl. (" << ((tPrint < 10) ? "0" : "") << tPrint
<< ':' << ((mPrint < 10) ? "0" : "") << mPrint
<< " - 23:59): ";
// Leser slutt tid
cin >> sluttT >> sluttM; cin.ignore();
sluttTotal = (sluttT*60)+sluttM; // Omregner for sjekk
// Sørger for lovlig slutt-tid
while (!gyldigTid(sluttT, sluttM) || sluttTotal < startTotal) {
cout << "\nUlovlig klokkeslett. Prøv igjen (tt mm): ";
cin >> sluttT >> sluttM; cin.ignore();
sluttTotal = (sluttT*60)+sluttM; // Omregner for sjekk
}
tPrint = (sluttTotal+1)/60; // Regner ut gyldig utskrift
mPrint = (sluttTotal+1)%60;
cout << "\n\nFra kl. (" << ((sluttT < 10) ? "0" : "") << sluttT
<< ':' << ((sluttM+1 < 10) ? "0" : "") << sluttM+1
cout << "\n\nFra kl. (" << ((tPrint < 10) ? "0" : "") << tPrint
<< ':' << ((mPrint < 10) ? "0" : "") << mPrint
<< " - 23:59): ";
cin >> startT >> startM; cin.ignore();
cin >> startT >> startM; cin.ignore(); // Leser ny starttid
startTotal = (startT*60)+startM; // Omregning
// Sørger for ny lovlig starttid:
while ((!gyldigTid(startT, startM) || startTotal <= sluttTotal)
&& (startT != 0 || startM != 0)) { // Sørger for at starttid er gyldig
cout << "\nUlovlig klokkeslett. Prøv igjen (tt mm): ";
cin >> startT >> startM; cin.ignore();
startTotal = (startT*60)+startM;
}
}
}
......
......@@ -38,8 +38,9 @@ class Rute {
Rute(std::ifstream & inn);
bool erListeGyldig();
bool erTall(std::string nvn);
bool gyldigTid(const int time, const int minutt);
bool finnesStopp(const int indeks);
int finnDifferanse(const int nr);
int finnDifferanse(const int nr, const Retning retning);
std::string hentNavn(const Retning retning);
void ruteTabell(const int diff, const std::string start,
const std::string stSted);
......
......@@ -164,8 +164,8 @@ void Ruter::ruteBeskrivelse(const int ruteNr){
*/
void Ruter::ruteTabell() {
int ruteNr,
stoppestedsNr,
differanse;
stoppNr,
diff;
char valg;
string navn,
startSted;
......@@ -199,12 +199,23 @@ void Ruter::ruteTabell() {
if (navn.size() > 0) { // Hvis navn er entydig:
// Henter stoppestedets unike nr:
stoppestedsNr = gStoppestederBase.hentIndeksVhaNavn(navn) + 1;
stoppNr = gStoppestederBase.hentIndeksVhaNavn(navn) + 1;
//Hvis stoppestedet finnes på ruten:
if (ruten->second->finnesStopp(stoppestedsNr)) {
differanse = ruten->second->finnDifferanse(stoppestedsNr);
startSted = ruten->second->hentNavn(Fram);
ruten->second->ruteTabell(differanse, startSted, navn);
if (ruten->second->finnesStopp(stoppNr)) {
switch (valg) {
case 'F': diff =
ruten->second->finnDifferanse(stoppNr, Fram);
break;
// Henter differanse ved retning fram
case 'T': diff =
ruten->second->finnDifferanse(stoppNr, Tilbake);
break;
// Henter differanse ved retning tilbake
}
//diff = ruten->second->finnDifferanse(stoppNr);
//startSted = ruten->second->hentNavn(Fram);
ruten->second->ruteTabell(diff, startSted, navn);
} else // Hvis stoppet ikke finnes på ruten:
cout << "\nStoppestedet " << navn << " finnes ikke "
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment