iCafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous 2006-2007
Voorwoord
1
Inhoudsopgave
2
Hoofdstuk 1
Inleiding
3
Hoofdstuk 2
iCafe 2.1
Het idee
2.2
Mogelijkheden
2.3
Werking
2.4
Droom
4
Hoofdstuk 3
Project 3.1
Algemene aanpak
3.2
Teamwork
3.3
Verdeling van de taken
3.3.1
Toelichting
3.3.2
Klassen
3.3.3
Applicaties
3.4 3.4.1
Communicatie IM
Al de dagelijkse (minder omvangrijke) communicatie ging via chat/IM.
3.4.2
Meetings
De grotere onderwerpen van het project werden besproken tijdens meetings1 . Op deze meetings werden allerhande dingen besproken die uitgedacht moesten worden. Zo werd er bv. gediscussieerd over de aanpak van de voorraadbeheer, het database ontwerp, ...). Ook prangende en/of complexe vragen werden hier besproken, zoals het opzetten van de turtoise SVN client. ˜ indigd met het opstellen van de planning Tot slot werden de meetings beA tegen de volgende meeting.
3.4.3
SVN
3.4.4
Forum
1
Voor de verslagen van de meetings zie bijlage ??
5
Hoofdstuk 4
Fases 4.1
Brainstormen
4.2
Scenario’s
4.3
Diagrammen
4.4
Klassen
4.5
Applicaties
4.5.1
Admin
4.5.2
Client - Barman
4.5.3
Client - Klant
4.6
Testfase
4.7
Afwerking
4.8
Verslag
6
Hoofdstuk 5
iCafe engineering 5.1
Programmeertaal PHP5
PHP is een serverside scripttaal en heeft een syntax die sterk lijkt op C. Het is mogelijk van functiegeori¨enteerd te programmeren of objectgeori¨enteerd. Er werd gekozen voor deze laatste optie, om de aanpasbaarheid van de code zo groot mogelijk te maken Er waren echter nog kenmerken van PHP5 die tot de keuze van deze programmeertaal leidde. Open-Source PHP is vrij te verkrijgen, er moet geen som geld voor neergeteld worden om het te gebruiken. Ook is het volledig legaal om de broncode aan te passen. Platformonafhankelijk PHP werkt op de meest gangbare besturingsystemen, Windows, Linux en Mac OSX Webservers PHP werkt op de meeste webservers, er wordt een Apache webserver gebruikt. MySQL PHP werkt goed samen met een MySQL database en heeft hier tal van ge¨ıntegreerde functies voor aan boord. Ondersteuning Voor elk probleem is er wel een oplossing te vinden op het internet. PHP is wereldwijd bekent en heeft ook een zeer uitgebreide ondersteuning. Browseronafhankelijk Aangezien het een serverside scripttaal is, moet er geen speciale browser of programmatuur ge¨ınstalleerd worden. Object geori¨ enteerd Zoals eerder vermeld bied PHP ondersteuning voor object geori¨enteerd programmeren, zo kan er gebruik gemaakt worden van verschillende klassen die later als objecten kunnen gebruikt worden. 7
Hoofdstuk 5. iCafe engineering
Toekomst Het ziet er niet naar uit dat PHP de eerste jaren zal uitsterven. De taal blijft evolueren en wordt steeds meer gebruikt. Momenteel is versie 5.2.1 de recentste stabiele versie bekend, deze werd gereleased op 8 april 2006. Wij maakten echter gebruik van versie 5.0.37 die bij het XAMPP pakket zit.
5.2
MySQL database
MySQL is een relationele database management systeem, dat werkt volgens het relationeel model. Hierbij worden alle gegevens opgeslagen in tabellen, deze bevatten op zich kolommen die bepaalde gegevens kunnen bevatten, namelijk de rijen. Deze gegevens kunnen opgevraagd, toegevoegd, verwijderd of gewijzigd worden aan de hand van SQL queries. De keuze voor het gebruik van MySQL als database werd samen met die van PHP5 gemaakt. Aangezien PHP5 perfect samenwerkt met MySQL en ook tot de open-source wereld behoord.
5.3
Adobe Flash
Flash van Adobe (vroeger Macromedia) is ´e´en van de meest gebruikte programma’s om video’s te maken, animatie te cre¨eren en om websites te maken. Flash is voorzien van een tijdslijn waardoor het gemakkelijk is om tijdsgebaseerde frames te maken. Er kan worden geprogrammeerd door middel van ActionScript, een programmeertaal eigen aan Flash. In de nieuwe CS3 is ActionScript al aan versie 3.0 toe. Voor iCaf´e werd er gebruik gemaakt van ActionScript 2.0 omdat deze nog het meest ondersteund wordt en omdat CS3 pas in april 2007 is verschenen. Ondersteuning Flash wordt door de meeste webbrowsers ondersteunt, al moet daarvoor een extra plug-in worden ge¨ınstalleerd. Verder is het platformonafhankelijk waardoor het systeem kan draaien op UNIX, MAC en Windows machines. Het internet staat vol met tutorials en uitleg over Flash, zodat problemen goed kunnen worden opgelost. PHP en MySQL Dankzij loadVars, is het nu mogelijk om in Flash gegevens te sturen naar PHP en MySql en te ontvangen. Wanneer loadVars wordt aangemaakt, wordt de variabele ook object waardoor je aan dit object meerdere waardes kan meegeven. Voor het ontvangen van gegevens worden de gegevens ook toegekend aan hetzelfde loadVars object die dan weer in de ActionScript kan gebruikt worden.
8
Hoofdstuk 5. iCafe engineering
5.4 5.4.1
Smarty Template Engine Web templates
In het algemeen zorgen web templates voor een goede verdeling van het werk. Het wordt verdeeld in een reeks codeer werk en een reeks design werk. Hieruit mag men dus verstaan dat de gegevens worden opgehaald in het codeer werk, meer bepaald de data laag. Deze gegevens worden op hun beurt weergegeven op de website, ook de presentatielaag genoemd. Deze scheiding van lagen heeft zijn voordelen. • Duidelijke scheiding tussen de voorstelling (design) en het eigenlijke programmeer werk. De designer heeft niet de kennis nodig die de coder heeft en omgekeerd. • Flexibel qua aanpasbaarheid en uitbreiding. Wanneer in de datalaag wijzigingen worden aangebracht zal de presentatielaag hier geen hinder van hebben.
5.4.2
Onze aanpak
Er worden verschillende klassen geschreven aangezien er objectgeori¨enteerd gewerkt word. Deze klassen zijn objecten zoals een product, een bestelling, enz. . . Vanuit deze klassen worden de gegevens uit de database opgehaald. Bijvoorbeeld wanneer er gegevens van een flesje Cola nodig zijn, kunnen deze gegevens aan de hand van een nieuw product object worden opgehaald uit de database. De klassen zijn dus de datalaag van het template systeem. Het doel is deze gegevens weer te geven op een website. Dit wil zeggen dat deze moeten doorgegeven worden aan de presentatie laag, die het design van de website vertegenwoordigt. Het is niet de bedoeling om rechtstreeks vanuit een klasse gegevens door te geven aan de presentatielaag, hiervoor wordt de applicatielaag gebruikt. Wat er gebeurt in de applicatielaag is vrij simpel. In deze laag wordt een nieuw object aangemaakt en het object wordt gevuld met gegevens. Hierbij maakt de applicatielaag verbinding met de datalaag door het gebruik van de klassen. Nadien zal de applicatielaag de gegevens van het object doorgeven aan de presentatielaag, die op zijn beurt de gegevens weergeeft.
5.4.3
Smarty
Smarty is een template engine voor PHP. Wat wil zeggen dat het mogelijk is deze lagen aan te maken en door Smarty kunnen de verschillende lagen in het ontwerp met elkaar communiceren. Smarty op zich is ook een klasse die de nodig functies aan boord heeft om het geheel uit te voeren. Volgend voorbeeld zal voor verduidelijking zorgen. 9
Hoofdstuk 5. iCafe engineering
Voorbeeld Het doel is om de gegevens van een product in een webpagina te tonen. Er word hiervoor gebruik gemaakt van drie verschillende bestanden en de Smarty template engine. Klasse bestand Hierin wordt de connectie gelegd met de database en de gegevens opgehaald die nodig zijn of gevraagd worden. (datalaag) Applicatie bestand Dit bestand maakt een nieuw Smarty object aan. Aan dit Smarty object worden variabelen meegegeven die gegevens bevatten. Nadien wordt er aan dit object meegegeven welke template er gebruikt zal worden. (applicatielaag) Template bestand Dit is het enige bestand waarin html code aanwezig is. De opmaak van de pagina wordt hierin bepaald. Door het Smarty object dat in het applicatie bestand aangemaakt is, kan het template bestand de gegevens ontvangen en ook tonen in de pagina. (presentatielaag)
5.5 5.5.1
Software Eclipse IDE
Om te coderen in PHP werd er gebruikt gemaakt van de open-source framework1 Eclipse. Eclipse is standaard een java ontwikkelingomgeving, maar door plug-ins kan de functionaliteit uitgebreid worden. Er werd ook gebruik gemaakt van de PHPEclipse plugin die syntax highlighting heeft voor PHP, HTML, XML, CSS en Smarty. Hierbij wordt het programmeren in PHP makkelijker, sneller en aangenamer. Ook het gebruik van Smarty werd hierdoor bevorderd. De grote voordelen die we bij deze plug-in gebruikt hebben zijn: • Overzicht van alles functies die aanwezig zijn in een bestand • Het gebruik van de auto-complete functie • De uitgebreide syntax highlighting2 • De onmiddellijke weergave van syntax fouten • Ge¨ıntegreerde controle over XAMPP 1
Een framework zijn softwarecomponenten die kunnen gebruikt worden bij het programmeren van applicaties, op dit framework kan men dan verder bouwen met bepaalde libraries of plug-ins. 2 Syntax highlighting zorgt ervoor dat de tekst van de code in bepaalde opmaak wordt weergegeven zodanig dat het herkennen van bepaalde termen, functies of variabelen makkelijker wordt.
10
Hoofdstuk 5. iCafe engineering
5.5.2
XAMPP
Het gehele iCafe systeem is een webapplicatie, hierbij hoort natuurlijk een webserver om deze applicatie op te draaien. De webserver moet ondersteuning bieden voor PHP5 en ook een MySQL server moet aanwezig zijn. Bij normale gang van zaken worden alle modules (Apache, PHP5, MySQL) afzonderlijk ge¨ınstalleerd en dan op elkaar afgestemd. Het is echter ook mogelijk een all-in-one oplossing te gebruiken, hierbij worden alle benodigdheden in ´e´en installatiebestand gestoken. De gebruikelijke naam voor deze all-in-one oplossing is AMP, de afkorting voor Apache MySQL en PHP. Aan de hand van het besturingsysteem waarvoor de AMP server gemaakt is zal er vooraan een letter toegevoegd worden (bv. WAMP voor Windows, LAMP voor Linux). Voor het iCafe Project word er echter gebruikt gemaakt van XAMPP. Waarbij de X te verklaren is door de beschikbaarheid voor de drie grootste besturingsystemen (Windows,Mac OSX en Linux). XAMPP is een opensource project van ApacheFriends en gratis te verkrijgen op het internet. ApacheFriends is een non-profit projectgroep die het gebruik van de Apache server promoten aan de hand van hun XAMPP project. XAMPP werd op de computers van de projectleden ge¨ınstalleerd zodanig dat deze hun code en dergelijke lokaal konden testen.
5.5.3
Tortoise SVN
Om dat de code verdeeld werd onder de verschillende projectleden moest er een oplossing gezocht worden om alles steeds synchroon met elkaar te lopen. Een systeem dat ervoor moest zorgen dat iedereen de laatste nieuwe versies van de bestanden kon downloaden. Hiervoor is er gebruik gemaakt van een SVN systeem. Er zijn verschillende SVN3 oplossingen beschikbaar, er werd gebruik gemaakt van Tortoise SVN. Tortoise SVN werd gekozen omdat er reeds projectleden waren die kennis hebben van dit programma. De bestanden worden centraal opgeslagen op een server. Er werd gekozen voor gratis hosting van Google Code om de bestanden naartoe te zenden. Het is namelijk mogelijk om via Google een project4 te starten, hiervoor biedt Google dan de nodige hulpmiddelen aan, waaronder een server met SVN ondersteuning.
5.6
Hulp
3
SVN is een programma waarmee het versiebeheer van een softwareproject wordt onderhouden. 4 Meer info over dit project op Google is te vinden op http://code.google.com/p/projecticafe/
11
Hoofdstuk 6
Problemen 6.1
Samenwerking
6.2
Engineering
6.2.1
Verwijderen van producten
Tijdens het debuggen van het administrator gedeelte is er een kleine design fout opgedoken. Het gaat erom dat producten kunnen verwijderd worden, en alle gegevens van deze producten ook verwijderd worden. Hierbij kan er dus geen archief aangelegd worden. Op zich is dit niet zo’n groot probleem, maar wanneer er naar het archief van de bestellingen word gekeken is er wel iets aan de hand. In het archief van de bestellingen is het mogelijk om de prijzen van de producten en de totale omvang van de bestelling te bekijken. Hierbij moeten er gegevens opgehaald worden van de betwiste producten. Deze gegevens worden opgehaald uit de database. Maar wanneer een product uit het assortiment gehaald word dan worden alle gegevens van het product verwijderd. Hierbij worden dus ook de gegevens die nodig zijn voor het archief van de bestellingen verwijderd en zullen er foutmeldingen optreden. Dit probleem is opgelost door een parameter toe te voegen aan elk product. Deze parameter is een boolean die bepaald of een product actief is of niet. Niet actief wil in dit geval zeggen dat het product verwijderd is, maar dat de gegevens nog steeds beschikbaar zijn in de database. Natuurlijk worden alleen actieve producten weergegeven in de client applicatie.
12
Hoofdstuk 6. Problemen
6.3
Deadlines
6.4
Computers
6.5
Mogelijkheden
13
Hoofdstuk 7
Eigen Beoordeling 7.1
Naim
7.1.1
Zelfreflectie
7.1.2
Stef
7.1.3
Joeri
7.2
Stef
7.2.1
Zelfreflectie
7.2.2
Naim
7.2.3
Joeri
7.3
Joeri
7.3.1
Zelfreflectie
7.3.2
Naim
7.3.3
Stef
14
Hoofdstuk 8
Dankwoord
15
Bijlage A
Bijlagen A.1
Scenario’s
A.2
Diagrammen
A.3
Verslagen van vergaderingen
16