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

Merge branch 'frederik' into 'main'

Frederik

See merge request !6
parents d2b4c111 04a3b59b
No related branches found
No related tags found
1 merge request!6Frederik
File added
File added
10 10
Aa Aa
1 0
2 3
Bb Bb
2 0
1 3
3 5
Cc Cc
1 0
2 5
Dd Dd
1 0
5 3
Ee Ee
2 0
4 3
6 5
Ff Ff
1 0
5 5
Gg Gg
0 0
Hh Hh
......
/** /**
* Kode-fil for bane-klassen * Kode-fil for bane-klassen
* *
* @file bane.cpp * @file bane.cpp
* @author Sondre Sand & Frederik Simonsen * @author Sondre Sand & Frederik Simonsen
*/ */
...@@ -14,7 +14,7 @@ using namespace std; ...@@ -14,7 +14,7 @@ using namespace std;
/** /**
* Oppretter en ny Bane. Nullstiller alle dens datamedlemmer. * Oppretter en ny Bane. Nullstiller alle dens datamedlemmer.
* Faktisk innlesning av reelle verdier skjer i lesData() * Faktisk innlesning av reelle verdier skjer i lesData()
* *
* @see Rute::Rute() * @see Rute::Rute()
*/ */
Bane::Bane() { Bane::Bane() {
...@@ -23,7 +23,7 @@ Bane::Bane() { ...@@ -23,7 +23,7 @@ Bane::Bane() {
/** /**
* Oppretter en ny Bane fra fil. Leser inn dens datamedlemmer * Oppretter en ny Bane fra fil. Leser inn dens datamedlemmer
* *
* @param inn Filen det leses fra * @param inn Filen det leses fra
* @see Rute::Rute(...) * @see Rute::Rute(...)
*/ */
...@@ -32,9 +32,16 @@ Bane::Bane(ifstream & inn) : Rute (inn) { ...@@ -32,9 +32,16 @@ Bane::Bane(ifstream & inn) : Rute (inn) {
inn >> antVogner >> lengde; inn.ignore(); // Forkaster '\n' inn >> antVogner >> lengde; inn.ignore(); // Forkaster '\n'
} }
/**
* Sletter minne allokert med en rute (virtuell)
*/
Bane::~Bane() {
}
/** /**
* Leser inn alle datamedlemmer for en bane (virtuell) * Leser inn alle datamedlemmer for en bane (virtuell)
* *
* @see Rute::lesData() * @see Rute::lesData()
*/ */
void Bane::lesData() { void Bane::lesData() {
...@@ -45,7 +52,7 @@ void Bane::lesData() { ...@@ -45,7 +52,7 @@ void Bane::lesData() {
/** /**
* Skriver ut all informasjon om en bane til bruker i run-time (virtuell) * Skriver ut all informasjon om en bane til bruker i run-time (virtuell)
* *
* @see Rute::skrivBeskrivelse() * @see Rute::skrivBeskrivelse()
*/ */
void Bane::skrivBeskrivelse() { void Bane::skrivBeskrivelse() {
...@@ -56,7 +63,7 @@ void Bane::skrivBeskrivelse() { ...@@ -56,7 +63,7 @@ void Bane::skrivBeskrivelse() {
/** /**
* Skriver ut rutetype (bane) til bruker (virtuell) * Skriver ut rutetype (bane) til bruker (virtuell)
* *
* @see Rute::skrivData() * @see Rute::skrivData()
*/ */
void Bane::skrivData() const { void Bane::skrivData() const {
...@@ -75,7 +82,7 @@ void Bane::skrivKort() const { ...@@ -75,7 +82,7 @@ void Bane::skrivKort() const {
/** /**
* Skriver ut alle datamedlemmer for en bane til fil (virtuell) * Skriver ut alle datamedlemmer for en bane til fil (virtuell)
* *
* @param ut - Filen det skrives til * @param ut - Filen det skrives til
* @see Rute::skrivTilFil(...) * @see Rute::skrivTilFil(...)
*/ */
...@@ -83,4 +90,4 @@ void Bane::skrivTilFil(ofstream & ut) { ...@@ -83,4 +90,4 @@ void Bane::skrivTilFil(ofstream & ut) {
ut << "A\n"; // Skriver ut A for rutetype Bane ut << "A\n"; // Skriver ut A for rutetype Bane
Rute::skrivTilFil(ut); // Rute skriver egne data Rute::skrivTilFil(ut); // Rute skriver egne data
ut << antVogner << ' ' << lengde << '\n'; // Skriver egne data ut << antVogner << ' ' << lengde << '\n'; // Skriver egne data
} }
\ No newline at end of file
...@@ -20,6 +20,7 @@ class Bane : public Rute { ...@@ -20,6 +20,7 @@ class Bane : public Rute {
public: public:
Bane(); Bane();
Bane(std::ifstream & inn); Bane(std::ifstream & inn);
virtual ~Bane();
virtual void lesData(); virtual void lesData();
virtual void skrivBeskrivelse(); virtual void skrivBeskrivelse();
virtual void skrivData() const; virtual void skrivData() const;
......
/** /**
* Kode-fil for buss-klassen * Kode-fil for buss-klassen
* *
* @file buss.cpp * @file buss.cpp
* @author Sondre Sand & Frederik Simonsen * @author Sondre Sand & Frederik Simonsen
*/ */
...@@ -14,7 +14,7 @@ using namespace std; ...@@ -14,7 +14,7 @@ using namespace std;
/** /**
* Oppretter en ny Buss, nullstiller alle dens datamedlemmer. * Oppretter en ny Buss, nullstiller alle dens datamedlemmer.
* Faktiske reelle verdier knyttet til bussen, leses inn i lesData * Faktiske reelle verdier knyttet til bussen, leses inn i lesData
* *
* @see Rute::Rute() * @see Rute::Rute()
*/ */
Buss::Buss() { Buss::Buss() {
...@@ -24,7 +24,7 @@ Buss::Buss() { ...@@ -24,7 +24,7 @@ Buss::Buss() {
/** /**
* Leser inn en buss sine datamedlemmer fra fil * Leser inn en buss sine datamedlemmer fra fil
* *
* @param inn Filen det leses fra * @param inn Filen det leses fra
* @see Rute::Rute(...) * @see Rute::Rute(...)
*/ */
...@@ -33,9 +33,16 @@ Buss::Buss(ifstream & inn) : Rute(inn) { ...@@ -33,9 +33,16 @@ Buss::Buss(ifstream & inn) : Rute(inn) {
inn >> antSitt >> antStaa >> leddbuss; inn.ignore(); inn >> antSitt >> antStaa >> leddbuss; inn.ignore();
} }
/**
* Sletter minne allokert for en rute (virtuell)
*/
Buss::~Buss() {
}
/** /**
* Leser inn alle datamedlemmer for en aktuell buss (virtuell) * Leser inn alle datamedlemmer for en aktuell buss (virtuell)
* *
* @see Rute::lesData() * @see Rute::lesData()
*/ */
void Buss::lesData() { void Buss::lesData() {
...@@ -44,12 +51,12 @@ void Buss::lesData() { ...@@ -44,12 +51,12 @@ void Buss::lesData() {
antSitt = lesInt("Antall sitteplasser på bussen", MINSITT, MAXSITT); antSitt = lesInt("Antall sitteplasser på bussen", MINSITT, MAXSITT);
antStaa = lesInt("Antall ståplasser på bussen", MINSTAA, MAXSTAA); antStaa = lesInt("Antall ståplasser på bussen", MINSTAA, MAXSTAA);
bussType = lesChar("Leddbuss? (J/N)"); bussType = lesChar("Leddbuss? (J/N)");
while (bussType != 'J' && bussType != 'N') { // Looper ved ulovlig svar: while (bussType != 'J' && bussType != 'N') { // Looper ved ulovlig svar:
cout << "\nUlovlig valg, prøv igjen.\n"; cout << "\nUlovlig valg, prøv igjen.\n";
bussType = lesChar("Leddbuss? J eller N"); bussType = lesChar("Leddbuss? J eller N");
} }
if (bussType == 'J') { // Oppdaterer om faktisk leddbuss eller ei: if (bussType == 'J') { // Oppdaterer om faktisk leddbuss eller ei:
leddbuss = true; leddbuss = true;
} else if (bussType == 'N') } else if (bussType == 'N')
...@@ -59,7 +66,7 @@ void Buss::lesData() { ...@@ -59,7 +66,7 @@ void Buss::lesData() {
/** /**
* Skriver ut all informasjon om en buss til bruker (virtuell) * Skriver ut all informasjon om en buss til bruker (virtuell)
* *
* @see Rute::skrivBeskrivelse() * @see Rute::skrivBeskrivelse()
*/ */
void Buss::skrivBeskrivelse() { void Buss::skrivBeskrivelse() {
...@@ -71,7 +78,7 @@ void Buss::skrivBeskrivelse() { ...@@ -71,7 +78,7 @@ void Buss::skrivBeskrivelse() {
/** /**
* Skriver ut egen rutetype (buss) til bruker (virtuell) * Skriver ut egen rutetype (buss) til bruker (virtuell)
* *
* @see Rute::skrivData() * @see Rute::skrivData()
*/ */
void Buss::skrivData() const { void Buss::skrivData() const {
...@@ -90,8 +97,8 @@ cout << "\nBussen har " << antSitt << " sitteplasser, " << antStaa ...@@ -90,8 +97,8 @@ cout << "\nBussen har " << antSitt << " sitteplasser, " << antStaa
/** /**
* Skriver ut bussens datamedlemmer til fil (virtuell) * Skriver ut bussens datamedlemmer til fil (virtuell)
* *
* @param ut Filen det skrives til * @param ut Filen det skrives til
* @see Rute::skrivTilFil(...) * @see Rute::skrivTilFil(...)
*/ */
void Buss::skrivTilFil(ofstream & ut) { void Buss::skrivTilFil(ofstream & ut) {
...@@ -99,4 +106,4 @@ void Buss::skrivTilFil(ofstream & ut) { ...@@ -99,4 +106,4 @@ void Buss::skrivTilFil(ofstream & ut) {
Rute::skrivTilFil(ut); // Rute skriver egne datamedlemmer Rute::skrivTilFil(ut); // Rute skriver egne datamedlemmer
ut << antSitt << ' ' << antStaa // Skriver egne datamedlemmer ut << antSitt << ' ' << antStaa // Skriver egne datamedlemmer
<< ' ' << leddbuss << '\n'; // Leddbuss (1), ikke leddbuss (0) << ' ' << leddbuss << '\n'; // Leddbuss (1), ikke leddbuss (0)
} }
\ No newline at end of file
...@@ -22,6 +22,7 @@ class Buss : public Rute { ...@@ -22,6 +22,7 @@ class Buss : public Rute {
public: public:
Buss(); Buss();
Buss(std::ifstream & inn); Buss(std::ifstream & inn);
virtual ~Buss();
virtual void lesData(); virtual void lesData();
virtual void skrivBeskrivelse(); virtual void skrivBeskrivelse();
virtual void skrivData() const; virtual void skrivData() const;
......
This diff is collapsed.
...@@ -35,24 +35,31 @@ class Rute { ...@@ -35,24 +35,31 @@ class Rute {
public: public:
Rute(); Rute();
Rute(std::ifstream & inn); Rute(std::ifstream & inn);
virtual ~Rute();
bool erForst(Stopp* s1, Stopp* s2);
bool erListeGyldig(); bool erListeGyldig();
bool erNabo(Stopp* s1, Stopp* s2);
bool erTall(std::string nvn); bool erTall(std::string nvn);
bool finnesStopp(const int nr); bool finnesStopp(const int nr);
bool gyldigTid(const int time, const int minutt); bool gyldigTid(const int time, const int minutt);
int finnDifferanse(const int nr, const Retning retning); int finnDifferanse(const int nr, const Retning retning);
int hentRuteIndeks(Stopp* p1);
std::string hentNavn(const Retning retning); std::string hentNavn(const Retning retning);
Stopp* finnStopp(int nr);
void fjernStopp();
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);
void skrivRetninger() const; void skrivRetninger() const;
void skrivRute(const Retning retning); void skrivRute(const Retning retning);
void slettData(); void slettData();
void smettStopp();
virtual void lesData(); virtual void lesData();
virtual void skrivBeskrivelse(); virtual void skrivBeskrivelse();
virtual void skrivData() const; virtual void skrivData() const;
virtual void skrivKort() const; virtual void skrivKort() const;
virtual void skrivTilFil(std::ofstream & ut); virtual void skrivTilFil(std::ofstream & ut);
}; };
......
...@@ -18,6 +18,14 @@ using namespace std; ...@@ -18,6 +18,14 @@ using namespace std;
extern Stoppesteder gStoppestederBase; // Henter inn globalt objekt extern Stoppesteder gStoppestederBase; // Henter inn globalt objekt
/**
* Sletter allokert minne i Ruter-mappet
*/
Ruter::~Ruter() {
for (auto it = rutene.begin(); it != rutene.end(); it++)
delete it->second; // Sletter det tilpekte
rutene.clear(); // Tømmer mappet for pekere
}
/** /**
* Sjekker om et gitt ruteNr finnes i datastrukturen * Sjekker om et gitt ruteNr finnes i datastrukturen
...@@ -34,7 +42,34 @@ bool Ruter::ruteNrFinnes(const int ruteNr) { ...@@ -34,7 +42,34 @@ bool Ruter::ruteNrFinnes(const int ruteNr) {
* endreRute() * endreRute()
*/ */
void Ruter::endreRute() { void Ruter::endreRute() {
int ruteNr;
char valg;
if (!rutene.empty()) { // Hvis det finnes ruter registrert:
ruteNr = lesInt("Rutenr", MINRUTER, MAXRUTER);
if (ruteNrFinnes(ruteNr)) { // Hvis rutenummeret finnes:
auto ruten = rutene.find(ruteNr); // Iterator til rett rute
ruten->second->skrivKort(); // Skriver egen info
ruten->second->skrivRute(Fram); // Skriver ruta
cout << '\n';
// Leser valg fra bruker:
valg = lesChar("F(jerne intervall) eller S(mette inn)");
// Looper til lovlig valg fra bruker:
while (valg != 'F' && valg != 'S') {
cout << "\nUgyldig valg, prøv igjen. F og S er gyldig\n";
valg = lesChar("F(jerne intervall) eller S(mette inn)");
}
switch (valg) { // Sender til rett funksjon etter brukervalg:
case 'F': ruten->second->fjernStopp(); break;
case 'S': ruten->second->smettStopp(); break;
}
} else // Rutenummeret finnes ikke:
cout << "\nIngen ruter registrert med dette nummeret.\n\n";
} else // Ingen ruter registrert:
cout << "\nIngen ruter registrert i programmet.\n\n";
} }
/** /**
...@@ -129,8 +164,10 @@ void Ruter::nyRute() { ...@@ -129,8 +164,10 @@ void Ruter::nyRute() {
rutene[ruteNr] = nyRute; // Lagrer ruten rutene[ruteNr] = nyRute; // Lagrer ruten
cout << "\nNy rute er lagt til:\n"; cout << "\nNy rute er lagt til:\n";
ruteBeskrivelse(ruteNr); // Skriver ut ruten ruteBeskrivelse(ruteNr); // Skriver ut ruten
} else } else {
nyRute->slettData(); // <1 stopp, sletter ruten nyRute->slettData(); // <1 stopp, sletter ruten
delete nyRute; // Sletter peker, ved ugyldig rute
}
} else // Rutenummer er duplikat: } else // Rutenummer er duplikat:
cout << "\nRutenummeret finnes fra før. Kan ikke legge til rute.\n\n"; cout << "\nRutenummeret finnes fra før. Kan ikke legge til rute.\n\n";
...@@ -266,13 +303,17 @@ void Ruter::ruteTabell() { ...@@ -266,13 +303,17 @@ void Ruter::ruteTabell() {
* @see Rute::skrivData() * @see Rute::skrivData()
*/ */
void Ruter::skrivAlle() { void Ruter::skrivAlle() {
cout << "\nFølgende ruter finnes:\n"; if (!rutene.empty()) { // Så lenge det er ruter registrert:
for (const auto & [ruteNr, rute] : rutene) { // For hver rute: cout << "\nFølgende ruter finnes:\n";
cout << ruteNr << ' '; // Skriver rutenr for (const auto & [ruteNr, rute] : rutene) { // For hver rute:
rute->skrivData(); // Ruten skriver egne data cout << ruteNr << ' '; // Skriver rutenr
rute->skrivData(); // Ruten skriver egne data
cout << '\n';
}
cout << '\n'; cout << '\n';
} else {
cout << "\nIngen ruter registrert i datastrukturen.\n\n";
} }
cout << '\n';
} }
/** /**
......
2 0
1 U \ No newline at end of file
3
1 0
2 3
3 5
50 10 0
2 A
3
4 0
5 3
6 5
5 50
\ No newline at end of file
...@@ -17,6 +17,7 @@ class Ruter { ...@@ -17,6 +17,7 @@ class Ruter {
private: private:
std::map <int, Rute*> rutene; std::map <int, Rute*> rutene;
public: public:
~Ruter();
bool ruteNrFinnes(const int ruteNr); bool ruteNrFinnes(const int ruteNr);
void endreRute(); void endreRute();
void handling(); void handling();
......
...@@ -52,6 +52,14 @@ Stoppested::Stoppested(const std::string nvn, ifstream & inn) { ...@@ -52,6 +52,14 @@ Stoppested::Stoppested(const std::string nvn, ifstream & inn) {
inn.ignore(); // Forkaster enter hvis det finnes naboer inn.ignore(); // Forkaster enter hvis det finnes naboer
} }
/**
* Tømmer et stoppesteds vektorer for innhold
*/
Stoppested::~Stoppested() {
nabostopper.clear(); // Tømmer vektor med nabostopp nummere
tidtilnabo.clear(); // Tømmer vektor med tid til de ulike naboene
}
/** /**
* Sjekker om et Stoppested har en gitt nabo * Sjekker om et Stoppested har en gitt nabo
* *
...@@ -127,7 +135,8 @@ void Stoppested::settNaboTid(const int nr) { ...@@ -127,7 +135,8 @@ void Stoppested::settNaboTid(const int nr) {
* Formaterer utskrift til å skrive navn på 20 "plasser" * Formaterer utskrift til å skrive navn på 20 "plasser"
*/ */
void Stoppested::skrivData() { void Stoppested::skrivData() {
cout << setw(20) << navn; cout << left << setw(20) << navn;
cout << right;
} }
/** /**
......
...@@ -24,6 +24,7 @@ class Stoppested { ...@@ -24,6 +24,7 @@ class Stoppested {
public: public:
Stoppested(const std::string nvn); Stoppested(const std::string nvn);
Stoppested(const std::string nvn, std::ifstream & inn); Stoppested(const std::string nvn, std::ifstream & inn);
~Stoppested();
bool finnesNabo(const int nr); bool finnesNabo(const int nr);
int hentNaboIndeks(const int nr); int hentNaboIndeks(const int nr);
int hentNaboTid(const int nr); int hentNaboTid(const int nr);
......
...@@ -15,6 +15,15 @@ ...@@ -15,6 +15,15 @@
#include "stoppesteder.h" #include "stoppesteder.h"
using namespace std; using namespace std;
/**
* Sletter minne allokert med Stoppesteder
*/
Stoppesteder::~Stoppesteder() {
for (int i = 0; i < stopper.size(); i++)
delete stopper[i]; // Sletter det tilpekte
stopper.clear(); // Tømmer vektor for pekere
}
/** /**
* Sjekker om en stoppesteds indeks finnes i vektoren * Sjekker om en stoppesteds indeks finnes i vektoren
* *
......
...@@ -19,6 +19,7 @@ class Stoppesteder { ...@@ -19,6 +19,7 @@ class Stoppesteder {
private: private:
std::vector <Stoppested*> stopper; std::vector <Stoppested*> stopper;
public: public:
~Stoppesteder();
bool finnesIndeks(const int nr); bool finnesIndeks(const int nr);
bool ikkeHarTall(const std::string nvn); bool ikkeHarTall(const std::string nvn);
bool tom(); bool tom();
......
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment