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

SN og SA funksjonalitet

parent 568534e5
No related branches found
No related tags found
No related merge requests found
......@@ -4,9 +4,37 @@
* @file stoppested.cpp
* @author Sondre Sand & Frederik Simonsen
*/
#include <iomanip>
#include <iostream>
#include <string>
#include <vector>
#include "stoppested.h"
using namespace std;
/**
* Run-time constructor, ifm. menyvalg S N.
* Kopierer medsendt unikt navn til å bli navn
* på stoppestedet
*
* @param nvn - Stoppestedets unike navn som er duplikatsjekket
*/
Stoppested::Stoppested(const string nvn) {
navn = nvn;
}
/**
* Returnerer et Stoppesteds unike navn
*
* @return Stoppestedets navn
*/
string Stoppested::hentStoppestedNavn() {
return navn;
}
// TODO: Fyll på her etterhvert som header-fila tar form
/**
* Skriver ut Stoppestedets navn på skjerm ifm. S A
*/
void Stoppested::skrivData() {
cout << setw(20) << navn;
}
\ No newline at end of file
......@@ -21,6 +21,9 @@ class Stoppested {
std::vector <int> tidtilnabo;
public:
Stoppested(const std::string nvn);
std::string hentStoppestedNavn();
void skrivData();
};
#endif
\ No newline at end of file
......@@ -4,29 +4,60 @@
* @file stoppesteder.cpp
* @author Sondre Sand & Frederik Simonsen
*/
#include <iomanip>
#include <iostream>
#include <vector>
#include "LesData3.h"
#include "stoppested.h"
#include "stoppesteder.h"
using namespace std;
/**
* TODO: Funksjon som skal håndtere ulike menyvalg fra bruker
* Forsøker å finne om et Stoppestedsnavn er duplikat
*
* @param nvn - Bruker innlest navn som skal sjekkes mot faktiske Stoppestedsnavn
* @return Hvis duplikat, returneres en peker til Stoppestedet med navnet
* @return Hvis ikke duplikat, eller ingen stoppesteder i datastrukturen
* returneres nullptr
* @see Stoppested::hentStoppestedNavn()
*/
Stoppested* Stoppesteder::finnDuplikat(string nvn) {
if (!stopper.empty()) { // Så lenge stoppesteder er registrert:
for (int i = 0; i < stopper.size(); i++) { // For hvert stoppested:
// Bruker hjelpefunksjon for å sammenligne parameter
// og faktisk stoppestedsnavn:
if (stopper[i]->hentStoppestedNavn() == nvn)
return stopper[i]; // Funn
}
}
return nullptr; // Ingen stoppesteder i datastrukturen, eller
// fant ingen duplikater
}
/**
* Funksjon som håndterer brukervalg ifm. Stoppestedermenyen
*
* @see Stoppesteder::skrivMeny()
* @see Stoppesteder::nyStop()
* @see Stoppesteder::skrivAlle()
* @see Stoppesteder::skrivStopp()
*/
void Stoppesteder::handling() {
char valg;
skrivMeny();
skrivMeny(); // Skriver ut menyvalgene til bruker
valg = lesChar("\nKommando");
switch (valg) {
case 'N': nyStop(); break;
case 'A': skrivAlle(); break;
case 'S': skrivStopp(); break;
case 'N': nyStop(); break; // Legge til nytt stoppested
case 'A': skrivAlle(); break; // Skriv alle stoppesteder
case 'S': skrivStopp(); break; // Skriv alt om et stoppested
default: cout << "\nUlovlig kommando!\n"; break;
}
}
/**
* Leser inn informasjon om stoppesteder fra fil
*/
......@@ -35,17 +66,49 @@ void Stoppesteder::lesFraFil() {
}
/**
* nyStop()
* Legger til et nytt stoppested i datastrukturen, hvis mulig (ingen duplikat)
*
* @see Stoppesteder::finnDuplikat(...)
* @see Stoppested::Stoppested(...)
*/
void Stoppesteder::nyStop() {
Stoppested* nyStopp = nullptr;
string navn;
cout << "\nNavn på stoppested: "; getline(cin,navn);
if (!stopper.empty()) // Sjekker kun for duplikat, hvis det finnes stoppesteder
nyStopp = finnDuplikat(navn);
if (nyStopp == nullptr) { // Ingen duplikater funnet/stoppesteder registrert
nyStopp = new Stoppested(navn); // Oppretter nytt stoppested
stopper.push_back(nyStopp); // Legges bakerst i vektoren
cout << "\nStoppested med navn: " << navn << " er nå lagt til.\n";
} else // Duplikat navn:
cout << "\nStedsnavnet finnes allerede.\n";
}
/**
* skrivAlle()
* Skriver ut navn og nummer om hvert stoppested i datastrukturen
* Skriver ut 3 stoppesteder per linje i run-time
* Forsøker å skrive formatert utskrift
*
* @see Stoppested::skrivData()
*/
void Stoppesteder::skrivAlle() {
int n = 0; // Indikator for å telle opp antall utskrifter
if (!stopper.empty()) { // Hvis det finnes stoppesteder registrert:
cout << "\nAlle stoppestedene i datastrukturen:\n";
for (int i = 0; i < stopper.size(); i++) { // For hvert stoppested:
cout << setw(4) << i+1 << ": "; // Skriver ut nummer
stopper[i]->skrivData(); // Stopp skriver eget navn
n++; // Teller opp indikator
if (n % 3 == 0) { // Sørger for linjeskift for hver 3.stopp
cout << '\n';
}
}
} else // Ingen stoppesteder registrert:
cout << "\nIngen stoppesteder registrert i datastrukturen!\n";
}
/**
......
......@@ -9,6 +9,7 @@
#define __STOPPESTEDER_H
#include <vector>
#include <string>
#include "stoppested.h"
/**
......@@ -18,6 +19,7 @@ class Stoppesteder {
private:
std::vector <Stoppested*> stopper;
public:
Stoppested* finnDuplikat(std::string nvn);
void handling();
void nyStop();
void lesFraFil();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment