Första databastillämpningen



Relevanta dokument
Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

1.Lär känna MS SQL Observera. Tips. Förberedelse

Starta MySQL Query Browser

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

Inledande programmering med C# (1DV402) Summera med while"-satsen

Fältnamn /Rubrik Fältnamn /Rubrik Fältnamn /Rubrik Fältnamn /Rubrik Data Data Data Data Data Data Data Data

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

JavaScript del 3 If, Operatorer och Confirm

Fråga 13. Skriv en loop som fyller arrayen int v[100] med talen

Visual Basic, en snabbgenomgång

Skizz till en enkel databas

INNEHÅLL SQL DEL 2. Funktioner inbyggda Aggregatfunktioner Skalärfunktioner. Chapter 11. Beginning SQL Server 2008 for Developers

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13. Omtentamen i Programmering C, 5p, A1, D1, PA1, Fri,

Tentamen i Introduktion till programmering

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

729G04 Programmering och diskret matematik

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Karlstads Universitet, Datavetenskap 1

Importera och använda en textdatabas i Excel

Microsoft Excel Grundkurs

LÖSNINGSFÖRSLAG TENTAMEN

Tentamen i. för D1 m fl, även distanskursen. lördag 26 februari 2011

Laboration 6 Formulär och stränghantering övningar/uppgifter

Tentamen ges för: Tentamensdatum: Tid:

Användarhandledning Version 1.2

Enkla datatyper minne

Instuderingsfrågor, del D

Övningar i SQL. SQLAccess.doc Ove Lundgren

Funktioner. Linda Mannila

PROGRAMMERING A VB 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL BASIC

Lämna in en ifylld kursvärdering tillsammans med tentan! Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl

TDIU01 - Programmering i C++, grundkurs

Introduktion HTML och PHP 732G16 Databaser design och programmering

Data, typ, selektion, iteration

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

6 PIVOTTABELLER SKAPA PIVOTTABELL. Skapa pivottabell

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Grundläggande programmering med C# 7,5 högskolepoäng

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

i LabVIEW. Några programmeringstekniska grundbegrepp

Språket Python - Del 1 Grundkurs i programmering med Python

Uppgift 1 (grundläggande konstruktioner)

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

Föreläsning 3-4 Innehåll

C++ Lektion Tecken och teckenfält

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Tentamen i Algoritmer & Datastrukturer i Java

Enkla uppgifter. Uppgift 1. Uppgift 2

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Omtentamen i Programmering C, Fri, Kväll,

Introduktion till Winbas. excel till Winbas

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Programmering C: Tentamen of 5 Prioritet och associativitet hos operatorerna i C De viktigaste operatorerna: Prioritet Kategori Operator

Programmering i C, 7,5 hp

Föreläsning 3. Iteration while-satsen

Planering Programmering grundkurs HI1024 HT data

Övning. Introduktion och förberedelser

Typkonvertering. Java versus C

Hjälp till MV-Login Administration Elevdata AB

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Iteration while-satsen

Tentamen Programmeringsteknik för BME, C, D, E, F, I, N & Pi

Övning från förra gången: readword

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

Sökning i medlemsregistret

Lösningsförslag: Instuderingsfrågor, del D

Kopplingar via datalänk från Winbas till Excel samt Pivottabell 1 (13)

Tentamen Grundläggande programmering

TDIU01 - Programmering i C++, grundkurs

kl Tentaupplägg

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

Del A (obligatorisk för alla)

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

JAVAUTVECKLING LEKTION 4

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

kl Tentaupplägg

Dagens föreläsning Programmering i Lisp Fö 5

HI1024 Programmering, grundkurs TEN

729G04 Programmering och diskret matematik

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Innehåll MySQL Intro. Ex på ett index Index typer ISAM Balanserat träd Pk och Fk i MySQL Eget index För o nackdelar med index

Uppgift 1 ( Betyg 3 uppgift )

Transkript:

Första databastillämpningen Databasen vi ska använda En textfil innehåller följande data om 200 personer. Fält Typ Exempel Förnamn sträng [20] BENGT Efternamn sträng [20] KVIST Födelsedatum sträng [6] 310713 Vikt heltal 80 Längd heltal 190 Med hjälp av ett engångsprogram, har vi läst in textfilen och konverterat innehållet till filen FOLKDATA.DBF. Filtillägget DBF skvallrar om att det handlar om DBase. Filen kan öppnas med Database Desktop, som vi hittar under Tools i C++ Builder. Varje rad i filen motsvarar en person och varje kolumn avhandlar ett fält. Så här ser början av filen ut: FNAMN ENAMN FDATUM VIKT LANGD FET 1 BENGT KVIST 310713 80 190 False 2 ÖSTEN JOHANSSON 550716 60 181 False 3 BERTIL KARLSSON 201001 63 181 False 4 MONIKA BROSTRÖM 190805 85 165 True 5 GUSTAV ANDERSSON 291101 76 161 True 6 ADAM LINDKVIST 431124 78 208 False 7 JOHAN EK 560110 64 177 False Översta raden i tabellen ger oss de 6 fältens namn, som överensstämmer med den inledande tabellen, så när som på fältet FET, av typen boolsk, som är sann om personen är överviktig. Innan konverteringen gjordes skapades en tom databas med hjälp av Database Desktop. Efteratt New Table valts får man chansen att välja databasmotor och där valde vi Dbas for windows. Direkt efter detta val skriver vi nu in postens fält genom namn,typ,storlek och antalet decimaler. De vanligaste typerna är: Kod Storlek Typ C 1-254 Tecken N 1-20 Tal D Date L Logiskt Dessutom har vi här angivit i vilka olika ordningar, vi vill ha personerna sorterade i databasen. Vi har valt tre, förnamn, efternamn, ochfödelsedatum. Dessa val leder till att filen FOLKDATA.MDX skapas. I denna indexfil finns uppgifter om, på vilken plats en post befinner sig de olika ordningarna. Så här kommer postbeskrivningen att se ut: Håkan Strömberg 1 KTH Syd

Field Name Type Size Dec FNAMN C 20 ENAMN C 20 FDATUM C 6 VIKT N 3 0 LANGD N 3 0 FET L med index: FNAMN, ENAMN och FDATUM. För denna databas vill vi nu skapa en applikation, som klarar av följande: Visa hela databasen i ordning efter födelsedatum Visa hela databasen i bokstavsordning efter efternamn Visa hela databasen i bokstavsordning efter förnamn Söker efter person med givet födelsedatum Ta bort all personer med förnamnet Håkan Beräkna medelvikten Tilldela fältet FET värdet true om personen i fråga är överviktig och sedan filtrera bort alla smala. Återställa filtret så att alla poster visas igen Byta ut alla KARL mot KALLE 1 #include <vcl.h> 2 #pragma hdrstop 3 #include "PersonProg.h" 4 #pragma package(smart init) 5 #pragma resource "*.dfm" 6 #include <stdlib.h> 7 TFormular Formular; 8 fastcall TFormular::TFormular(TComponent Owner): TForm(Owner){ 9 } 1-9 Dessa rader är automatgenererade. 1 void fastcall TFormular::SortFodelseDatumClick(TObject Sender){ 2 Tabell >IndexName="FDATUM"; 3 Tabell >First(); 5 void fastcall TFormular::SortEfterNamnClick(TObject Sender){ 6 Tabell >IndexName="ENAMN"; 7 Tabell >First(); 8 } 9 void fastcall TFormular::SortForNamnClick(TObject Sender){ 10 Tabell >IndexName="FNAMN"; 11 Tabell >First(); 12 } 2 Att byta sorteringsordning innebär helt enkelt att välja ett nytt index. 3 För tabellen finns ett antal metoder. First flyttar fokus till början av tabellen. Håkan Strömberg 2 KTH Syd

1 void fastcall TFormular::SokKnappClick(TObject Sender){ 2 bool ok; 4 Opts.Clear(); 5 ok=tabell >Locate("FDATUM",FodelsedatumRuta >Text,Opts); 6 if (!ok) ShowMessage("Finns tyvärr inte"); 7 } 1-7 I editrutan FodelsedatumRuta har vi skrivit in ett datum och vi söker nu i tabellen efter en person med detta födelsedatum. 2 ok får värdet true då vi finner det vi söker. 3 Opts håller reda på vad som gäller under sökandet, locaseinsensitive, sökandet skiljer inte på stora och små bokstäver. lopartialkey, nyckeln kan bestå endast av en del av vad som söks. Ingen av dessa optioner använder vi dock här. 5 Här utförs själva sökandet. Första parametern anger fältets namn och den andra nyckeln, som vi alltså hämtar från FodelsedatumRuta. 1 void fastcall TFormular::BortHakanClick(TObject Sender){ 2 bool ok,slut; 4 Opts.Clear(); 5 Tabell >First(); 6 slut=false; 7 while (!slut){ 8 ok=tabell >Locate("FNAMN","HÅKAN",Opts); 9 if (ok) 10 Tabell >Delete(); 11 else 12 slut=true; 13 } 1 1-14 Vi söker här igenom hela tabellen efter poster med förnamnet HÅKAN och tar bort dessa från tabellen 7-12 Så länge vi inte når slutet i tabellen, söker vi nästa post förnamnet HÅKAN. 9 Om funktionen Locate returnerar true har vi funnit en post och kan ta bort den med metoden delete. 11 Blir det ingen träff har vi nått slutet av tabellen och rutinen kan avbrytas. Håkan Strömberg 3 KTH Syd

1 void fastcall TFormular::MedelViktKnappClick(TObject Sender){ 2 int summa,antal; 3 AnsiString s; 4 Tabell >First(); 5 summa=0; 6 antal=0; 7 while (!Tabell >Eof){ 8 summa=summa+tabell >FieldByName("VIKT") >AsInteger; 9 antal++; 10 Tabell >Next(); 11 } 12 s=floattostr(float(summa)/antal); 13 MedelViktRuta >Text=s; 1 1-14 Här ska vi beräkna medelvärdet av personernas vikt och stegar därför igenom tabellen post för post och summerar vikterna, samtidigt håller vi reda på antalet personer som ingår i beräkningen. 7-11 Så länge vi inte nått slutet av tabellen utförs denna while-loop. 8 Här tar vi fram vikten och representerar den som ett heltal innan vi adderar den till sum. 10 Flyttar fokus till nästa post. 1 void fastcall TFormular::ValjTjockisarClick(TObject Sender){ 2 Tabell >First(); 3 while (!Tabell >Eof){ 4 if (Tabell >FieldByName("LANGD") >AsInteger 5 Tabell >FieldByName("VIKT") >AsInteger<100){ 6 Tabell >Edit(); 7 Tabell >FieldByName("FET") >AsBoolean=true; 8 Tabell >Post(); 9 } 10 Tabell >Next(); 11 } 12 Tabell >Filter="FET"; 13 Tabell >Filtered=true; 14 Tabell >Refresh(); 15 } 1-15 Här ska vi återigen gå igenom hela tabellen och räkna ut om aktuell person är överviktig eller inte, med den bekanta formeln: Om längden minus vikten är mindre än 100 så är personen ifråga lite för fet. Vi uppdaterar därefter fältet FET med true eller false. Från genereringen av tabellen har alla värdet false 4-5 Vi uttrycker villkoret och om det är sant så... 6 möjliggör vi uppdatering genom metoden Edit... 7 och sätter postens värde till true. 8 Till sist utför vi uppdateringen till tabellen. 12-14 Efter att ha genomfört beräkningarna ovan vill vi endast visa de överviktiga och sätter därför på ett filter. Först anger vi vilket villkoret som ska vara sant, värdet i FET ska vara TRUE och därefter sätter vi filtret i verksamhet. Genom metoden refresh utförs själva filtreringen. Håkan Strömberg 4 KTH Syd

1 void fastcall TFormular::AtarAllaClick(TObject Sender){ 2 Tabell >Filtered=false; 3 Tabell >Refresh(); Här tar vi bort filtret och vi visar åter alla genom refresh. 1 void fastcall TFormular::KalleKnappClick(TObject Sender){ 2 bool slut,ok; 4 5 Opts.Clear(); 6 Tabell >First(); 7 slut=false; 8 while (!slut){ 9 ok=tabell >Locate("FNAMN","KARL",Opts); 10 if (ok){ 11 Tabell >Edit(); 12 Tabell >FieldByName("FNAMN") >AsString="KALLE"; 13 Tabell >Post(); 1 15 else 16 slut=true; 17 } 18 } 1-18 I programmets sista funktion ska vi byta ut förnamnet Karl mot Kalle. 12 Den enda egentliga nyheten i denna funktion 1 void fastcall TFormular::FormCreate(TObject Sender){ 2 Tabell >DatabaseName="PVPDataBas"; 3 Tabell >TableName="FolkData.dbf"; 4 Tabell >Active=true; 5 DataSource1 >DataSet=Tabell; 6 DBGrid1 >DataSource=DataSource1; 7 } 2-6 Fem initieringar för att data ska kunna strömma mellan databasen med sin enda tabell till tabellen på skärmen. 1 void fastcall TFormular::AvslutaClick(TObject Sender){ 2 Tabell >Close(); 3 Close(); Håkan Strömberg 5 KTH Syd