diff --git a/bane.cpp b/bane.cpp index 28a27142a985e2b39147824ad6e4b0b2a557bafe..c599c2fbab08a475eea5b88c3e76d82d3af9179a 100644 --- a/bane.cpp +++ b/bane.cpp @@ -64,6 +64,11 @@ void Bane::skrivData() const { Rute::skrivData(); // Rute skriver egne datamedlemmer } +void Bane::skrivKort() const { + cout << "\nBanen har " << antVogner << " vogner og banesettet er " + << lengde << " meter langt.\n\n"; +} + /** * Skriver ut alle datamedlemmer for en bane til fil (virtuell) * diff --git a/bane.h b/bane.h index 58924d39fc7cfc4046c0af31b8ceb279a4406c63..03af3a5f0c1942df834ea1cf8405bef9b4844469 100644 --- a/bane.h +++ b/bane.h @@ -23,6 +23,7 @@ class Bane : public Rute { virtual void lesData(); virtual void skrivBeskrivelse(); virtual void skrivData() const; + virtual void skrivKort() const; virtual void skrivTilFil(std::ofstream & ut); }; diff --git a/buss.cpp b/buss.cpp index 5e9ec152cf4bdadcd41d149637aff90b3f96cdf7..a7436765dee2b737aeed22df5be0f4edf1b06feb 100644 --- a/buss.cpp +++ b/buss.cpp @@ -64,8 +64,8 @@ void Buss::lesData() { */ void Buss::skrivBeskrivelse() { cout << "Bussen har " << antSitt << " sitteplasser, " << antStaa - << " ståplasser og er " << (leddbuss ? "" : "ikke") - << " en leddbuss.\n"; + << " ståplasser og er " << (leddbuss ? "" : "ikke ") + << "en leddbuss.\n"; Rute::skrivBeskrivelse(); // Rute skriver egen informasjon } @@ -79,6 +79,16 @@ void Buss::skrivData() const { Rute::skrivData(); } +/** + * skrivKort() (virtuell) + * + */ +void Buss::skrivKort() const { +cout << "\nBussen har " << antSitt << " sitteplasser, " << antStaa + << " ståplasser og er " << (leddbuss ? "" : "ikke ") + << "en leddbuss.\n\n"; +} + /** * Skriver ut bussens datamedlemmer til fil (virtuell) * diff --git a/buss.h b/buss.h index 1c5309964735adbf13546fb52b2df35adabcf2a9..082dbe36a17e2a5e25a78bfde5cd5671ff80d2d7 100644 --- a/buss.h +++ b/buss.h @@ -25,6 +25,7 @@ class Buss : public Rute { virtual void lesData(); virtual void skrivBeskrivelse(); virtual void skrivData() const; + virtual void skrivKort() const; virtual void skrivTilFil(std::ofstream & ut); }; diff --git a/const.h b/const.h index fb61d7f96a7ffe642dc2382bebd5b2e7520c402d..79d420f2ad4d71a6609fdee7baad450fe3b6e3ae 100644 --- a/const.h +++ b/const.h @@ -18,5 +18,7 @@ const int MINSITT = 20; ///< Minimum antall sitteplasser på en buss const int MAXSITT = 80; ///< Maksimum antall sitteplasser på en buss const int MINSTAA = 10; ///< Minimum antall ståplasser på en buss const int MAXSTAA = 40; ///< Maksimum antall ståplasser på en buss +const int MINTID = 6; ///< Minimum tid mellom avganger +const int MAXTID = 120; ///< Maksimum tid mellom avganger #endif diff --git a/rute.cpp b/rute.cpp index cfa5f54210e1698651322bcc8740caa84c5831b3..3742fc395744f2a3275f6b3a58864937441803d6 100644 --- a/rute.cpp +++ b/rute.cpp @@ -1,6 +1,6 @@ /** * Kode-fil for rute-klassen - * + * * @file rute.cpp * @author Sondre Sand & Frederik Simonsen */ @@ -9,6 +9,7 @@ #include <iomanip> #include <list> #include <fstream> +#include "const.h" #include "rute.h" #include "stoppested.h" #include "stoppesteder.h" @@ -22,9 +23,9 @@ extern Stoppesteder gStoppestederBase; /** * Construct a new Stopp:: Stopp object - * - * @param stoppNr - * @param antMin + * + * @param stoppNr + * @param antMin */ Stopp::Stopp(const int stoppNr, const int antMin) { nr = stoppNr; minutter = antMin; @@ -32,17 +33,26 @@ Stopp::Stopp(const int stoppNr, const int antMin) { /** * Henter en stopps unike nr - * + * * @return Et stoppesteds unike nr */ int Stopp::hentNr() { return nr; } +/** + * @brief henter minutter fra forrige stopp + * + * @return int + */ +int Stopp::hentMin() { + return minutter; +} + /** * skrivTilFil(...) - * - * @param ut + * + * @param ut */ void Stopp::skrivTilFil(ofstream & ut) { ut << nr << ' ' << minutter << '\n'; @@ -60,7 +70,7 @@ Rute::Rute() { /** * Opretter en ny rute fra fil - * + * * @param inn filen det leses fra */ Rute::Rute(ifstream & inn) { @@ -77,9 +87,9 @@ Rute::Rute(ifstream & inn) { /** * -sjekker om lista er mer en 1 entry. - * - * @return true - * @return false + * + * @return true + * @return false */ bool Rute::erListeGyldig(){ if(stoppene.size() > 1){ @@ -88,18 +98,24 @@ bool Rute::erListeGyldig(){ return false; } - +/** + * @brief + * + * @param nvn + * @return true + * @return false + */ bool Rute::erTall(std::string nvn) { return all_of(nvn.begin(), nvn.end(), ::isdigit); } /** * Sjekker om stopp er lagt til i ruta allerede - * - * @param nr - * @return true + * + * @param nr + * @return true * @return false - * @see Stopp::hentNr() + * @see Stopp::hentNr() */ bool Rute::finnesStopp(const int indeks) { for (auto it = stoppene.begin(); it != stoppene.end(); it++) { @@ -110,8 +126,173 @@ bool Rute::finnesStopp(const int indeks) { } /** - * skriver rute forlengs eller baklengs + * 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; + 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 +} + +string Rute::hentNavn(const Retning retning) { + string startSted; + if (retning == Fram) { + startSted = gStoppestederBase.hentNavnVhaIndeks(stoppene.front()->hentNr()); + } else if (retning == Tilbake) + startSted = gStoppestederBase.hentNavnVhaIndeks(stoppene.back()->hentNr()); + + 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, // 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 + antGanger, // omregning for å legge inn riktig antall avgangstider + startTid, // omregning for å legge inn starttid + n, // hjelpevariabel for linjeskift ved ny time + timer, // hjelpevariabel for å skrive ut time + minutter, // hjelpevariabel for å skrive ut minutter + avgangsTid, // omregning for å legge inn riktig avgangstid + mPrint; // hjelpevariabel for å sørge for korrekt utskrift av minutter + vector <int> avgangstider; // Hjelpevektor for å ta vare på avgangstider + + cout << "\nRuteavganger fra startstedet (" << start << ") - " + << "avslutt med 0 0):\n\n"; + + cout << "Fra kl. (00:01 - 23:59): "; + 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(); + } + startTid = (startT*60)+startM; // Regner ut første avgangstid + n = startT; // Setter indikator til å være første starttime + + + while (startT != 0 || startM != 0) { // Så lenge bruker ikke taster 0 0 + avgangstider.push_back(startTid+diff); // Legger start tid i vector + // Leser tid mellom avganger + tidMellom = lesInt("Tid mellom avganger", MINTID, MAXTID); + 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 + } + + antGanger = ((sluttT-startT)*60)/tidMellom; // Omregning for loop + avgangsTid = startTid+diff; // Setter på differanse en gang + + for (int i = 0; i < antGanger; i++) { // Legger til riktig antall avgangstider: + avgangsTid = avgangsTid + tidMellom; // Omregning + avgangstider.push_back(avgangsTid); // Legges i vektor + } + + tPrint = (sluttTotal+1)/60; // Regner ut gyldig utskrift: + mPrint = (sluttTotal+1)%60; + + + cout << "\n\nFra kl. (" << ((tPrint < 10) ? "0" : "") << tPrint + << ':' << ((mPrint < 10) ? "0" : "") << mPrint + << " - 23:59): "; + 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; // Omregning + } + startTid = (startT*60)+startM; // Omregning + } + cout << "\n\nRutetabell for stoppested: " << stSted << "\n\n" + << ((n < 10) ? "0" : "") << n << ':'; + + for (int i = 0; i < avgangstider.size(); i++) { // For hver avgangstid: + timer = avgangstider[i]/60; // Regner ut time + minutter = avgangstider[i]%60; // Regner ut minutter + if (timer == n) { // Skriver ut minutter hvis time er lik indikator + cout << ' ' << ((minutter < 10) ? "0" : "") << minutter; + } else { // Skriver ut time hvis timer er mer enn indikator + cout << '\n' << ((timer < 10) ? "0" : "") + << timer << ':' << ' ' << ((minutter < 10) ? "0" : "") + << minutter; + n = timer; // Oppdaterer indikator + } + } +} + +/** + * skrivRetninger(...) brukes med R T + * + */ +void Rute::skrivRetninger() const { + // Hjelpevariabler for å hente stasjonsnavnene knyttet til ruten: + int startIndeks = stoppene.front()->hentNr(), + stoppIndeks = stoppene.back()->hentNr(); + string startStasjon = gStoppestederBase.hentNavnVhaIndeks(startIndeks), + endeStasjon = gStoppestederBase.hentNavnVhaIndeks(stoppIndeks); + + // Skriver ut start- og endestasjon for ruten i begge retninger: + cout << "\nFram: Retningen: " << startStasjon << " - " + << endeStasjon << "\nTilbake: Retningen: " + << endeStasjon << " - " << startStasjon << '\n'; +} + +/** + * skriver rute forlengs eller baklengs + * * @param retning forlengs eller baklengs * @see Stoppesteder::hentNavnVhaIndeks(...) */ @@ -120,7 +301,7 @@ void Rute::skrivRute(const Retning retning) { indeks = 0, totMin = 0; string navn; - + if (retning == Fram) { for (auto it = stoppene.begin(); it != stoppene.end(); it++) { indeks = (*it)->nr; @@ -148,7 +329,7 @@ void Rute::skrivRute(const Retning retning) { /** * @brief - sletter siste entry i stoppene. - * + * */ void Rute::slettData(){ stoppene.clear(); @@ -156,7 +337,7 @@ void Rute::slettData(){ /** * Leser og oppretter stopp for en ny rute - * + * * @see Stoppesteder::byttBokstaver(...) * @see Stoppesteder::finnesIndex(...) * @see Stoppesteder::hentNavnVhaIndex(...) @@ -180,19 +361,19 @@ void Rute::lesData() { Stopp* nyStopp = nullptr; Stoppested* fStopp = nullptr; Stoppested* nStopp = nullptr; - + cout << "\nStoppested (entydig navn / tall / ENTER for å avslutte): "; - getline(cin, navn); + getline(cin, navn); 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 if(gStoppestederBase.finnesIndeks(stoppNr-1)){ //@see finnesIndeks, funker dette? navn = gStoppestederBase.hentNavnVhaIndeks(stoppNr); // Hent navn } } - + fNavn = gStoppestederBase.finnEntydig(navn); // Sjekker for entydighet if (fNavn.size() > 0) { // Hvis entydig navn: @@ -209,7 +390,7 @@ void Rute::lesData() { 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 @@ -238,10 +419,10 @@ void Rute::lesData() { } else { // Hvis ikke entydig: cout << "\nIkke funnet (den entydige) stoppestedet!\n"; } - + // Forsøker å lese evt. ny eller korrekt stopp: cout << "\nStoppested (entydig navn / tall / ENTER for å avslutte): "; - getline(cin, navn); + getline(cin, navn); } cout << "\nOk, du angrer og ønsker ikke å legge til ny rute.\n"; } @@ -249,7 +430,7 @@ void Rute::lesData() { /** * skrivBeskrivelse() * skriver forlengs og baklengs - * + * * @see Rute::skrivRute(...) */ void Rute::skrivBeskrivelse() { @@ -262,7 +443,7 @@ void Rute::skrivBeskrivelse() { /** * Skriver ut en rute * Første-siste stopp - * + * * @see Stoppesteder::hentNavnVhaIndeks(...) */ void Rute::skrivData() const { @@ -270,7 +451,7 @@ void Rute::skrivData() const { stoppIndeks; string startNavn, stoppNavn; - + startIndeks = stoppene.front()->hentNr(); // Henter startsteds unike nr stoppIndeks = stoppene.back()->hentNr(); // Henter stopsteds unike nr startNavn = gStoppestederBase.hentNavnVhaIndeks(startIndeks); @@ -279,9 +460,17 @@ void Rute::skrivData() const { cout << startNavn << " - " << stoppNavn; } +/** + * @brief skrivKort() (virtuell) + * + */ +void Rute::skrivKort() const { + +} + /** * skriver rute til fil - * + * * @param ut fila det skrives til * @see Stopp::skrivTilFil(...) */ diff --git a/rute.h b/rute.h index 320a9a6fba8bcd7767d9d61a3e0abba724124071..7a2fb28a81614139ecebfb0e32419397ee65741f 100644 --- a/rute.h +++ b/rute.h @@ -9,6 +9,7 @@ #define __RUTE_H #include <list> +#include <string> #include <fstream> #include "enum.h" @@ -19,6 +20,7 @@ struct Stopp { int nr, minutter; // Litt usikker på om denne skal deklareres slik // Eller om den skal under public eller private i Rute Stopp(const int stoppNr, const int antMin); + int hentMin(); int hentNr(); void skrivTilFil(std::ofstream & ut); @@ -36,12 +38,19 @@ 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, const Retning retning); + std::string hentNavn(const Retning retning); + void ruteTabell(const int diff, const std::string start, + const std::string stSted); + void skrivRetninger() const; void skrivRute(const Retning retning); void slettData(); virtual void lesData(); virtual void skrivBeskrivelse(); virtual void skrivData() const; + virtual void skrivKort() const; virtual void skrivTilFil(std::ofstream & ut); diff --git a/ruter.cpp b/ruter.cpp index 56e3914b61d5278eb68b8642b37e02677c9f375b..ecc1c4b9b7c35f7bb90ea0432693a5f64d4391dd 100644 --- a/ruter.cpp +++ b/ruter.cpp @@ -103,29 +103,29 @@ void Ruter::nyRute() { if (!gStoppestederBase.tom()) { // Hvis det finnes stoppesteder registrert: ruteNr = lesInt("Rutenr", MINRUTER, MAXRUTER); - // Looper til ikke duplikat rutenr blir skrevet inn - while (ruteNrFinnes(ruteNr)) { - cout << "\nDuplikat ruteNr, vennligst prøv igjen.\n"; - ruteNr = lesInt("Rutenr", MINRUTER, MAXRUTER); - } + // Hvis ikke duplikat rutenr blir skrevet inn: + if (!ruteNrFinnes(ruteNr)) { - ruteType = lesChar("Rutetype b(A)ne eller b(U)ss"); - // Looper til lovlig valg av rutetype blir lest inn: - while (ruteType != 'A' && ruteType != 'U') { - cout << "\nUgyldig valg, prøv igjen.\n"; ruteType = lesChar("Rutetype b(A)ne eller b(U)ss"); - } + // Looper til lovlig valg av rutetype blir lest inn: + while (ruteType != 'A' && ruteType != 'U') { + cout << "\nUgyldig valg, prøv igjen.\n"; + ruteType = lesChar("Rutetype b(A)ne eller b(U)ss"); + } - switch (ruteType) { - case 'A': nyRute = new Bane; nyRute->lesData(); break; - case 'U': nyRute = new Buss; nyRute->lesData(); break; - } + switch (ruteType) { + case 'A': nyRute = new Bane; nyRute->lesData(); break; + case 'U': nyRute = new Buss; nyRute->lesData(); break; + } - if(nyRute->erListeGyldig()){ - rutene[ruteNr] = nyRute; - cout << "\nNy rute er lagt til:\n"; - ruteBeskrivelse(ruteNr); - }else nyRute->slettData(); + if (nyRute->erListeGyldig()){ + rutene[ruteNr] = nyRute; + cout << "\nNy rute er lagt til:\n"; + ruteBeskrivelse(ruteNr); + } else nyRute->slettData(); + + } else // Rutenummer er duplikat: + cout << "\nRutenummeret finnes fra før. Kan ikke legge til rute.\n\n"; } else // Hvis ingen stoppesteder registrert: cout << "\nIngen stopper registrert i datastrukturen, kan derfor ikke " @@ -163,7 +163,72 @@ void Ruter::ruteBeskrivelse(const int ruteNr){ * ruteTabell() */ void Ruter::ruteTabell() { + int ruteNr, + stoppNr, + diff; + char valg; + string navn, + startSted; + //Rute* ruten = nullptr; + + if (!rutene.empty()) { // Hvis det er registrert ruter: + ruteNr = lesInt("Rutenr", MINRUTER, MAXRUTER); + if (ruteNrFinnes(ruteNr)) { // Hvis rutenummeret finnes: + auto ruten = rutene.find(ruteNr); // Iterator til riktig rute + ruten->second->skrivRetninger(); // Skriver kort info om ruten + valg = lesChar("Rutetabell for retningen (F/T)"); + // Looper til lovlig valg av retning: + while (valg != 'F' && valg != 'T') { + cout << "\nUgyldig valg, prøv igjen.\n"; + valg = lesChar("Rutetabell for retningen (F/T)"); + } + + ruten->second->skrivKort(); // Skriver info om rutetypen + + switch (valg) { // Skriver hele ruten: + case 'F': ruten->second->skrivRute(Fram); + startSted = ruten->second->hentNavn(Fram); break; + case 'T': ruten->second->skrivRute(Tilbake); + startSted = ruten->second->hentNavn(Tilbake); break; + } + + cout << "\n\nRutetabell for stoppestedet (navn): "; + getline(cin, navn); + navn = gStoppestederBase.byttBokstaver(navn); // bytter æøåÆØÅ + navn = gStoppestederBase.finnEntydig(navn); // Sjekker for entydighet + + if (navn.size() > 0) { // Hvis navn er entydig: + // Henter stoppestedets unike nr: + stoppNr = gStoppestederBase.hentIndeksVhaNavn(navn) + 1; + //Hvis stoppestedet finnes på ruten: + 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 " + << "på denne ruten!\n\n"; + + } else + cout << "\nIngen entydige stoppestedsnavn funnet\n\n"; + + } else // Hvis rutenummeret ikke finnes: + cout << "\nDette rutenummeret er ikke registrert.\n\n"; + } else // Hvis ingen ruter registrert: + cout << "\nIngen ruter registrert i programmet.\n\n"; } /** diff --git a/stoppesteder.cpp b/stoppesteder.cpp index f919e9bab986013d67e81a2ea3bde5936066c70d..6d6adc024d1ee5d1ee6574e23ef5c7c2d6a426ee 100644 --- a/stoppesteder.cpp +++ b/stoppesteder.cpp @@ -33,6 +33,16 @@ bool Stoppesteder::finnesIndeks(const int nr){ return false; // Ingen funn } +/** + * sjekker om en string inneholder tall. + * + * @param nvn + * @return true hvis ikke tall + * @return false hvis har tall + */ +bool Stoppesteder::ikkeHarTall(const string nvn){ + return any_of(nvn.begin(), nvn.end(), ::isdigit); +} /** * Sjekker om Stoppesteder sin vektor er tom eller ei * @@ -224,6 +234,7 @@ void Stoppesteder::lesFraFil() { /** * Legger til et nytt stoppested i datastrukturen, hvis mulig (ingen duplikat) * + * @see Stoppesteder::ikkeHarTall(...) * @see Stoppesteder::byttBokstaver(...) * @see Stoppesteder::finnDuplikat(...) * @see Stoppested::Stoppested(...) @@ -234,8 +245,9 @@ void Stoppesteder::nyStop() { // TODO: Lag en funksjon som sørger for at et stoppesteds navn ikke // TODO: kun kan være tall! cout << "\nNavn på stoppested: "; getline(cin,navn); // Leser navn - while (navn.size() < 2) { // Looper hvis navn er >2 tegn - cout << "\nNavn må være 2 tegn eller mer. Prøv igjen: "; + while (navn.size() < 2 || ikkeHarTall(navn)) { // Looper hvis navn er >2 tegn + cout << "\nNavn kan ikke inneholde tall, og må være 2 tegn eller mer." + << " Prøv igjen: "; getline(cin, navn); } @@ -303,7 +315,7 @@ void Stoppesteder::skrivStopp() { // TODO: kun kan være tall! cout << "\nAlt om stoppestedet: "; getline(cin, navn); - while (navn.size() < 2) { // Sørger for at navn må ha mer enn 1 tegn + while (navn.size() < 1) { // Sørger for at navn være minst 1 tegn cout << "\nNavn må være 2 tegn eller mer. Prøv igjen: "; getline(cin, navn); } diff --git a/stoppesteder.h b/stoppesteder.h index aaa8d4c0670d933830d06e03c3630a66e7956eed..e7b1ac27d1893db4ae7c7da81a89f26fc9fbbdc8 100644 --- a/stoppesteder.h +++ b/stoppesteder.h @@ -20,6 +20,7 @@ class Stoppesteder { std::vector <Stoppested*> stopper; public: bool finnesIndeks(const int nr); + bool ikkeHarTall(const std::string nvn); bool tom(); int hentIndeksVhaNavn(const std::string nvn); std::string byttBokstaver(const std::string nvn);