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
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ć
procedura wczytająca dane do bazy nie jest problemem,
2.1. problemem jest użycie instrukcji with do wyswietlenia- jak to zrobić
jak stworzyć funkcję obliczjacą wypłate dla kierowców
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.
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.