Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
G
Gruppe04
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Frederik Simonsen
Gruppe04
Commits
d2b4c111
Commit
d2b4c111
authored
3 years ago
by
Frederik Simonsen
Browse files
Options
Downloads
Plain Diff
Merge branch 'frederik' into 'main'
Frederik See merge request
!5
parents
913426af
50246e31
No related branches found
No related tags found
1 merge request
!5
Frederik
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
bane.cpp
+4
-0
4 additions, 0 deletions
bane.cpp
buss.cpp
+1
-2
1 addition, 2 deletions
buss.cpp
rute.cpp
+260
-158
260 additions, 158 deletions
rute.cpp
rute.h
+2
-3
2 additions, 3 deletions
rute.h
ruter.cpp
+76
-45
76 additions, 45 deletions
ruter.cpp
stoppesteder.cpp
+5
-7
5 additions, 7 deletions
stoppesteder.cpp
with
348 additions
and
215 deletions
bane.cpp
+
4
−
0
View file @
d2b4c111
...
...
@@ -64,6 +64,10 @@ void Bane::skrivData() const {
Rute
::
skrivData
();
// Rute skriver egne datamedlemmer
}
/**
* Skriver ut kort informasjon om banens datamedlemmer i run-time (virtuell)
*/
void
Bane
::
skrivKort
()
const
{
cout
<<
"
\n
Banen har "
<<
antVogner
<<
" vogner og banesettet er "
<<
lengde
<<
" meter langt.
\n\n
"
;
...
...
This diff is collapsed.
Click to expand it.
buss.cpp
+
1
−
2
View file @
d2b4c111
...
...
@@ -80,8 +80,7 @@ void Buss::skrivData() const {
}
/**
* skrivKort() (virtuell)
*
* Skriver kort informasjon om bussens datamedlemmer (virtuell)
*/
void
Buss
::
skrivKort
()
const
{
cout
<<
"
\n
Bussen har "
<<
antSitt
<<
" sitteplasser, "
<<
antStaa
...
...
This diff is collapsed.
Click to expand it.
rute.cpp
+
260
−
158
View file @
d2b4c111
This diff is collapsed.
Click to expand it.
rute.h
+
2
−
3
View file @
d2b4c111
...
...
@@ -17,8 +17,7 @@
* Stopp (med unikt nummer og antall minutter fra stoppested)
*/
struct
Stopp
{
int
nr
,
minutter
;
// Litt usikker på om denne skal deklareres slik
// Eller om den skal under public eller private i Rute
int
nr
,
minutter
;
Stopp
(
const
int
stoppNr
,
const
int
antMin
);
int
hentMin
();
int
hentNr
();
...
...
@@ -38,8 +37,8 @@ class Rute {
Rute
(
std
::
ifstream
&
inn
);
bool
erListeGyldig
();
bool
erTall
(
std
::
string
nvn
);
bool
finnesStopp
(
const
int
nr
);
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
,
...
...
This diff is collapsed.
Click to expand it.
ruter.cpp
+
76
−
45
View file @
d2b4c111
...
...
@@ -16,11 +16,15 @@
#include
"stoppesteder.h"
using
namespace
std
;
extern
Stoppesteder
gStoppestederBase
;
extern
Stoppesteder
gStoppestederBase
;
// Henter inn globalt objekt
/**
* ruteNrFinnes(...)
* Sjekker om et gitt ruteNr finnes i datastrukturen
*
* @param ruteNr - Et ruteNr som skal sjekkes om finnes eller ei
* @return true - Rutenr finnes i datastrukturen
* @return false - Rutenr finnes ikke i datastrukturen
*/
bool
Ruter
::
ruteNrFinnes
(
const
int
ruteNr
)
{
return
rutene
.
count
(
ruteNr
);
...
...
@@ -36,11 +40,12 @@ void Ruter::endreRute() {
/**
* Funksjon som håndterer ulike menyvalg fra bruker
*
* @see nyRute()
* @see skrivAlle()
* @see endreRute()
* @see ruteBeskrivelse()
* @see ruteTabell()
* @see Ruter::skrivMeny()
* @see Ruter::nyRute()
* @see Ruter::skrivAlle()
* @see Ruter::endreRute()
* @see Ruter::ruteBeskrivelse()
* @see Ruter::ruteTabell()
*/
void
Ruter
::
handling
()
{
char
valg
;
...
...
@@ -62,9 +67,9 @@ void Ruter::handling() {
* Leser informasjon om ruter fra fil
*/
void
Ruter
::
lesFraFil
()
{
int
key
,
antRuter
;
char
ruteType
;
int
key
,
// Rutenr, nøkkel til unik rute
antRuter
;
// antall ruter å lese
char
ruteType
;
// U (=buss), A (=bane)
ifstream
innfil
(
"ruter.dta"
);
// Åpner aktuell fil
if
(
innfil
)
{
// Hvis filen funnet:
...
...
@@ -73,15 +78,15 @@ void Ruter::lesFraFil() {
innfil
>>
key
;
// Prøver å lese første port
while
(
!
innfil
.
eof
())
{
// Så lenge ikke slutt på fil:
innfil
>>
ruteType
;
innfil
.
ignore
();
switch
(
ruteType
)
{
switch
(
ruteType
)
{
// Oppretter korrekt type objekt:
case
'U'
:
rutene
[
key
]
=
new
Buss
(
innfil
);
break
;
case
'A'
:
rutene
[
key
]
=
new
Bane
(
innfil
);
break
;
}
innfil
>>
key
;
innfil
>>
key
;
// Forsøker å lese neste post:
}
innfil
.
close
();
innfil
.
close
();
// Lukker aktuell fil
}
else
}
else
// Filen finnes ikke / kunne ikke åpnes:
cout
<<
"
\n
Fant ikke filen 'ruter.dta'...
\n
"
;
}
...
...
@@ -92,8 +97,10 @@ void Ruter::lesFraFil() {
*
* @see Ruter::ruteNrFinnes(...)
* @see Rute::lesData()
* @see Bane::lesData()
* @see Buss::lesData()
* @see Rute::erListeGyldig()
* @see Ruter::ruteBeskrivelse
* @see Ruter::ruteBeskrivelse
(...)
* @see Rute::slettData()
*/
void
Ruter
::
nyRute
()
{
...
...
@@ -113,16 +120,17 @@ void Ruter::nyRute() {
ruteType
=
lesChar
(
"Rutetype b(A)ne eller b(U)ss"
);
}
switch
(
ruteType
)
{
switch
(
ruteType
)
{
// Oppretter korrekt type objekt:
case
'A'
:
nyRute
=
new
Bane
;
nyRute
->
lesData
();
break
;
case
'U'
:
nyRute
=
new
Buss
;
nyRute
->
lesData
();
break
;
}
if
(
nyRute
->
erListeGyldig
())
{
rutene
[
ruteNr
]
=
nyRute
;
if
(
nyRute
->
erListeGyldig
())
{
// Hvis >1 stopp på ruten:
rutene
[
ruteNr
]
=
nyRute
;
// Lagrer ruten
cout
<<
"
\n
Ny rute er lagt til:
\n
"
;
ruteBeskrivelse
(
ruteNr
);
}
else
nyRute
->
slettData
();
ruteBeskrivelse
(
ruteNr
);
// Skriver ut ruten
}
else
nyRute
->
slettData
();
// <1 stopp, sletter ruten
}
else
// Rutenummer er duplikat:
cout
<<
"
\n
Rutenummeret finnes fra før. Kan ikke legge til rute.
\n\n
"
;
...
...
@@ -136,23 +144,27 @@ void Ruter::nyRute() {
* Ber om et rutenummer, skriver ut gitt rute
*
* @see Rute::skrivBeskrivelse()
* @see Buss::skrivBeskrivelse()
* @see Bane::skrivBeskrivelse()
*/
void
Ruter
::
ruteBeskrivelse
()
{
int
ruteNr
;
ruteNr
=
lesInt
(
"
\n
Rutenr"
,
MINRUTER
,
MAXRUTER
);
auto
it
=
rutene
.
find
(
ruteNr
);
if
(
it
!=
rutene
.
end
())
{
auto
it
=
rutene
.
find
(
ruteNr
);
// Forsøker å finne aktuelt rutenr:
if
(
it
!=
rutene
.
end
())
{
// Funn, skriver ut ruten
it
->
second
->
skrivBeskrivelse
();
}
else
}
else
// Hvis rutenr ikke finnes i datastrukturen:
cout
<<
"
\n
Ruten med dette rutenr eksisterer ikke..
\n
"
;
}
/**
* skriver ut rute fra med
sent nummer.
* skriver ut rute fra medsen
d
t nummer
(som garantert finnes)
.
* brukes for å skrive rute når den først blir laget.
*
* @param ruteNr -rute som skal skrives ut
* @see Rute::skrivBeskrivelse
* @param ruteNr Rutenummeret til ruten som skal skrives ut
* @see Rute::skrivBeskrivelse()
* @see Bane::skrivBeskrivelse()
* @see Buss::skrivBeskrivelse()
*/
void
Ruter
::
ruteBeskrivelse
(
const
int
ruteNr
){
auto
it
=
rutene
.
find
(
ruteNr
);
...
...
@@ -160,23 +172,40 @@ void Ruter::ruteBeskrivelse(const int ruteNr){
}
/**
* ruteTabell()
* Tilbyr bruker å opprette en rutetabell for et angitt stoppested
* hvor tid skal regnes om fra rutens startstoppested uavhengig
* om ruten skrives "forlengs" eller "baklengs"
*
* @see Ruter::ruteNrFinnes(...)
* @see Rute::skriveRetninger()
* @see Rute::skrivKort()
* @see Bane::skrivKort()
* @see Buss::skrivKort()
* @see Rute:skrivRute(...)
* @see Rute::hentNavn(...)
* @see Stoppesteder::byttBokstaver(...)
* @see Stoppesteder::finnEntydig(...)
* @see Stoppesteder::hentIndeksVhaNavn(...)
* @see Rute::finnesStopp(...)
* @see Rute::finnDifferanse(...)
* @see Rute::ruteTabell(...)
*/
void
Ruter
::
ruteTabell
()
{
int
ruteNr
,
stoppNr
,
diff
;
diff
;
// Antall min fra faktisk stoppested til startstoppested
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
<<
"
\n
Ugyldig valg, prøv igjen.
\n
"
;
...
...
@@ -185,7 +214,9 @@ void Ruter::ruteTabell() {
ruten
->
second
->
skrivKort
();
// Skriver info om rutetypen
switch
(
valg
)
{
// Skriver hele ruten:
switch
(
valg
)
{
// Skriver hele ruten og henter navn
// på første stoppested på ruten avhengig
// av retning bruker ønsker å se:
case
'F'
:
ruten
->
second
->
skrivRute
(
Fram
);
startSted
=
ruten
->
second
->
hentNavn
(
Fram
);
break
;
case
'T'
:
ruten
->
second
->
skrivRute
(
Tilbake
);
...
...
@@ -212,16 +243,14 @@ void Ruter::ruteTabell() {
break
;
// Henter differanse ved retning tilbake
}
//diff = ruten->second->finnDifferanse(stoppNr);
//startSted = ruten->second->hentNavn(Fram);
// Leser inn rutetabellen og skriver den ut:
ruten
->
second
->
ruteTabell
(
diff
,
startSted
,
navn
);
}
else
// Hvis stoppet ikke finnes på ruten:
cout
<<
"
\n
Stoppestedet "
<<
navn
<<
" finnes ikke "
<<
"på denne ruten!
\n\n
"
;
}
else
}
else
// Ikke entydig stoppestedsnavn:
cout
<<
"
\n
Ingen entydige stoppestedsnavn funnet
\n\n
"
;
...
...
@@ -232,22 +261,22 @@ void Ruter::ruteTabell() {
}
/**
*
s
kriver alle rute
r som finnes.
*
S
kriver alle rute
ne i datastrukturen
*
* @see Rute::skrivData
* @see Rute::skrivData
()
*/
void
Ruter
::
skrivAlle
()
{
cout
<<
"
\n
Følgende ruter finnes:
\n
"
;
for
(
const
auto
&
[
ruteNr
,
rute
]
:
rutene
)
{
cout
<<
ruteNr
<<
' '
;
rute
->
skrivData
();
for
(
const
auto
&
[
ruteNr
,
rute
]
:
rutene
)
{
// For hver rute:
cout
<<
ruteNr
<<
' '
;
// Skriver rutenr
rute
->
skrivData
();
// Ruten skriver egne data
cout
<<
'\n'
;
}
cout
<<
'\n'
;
}
/**
*
s
kriver menyen
*
S
kriver
ruter
menyen
*/
void
Ruter
::
skrivMeny
()
{
cout
<<
"
\n
Følgende kommandoer er tilgjengelige:
\n
"
...
...
@@ -262,16 +291,18 @@ void Ruter::skrivMeny() {
* Skriver informasjon om ruter til fil
*
* @see Rute::skrivTilFil(...)
* @see Bane::skrivTilFil(...)
* @see Buss::skrivTilFil(...)
*/
void
Ruter
::
skrivTilFil
()
{
ofstream
utfil
(
"ruter.dt2"
);
// Åpner aktuell fil for skriving
cout
<<
"
\n
Skriver til filen 'ruter.dt2'...
\n
"
;
utfil
<<
rutene
.
size
()
<<
'\n'
;
for
(
const
auto
&
val
:
rutene
)
{
utfil
<<
val
.
first
<<
' '
;
(
val
.
second
)
->
skrivTilFil
(
utfil
);
utfil
<<
rutene
.
size
()
<<
'\n'
;
// Skriver ut antall ruter
for
(
const
auto
&
val
:
rutene
)
{
// For hver rute:
utfil
<<
val
.
first
<<
' '
;
// Skriver rutenr
(
val
.
second
)
->
skrivTilFil
(
utfil
);
// Ruten skriver seg selv til fil
}
utfil
.
close
();
utfil
.
close
();
// Lukker fil for skriving
}
This diff is collapsed.
Click to expand it.
stoppesteder.cpp
+
5
−
7
View file @
d2b4c111
...
...
@@ -9,7 +9,7 @@
#include
<string>
#include
<vector>
#include
<fstream>
#include
<algorithm>
// transform
#include
<algorithm>
//
any_of,
transform
#include
"LesData3.h"
#include
"stoppested.h"
#include
"stoppesteder.h"
...
...
@@ -25,7 +25,7 @@ using namespace std;
bool
Stoppesteder
::
finnesIndeks
(
const
int
nr
){
// Sjekker om medsendt nr ikke er større enn vektorens størrelse:
if
(
nr
<=
stopper
.
size
())
{
for
(
int
i
=
0
;
i
<
stopper
.
size
();
i
++
){
// For hver stoppested:
for
(
int
i
=
0
;
i
<
stopper
.
size
();
i
++
)
{
// For hver stoppested:
if
(
i
==
nr
)
//hopper ut hvis tall er funnet
return
true
;
// Funn
}
...
...
@@ -36,9 +36,9 @@ bool Stoppesteder::finnesIndeks(const int nr){
/**
* sjekker om en string inneholder tall.
*
* @param nvn
* @return true
h
vis
ikke tall
* @return false
h
vis
har
tall
* @param nvn
Streng fra bruker som skal sjekkes om inneholder tall
* @return true
H
vis
tall i strengen
* @return false
H
vis
ikke
tall
i strengen
*/
bool
Stoppesteder
::
ikkeHarTall
(
const
string
nvn
){
return
any_of
(
nvn
.
begin
(),
nvn
.
end
(),
::
isdigit
);
...
...
@@ -311,8 +311,6 @@ void Stoppesteder::skrivStopp() {
Stoppested
*
stoppestedet
=
nullptr
;
if
(
!
stopper
.
empty
())
{
// Hvis det finnes stoppesteder i datastrukturen
// TODO: Lag en funksjon som sørger for at et stoppesteds navn ikke
// TODO: kun kan være tall!
cout
<<
"
\n
Alt om stoppestedet: "
;
getline
(
cin
,
navn
);
while
(
navn
.
size
()
<
1
)
{
// Sørger for at navn være minst 1 tegn
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment