[Delphi] problem z prostą bazą danych


(underface) #1

a wiec tak mam problem z zadaniem, które brzmi

Zdefiniować rekord KIEROWCA o następujących polach:

Dane(imię, nazwisko, adres)

samochód(marka, nr rejestracyjny)

kursy(tablica zawierająca liczby określające ilość przejechanych kilometrów)

Utwórz bazę danych przechowującą informację o zadanej liczbie kierowców. Napisz procedury wczytywania i wyświetlania danych zawartych w tym rekordzie (wykorzystaj instrukcję WITH). Dodaj funkcję obliczającą wynagrodzenie dla kierowcy, przyjmując stawkę 0.80 zł/km. Dodaj funkcję obliczającą ilość kilometrów przejechanych przez wszystkich kierowców z bazy.

Uwaga: wykorzystaj tablice dynamiczne

a to co udało mi się stworzyć

program baza;

{$APPTYPE CONSOLE}

uses

  SysUtils;


const k=0.80;

{----------------------------------------------------}

type TDane = record

        imie: string [20];

        nazwisko: string [40];

        adres:string [150];

     end;


{-----------------------------------------------------}

type TSamochod = record

      marka:string [30];

      nr_rej:string [7];

    end;


{-----------------------------------------------------}


type TKierowca = record

  Dane_wlasciciel:TDane;

  Dane_samochod: TSamochod;

  kursy :array of real;


  type Tkierowca_tab:Tkierowca;

{-----------------------------------------------------}


  VAR BAZA: Tkierowca_tab;



{------------------Wypełnianie------------------------}

{-----------------------------------------------------}


procedure wypelnij_kierowce (var X:Tkierowca);


begin

writeln('Podaj imie');

readln

writeln('Podaj nazwisko');

readln

writeln('Podaj adres');

readln

writeln('Podaj ');

readln



BEGIN


  { TODO -oUser -cConsole Main : Insert code here }

END.

dodam jeszcze z czym mam problem

  1. prosiłbym o sprawdzenie wprowadzonych rekordów i nowych typów.

1.1 wiem ze brakuje mi rekordu kursy niestety nie wiem jak to zrobić

  1. procedura wczytająca dane do bazy nie jest problemem,

2.1. problemem jest użycie instrukcji with do wyswietlenia- jak to zrobić

  1. jak stworzyć funkcję obliczjacą wypłate dla kierowców

([alex]) #2

1.1 Nie ma w zadaniu wymagania stworzenia rekordu kursy;

2.1 Jeżeli do funkcji przekazana tablica z rekordami, to wypisywanie danych z i-go elementu jest prostsze przy użyciu with, nie musisz przed każdym polem pisać tab_., używasz wyrazu tab_ tylko w "nagłówku" with.

3. Dla każdego kierowcy zsumuj kursy, pomnóż sumę przez 0.8 - wyświetl wynik.

Sądzę że twoim problemem jest to, że masz:

type Tkierowca_tab:Tkierowca;

zamiast:

type Tkierowca_tab:array of Tkierowca;


(underface) #3

to juz mam poprawione,

problem mam z jak stworzyć dynamiczna tablice, zeby to jakos normalnie wygladalo, i jak wyświetlić dane z bazy


([alex]) #4

type Tkierowca_tab:array of Tkierowca; // to jest dynamiczna tablica


(underface) #5

to wiem ale jak tym przesterować przed procedurą


([alex]) #6

Nie trzeba, przekaż jako var i tyle.


(underface) #7

do tego już doszedlem

moglbyś mi podac nr gg, chciałbym zadać kilka pytań, a na forum to troche cieżko.

odnośnie tematu.

jak użyc instrukcji while w procedurze wyswietlającej?

-- Dodane 07.12.2009 (Pn) 18:39 --

obecnie jestem na takim etapie

program baza_danych;

{$APPTYPE CONSOLE}

uses

  SysUtils;

const stawka=0.80; {stawka za przejechane kilometry 0.80 zł/km}

Type TDane = record

        imie : string [20];

        nazwisko: string [40];

        adres : string [150];

        end;

Type TSamochod = record

        marka :string[20];

        nr_rej:string[7];

        end;

Type TKierowca = record

        Dane_kierowca: TDane;

        Dane_samochod: TSamochod;

        Dane_kursy : array of real;

        end;

Type TKierowca_tab = array of TKierowca;

 var

Baza:Tkierowca_tab;

kierowca:Tkierowca;

ilosc,i:integer;

{procedura wprowadzająca dane do bazy}

procedure wczytaj (var X:TKierowca);

 var

    ilosc_kursow:integer;

    i:integer;

  begin

    writeln ('Podaj imie kierowcy');

    readln (X.Dane_kierowca.imie);

    writeln ('Podaj nazwisko kierowcy');

    readln (X.Dane_kierowca.nazwisko);

    writeln ('Podaj adres kierowcy');

    readln (X.Dane_kierowca.adres);

    writeln ('Podaj marke samochodu');

    readln (X.Dane_samochod.marka);

    writeln ('Podaj nr rejestracyjny samochodu');

    readln (X.Dane_samochod.nr_rej);

    {---kursy---}

    writeln ('podaj ile kursów wykonał kierowca');

    readln (ilosc_kursow);

    setlength(X.Dane_kursy,ilosc_kursow);

    for i:=0 to ilosc_kursow - 1 do

      begin

        writeln('Podaj ile kilometrow przejechal kierowca podaczas ',i+1,' kursu:');

        readln (X.Dane_kursy[i]);

      end;

    end;



{-------------------------------- czesc operacyjna -----------------------}

begin

  { TODO -oUser -cConsole Main : Insert code here }

  writeln ('podaj ile kierowcow chcesz wprowadzic');

  readln(ilosc);

  setlength(Baza,ilosc);

   for i:=0 to ilosc-1 do

     begin

       wczytaj(kierowca);

       baza[i]:=kierowca;

     end;


end.

-- Dodane 09.12.2009 (Śr) 17:32 -- wstawiam skończony program, bez funkcji obliczania wynagrodzenia, - wynagrodzenie jest liczone w inny sposób

program baza2;

{$APPTYPE CONSOLE}

uses

  SysUtils;


const stawka=0.80; {stawka za przejechane kilometry 0.80 zł/km}

Type TDane = record

        imie : string [20];

        nazwisko: string [40];

        adres : string [150];

        end;

Type TSamochod = record

        marka :string[20];

        nr_rej:string[7];

        end;

Type TKierowca = record

        Dane_kierowca: TDane;

        Dane_samochod: TSamochod;

        Dane_kursy : array of real;

        kilometry : real; {suma pzrejechanych przez kierowce kilometrow}

        end;

Type TKierowca_tab = array of TKierowca;

 var

Baza:Tkierowca_tab;

{procedura wprowadzająca kierowce}

procedure wczytaj (var X:TKierowca);

 var

    ilosc_kursow:integer;

    i:integer;

      begin

    writeln ('---------------------');

    write ('Podaj imie kierowcy :');

    readln (X.Dane_kierowca.imie);

    write ('Podaj nazwisko kierowcy :');

    readln (X.Dane_kierowca.nazwisko);

    write ('Podaj adres kierowcy :');

    readln (X.Dane_kierowca.adres);

    write ('Podaj marke samochodu :');

    readln (X.Dane_samochod.marka);

    write ('Podaj nr rejestracyjny samochodu :');

    readln (X.Dane_samochod.nr_rej);

    {---kursy---}

    write ('podaj ile kursow wykonal kierowca :');

    readln (ilosc_kursow);

    setlength(X.Dane_kursy,ilosc_kursow);

    for i:=0 to ilosc_kursow - 1 do

      begin

        writeln('Podaj ile kilometrow przejechal kierowca podaczas ',i+1,' kursu:');

        readln (X.Dane_kursy[i]);

      end;

      for i:=0 to ilosc_kursow - 1 do

       X.kilometry:=X.kilometry+X.Dane_kursy[i];

 end;


{procedura zapełnianiA bazy}

procedure wypelnij_baza (var Y:TKierowca_tab);

var ilosc,i:integer;

begin

writeln ('podaj ile kierowcow chcesz wprowadzic');

readln(ilosc);

  setlength(Y,ilosc);

   for i:=0 to ilosc-1 do

       wczytaj (Y[i]);

end;


{----FUNCKJA LICZĄCA ILOSC PRZEJECHANYCH KILOMEKTÓW PRZEZ WSZYSTKICH KIEROWCOW}

function ile_km (X:TKierowca_tab):real;

var i:integer;

ilosc:real;

begin

ilosc:=0;

   for i:=0 to high(X) do

       ilosc:=ilosc + X[i].kilometry;

       ile_km:=ilosc;

end;



{-----------------------------------------------------------------------------}

{wynagrodzenie dla kierowcy}

function wynagrodzenie (X:TKierowca_tab):real;

var wyna:real;

begin

wyna:= X[1].kilometry;


 wynagrodzenie:=wyna;

end;

{wyswietlanie ---------------------------------------- }

procedure wyswietl_baza (X:TKierowca_tab);

var

i:integer;


begin

for i:=low(x) to high(X) do

  with X[i] do

    begin

    writeln ('--- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---');

    writeln;

    writeln('imie :',Dane_kierowca.imie);

    writeln('Nazwisko :',Dane_kierowca.nazwisko);

    writeln('adres :',Dane_kierowca.adres);

    writeln('marka samochodu :',Dane_samochod.marka);

    writeln('numer rejestracyjny :',Dane_samochod.nr_rej);

    writeln('wynagrodzenie pracownika :',kilometry*stawka:0:2,' zl');

    end;

end;






{------------------------------------------glowny program----------------------------------------------------------}

begin

{ TODO -oUser -cConsole Main : Insert code here }


wypelnij_baza(Baza);


wyswietl_baza(Baza);


writeln;

writeln('Suma kilometrow przejechanych przez wszystkich kierowcow :', ile_km(baza):0:0);

readln;

end.