Skocz do zawartości

[Pascal] Samochodowa baza danych w turbo pascalu


vilq

Polecane posty

Mam bazę danych z danymi o samochodach(model, silnik, cena). chciałbym je sortować według dowolnego kryterium, jednak nie wiem jak to zrobić optymalnie.

Edytowany -------

Jak zrobić bazę danych na rekordach w Turbo Pascalu?
Jak napisać bazę z tabelą rekordów z danymi o samochodach(model, silnik, cena)?

Jak utworzyć rekord, typ rekordowy w Pascalu?
Co to jest jak wygląda record w Pascalu?

Jak zapisywać dane do rekordu?
Jak pobierać dane z rekordu?
Jak edytować rekord?
Jak wyświetlać zawartość rekordu?
Jak usunąć, skasować rekord z tabeli rekordów?

Jak zapisać pliki rekordowe do pliku i jak odczytać plik rekordowe?
Jak zapisać rekordy do pliku w Turbo Pascalu?
Jak odczytać rekordy z pliku w Turbo Pascalu?

Jak posortować rekordy i tabelę rekordów w Turbo Pascalu?

Jak zrobić proste menu tekstowe w Turbo Pascalu?
Jak napisać program w Turbo Pascalu?
Gotowa baza danych, gotowy program, gotowiec w Turbo Pascalu
Link do komentarza
Udostępnij na innych stronach

[code=Pascal] program baza;
uses crt;

type
{ rekord w turbo pascalu }
samochod = record
marka, model, silnik, wyposazenie:string[20];
cena: Real;
ilosc:Byte;
end;

var Klaw,
Klawisz2:char;
Licznik:byte; { liczba rekordów w tabeli }
t1,p1:byte;
plik:text;
p2:single;
r:array[1..100] of samochod;

{ procedura służąca do wprowadzania danych do rekordu o numerze Licznik }
procedure wprowadz;
begin
clrscr; { czyszczenie ekranu }

Licznik:=Licznik+1; { licznik rekordów }
write('Marka : ');
readln(r[Licznik].marka); { readln - odczyt danej z klawyatury }
write('Model : ');
readln(r[Licznik].model);
write('Wersja silnika : '); { write - wyświetlanie napisu }
readln(r[Licznik].silnik);
write('Wersja wyposazenia: ');
readln(r[Licznik].wyposazenie);
write('Cena : ');
readln(r[Licznik].cena);
write('Ilosc : ');
readln(r[Licznik].ilosc);
end;

{ procedura wyświetla napisy, które mówią ze baza jest pusta }
procedure pusta;
begin
writeln('Baza jest aktualnie pusta. Dodaj nowe wpisy lub wczytaj juz istniejace z pliku');
writeln;
writeln('Nacisnij jakis klawisz...');
Klawisz2:=readkey; { program czeka na wcisnięcie dowolneko klawisza }
end;

{ procedura wyświetla zawartosć rekordu o numerze t1 }
procedure wyswietl;
begin
if Licznik=0
then { jeśli nie ma danych w tablicy to komunikat że baza jest pusta }
pusta
else
begin { jesli są dane to wyświetlamy zawartosć rekordu o numerze t1 }
writeln('Marka : ', r[t1].marka);
writeln('Model : ', r[t1].model);
writeln('Silnik : ', r[t1].silnik);
writeln('Wersja wyposazenia: ', r[t1].wyposazenie);
writeln('Cena : ', r[t1].cena:4:2);
writeln('Ilosc : ', r[t1].ilosc);
writeln('Wartosc : ', (r[t1].ilosc*r[t1].cena):4:2);
writeln;
end
end;

procedure edytuj;
begin
clrscr;
if Licznik=0
then { jeśli nie ma danych w tablicy to komunikat że baza jest pusta }
pusta
else
begin { edycja, zapisanie nowych danych, z klawiatury do rekordu }
writeln('Ktory wpis chcesz edytować (1..', Licznik, ')');
readln(t1);
write('Nowa marka : ');
readln(r[t1].marka);
write('Noey model : ');
readln(r[t1].model);
write('Nowa wersja silnika : ');
readln(r[t1].silnik);
write('Nowa wersja wyposazenia: ');
readln(r[t1].wyposazenie);
write('Nowa cena : ');
readln(r[t1].cena);
write('Nowa ilosc : ');
readln(r[t1].ilosc);
end
end;

{ procedura wyświetla całą listę danych z tabeli }
procedure wszystko;
begin
clrscr;
if (Licznik<>0) then
begin
t1:=0;
repeat
t1:=t1+1;
wyswietl;
until t1=Licznik;
end
end;

{ Procedura zapisuje dane z tablicy rekordów do pliku }
procedure zapisz;
begin
if Licznik=0 then
begin
clrscr;
pusta;
end
else
begin
assign(plik, 'BAZA.DAN'); { przypisanie nazwy pliku do uchwytu }
rewrite(plik); { otwarcie pliku do zapisu, jesli był taki plik }
{ to zostanie wyczyszczony }
writeln(plik, Licznik); { zapisanie ilości rekordów w tablicy }
t1:=0;
repeat { początek petli }
t1:=t1+1; { zwiekszenie numeru przegladanego rekordu }

writeln(plik, r[t1].marka); { zapis kolejnych danych do pliku }
writeln(plik, r[t1].model);
writeln(plik, r[t1].silnik);
writeln(plik, r[t1].wyposazenie);
writeln(plik, r[t1].cena);
writeln(plik, r[t1].ilosc);

until t1=Licznik; { koniec petli }
close(plik); { zamkniecie pliku po zapisie }
end
end;

{ wczytanie danych z pliku do tablicy rekordowej }
procedure czytaj;
begin
assign(plik, 'BAZA.DAN'); { przypisanie nazwy pliku do uchwytu }
reset(plik); { otwarcie pliku do odczytu }
readln(plik, Licznik); { odczytanie ilości rekordów do wczytania do tablicy }
t1:=0;
repeat { początek petli }
t1:=t1+1; { zwiekszenie numeru przegladanego rekordu }

readln(plik, r[t1].marka); { danych kolejnych danych z pliku }
readln(plik, r[t1].model);
readln(plik, r[t1].silnik);
readln(plik, r[t1].wyposazenie);
readln(plik, r[t1].cena);
readln(plik, r[t1].ilosc);

until t1=Licznik; { koniec petli }
close(plik); { zamkniecie pliku po zapisie }
end;

{ kasowanie rekordu z tabeli }
procedure usun;
begin
clrscr;
if Licznik=0 then pusta
else
begin
writeln('Podaj numer wpisu do usuniecia (1..', Licznik, ')');
readln(t1);
repeat
r[t1].marka:= r[t1+1].marka;
r[t1].model:= r[t1+1].model;
r[t1].silnik:= r[t1+1].silnik;
r[t1].wyposazenie:= r[t1+1].wyposazenie;
r[t1].cena:= r[t1+1].cena;
r[t1].ilosc:= r[t1+1].ilosc;
t1:=t1+1;
until t1=Licznik;
Licznik:=Licznik-1;
end
end;

procedure info;
begin
if Licznik=0 then pusta
else
begin
t1:=0;
p1:=0;
p2:=0;
repeat
t1:=t1+1;
p1:=p1+r[t1].ilosc;
p2:=p2+(r[t1].ilosc*r[t1].cena);
until t1=Licznik;
if p1=1
then writeln('Posiadasz ', p1, ' samochod o wartosci ', p2:4:2, ' zl.');
if (p1=2) or (p1=3) or (p1=4)
then writeln('Posiadasz ', p1, ' samochody o lacznej wartosci ', p2:4:2, ' zl.');
if p1>=5
then writeln('Posiadasz ', p1, ' samochodow o lacznej wartosci ', p2:4:2, ' zl.');

writeln('Nacisnij jakis klawisz...');
Klawisz2:=readkey; { program czeka na wcisnięcie dowolneko klawisza }
end
end;

begin
textbackground(lightgray); { kolor tła rekstu }
textcolor(black); { kolor tekstu }

Licznik:= 0; { zerowanie licznika rekordów }

{ pętla główna programu czekająca na wybór opcji z menu }
repeat
clrscr;
writeln('1. Nowy wpis');
writeln('2. Usun wpis');
writeln('3. Wy˜wietlanie wpisu');
writeln('4. Wy˜wietlanie wszystkich wpisw');
writeln('5. Odczyt z pliku');
writeln('6. Zapis do pliku');
writeln('7. Informacje o salonie');
writeln('8. Koniec programu');

repeat Klaw:= readkey; until (Klaw>='1') and (Klaw<='8'); // petla czekająca na klawisz

{wzależności jaki klawisz został wcisnięty takie procedury zostaną uruchomione}
if Klaw='1' then wprowadz;
if Klaw='2' then usun;
if Klaw='3' then
begin
clrscr;
write('Podaj numer wpisu (1..', Licznik, '): ');
readln(t1);
wyswietl;
writeln;
writeln('Wcisnij jakis klawisz...');
Klawisz2:=readkey; { program czeka na wcisnięcie dowolneko klawisza }
end;
if Klaw='4' then begin wszystko; info; end;
if Klaw='5' then czytaj;
if Klaw='6' then zapisz;
if Klaw='7' then begin clrscr; info; end;

until Klaw='8'; { koniec petli głównej programu}
end. [/code]
Link do komentarza
Udostępnij na innych stronach

opis quicksorta masz na wikipedi polskiej i angielskiej nawet masz gotowy kod..... wklej i koniec kłopotu
quicksort jest łatwy do zapamiętania dość szybki i wydajny do tego łatwo się go pisze. Ot takie moje spostrzeżenia, używajcie nawet bąbelkowego jak wam nie zależy na szybkości:P

"Może wam pomoge, może nie, może pierdolcie w dupę się"-prof. Jarząbek

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...