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
No related branches found
No related tags found
1 merge request!4Frederik
...@@ -125,12 +125,35 @@ bool Rute::finnesStopp(const int indeks) { ...@@ -125,12 +125,35 @@ bool Rute::finnesStopp(const int indeks) {
return false; 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; int totMin = 0;
for (auto it = stoppene.begin(); it != stoppene.end(); it++) { if (retning == Fram) {
totMin += (*it)->hentMin(); for (auto it = stoppene.begin(); it != stoppene.end(); it++) {
if ((*it)->hentNr() == nr) totMin += (*it)->hentMin();
return totMin; 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 return -1; // Skal ikke skje
} }
...@@ -145,29 +168,76 @@ string Rute::hentNavn(const Retning retning) { ...@@ -145,29 +168,76 @@ string Rute::hentNavn(const Retning retning) {
return startSted; 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) { void Rute::ruteTabell(const int diff, const string start, const string stSted) {
int startT, int startT, // starttime
sluttT, startTotal, // regner ut total starttid i minutter
startM, sluttT, // slutt-time
sluttM, sluttTotal, // regner ut total slutttid i minutter
tidMellom; 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 << ") - " cout << "\nRuteavganger fra startstedet (" << start << ") - "
<< "avslutt med 0 0):\n\n"; << "avslutt med 0 0):\n\n";
cout << "Fra kl. (00:01 - 23:59): "; cout << "Fra kl. (00:01 - 23:59): ";
cin >> startT >> startM; cin.ignore(); cin >> startT >> startM; cin.ignore(); // Leser starttid
while (startT != 0 || startM != 0) {
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); tidMellom = lesInt("Tid mellom avganger", MINTID, MAXTID);
cout << "Til kl. (" << ((startT < 10) ? "0" : "") << startT startTotal = (startT*60)+startM+tidMellom; // Omregner for sjekk
<< ':' << ((tidMellom < 10) ? "0" : "") tPrint = startTotal/60; // Regner ut gyldig utskrift:
<< tidMellom << " - 23:59): "; mPrint = startTotal%60;
cout << "Til kl. (" << ((tPrint < 10) ? "0" : "") << tPrint
<< ':' << ((mPrint < 10) ? "0" : "") << mPrint
<< " - 23:59): ";
// Leser slutt tid
cin >> sluttT >> sluttM; cin.ignore(); 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): "; << " - 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 { ...@@ -38,8 +38,9 @@ class Rute {
Rute(std::ifstream & inn); Rute(std::ifstream & inn);
bool erListeGyldig(); bool erListeGyldig();
bool erTall(std::string nvn); bool erTall(std::string nvn);
bool gyldigTid(const int time, const int minutt);
bool finnesStopp(const int indeks); bool finnesStopp(const int indeks);
int finnDifferanse(const int nr); int finnDifferanse(const int nr, const Retning retning);
std::string hentNavn(const Retning retning); std::string hentNavn(const Retning retning);
void ruteTabell(const int diff, const std::string start, void ruteTabell(const int diff, const std::string start,
const std::string stSted); const std::string stSted);
......
...@@ -164,8 +164,8 @@ void Ruter::ruteBeskrivelse(const int ruteNr){ ...@@ -164,8 +164,8 @@ void Ruter::ruteBeskrivelse(const int ruteNr){
*/ */
void Ruter::ruteTabell() { void Ruter::ruteTabell() {
int ruteNr, int ruteNr,
stoppestedsNr, stoppNr,
differanse; diff;
char valg; char valg;
string navn, string navn,
startSted; startSted;
...@@ -199,12 +199,23 @@ void Ruter::ruteTabell() { ...@@ -199,12 +199,23 @@ void Ruter::ruteTabell() {
if (navn.size() > 0) { // Hvis navn er entydig: if (navn.size() > 0) { // Hvis navn er entydig:
// Henter stoppestedets unike nr: // Henter stoppestedets unike nr:
stoppestedsNr = gStoppestederBase.hentIndeksVhaNavn(navn) + 1; stoppNr = gStoppestederBase.hentIndeksVhaNavn(navn) + 1;
//Hvis stoppestedet finnes på ruten: //Hvis stoppestedet finnes på ruten:
if (ruten->second->finnesStopp(stoppestedsNr)) { if (ruten->second->finnesStopp(stoppNr)) {
differanse = ruten->second->finnDifferanse(stoppestedsNr); switch (valg) {
startSted = ruten->second->hentNavn(Fram); case 'F': diff =
ruten->second->ruteTabell(differanse, startSted, navn); 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: } else // Hvis stoppet ikke finnes på ruten:
cout << "\nStoppestedet " << navn << " finnes ikke " 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