[ASP.NET] Theaterzaal programatisch vullen

Pagina: 1
Acties:

  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 06:50
Hoi Allen,

Op dit moment ben ik bezig met het maken van een ASP.NET applicatie (visual basic) maar loop vast op een wens van de opdrachtgever. Het gaat om een reserveringsapplicatie waarbij klanten / medewerkers van een theater stoelen kunnen reserveren wat door het systeem gedaan moet worden (er is ook een optie om zelf stoelen te selecteren maar dat is nu niet de bedoeling)

Nu is het de bedoeling om mensen die de wat grotere reserveringen doen netjes bij elkaar te plaatsen, maar zoals je zelf wel zult begrijpen is er niet altijd plaats voor bijvoorbeeld 6 personen naast elkaar, dus moeten deze opgesplitst worden in even aantallen (omdat men vaak als stelletje naar het theater gaat)

Op dit moment hebt ik de code als volgt
Haal met een query de lege stoelen op, gesorteerd op rij, dan stoelnummer.
Per record kijk je of het stoelnummer 1 verschilt met het vorige stoelnummer.
Zo ja: hoog een tellertje op.
Zo nee: stoelen niet naast elkaar, zet tellertje op 0.
Zodra je een nieuwe rij tegenkomt zet je het tellertje ook op 0.
Als het tellertje op 6 staat heb je 6 lege stoelen naast elkaar en maak je de reservering.

Is is per theater een verschillend aantal max reserveringen wat gedaan mag worden ( in dit geval 6 ) vanaf dat getal moet het dus opgesplitst worden wanneer bovenstaan "code" geen resultaat vind.
Hoe kan ik het beste de 2e controle stap maken voor reserveren zodat ik even aantallen krijg en toch op ongeveer dezelfde manier kan tellen of er genoeg plaatsen zijn (naast elkaar ) verspreid in de zaal om mensen te plaatsen?

Het is een heel verhaal geworden maar zo is het hopelijk duidelijk genoeg om de vraag tekunnen beantwoorden

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 08-05 18:46

Gerco

Professional Newbie

Misschien is het handig om dit niet vanuit de database te benaderen, maar vanuit een ander perspectief. Bouw bijvoorbeeld eerst een tweedimensionaal array op van stoelen (een "ruitjesvel") waarbij elk element 1 stoel voorstelt.

Nu kun je dus met legio algoritmen plaatsen gaan zoeken en kun je ook heel makkelijk dingen doen als mensen 3x2 op twee rijen plaatsen of in een vierkantje als er niet voldoende stoelen naast elkaar beschikbaar zijn. Dat soort dingen is moeilijk te doen als je aan records in een tabel blijft denken in plaats van stoelen in een zaal.

[ Voor 6% gewijzigd door Gerco op 18-02-2005 09:32 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-05 22:46

Janoz

Moderator Devschuur®

!litemod

Ik denk dat je dit probleem beter op een heel andere manier kunt benaderen. Sowieso hou je in je huidige ontwerp helemaal geen rekening met betere plaatsen en minder goede plaatsen, het maximaliseren van de vulling (er bijvoorbeeld voor zorgen dat er na een tijdje reserveren niet alleen maar enkele stoelen over blijven).

Ikzelf zou in eerste instantie onderzoeken wat het reserverings gedrag is. Wat de verschillende percentages zijn van hoeveelheden. Hoe vaak komen de verschillende aantallen voor?

Het idee dat ik nu een beetje in mijn hoofd vorm is een systeem waarbij ik verschillende groepen stoelen bijhoud. Als eerste is de hele zaal verdeeld in groepen van 4 of 6 stoelen. Deze worden gevuld. Waneer iemand een 3 plekken reserveerd kijk ik of er nog ergens ene groepje van 3 stoelen over is en anders pak ik een grotere waar ik 3 vanaf haal. Al die tijd zorg ik ervoor dat, in het geval van meerdere mogenlijkheden, ik er voor zorg dat de overgebleven groepen goed te matchen zijn op eerder onderzochte percentages.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 06:50
Gerco schreef op vrijdag 18 februari 2005 @ 09:31:
Misschien is het handig om dit niet vanuit de database te benaderen, maar vanuit een ander perspectief. Bouw bijvoorbeeld eerst een tweedimensionaal array op van stoelen (een "ruitjesvel") waarbij elk element 1 stoel voorstelt.
Ik heb de resultaten van de query in een array gestopt, geen tweedemensionale. Omdat ik niet precies weet hoe dit werkt in asp.net.

Maar wanneer ik de stoelen en de rijen in een tweedemensionale array heb zitten is het nog de vraag welk algoritme ik moet gaan gebruiken om het voor elkaar te krijgen want dat is eigenlijk de vraag die ik stel.

Heb je hier toevallig een idee over ?
Janoz schreef op vrijdag 18 februari 2005 @ 09:34:

Ikzelf zou in eerste instantie onderzoeken wat het reserverings gedrag is. Wat de verschillende percentages zijn van hoeveelheden. Hoe vaak komen de verschillende aantallen voor?
Het probleem is dat het een nieuw theater is en dat deze cijfers nog niet helemaal bekend zijn. Wat ze nu weten is dat het vaak koppeltjes zijn die komen en dat het voornamelijk even aantallen zijn.

Ook hoeft het vullen van de zaal niet perfect te zijn een opdeling die 2 keer gemaakt word is voldoende daarna moet een medewerker eventueel zelf de plaatsen selecteren ( dit heeft allemaal te maken met afspraken/tijd/ contracten etc dus daar heb ik verder weinig over in te brengen )

[ Voor 36% gewijzigd door Erpenator2 op 18-02-2005 09:39 ]


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 08-05 18:46

Gerco

Professional Newbie

Iets heel eenvoudigs en zeker niet optimaals kan bijvoorbeeld zo werken:

Definieer voor elke stoel in de zaal een waarde (prioriteit) die aangeeft welke stoelen het eerste vergeven moeten worden (de beste meestal), bijvoorbeeld zoiets:
code:
1
2
3
4
1 2 2 1
2 3 3 2
3 4 4 3
Podium

Zoek nu plaatsen voor de hele groep (6) van de reservering en tel de waardes van de plaatsen op. Als je plaats kan vinden voor alle 6, neem je de plaatsen die de hoogste totale waarde hebben (de beste plaatsen dus).

Indien dat niet kan, deel dan de groep in 1 van 4 en 1 van 2 en ga zoeken voor die 4 en 2. Heb je plaatsen gevonden, bereken dan de afstand tussen de twee (of drie) groepen die je hebt geplaatst en probeer zowel de waarde van de plaatsen te maximaliseren als de afstand te minimaliseren.

Om plaats te vinden voor een groep van 6 (of 4) kun je zoiets doen:
Maak een "figuur" van die groep, bijvoorbeeld:
code:
1
2
xxx of xxxx
xxx    xx

Ga dan kijken of je plaats kan vinden voor die figuur op je raster.

[ Voor 5% gewijzigd door Gerco op 18-02-2005 09:58 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 06:50
Dan moet ik dus verschillende tellers gaan bijhouden...

De stoelen hebben allemaal een reserverings prioriteit dus dat is al geregeld.
Als ik het aantal 6 heb hoe deel ik deze dan met programma code op in 4 en 2 aangezien het getal 6 ook wisselend is en ik dus de getallen niet hard in de code kan zetten?

Ook moet ik dan verschillende tellertjes gaan bijhouden om te kijken of ik dan wanneer ik de reservering opdeel alle 2 plaatsen zijn gevonden. Het is in woorden makkelijker te schrijven dan het in code om te zetten.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dat ligt eraan hoe je ze op wilt delen. Wil je altijd een zo groot mogenlijke groep over houden? dan haal je er altijd 2 vanaf. Wil je 2 ongeveer gelijke groepen maken dan moet je door 2 delen en eventueel nog een verschuiven voor oneven groepen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:24
Erpenator2 schreef op vrijdag 18 februari 2005 @ 10:04:
Dan moet ik dus verschillende tellers gaan bijhouden...

De stoelen hebben allemaal een reserverings prioriteit dus dat is al geregeld.
Als ik het aantal 6 heb hoe deel ik deze dan met programma code op in 4 en 2 aangezien het getal 6 ook wisselend is en ik dus de getallen niet hard in de code kan zetten?

Ook moet ik dan verschillende tellertjes gaan bijhouden om te kijken of ik dan wanneer ik de reservering opdeel alle 2 plaatsen zijn gevonden. Het is in woorden makkelijker te schrijven dan het in code om te zetten.
Ik denk dat het beter is om eerst een domein model op te stellen: wat zijn de 'objecten' die je hebt, welke acties moeten er kunnen op gebeuren, etc....
Aan de hand van die analyse kan je dan gaan kijken welke classes je kunt bouwen, en welke relatie ze tot elkaar hebben. Het implementeren van de code zal dan iets makkelijker gaan...

https://fgheysels.github.io/


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 08-05 18:46

Gerco

Professional Newbie

Erpenator2 schreef op vrijdag 18 februari 2005 @ 10:04:Het is in woorden makkelijker te schrijven dan het in code om te zetten.
Uiteraard is het dat, we zijn hier allemaal programmeurs :)

Je zal ongetwijfeld wel een boel kleine probleempjes tegenkomen tijdens de implementatie, maar je denkt nu gelijk te ver door. Je wilt nu nog helemaal niet aan tellertjes en dergelijke denken, je wilt nu alleen nog maar een algoritme bedenken waarmee je de boel kan oplossen, een implementatie van dat algoritme is nog niet belangrijk.

Probeer je algoritme eens in stappen op te delen zoals plaats zoeken voor zo'n figuur van stoelen. Als je dat gedaan hebt ga je verder denken over het splitsen van de groep als je zo'n plaats niet kan vinden. Kleine stapjes werken vaak het beste.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Erpenator2
  • Registratie: Augustus 2003
  • Laatst online: 06:50
rwb schreef op vrijdag 18 februari 2005 @ 10:32:
Dat ligt eraan hoe je ze op wilt delen. Wil je altijd een zo groot mogenlijke groep over houden? dan haal je er altijd 2 vanaf. Wil je 2 ongeveer gelijke groepen maken dan moet je door 2 delen en eventueel nog een verschuiven voor oneven groepen.
Ik denk dat dit de oplossing is voor mijn probleem! Dit is relatief simpel te implementeren met wat ik op dit moment heb. Door te kijken naar de maximale reservering ( in ons voorbeeld dus 6 ) en daar steeds 2 van af te halen kun je gemakkelijk reserveren. Ook kun je gemakkelijk controleren dat als het aantal reserveringen bijvoorbeeld onder een bepaald aantal komt een melding te geven (je wil van een aantal van 3 geen 2 personen afhalen om er 1 alleen te laten zitten maar alle 3 bij elkaar, dat moet desnoods dan maar met de hand)

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 13-05 08:20
Misschien moet je een andere invalshoek nemen.
Wij ondersteunen zo'n theater pakket.

Deze gaan uit van een ander principe.
Als er geboekt word, dan ziet degene die de invoer doet de zaal layout voor zich.
Zo is in 1 oogopslag te zien welke plekken er vrij/gereserveerd/geblokkeerd zijn.
Nu is eenvoudig aan te klikken welke stoelen er gereserveerd moeten worden.

Ook kan men via een creditcard op deze wijze zelf een stoel boeken via een website.
Ik weet niet hoe of wat, maar probeer anders eens in een theater een demo te zien krijgen van boekingssoftware.

The best thing about UDP jokes is that I don't care if you get them or not.


Verwijderd

Ik weet niet hoe groot de zaal is, maar wellicht dat je het visueel kan maken.
Toon een soort plattegrond met de stoelen waarbij je met een indicatie (vb kleur) aangeeft welke al gereserveerd zijn en welke niet.
Pagina: 1