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

flere hjelpefunksjoner og start på R N

parent 4471dc2e
Branches
No related tags found
No related merge requests found
......@@ -7,13 +7,30 @@
#include <iostream>
#include <fstream>
#include "bane.h"
#include "const.h"
#include "LesData3.h"
using namespace std;
/**
* Bane() Nullstiller alle datamedlemmer. Faktisk innlesning skjer i lesData
*/
Bane::Bane() {
antVogner = lengde = 0;
}
//TODO: Fyll på mer her etter som header-fila tar form
Bane::Bane(ifstream & inn) : Rute (inn) {
inn >> antVogner >> lengde; inn.ignore();
}
/**
* lesData()
*/
void Bane::lesData() {
antVogner = lesInt("Antall vogner på banen", MINVOGNER, MAXVOGNER);
lengde = lesInt("Lengde på banesettet (meter)", MINLENGDE, MAXLENGDE);
Rute::lesData();
}
/**
* skrivData
......
......@@ -18,7 +18,9 @@ class Bane : public Rute {
int antVogner, lengde;
public:
Bane();
Bane(std::ifstream & inn);
virtual void lesData();
virtual void skrivData() const;
virtual void skrivTilFil(std::ofstream & ut);
virtual void skrivBeskrivelse();
......
......@@ -7,13 +7,45 @@
#include <iostream>
#include <fstream>
#include "buss.h"
#include "const.h"
#include "LesData3.h"
using namespace std;
/**
* Buss() Nullstiller alle datamedlemmer, blir lest inn reelle verdier i lesData
*/
Buss::Buss() {
antSitt = antStaa = 0;
leddbuss = false;
}
// TODO: Fyll inn mer her etter som header-fila tar form
Buss::Buss(ifstream & inn) : Rute(inn) {
inn >> antSitt >> antStaa >> leddbuss; inn.ignore();
}
/**
* lesData()
*/
void Buss::lesData() {
char bussType;
antSitt = lesInt("Antall sitteplasser på bussen", MINSITT, MAXSITT);
antStaa = lesInt("Antall ståplasser på bussen", MINSTAA, MAXSTAA);
bussType = lesChar("Leddbuss? (J/N)");
while (bussType != 'J' && bussType != 'N') {
cout << "\nUlovlig valg, prøv igjen.\n";
bussType = lesChar("Leddbuss? J eller N");
}
if (bussType == 'J') {
leddbuss = true;
} else if (bussType == 'N')
leddbuss = false;
Rute::lesData();
}
/**
* skrivData
*/
......
......@@ -20,7 +20,9 @@ class Buss : public Rute {
bool leddbuss;
public:
Buss();
Buss(std::ifstream & inn);
virtual void lesData();
virtual void skrivData() const;
virtual void skrivTilFil(std::ofstream & ut);
virtual void skrivBeskrivelse();
......
......@@ -10,6 +10,14 @@
const int MINRUTER = 1;
const int MAXRUTER = 999;
const int MINVOGNER = 2;
const int MAXVOGNER = 10;
const int MINLENGDE = 15;
const int MAXLENGDE = 150;
const int MINSITT = 20;
const int MAXSITT = 80;
const int MINSTAA = 10;
const int MAXSTAA = 40;
// TODO: INNHOLD HER
#endif
......@@ -16,6 +16,13 @@ using namespace std;
extern Stoppesteder gStoppestederBase;
// TODO: Fyll på her etter som header-fila tar mer form
/**
* Rute()
*/
Rute::Rute() {
// Gjør ingenting, men må være her så man kan opprette buss/bane
}
/**
* Rute::Rute(...)
*/
......@@ -41,6 +48,20 @@ Stopp::Stopp(const int stoppNr, const int antMin) {
nr = stoppNr; minutter = antMin;
}
/**
* lesData()
*/
void Rute::lesData() {
string navn,
fNavn;
cout << "\nStoppested (entydig navn / tall / ENTER for å avslutte): ";
getline(cin, navn); //TODO fortsette her
/*while (navn.size() != 0) {
}*/
}
/**
* skrivData()
*/
......
......@@ -31,7 +31,9 @@ class Rute {
std::list <Stopp*> stoppene;
public:
Rute();
Rute(std::ifstream & inn);
virtual void lesData();
virtual void skrivData() const;
virtual void skrivTilFil(std::ofstream & ut);
virtual void skrivBeskrivelse();
......
......@@ -13,8 +13,11 @@
#include "bane.h"
#include "buss.h"
#include "const.h"
#include "stoppesteder.h"
using namespace std;
extern Stoppesteder gStoppestederBase;
/**
* endreRute()
*/
......@@ -73,7 +76,37 @@ void Ruter::lesFraFil() {
* nyRute()
*/
void Ruter::nyRute() {
int ruteNr;
char ruteType;
Rute* nyRute = nullptr;
if (!gStoppestederBase.tom()) { // Hvis det finnes stoppesteder registrert:
ruteNr = lesInt("Rutenr", MINRUTER, MAXRUTER);
// Looper til ikke duplikat rutenr blir skrevet inn, evt gjør denne til en if-else
while (ruteNrFinnes(ruteNr)) {
cout << "\nDuplikat ruteNr, vennligst prøv igjen.\n";
ruteNr = lesInt("Rutenr", MINRUTER, MAXRUTER);
}
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;
}
} else // Hvis ingen stoppesteder registrert:
cout << "\nIngen stopper registrert i datastrukturen, kan derfor ikke "
<< "opprette ny rute for øyeblikket.\n\n";
}
/**
......@@ -135,3 +168,10 @@ void Ruter::skrivTilFil() {
}
utfil.close();
}
/**
* ruteNrFinnes(...)
*/
bool Ruter::ruteNrFinnes(const int ruteNr) {
return rutene.count(ruteNr);
}
\ No newline at end of file
......@@ -26,6 +26,7 @@ class Ruter {
void skrivAlle();
void skrivMeny();
void skrivTilFil();
bool ruteNrFinnes(const int ruteNr);
};
#endif
\ No newline at end of file
......@@ -103,6 +103,8 @@ void Stoppesteder::nyStop() {
getline(cin, navn);
}
navn = byttBokstaver(navn); //se kommentar i Stoppesteder::byttBokstaver
if (!stopper.empty()) // Sjekker kun for duplikat, hvis det finnes stoppesteder
nyStopp = finnDuplikat(navn);
......@@ -216,21 +218,44 @@ string Stoppesteder::finnEntydig(string nvn) {
stortNavn = stopper[i]->hentStoppestedNavn();
transform(stortNavn.begin(), stortNavn.end(),
stortNavn.begin(), ::toupper);
if (stortNavn.compare(0, nvn.size(), nvn) == 0) {
if (stortNavn.compare(nvn) == 0) { // hele navnet matcher
navneMatch.push_back(i);
entydig = navneMatch[navneMatch.size()-1];
return stopper[entydig]->hentStoppestedNavn();
}
if (stortNavn.compare(0, nvn.size(), nvn) == 0) { // Matcher deler av navn
navneMatch.push_back(i);
}
if (navneMatch.size() > 1)
if (navneMatch.size() > 1) // Ikke entydig navn:
return tom; // Early return, hvis navn ikke er entydig
}
if (navneMatch.size() == 1) { // Entydig navn:
entydig = navneMatch[0];
/*entydig = navneMatch[0];
transform(entydig.begin()+1, entydig.end(),
entydig.begin()+1, ::tolower);
cout << '\n' << entydig << '\n';*/
return stopper[entydig]->hentStoppestedNavn();
} else // Ingen registrerte navn som matcher
return tom;
}
string Stoppesteder::byttBokstaver(const string nvn) {
string nyString;
for (int i = 0; i < nvn.size(); i++) {
switch(int(nvn[i])) {
case -111: nyString += 'e'; break;
case 111: nyString += 'o'; break;
case -122: nyString += 'a'; break;
case -110: nyString += 'E'; break;
case 79: nyString += 'O'; break;
case -113: nyString += 'A'; break;
default: nyString += nvn[i];
}
}
return nyString;
}
bool Stoppesteder::tom() {
return stopper.empty();
}
\ No newline at end of file
......@@ -27,8 +27,10 @@ class Stoppesteder {
void skrivMeny();
void skrivStopp();
void skrivTilFil();
bool tom();
std::string hentNavnVhaIndeks(const int nr);
std::string finnEntydig(std::string nvn);
std::string byttBokstaver(const std::string nvn); //ingen anelse hvordan få dette til å funke
};
#endif
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment