diff --git a/rute.cpp b/rute.cpp index 99228e2cbcf6b5da6bebec52a769570786df4185..d97283eb75dc0597ddda86ecae551a3999600aa0 100644 --- a/rute.cpp +++ b/rute.cpp @@ -67,15 +67,16 @@ void Rute::lesData() { cout << "\nStoppested (entydig navn / tall / ENTER for å avslutte): "; getline(cin, navn); //TODO fortsette her - while (navn.size() != 0) { //Kjør så lenge ikke blank/enter er trykket. + while (navn.size() > 0) { //Kjør så lenge ikke blank/enter er trykket. navn = gStoppestederBase.byttBokstaver(navn); // Fjerner æøåÆØÅ if (erTall(navn)) { // SJekker om navn kun består av tall stoppNr = stoi(navn); //Hvis kun tall, gjør om til int // Trenger en sjekk om stoppnr faktisk finnes, hvis det gjør det, gjør neste linje * - if(gStoppestederBase.finnesIndeks(stoppNr)){ //@see finnesIndeks, funker dette? + if(gStoppestederBase.finnesIndeks(stoppNr-1)){ //@see finnesIndeks, funker dette? navn = gStoppestederBase.hentNavnVhaIndeks(stoppNr); // Hent navn - }else cout << "Stopp finnes ikke!"; //kanskje gjøres til en loop? + } + //}else cout << "Stopp finnes ikke!"; //kanskje gjøres til en loop? } fNavn = gStoppestederBase.finnEntydig(navn); // Sjekker for entydighet @@ -83,7 +84,7 @@ void Rute::lesData() { if (fNavn.size() > 0) { // Hvis entydig navn: cout << '\n' << fNavn << '\n'; indeks = gStoppestederBase.hentIndeksVhaNavn(fNavn); - + if (!finnesStopp(indeks+1)) { // Hvis stopp ikke finnes fra før på ruten if (stoppene.size() > 0) { // Hvis ikke første stopp på ruten nStopp = gStoppestederBase.finnDuplikat(fNavn); if (nStopp->finnesNabo(naboIndeks+1)) { // Hvis nabo finnes fra før @@ -94,6 +95,9 @@ void Rute::lesData() { nyStopp = new Stopp(indeks+1, tidTilF); stoppene.push_back(nyStopp); // Disse kan gjøres etter ?* naboIndeks = indeks; + cout << "\nTiden mellom stoppestedene er allerede registrert som " + << tidTilF << " minutter.\n"; + } else { // Hvis nabo ikke finnes fra før: tidTilF = lesInt("Tid fra forrige stopp", 1, 10); // Leser tid til forrige nabo @@ -122,7 +126,8 @@ void Rute::lesData() { //naboIndeks = indeks; // Setter nabos indeks til å være forrige indeks //tidTilE = tidTilF; // Setter tid til neste stopp, til å være egen tid fStopp = nStopp; // Setter forrige stopp til å bli nåværende stopp - + } else + cout << "\nStoppet er allerede registrert på ruten!\n"; } else { // Hvis ikke entydig: cout << "\nIkke funnet (den entydige) stoppestedet!\n"; } @@ -130,9 +135,8 @@ void Rute::lesData() { // Forsøker å lese evt. ny eller korrekt stopp: cout << "\nStoppested (entydig navn / tall / ENTER for å avslutte): "; getline(cin, navn); - - } + cout << "\nOk, du angrer og ønsker ikke å legge til ny rute.\n"; } /** @@ -236,9 +240,10 @@ bool Rute::erTall(std::string nvn) { * @return false */ bool Rute::erListeGyldig(){ - if(stoppene.size() < 1){ + if(stoppene.size() > 1){ return true; - }else return false; + } + return false; } /** @@ -246,5 +251,17 @@ bool Rute::erListeGyldig(){ * */ void Rute::slettData(){ - stoppene.pop_back(); + stoppene.clear(); +} + +/** + * @brief finnesStopp(...) + * + */ +bool Rute::finnesStopp(const int nr) { + for (auto it = stoppene.begin(); it != stoppene.end(); it++) { + if ((*it)->hentNr() == nr) + return true; + } + return false; } \ No newline at end of file diff --git a/rute.h b/rute.h index 2e64d91267d2e790a2a6d09dec3204fe5d421f12..6e95c2ccabe892dcf21c3f4a584dbd133da39d82 100644 --- a/rute.h +++ b/rute.h @@ -35,6 +35,7 @@ class Rute { Rute(std::ifstream & inn); bool erTall(std::string nvn); bool erListeGyldig(); + bool finnesStopp(const int nr); virtual void lesData(); virtual void skrivData() const; virtual void skrivTilFil(std::ofstream & ut); diff --git a/ruter.cpp b/ruter.cpp index ff902f9be6d6f26e32e0ed8fba2aa1b27ee0af13..4f43e3612ebc475c4be6b119eb0d465682e9d698 100644 --- a/ruter.cpp +++ b/ruter.cpp @@ -103,8 +103,10 @@ void Ruter::nyRute() { // En funksjon for å sjekke om ruten er gyldig (list.size() > 1, return true) // Hvis ruten er gyldig, legg til i mappet // Hvis ugyldig rute, rydd opp i pekere * - if(!nyRute->erListeGyldig()){ + if(nyRute->erListeGyldig()){ rutene[ruteNr] = nyRute; + cout << "\nNy rute er lagt til:\n"; + ruteBeskrivelse(ruteNr); }else nyRute->slettData(); @@ -126,6 +128,11 @@ void Ruter::ruteBeskrivelse() { cout << "\nRuten med dette rutenr eksisterer ikke..\n"; } +void Ruter::ruteBeskrivelse(const int ruteNr){ + auto it = rutene.find(ruteNr); + it->second->skrivBeskrivelse(); +} + /** * ruteTabell() */ diff --git a/ruter.h b/ruter.h index 646ab6f26917508fcc1d1d9f7bc1f44b98947c05..33d7ea7aa22aed0f171afa378712478d1e357406 100644 --- a/ruter.h +++ b/ruter.h @@ -22,6 +22,7 @@ class Ruter { void lesFraFil(); void nyRute(); void ruteBeskrivelse(); + void ruteBeskrivelse(const int ruteNr); void ruteTabell(); void skrivAlle(); void skrivMeny(); diff --git a/stoppesteder.cpp b/stoppesteder.cpp index d8f4e27afdf2ae12f767d563e52f9802d7ba516d..9e4017e9491fcfe50dc31b1b8bef2b246231805c 100644 --- a/stoppesteder.cpp +++ b/stoppesteder.cpp @@ -278,13 +278,15 @@ bool Stoppesteder::tom() { * @brief Sjekker om indeks nummer finnes i vektor. * * @param nr - nr fra brukeren. - * @return true - * @return false + * @return true - hvis nr er i vektoren + * @return false -hvis nr ikke er i vektoren */ bool Stoppesteder::finnesIndeks(const int nr){ - for(int i=0; i < stopper.size(); i++){ //går igjennom stopper vektoren - if(i+1==nr){ //+1 fordi tallet som vises for brukeren er +1 fra indeksen. - return true; - }else return false; + if (nr <= stopper.size()) { + for(int i=0; i < stopper.size(); i++){ //går igjennom stopper vektoren fra med sent tall + if(i==nr) //hopper ut hvis tall er funnet + return true; + } } + return false; } \ No newline at end of file