Obligatorisk projekt 3. Administration af Regionale Køre-Planer Fag: Projektet omhandler emner fra fagene Softwarearkitektur og Distribuerede Programmer, samt SystemUdviklingsMetoder. Formål: Formålet med projektet er at give dig mulighed for sammen med andre at bruge det, du har lært, mere selvstændigt og i en sammenhæng, samt give dig træning i de eksamensformer, der bruges på 2. studieår. Mål: Når du har gennemført projektet kan du: forstå og anvende Extended Bachus-Naur Form (EBNF) skanne, token-opdele og parse informationer fra en fil til en datastruktur implementere og anvende datastrukturen graf samt andre simplere datastrukturer implementere minimum-spanning-tree algoritmen for en graf samt anvende den på realistiske data Anvende en anden systemudviklingsmetode, end du tidligere har gjort Karakterisere systemudviklingsmetoder Rammer: Projektet gennemføres i uge 48 i 2008. Arbejdet foregår i grupper på ca. 2-4 personer. Underviserne sammensætter grupper på tværs af de to hold. I den periode, hvor I arbejder med projektet, står underviserne til rådighed med vejledning. I skemaet kan I se, hvornår hvilke undervisere er til jeres rådighed. Det er de enkelte gruppers eget ansvar at aftale med den enkelte underviser, hvornår der holdes vejledningsmøde. Opgaven: For at kunne administrere og optimere Regionale Køre-Planer ønskes et program som kan indlæse eksisterende køreplaner for en region fra tekst-filer til en passende datastruktur i dette tilfælde en graf. Den regionale køreplan er beskrevet ved en EBNF grammatik som kan ses i Bilag A og downloades som tekstfil: RKP.ebnf Som testdata har Region Fyn fremstillet en fil med en delmængde af de eksisterende køreplaner. Kun udvalgte hovedbyer fra de enkelte ruter er medtaget, idet der i første omgang blot ønskes en grov prototype. Bemærk at ruterne ikke nødvendigvis eksisterer i forvejen, og at de angivne afstande i minutter kun tilnærmelsesvist er realistiske! Testdata kan ses i Bilag B og kan downloades som tekstfil: RKP.txt SDP: Dit program skal kunne køres uden bruger-interaktion. Det skal derfor indlæse inddata fra en lokal tekstfil som skal hedde RKP.txt. Bemærk at vi tester dit program med andre data end dem du ser i Bilag B! Som output skal programmet skrive data til en tekstfil som skal hedde RKP.output. Hvilke informationer der skal skrives til tekstfilen og i hvilket format ses i Bilag C. Side 1 af 5 16.10.2008.
Dit program skal indlæse køreplanerne fra RKP.txt (Bilag B). Input skal opdeles i tokens (brikker) der skal analyseres (parses) ift. den EBNF-grammatik der er beskrevet i RKP.ebnf (Bilag A). Hvis der opstår fejl under parsningen skal der blot udskrives en fejlmeddelelse (relativt detaljeret), og programmet standser herefter. Hvis der ikke opstår fejl, skal der udskrives informationer om de indlæste data (Bilag C). Data skal indlæses i en vægtet ikke-orienteret graf (weighted non-directed graph) hvor knuder (vertices) repræsenterer en by og kanter (edges) repræsenterer en direkte (dobbelt-rettet) forbindelse mellem de implicerede byer. Kanternes vægt repræsenteres af afstanden i minutter mellem de implicerede byer. Du kan frit vælge om du vil anvende adjacency list eller adjacency matrix som implementering. Du får brug for at kunne udskrive din graf som par af knuder som hver repræsenterer en direkte forbindelser samt tilhørende vægt dette skal gøres iflg. breadth-first algoritmen med udgangspunkt i den node som repræsenterer den by som nævnes først i den første køreplan i RKP.txt ( odense i Bilag B). Du får brug for at kunne finde og udskrive grafens minimum-spanning-tree. OBS: 1. Da du er nødt til at have indlæst to byers tidsangivelser fra en rute for at kunne beregne deres indbyrdes afstand i minutter kan det være en fordel at indlæse de parsede data i en anden datastruktur (f.eks. en liste eller tabel) og så opbygge den endelige graf. 2. Pas på ikke at komme til at indsætte kanter mellem to knuder, med mindre der er en direkte forbindelse beskrevet i køreplanen. 3. Pas på ikke at komme til at indsætte mere end én knude pr. by (byerne optræder flere gange i forbindelse med forskellige ruter). 4. Hvis to ruter indeholder en direkte forbindelse mellem de samme to byer, og afstanden i minutter er forskellig for de to ruter, er det den største afstand, der skal gælde. 5. Du skal ikke anvende alle informationer fra den regionale køreplan (f.eks. er rutens nummer uden betydning for opbygningen af grafen). SUM: Hver gruppe skal i samråd med Tove vælge en systemudviklingsmetode, de ikke har anvendt før. Ud over at metoden skal anvendes ved løsningen af opgaven, skal I også karakterisere den (jf. Avison & Fitzgerald kap. 28), argumentere for karakteristikken, beskrive forskelle og ligheder til den metode, I kender fra 1. studieår, og endelig vurdere fordele og ulemper ved systemudviklingsmetoden i forhold til den opgave, I har anvendt den til. Aflevering og evaluering: SDP: Du skal aflevere din C#-solution i zippet format pr. mail til din SDP underviser. Der foretages en kort præsentation af løsningen for din SDP underviser mandag / tirsdag i uge 49. Hver gruppe har ca. 15 min. til deres præsentation. Præsentationen skal kort gennemgå centrale dele af koden samt beskrive de valg, I har foretaget samt de overvejelser (for og imod), der ligger til grund for valgene. I skal også nævne hvilke software design patterns, I har anvendt og vise, hvorledes I har implementeret dem. SUM: Der afleveres en kort rapport på papir (maks. 10 sider) til Bjarne/Tove senest fredag 28/11 kl. 12.00. Der gives en skriftlig tilbagemelding på rapporterne. Derudover præsenterer hver gruppe kort sin systemudviklingsmetode i SUM i uge 49. Side 2 af 5 16.10.2008.
Bilag A EBNF grammatik som beskriver en regional køreplan (EBNF grammatikken findes i filen RKP.ebnf). regionskoereplan = koereplan {koereplan}. koereplan = "#" ciffer ciffer [ciffer] afgang {afgang}. afgang = by tidspunkt. by = bogstav {bogstav}. tidspunkt = time ":" minut. time = ("0" "1") ciffer "2" ("0" "1" "2" "3"). minut = ("0" "1" "2" "3" "4" "5") ciffer. bogstav = "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "x" "y" "z". ciffer = "0" "1" "2" "3" "4" "5" "6" "7" "8" "9". Side 3 af 5 16.10.2008.
Bilag B Test-data som beskriver en delmængde af ruter på Fyn kun udvalgte hovedbyer er medtaget for hver rute (data findes i filen RKP.txt). #44 odense 14:00 middelfart 15:07 #72 bogense 12:39 otterup 13:46 odense 14:08 #531 ringe 08:41 assens 09:24 odense 10:23 kerteminde 10:56 #62 svendborg 07:45 odense 09:15 bogense 10:04 #844 bogense 09:08 middelfart 09:46 assens 10:47 #22 svendborg 13:31 nyborg 14:16 odense 15:14 #32 svendborg 12:39 ringe 13:35 odense 14:20 Side 4 af 5 16.10.2008.
Bilag C EBNF-grammatik som beskriver det output dit program skal skrive til filen RKP.output. Bemærk at EOL betyder End Of Line og repræsenterer hermed et linieskift samt at EOF betyder End Of File og repræsenterer hermed slutningen på data. Output består af 2 blokke: Din graf udskrevet v.hj.a. breadth-first algoritmen (med udgangspunkt i odense ) Minimum-spanning tree output = breadthfirst "EOL" minimumspanningtree "EOF". breadthfirst = knudeid "EOL" {knudeid "EOL"}. knudeinfo = knudeid vaegt knudeid. knudeid = bogstav {bogstav}. vaegt = ciffer {ciffer}. minimumspanningtree = knudeinfo "EOL" {knudeinfo "EOL"}. bogstav = "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "x" "y" "z". ciffer = "0" "1" "2" "3" "4" "5" "6" "7" "8" "9". Side 5 af 5 16.10.2008.