[C++] resizeable array van objecten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Dranica
  • Registratie: Augustus 2005
  • Laatst online: 21-12-2024
Ik zit in mijn 2de jaar ICT en moet een ticketverkoop programma schrijven voor een voetbal stadion.
In mijn programma heb ik een klasse ticket gedefinieerd waar ik al informatie opsla zola de plaats, informatie over de koper van het ticket enz.

Dan heb ik nog een klasse vak die ik als basis klasse gebruik voor afgeleide klassen zoals stavak, zitvak en loge.
In deze basisklasse moet ik dus een array van ticketobjecten defineren. Maar ik heb geen idee hoe ik dit moet doen. Hij moet dus resizeable zijn.

Hier volgt een stukje van mijn code:

C++: vak.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#ifndef VAK_H_
#define VAK_H_

#include<string>
#include<iostream>
#include "ticket.h"

using namespace std;

class vak
{
  public:
    vak(string,long);
    ~vak();
    
    string getname() const;
    void setname(string);
    
    long getcap() const;
    void setcap(long);
    
    string gettype() const;
    
    long getvrij() const;
    void setvrij();
    
    void setticket(long);
    
  protected:
    string name;
    long cap;
    string type;
    long vrij;
    ticket *vakticket;
    ticket arrayticket[];
    long aanttickets;
};
#endif /*VAK_H_*/

C++: vak.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <string>

#include "vak.h"

using namespace std;

vak::vak(string vakname,long capvak)
{
  name=vakname;
  cap=capvak;
}
vak::~vak()
{
  delete vakticket;
}

string vak::getname() const
{
  return name;
}
void vak::setname(string vakname)
{
  name = vakname;
}
long vak::getcap() const
{
  return cap;
}
void vak::setcap(long vakcap)
{
  cap = vakcap;
} 
string vak::gettype() const
{
  return type;
}
void vak::setvrij()
{
  vrij = vrij-1;
}
long vak::getvrij()const
{
  return vrij;
}
void vak::setticket(long aanttickets)
{
  *vakticket = new ticket[aanttickets];
  *vakticket = arrayticket[aanttickets];
}


zoals je kan zien is dit helemaal niet correct. Ik ben aan het proberen geweest zonder resultaat.

Acties:
  • 0 Henk 'm!

  • coubertin119
  • Registratie: Augustus 2002
  • Laatst online: 15-09 17:06
Een doodgewone vector in C++ is dus wat je zoekt? :)

En nog 'n tip, werk consequent Engels/Nederlands, zorg voor duidelijkere naamgeving en denk nog 's over je design na want er zitten haken en ogen aan (maar ik ken natuurlijk de opdracht niet, dus echte aanwijzingen geven is lastig).

Skat! Skat! Skat!


Acties:
  • 0 Henk 'm!

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Volgens mij is het vanuit didactisch oogpunt de bedoeling om geen standaardzaken te gebruiken :) Hangt inderdaad een beetje af wat de opdracht precies zegt, maar ik gok even dat het zo is.

TS zal dus zoiets moeten ontwikkelen:

code:
1
2
3
4
5
6
7
8
9
void addTicket(ticket t)
{
newTicketArray = {alloceer een ticketarray van lengte (ticketArraySize + 1)}
... // kopieer alle elementen uit de oude array naar de nieuwe array
... // wijs t toe aan het laatste element van de nieuwe array
... // dealloceer de inhoud van oude array
... // verleg de pointer van de oude naar de nieuwe array
ticketArraySize++;
}


Later zal je zien dat er nogal wat andere manieren zijn om lijstjes/reeksen/sets van zaken op te slaan, maar een resizable array is er onmiskenbaar ook een van.

This can no longer be ignored.


Acties:
  • 0 Henk 'm!

  • Dranica
  • Registratie: Augustus 2005
  • Laatst online: 21-12-2024
alvast bedankt voor de reacties.
Nuja ik weet dat het wss niet echt de goede manier van werken is.
Ben het dan ook aan het leren. Vorig jaar hebben we C geleerd en daar heb ik niet echt veel problemen mee.
Maar dat object georienteerd programmeren is totaal nieuw voor mij.
De lessen op school zijn niet echt een hulp dus tips zijn altijd welkom.
Dit is mijn opdracht.

Het team heeft een stadion met een bepaalde capaciteit (ongeveer 50000). Deze capaciteit is
onderverdeeld in verschillende vakken, welke bestaan uit ofwel zitplaatsen, ofwel staanplaatsen.
Daarnaast zijn er ook nog loges voorzien voor belangrijke gasten en bedrijven.
De loketbedienden moeten kunnen nakijken hoeveel plaatsen er per vak over zijn. Per zitplaats wordt er
bijgehouden in welk vak zich dit bevindt, op welke rij en welke stoel dit is. Bij staanplaatsen is dit niet het
geval. Daar wordt enkel het vak bijgehouden.
Wanneer een ticket verkocht wordt, wordt er van de persoon zijn naam en adres bijgehouden. Eén
persoon kan maximaal 5 tickets aankopen.
Enkel belangrijke gasten en bedrijven kunnen loges reserveren. De prijs van de loges hangt af van het feit
of men eten en drank, enkel drank of geen van beide wil.
Boven alle loketbedienden staat een hoofd welke op het einde van het seizoen moet kunnen nakijken
hoeveel tickets elke persoon aangekocht heeft. Tijdens het seizoen kan het zijn dat dit hoofd ook moet
meehelpen als loketbediende.

[ Voor 61% gewijzigd door Dranica op 28-12-2008 22:10 ]


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 16:56
Gewoon zelf een Datastructuur zoals ArrayList in Java of een C++ Vector implementeren.

Je hebt dan een array die de tickets bevat. Vervolgens gewoon iedere keer de grootte verdubbelen als de array vol zit en de elementen kopiëren naar de nieuwe array. Wat de initiële grootte is, mag je zelf weten.

Dat is de basis. Verder heb je niet meer nodig als een teller die bijhoudt hoeveel tickets er in de array zitten (ophogen bij toevoegen, verlagen bij verwijderen) en een variabele die de huidige grootte van de array bevat.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik zie in de opdracht niet staan dat je geen gebruik van maken van de standaard library van een taal. Is dat echt een eis? Het lijkt me nogal onzinnig, gezien de omvang van de opdracht. De focus ligt namelijk op het opzetten van een heel systeem, niet het aanleren van wat standaard datastructuren.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Dranica
  • Registratie: Augustus 2005
  • Laatst online: 21-12-2024
.oisyn schreef op zondag 28 december 2008 @ 22:28:
Ik zie in de opdracht niet staan dat je geen gebruik van maken van de standaard library van een taal. Is dat echt een eis? Het lijkt me nogal onzinnig, gezien de omvang van de opdracht. De focus ligt namelijk op het opzetten van een heel systeem, niet het aanleren van wat standaard datastructuren.
Wat bedoel je dan? Dat ik een vector moet gebruiken?
Het is namelijk zo dat we het begrip vector wel even kort hebben aangehaald maar er is niet verteld hoe we dit moeten gebruiken :).

Ben het trouwens aan het uitproberen nu.
Het probleem is dat we nogal veel zelf moeten uitzoeken en dat kan zeer frustrerend werken.

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 16:56
bloodcollector schreef op zondag 28 december 2008 @ 22:36:
[...]


Wat bedoel je dan? Dat ik een vector moet gebruiken?
Het is namelijk zo dat we het begrip vector wel even kort hebben aangehaald maar er is niet verteld hoe we dit moeten gebruiken :).

Ben het trouwens aan het uitproberen nu.
Het probleem is dat we nogal veel zelf moeten uitzoeken en dat kan zeer frustrerend werken.
Deze site kan je misschien op weg helpen: http://www.cplusplus.com/reference/stl/vector/.

Maar er zijn nog wel genoeg problemen over. Hoe ga voor elke plaats bepalen of het een zit- of staplaats is en de dingen die daarbij horen (vak/ rij voor zitplaatsen, loges, kosten). Er zijn genoeg functionele eisen die om een oplossing vragen. Verder: moet het ding ook een GUI hebben of is een CLI applicatie goed genoeg? Een datastructuur implementeren is één van de dingen die je nú beter niet kunt doen. :)

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • Dranica
  • Registratie: Augustus 2005
  • Laatst online: 21-12-2024
CLI is genoeg :)
GUI is voor volgend semester.

Ik zie het als volgt:
Ik heb 3 klassen stavak, loge, zitvak afgeleid van de klasse vak. Deze declareer ik in men main.
Deze hebben allen hun eigen zitplaatsen rijen aangeduid met letters, plaats op de rij met cijfer of omgekeerd Dus zo kan ik al weten welke plaats een stavak of zitvak is.

Hoe ik erga voor zorgen dat de grote baas kan zien hoeveel tickets een persoon jaarlijks heeft gekocht dat is nog een groot vraagteken.
Voor derest lijkt het me toch redelijk duidelijk (Kan natuurlijk nog verandering inkomen naarmate ik vorder.

Het lijkt erop dat ik hier meer uithaal dan de lessen zelf.
Vind de lessen op men school maar verwarrend. Veel te snel het zijn dan ook gwn power point presentaties zonder demonstraties.

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 16:56
Dat zou je op verschillende manieren kunnen doen. Opslaan in een tekst- of binair bestand of in een database, waarin de laatste natuurlijk het meest flexibele is, omdat je er dan allerlei queries op kunt loslaten. Als je al databaseontwerpen hebt gehad, zal ik daarnaar kijken of je anders daarin verdiepen.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • Dranica
  • Registratie: Augustus 2005
  • Laatst online: 21-12-2024
Hehe had een klasgenoot het over tegen mij. We moeten opslaan in een file. dus een database gebruiken is niet echt de bedoeling.

Jullie hebben me in ieder geval al geweldig geholpen bedankt daar voor ik kan al een heel stuk verder.

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 16:56
Je kunt ook valsspelen met SQLite natuurlijk. :P

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Ik denk niet dat een vak "naam" als property kan hebben. Ik vermoed uit je uitleg dat die naam van de persoon die ze besteld heeft is. In dat geval denk ik dat je beter een class Supporter of iets dergelijks kan maken en daarnaar verwijzen. Bovendien denk ik dat je nog een fundamenteel type mist, namelijk de boolean.

Zoals hierboven al eens gezegd, begin bij het begin en maak een design.

- welke entiteiten kan je definieren (bvb Supporter, vak (+stavak, zitvak, loge), rij, plaats,... ). Dit mogen(moeten zelfs) er gerust teveel zijn!
- wat zijn de relaties tussen de entiteiten: Supporter koopt/heeft tickets. Een ticket associeert een supporter aan plaats met een datum, ...
Belangrijk hier is dat je niet altijd vanuit het standpunt van de realiteit hoeft te werken. Hier kan het beter zijn om vanuit het standpunt van de verkoper te werken bvb. In dat geval kan een ticket toegewezen worden aan een supporter in tegenstelling tot een supporter die een ticket heeft/koopt! Dit draait de relatie om.
- nu gaan we schrappen: doe alles uit je model wat je niet nodig hebt om de functionaliteit te bieden die je nodig hebt. Bvb: moet je echt een plaats hebben of is rij + nummer genoeg ?

Dat zou je normaal wel al een goeie basis moeten bieden.

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Anders doen we even de hele opdracht voor ;)

Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Zoijar schreef op maandag 29 december 2008 @ 11:23:
Anders doen we even de hele opdracht voor ;)
ik hoop dat zijn opdracht langer duurt dan de 5 minuten die ik nodig had om dit voor te kauwen ;)

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • Dranica
  • Registratie: Augustus 2005
  • Laatst online: 21-12-2024
Ik heb dit Klasse diagramma gekregen van mijn leerkracht.
Afbeeldingslocatie: http://img255.imageshack.us/img255/8049/classdiagramrl8.png

[ Voor 32% gewijzigd door een moderator op 30-12-2008 01:38 . Reden: Thumb klikbaar gemaakt... ]


Acties:
  • 0 Henk 'm!

Verwijderd

Heeft hij je ook meer dan een thumbnail gegeven?

Acties:
  • 0 Henk 'm!

  • Dranica
  • Registratie: Augustus 2005
  • Laatst online: 21-12-2024
ja srr Ik wou een grotere posten maar dan kwam er een waarschuwing datik een tumbnail moest posten.
*snip groot plaatje verwijderd* Zie hieronder ;)

[ Voor 36% gewijzigd door RobIII op 30-12-2008 01:50 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
bloodcollector schreef op dinsdag 30 december 2008 @ 01:18:
ja srr Ik wou een grotere posten maar dan kwam er een waarschuwing datik een tumbnail moest posten.[afbeelding]
Dan maak je een link van je thumbnail ;) (Zie de img tag, url tag en voetnoot 3)

[url="http://www.host.nl/bla/plaatjegroot.gif"][img]http://www.host.nl/bla/thumb.gif[/img][/url]

Ik heb het nu even voor je gedaan. Normaliter wordt je thumbnail dan klikbaar:

Afbeeldingslocatie: http://tweakers.net/ext/f/v9pwIzNBLFYHirSeXEb9J3MW/full.png

Echter omdat je je plaatje host op imageshack wordt er door de forumsoftware een waarschuwing voor in de plaats gezet omdat zij nogal agressieve popups vertonen:
Afbeeldingslocatie: http://img255.imageshack.us/img255/8049/classdiagramrl8.png

Overigens had je je al dat gedoe kunnen besparen als je even de moeite had genomen de loze ruimte er af te knippen en je plaatje <600px breed te maken:

Afbeeldingslocatie: http://tweakers.net/ext/f/whHcLkFMCGfnhypK9RUpSCZC/full.png

En dat alles had je ook uitgevonden als je op "faq" had geklikt in de waarschuwing:
Afbeeldingslocatie: http://tweakers.net/ext/f/Arm7uTMRXUeB9ppy5VtlP3Tk/full.png

[ Voor 69% gewijzigd door RobIII op 30-12-2008 01:57 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Dranica
  • Registratie: Augustus 2005
  • Laatst online: 21-12-2024
Zal er in het vervolg op letten toch bedankt voor de hulp. :)

Acties:
  • 0 Henk 'm!

  • Dranica
  • Registratie: Augustus 2005
  • Laatst online: 21-12-2024
Bedankt mensen mijn programma is afgeraakt.
nog enkel exception handling toevoegen.
Pagina: 1