Case study Gelre Airport Inleiding In dit document is het ontwerp te vinden op grond waarvan het eindproduct voor de beroepstaak “Maak en beheer een kleine client-server database” kan worden gerealiseerd. Naast het ontwerp is een aantal ‘opdrachten’ geformuleerd, die geïnterpreteerd kunnen worden als activiteiten die moeten worden uitgevoerd om tot het eindproduct te komen. Dit product kan worden gerealiseerd in groepjes van 2 studenten.
Casusbeschrijving Gelre Airport is een klein vliegveld dat dagelijks enkele tientallen vluchten verwerkt. De directie van het vliegveld wil het beheer van vlucht-, passagier- en incheckgegevens stroomlijnen. Daartoe wil men een geautomatiseerd informatiesysteem, gebaseerd op een relationele database, laten ontwikkelen, dat de werkzaamheden op het vliegveld, en met name het incheckproces, ondersteund. Als dit informatiesysteem in bedrijf is, dan dient het incheckproces als volgt te verlopen. Een passagier, reeds in bezit van een ticket, meldt zich met bagage bij een incheckbalie. Daar zit een medewerk(st)er die controleert of de passagiersgegevens in de database aanwezig zijn en een stoel toewijst. Ook wordt de bagage gewogen. De passagiersgegevens zijn in een eerder stadium (bij het boeken van een vlucht) al ingevoerd in de database door een vliegveldmedewerker. Ook de gegevens van vluchten zijn dan al aanwezig. Behalve de gegevens van vluchten en passagiers is het ook noodzakelijk enkele basisgegevens te beheren, zoals incheckbalies, gates en bestemmingen. De lijst met balies waar kan worden ingecheckt voor een vlucht is beperkt. Niet alle balies zijn bruikbaar voor iedere bestemming, en niet alle balies zijn te gebruiken door iedere maatschappij. Als er balies aan een vlucht gekoppeld worden, mogen dat alleen balies zijn die toegestaan zijn voor de maatschappij en de bestemming van de vlucht. Er kunnen aan één vlucht meerdere balies gekoppeld worden. De passagier checkt uiteindelijk bij één van deze balies in. Verder is het van belang dat wanneer een passagier met zijn ticket bij de balie komt, de baliemedewerker/-ster deze passagier heel snel kan vinden en inchecken, samen met zijn bagage. Er staat immers een rij mensen te wachten. Use Case beschrijvingen In bijlage A vind je Use Case beschrijvingen voor vijf processen. In een Use Case beschrijving wordt een functie van het informatiesysteem tot in detail gespecificeerd. Dit is een functioneel ontwerp (wat moet de applicatie doen). Logisch Relationeel Schema De relationele database voor het te ontwikkelen informatiesysteem is reeds ontworpen.In bijlage B vind je het Logisch Relationeel Schema. Daarin staan de belangrijkste structuur- en integriteitsaspecten van de database voor Gelre Airport beschreven.
1
Opdrachten Hieronder vind je opdrachten waarin je in stappen de database voor Gelre Airport maakt en daarbij een applicatie voor eindgebruikers ontwikkelt. Opdracht 1: Maak database A. Implementeer de database die in het Logisch Relationeel Schema (LRS) is beschreven. Stel CREATE TABLE statements op voor alle tabellen die in het LRS zijn beschreven en voer deze uit. Opmerking: Mocht je van een kolom een autonummeringsveld willen maken, dan dien je gebruik te maken van het keyword IDENTITY. Raadpleeg daarvoor de Help van SQL Server. B. Voeg aan iedere tabel van de gegeven databases een aantal records toe. Zorg dat er in iedere tabel minimaal 5 records zitten. In de tabel Passagier dienen minimaal 10 records te zitten en in de tabel Object minimaal 20. Dit is noodzakelijk om je applicatie, en met name de rapporten, goed te kunnen testen. C. Pas de DDL-statements aan zodat ook de update- en deleteregels (ON UPDATE ……, ON DELETE ……) worden geïmplementeerd. D. Probeer de volgende constraints te definiëren in de CREATE TABLE statements: • Voor elke vlucht geldt: maximaal aantal personen * maximaal bagegegewicht per persoon maximaal totaal bagagegewicht • In de kolom geslacht van de tabel passagier dient een M of een V te worden ingevuld. • Voor elke passagier zijn het stoelnummer en de inchecktijdstip of beide niet ingevuld of beide wel ingevuld. • Voor een vlucht mag een stoel aan maximaal één passagier worden toegewezen. • Voor elke passagier is de som van de gewichten van zijn/haar objecten kleiner dan of gelijk aan het maximale bagagegewicht per persoon van de betreffende vlucht. Als het niet mogelijk is om een constraint te definiëren, geef dan aan waarom. Mocht je nog meer constraints ontdekken, probeer dan ook deze te realiseren. Opdracht 2: Maak queries voor het genereren van overzichten Maak SQL Select-queries voor de volgende informatiebehoeften. Dit dient twee doelen. Op deze manier leer je de database goed kennen en alle queries komen straks van pas in de applicatie, als recordbron van een formulier of rapport of als rijbron van een combobox of listbox. Je maakt deze queries dus niet voor niets. 1. Maak een lijst van alle bagagestukken. Toon in die lijst het objectnummer, het gewicht, het nummer van de eigenaar, de naam van de eigenaar en het nummer van de vlucht. 2. Maak een lijst van alle vluchtnummers en het aantal passagiers per vlucht. 3. Maak een lijst van alle vluchtnummers en het aantal bagageobjecten en het totaalgewicht aan bagageobjecten per vlucht. 4. Maak een lijst van alle vluchten. Toon in de lijst het vluchtnummer, de naam van de maatschappij, de naam van de bestemming, het aantal passagiers van de vlucht, het aantal objecten van de vlucht en het totaalgewicht van de objecten van de vlucht (gebruik hiervoor 2 en 3). 5. Maak een lijst van alle maatschappijcodes + jaartallen van vluchten en het aantal passagiers dat in ieder jaar met de maatschappij heeft gevlogen. 6. Maak een lijst van alle maatschappijcodes + jaartallen van vluchten en het aantal bagageobjecten en het totaalgewicht aan bagageobjecten per jaar per maatschappij. 7. Maak een lijst van alle maatschappijen + jaartallen. Toon in de lijst de maatschappijcode, de naam van de maatschappij, het aantal passagiers, het aantal bagageobjecten en het totaalgewicht aan bagageobjecten per jaar per maatschappij (gebruik hiervoor 5 en 6).
2
8. Maak een lijst van incheckbalies die gebruikt worden bij vlucht 5314. 9. Maak een lijst van incheckbalies die gebruikt zouden kunnen worden bij vlucht 5314. Merk op: Balies die toegestaan zijn voor de maatschappij en de bestemming van de vlucht, kunnen aan een vlucht gekoppeld worden. 10. Maak een lijst van incheckbalies die gebruikt zouden kunnen worden bij vlucht 5314, maar daar nog niet door gebruikt worden. Opdracht 3: Ontwerp applicatie Er dient een applicatie te worden ontwikkeld voor Gelre Airport. Deze applicatie dient te bestaan uit formulieren/rapporten die corresponderen met de use cases in bijlage A. Verder dienen er rapporten te worden gemaakt voor de bij onderdelen 1, 4 en 7 van opdracht 2 gevraagde lijsten. A. Formulier- en rapportbeschrijvingen Maak een beschrijving en/of schets van alle forms en reports die je gaat maken. Geef van ieder form en report aan wat de titel is, de recordbron en welke velden en knoppen er op staan. Maak nog geen (bound of unbound) forms en reports in Access, maar maak schetsen op papier of in Word of in Paint of iets dergelijks. • Geef aan of de recordbron een tabel is, en welke tabel, of dat het een query is. Als de recordbron een query is, vermeld dan alvast welke tabellen betrokken zullen zijn bij de query. • Geef voor knoppen aan wat er gebeurt als je er op klikt. • Voor rapporten geef je aan welke totalen er berekend worden. B. Navigatiestructuur Beschrijf welke menu-opties er in de applicatie komen en welke forms en reports ze aanroepen. Beschrijf welke forms en reports vanaf andere forms zijn aan te roepen. C. Bespreek het ontwerp met je docent. Verwerk die feedback die je krijgt. Opdracht 4: Bouw applicatie Bouw de applicatie volgens het ontwerp dat het resultaat is opdracht 3. Tips •
De applicatie moet uiteindelijk de processen op een gebruiksvriendelijke manier ondersteunen. Het gaat er niet om dat je zoveel mogelijk programmeercode gebruikt (juist zo min mogelijk eigenlijk). Alle functionaliteit is te implementeren met behulp van de juiste formulieren, keuzelijsten, subformulieren en zoekfuncties. Daarnaast kun je gebruik maken van de Visual Basic voorbeelden uit de reader. Meer VB dan dat heb je niet nodig!
•
Denk ook aan de afwerking: zorg voor nette labels en form-namen. Ga echter niet te veel tijd steken in kleuren, plaatjes en lettertypen want dan kom je tijd te kort om alle functionaliteit in te bouwen.
Opdracht 5: Testen Neem contact op met een ander tweetal en spreek af op welk moment zij jou in de gelegenheid stellen om gedurende 2 uur hun applicatie te testen. Gebruik bij deze acceptatietest de testcase die je bij onderdeel A hebt ontworpen. Op datzelfde dagdeel stellen jullie de andere groep in de gelegenheid jullie applicatie te testen. Het is dan de bedoeling dat je: • alle formulieren grondig test • minimaal 1 rapporten test • een algemeen oordeel velt over de applicatie; minimaal 3 goede punten benoemd en beargumenteerd en minimaal 3 verbeterpunten benoemd en beargumenteerd.
3
Bijlage A: Use Cases
Scope: Airport Applicatie Primaire Actor: Vluchtleiding Precondities: Er zijn balies, maatschappijen, luchthavens en gates aanwezig in het systeem. Er zijn incheckmogelijkheden aanwezig in het systeem. Succescondities: Vluchtgegevens zijn ingevoerd, gewijzigd of verwijderd. Basic Flow: 1. Systeem geeft mogelijkheid om vlucht te zoeken op datum en/of bestemming. 2. Gebruiker geeft zoekcriteria in. 3. Systeem toont vluchten die aan criteria voldoen. Ook de passagiers die voor deze vlucht hebben geboekt worden getoond (deze gegevens zijn read only). 4. Gebruiker heeft de mogelijkheid om vluchtgegevens te wijzigen, vluchten te verwijderen en nieuwe vluchten toe te voegen. (Systeem slaat automatisch op) 5. Gebruik sluit dit onderdeel.
Scope: Airport Applicatie Primaire Actor: Travel Agent Precondities: Er zijn vluchten in het systeem aanwezig. Succescondities: Passagiersgegevens zijn ingevoerd, gewijzigd of verwijderd. Basic Flow: 1. Systeem geeft keuze voor invoer nieuwe passagier of wijzigen/verwijderen bestaande passagier 2. In geval van invoer: systeem geeft mogelijkheid nieuwe passagier in te voeren. 3. Gebruiker vult passagiergegevens in (niet alles: stoelnummer en inchecktijdstip nog niet) Alternatieve Flow: 2. 3. 4. 5.
Systeem geeft mogelijkheid om passagier te zoeken op naam en/of vlucht. Gebruiker geeft zoekcriteria in. Systeem toont passagiers die aan criteria voldoen. Gebruiker heeft de mogelijkheid hierin wijzigingen aan te brengen en passagiers te verwijderen (Systeem slaat automatisch op) 6. Gebruik sluit dit onderdeel.
4
Scope: Airport Applicatie Primaire Actor: Baliemedewerker Precondities: Passagiers zijn aanwezig in systeem. Succescondities: Passagier is ingecheckt en bagage is toegevoegd. Basic Flow: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Gebruiker geeft aan systeem aan welke balie dit is. Systeem geeft mogelijkheid om passagier te zoeken. Gebruiker geeft zoekcriteria in. Systeem toont record(s) dat aan criteria voldoet. Gebruiker controleert of naam van passagier en vluchtnummer kloppen. Systeem toont vluchtgegevens: bestemming, vertrektijd en gate. Gebruiker heeft de mogelijkheid stoel en inchecktijdstip in te vullen. (Systeem slaat automatisch op, balienummer ook) Systeem toont tevens lijst van bagagestukken van de betreffende passagier. Gebruiker heeft de mogelijkheid hierin wijzigingen aan te brengen, records te verwijderen, records toe te voegen. Systeem controleert bagagegewicht en slaat automatisch op. Gebruiker sluit passagier af en volgende passagier zoeken.
Alternatieve Flows: 5. In geval van passagier niet bekend of gegevens kloppen niet: gebruiker kan opnieuw zoeken. 10. In geval van bagagegewicht teveel: systeem toont waarschuwing.
Scope: Airport Applicatie Primaire Actor: Directeur Precondities: Er zijn balies, maatschappijen, luchthavens en gates aanwezig in het systeem. Succescondities: Lijst van mogelijke maatschappijen en bestemmingen bij een balie is aangepast. Basic Flow: 1. Systeem toont een lijst van balies. 2. Gebruiker kiest een balie. 3. Systeem toont een lijst van maatschappijen die deze balie mogen gebruiken en systeem toont een lijst van bestemmingen waarvoor deze balie gebruikt mag worden. 4. Gebruiker heeft de mogelijkheid in beide lijsten wijzigingen aan te brengen, records te verwijderen, records toe te voegen. (Systeem slaat automatisch op) 5. Gebruiker sluit dit onderdeel.
5
Scope: Airport Applicatie Primaire Actor: Vluchtleiding Precondities: Er zijn vluchten met passagiers en hun bagagestukken aanwezig in het systeem. Succescondities: Basic Flow: 1. Systeem geeft mogelijkheid om vlucht te selecteren op basis van het vluchtnummer. 2. Gebruiker selecteert een vlucht. 3. Systeem toont (printbare) lijst van alle passagiers van deze vlucht met hun bagagestukken. Per passagier wordt het totaalgewicht aan bagage getoond. 4. Gebruik sluit dit onderdeel.
6
Bijlage B !
"
# Luchthaven luchthavencode naam land
not null char(3) varchar(25) not null varchar(30) null
Gate gatecode
luchthavencode = bestemming Upd(C); Del(R)
char(1) not null
gatecode = gatecode Upd(C); Del(R)
Passagier passagiernummer naam vluchtnummer geslacht balienummer stoel inchecktijdstip
numeric(6) varchar(35) numeric(5) char(1) numeric(2) char(3) datetime
not null not null not null null null null null
Vlucht vluchtnummer bestemming gatecode max_aantal max_gewicht_pp max_totaalgewicht vertrektijd maatschappijcode
vluchtnummer = vluchtnummer Upd(C); Del(R)
passagiernummer = passagiernummer Upd(C); Del(C)
numeric(5) char(3) char(1) numeric(3) numeric(6,2) numeric(6,2) datetime char(2)
not null not null null not null not null not null null not null
maatschappijcode = maatschappijcode Upd(C); Del(R) luchthavencode = luchthavencode Upd(C); Del(R) Maatschappij
BagageObject passagiernummer objectvolgnummer gewicht
numeric(6) numeric(1) numeric(6,2)
not null not null not null
maatschappijcode naam max_objecten_pp
not null char(2) varchar(25) not null numeric(2) not null
vluchtnummer = vluchtnummer Upd(C); Del(R)
maatschappijcode = maatschappijcode Upd(C); Del(R)
IncheckenMaatschappij maatschappijcode balienummer
char(2) not null numeric(2) not null
IncheckenVlucht vluchtnummer balienummer
numeric(5) not null numeric(2) not null
IncheckenBestemming luchthavencode balienummer
char(3) not null numeric(2) not null
balienummer = balienummer Upd(C); Del(R) balienummer = balienummer Upd(C); Del(R)
balienummer = balienummer Upd(C); Del(R)
balienummer = balienummer Upd(C); Del(R)
Balie balienummer
numeric(2) not null
7
%
%
%$Tabel Balie balienummer 1 2 3 4 1
Betekenis : “Er is een balie .” Tabel Luchthaven luchthavencode DUB HER CDG
naam Dublin Airport Heathrow Charles de Gaulle
land Ierland Engeland Frankrijk
Betekenis:
“Luchthaven heet .” “Luchthaven ligt in .” Tabel Gate
gatecode A B C Betekenis: “Er is een gate .” Tabel Maatschappij maatschappijcode KL MA TR
naam
max_objecten_pp
KLM Martinair Transavia
4 4 3
Betekenis: “Maatschappij <maatschappijcode> heet voluit: .” “Bij maatschappij <maatschappijcode> is het maximaal toegestane aantal bagagestukken per persoon <max_objecten_pp>.” Tabel Vlucht vluchtnummer bestemming maatschappijcode max_aantal max_gewicht_pp max_totaalgewicht
vertrektijd
gatecode
5314 DUB
KL
120
20
2500
30-10-2006 12:30
C
5315 HER
TR
100
20
2100
30-10-2006 13:30
A
5316 CDG
MA
140
20
3000
30-10-2006 14:30 B
Betekenis: “Vlucht heeft bestemming .” “Vlucht is van maatschappij <maatschappijcode>.” “Het maximaal aantal passagiers voor vlucht is <max_aantal>.” “Het maximale bagagegewicht per persoon van vlucht is <max_gewicht_pp> kg.” “Het totale maximale bagagegewicht van vlucht is <max_totaalgewicht> kg.” “Vlucht vertrekt op .” “Vlucht vertrekt van gate .” 1
De ‘zinnen’ waarmee de betekenis van de kolommen van de tabel wordt verhelderd, zijn ontleend aan de methode FCO-IM (Fully Communication Oriented Information Modeling) en heten feittype-expressies.
8
Tabel Passagier passagiernummer
naam
vluchtnummer geslacht balienummer stoel inchecktijdstip
16126 Peters JL 5314 16127 Janssen MJM 5314 16347 Jones GJ 5315
M V M
3 3 2
34A 30-10-2006 10:43 35E 30-10-2006 10:43 47B 30-10-2006 11:51
Betekenis: “De naam van passagier <passagiernummer> is .” “Passagier <passagiernummer> vliegt met vlucht .” “Passagier <passagiernummer> heeft geslacht .” “Passagier <passagiernummer> is ingecheckt bij balie .” “Passagier <passagiernummer> heeft stoel <stoel> toegewezen gekregen.” “Passagier <passagiernummer> is ingecheckt op .” Tabel BagageObject passagiernummer objectvolgnummer gewicht 16126
1
15
16126
2
5
16126
3
4
16347
1
12
16347
2
6
Betekenis: “Object van passagier <passagiernummer> weegt kg.” Tabel IncheckenMaatschappij maatschappijcode balienummer KL KL TR TR
1 2 2 3
Betekenis: “Inchecken voor vluchten van maatschappij <maatschappijcode> kan bij balie .” Tabel IncheckenBestemming luchthavencode balienummer DUB DUB HER HER
1 2 3 4
Betekenis: “Inchecken voor bestemming kan bij balie .” Tabel IncheckenVlucht vluchtnummer balienummer 5314 5314 5315
1 2 3
Betekenis: “Inchecken voor vlucht kan bij balie .”
9