Databaza turbo pascal

Programovacie jazyky, rady, poradňa...
Plax
Amateur
Amateur
Príspevky: 31
Registrovaný: 13 aug 2010, 14:38

Databaza turbo pascal

Príspevok od používateľa Plax »

Dobry den,

vopred sa ospravedlnujem za nepouzitie interpunkcie, EN klavesnica...

Mam tu jeden homemade zdrojacik


Program Zbrane;
uses fdelay,crt;
type zbran=record
nazov:string[15];
evidencia:record
Den:1..31;
Mesiac:1..12;
Rok:1800..2100;
Kapacita:1..110;
Dostrel:25..3000;
Cena:30..15000;
Vaha:1..15000;
Hodnotenie:1..100;
end;
end;
var kus: zbran;
f: file of zbran;
n: integer;
bedna: array[1..1000] of zbran;
i,j,poc_zaznamov, chyba, volba: integer;
ch: char;
max_menu: 1..5;


function sipky(a,b:byte):byte;
begin
case ord(readkey) of
72: dec(a);
80: inc(a);
end;
if a<1 then a:=b;
if a>b then a:=1;
sipky:=a;
end;


procedure menu (x,y:byte);

begin gotoxy (x,y+1);
write ('1- PRIDANIE ZAZNAMU');

gotoxy (x,y+2);
write ('---***---***---');

gotoxy (x,y+3);
write ('2- VYPISANIE ZAZNAMU');

gotoxy (x,y+4);
write ('---***---***---');

gotoxy (x,y+5);
write ('3- MAZANIE ZAZNAMU');

gotoxy (x,y+6);
write ('---***---***---');

gotoxy (x,y+7);
write ('4- TRIEDENIE ZAZNAMU');

gotoxy (x,y+8);
write ('---***---***---');

gotoxy (x,y+9);
write ('5- KONIEC');

gotoxy (x,y+10);
write ('---***---***---');

gotoxy (1,y+14);
end;

begin
ch:=readkey;
if ch=#0 then i:=sipky(i,max_menu);
if ch=#13 then begin
ch:=chr(i+48);
if ch=chr(max_menu+48) then ch:=#27;
end;

procedure pridaj;
begin

inc(poc_zaznamov);

write('Zadaj nazov: ');
readln(bedna[poc_zaznamov].nazov);
write('Zadaj den evidencie: ');
readln(bedna[poc_zaznamov].evidencia.den);
write('Zadaj mesiac evidencie: ');
readln(bedna[poc_zaznamov].evidencia.mesiac);
write('Zadaj rok evidencie: ');
readln(bedna[poc_zaznamov].evidencia.rok);
write('Zadaj kapacitu zasobniku: ');
readln(bedna[poc_zaznamov].evidencia.kapacita) ;
write('Zadaj ucinny dostrel-min 25m: ');
readln(bedna[poc_zaznamov].evidencia.dostrel);
write ('Zadaj aktualnu cenu v eurach: ');
readln(bedna[poc_zaznamov].evidencia.cena);
write ('Zadaj vahu zbrane s plnym zasobnikom (v kg): ');
readln(bedna[poc_zaznamov].evidencia.vaha);
write ('Zadaj aktualne hodnotenie v percentach podla www.saw.com: ');
readln(bedna[poc_zaznamov].evidencia.hodnotenie);
write ('Pridanie zaznamu uspesne');



readln;
end;
procedure vypis;
begin
for i:=1 to poc_zaznamov do
begin

write('Nazov zbrane:');
writeln(bedna.nazov);
write('Datum evidencie :');
writeln(bedna.evidencia.den,'.',bedna.evidencia.mesiac,'.',bedna.evidencia.rok);
write('Kapacita zasobnika:');
writeln(bedna.evidencia.kapacita);
write('Ucinny dostrel v metroch:');
writeln(bedna.evidencia.dostrel);
write('Aktualna cena v eurach:');
writeln(bedna.evidencia.cena);
write('Vaha zbrane s plnym zasobnikom (v kg):');
writeln(bedna.evidencia.vaha);
write('Aktualne hodnotenie zbrane v percentach podla www.saw.com:');
writeln(bedna.evidencia.hodnotenie);
end;
readln
end;

procedure mazanie;
var cislo_mazanie_zaznamu:integer;
begin
write('Zadaj cislo zaznamu: ');
readln(cislo_mazanie_zaznamu);
seek (f, cislo_mazanie_zaznamu -1);
write (f, bedna [poc_zaznamov]);
seek (f, poc_zaznamov -1);
truncate (f);
bedna [cislo_mazanie_zaznamu]:= bedna [poc_zaznamov];
poc_zaznamov:= poc_zaznamov-1;
readln;
writeln ('Mazanie uspesne');
readln;
end;

procedure triedenie;
var pom: zbran;
j: integer;

begin
for j:=1 to poc_zaznamov-1
do begin
for i:=1 to poc_zaznamov-j
do if bedna.nazov>bedna[i+1].nazov
then begin pom:=bedna[i]; bedna[i]:=bedna[i+1]; bedna[i+1]:=pom;
end;
end;
end;




begin
poc_zaznamov:= 0;
assign (f,'databaza.dat ');
{$I-}
reset (f);
chyba :=ioresult;
{$I+}
if chyba >0 then rewrite (f)
else poc_zaznamov:= filesize (f);

for i:= 1 to poc_zaznamov do read (f, bedna [i]);
repeat
clrscr;
menu (10,1);

readln (volba);
clrscr;

menu (10,1);
case volba of
1:pridaj;
2:vypis;
3:mazanie;
4:triedenie;
end;

until volba=5;
seek(f,0);
for i:= 1 to poc_zaznamov do write (f, bedna [i]);
close (f);
end.


jedna sa o klasicky typ databazi. Je jediny poblem je ze po pridani menu ovladatelneho sipkamy to akosi blbne+ procedura triedenie nereaguje na spustenie v menu.

Dakujem za vase odozvy Plax
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Databaza turbo pascal

Príspevok od používateľa audiotrack »

definuj co znamena 'blbne'
Baseilos
Light Expert
Light Expert
Príspevky: 57
Registrovaný: 01 máj 2011, 2:15

Re: Databaza turbo pascal

Príspevok od používateľa Baseilos »

Je ten program vobec skompilovatelny?

Kód: Vybrať všetko

Program Zbrane;

uses fdelay,crt;

type zbran=record
  nazov:string[15];
  evidencia:record
  Den:1..31;
  Mesiac:1..12;
  Rok:1800..2100;
  Kapacita:1..110;
  Dostrel:25..3000;
  Cena:30..15000;
  Vaha:1..15000;
  Hodnotenie:1..100;
  end;
end;

var kus: zbran;
    f: file of zbran;
    n: integer;
    bedna: array[1..1000] of zbran;
    i,j,poc_zaznamov, chyba, volba: integer;
    ch: char;
    max_menu: 1..5;


function sipky(a,b:byte):byte;
begin
  case ord(readkey) of
    72: dec(a);
    80: inc(a);
  end;
  if a<1 then a:=b;
  if a>b then a:=1;
  sipky:=a;
end;

procedure menu (x,y:byte);
begin 
  gotoxy (x,y+1);
  write ('1- PRIDANIE ZAZNAMU');

  gotoxy (x,y+2);
  write ('---***---***---');

  gotoxy (x,y+3);
  write ('2- VYPISANIE ZAZNAMU');

  gotoxy (x,y+4);
  write ('---***---***---');

  gotoxy (x,y+5);
  write ('3- MAZANIE ZAZNAMU');

  gotoxy (x,y+6);
  write ('---***---***---');

  gotoxy (x,y+7);
  write ('4- TRIEDENIE ZAZNAMU');

  gotoxy (x,y+8);
  write ('---***---***---');

  gotoxy (x,y+9);
  write ('5- KONIEC');

  gotoxy (x,y+10);
  write ('---***---***---');

  gotoxy (1,y+14);
end;

begin
  ch:=readkey;
  if ch=#0 then i:=sipky(i,max_menu);
  if ch=#13 then 
  begin
    ch:=chr(i+48);
    if ch=chr(max_menu+48) then ch:=#27;
  end;

procedure pridaj;
begin
  inc(poc_zaznamov);
  write('Zadaj nazov: ');
  readln(bedna[poc_zaznamov].nazov);
  write('Zadaj den evidencie: ');
  readln(bedna[poc_zaznamov].evidencia.den);
  write('Zadaj mesiac evidencie: ');
  readln(bedna[poc_zaznamov].evidencia.mesiac);
  write('Zadaj rok evidencie: ');
  readln(bedna[poc_zaznamov].evidencia.rok);
  write('Zadaj kapacitu zasobniku: ');
  readln(bedna[poc_zaznamov].evidencia.kapacita) ;
  write('Zadaj ucinny dostrel-min 25m: ');
  readln(bedna[poc_zaznamov].evidencia.dostrel);
  write ('Zadaj aktualnu cenu v eurach: ');
  readln(bedna[poc_zaznamov].evidencia.cena);
  write ('Zadaj vahu zbrane s plnym zasobnikom (v kg): ');
  readln(bedna[poc_zaznamov].evidencia.vaha);
  write ('Zadaj aktualne hodnotenie v percentach podla www.saw.com: ');
  readln(bedna[poc_zaznamov].evidencia.hodnotenie);
  write ('Pridanie zaznamu uspesne');
  readln;
end;

procedure vypis;
begin
  for i:=1 to poc_zaznamov do
  begin
    write('Nazov zbrane:');
    writeln(bedna[i].nazov);
    write('Datum evidencie :');
    writeln(bedna[i].evidencia.den,'.',bedna[i].evidencia.mesiac,'.',bedna[i].evidencia.rok);
    write('Kapacita zasobnika:');
    writeln(bedna[i].evidencia.kapacita);
    write('Ucinny dostrel v metroch:');
    writeln(bedna[i].evidencia.dostrel);
    write('Aktualna cena v eurach:');
    writeln(bedna[i].evidencia.cena);
    write('Vaha zbrane s plnym zasobnikom (v kg):');
    writeln(bedna[i].evidencia.vaha);
    write('Aktualne hodnotenie zbrane v percentach podla www.saw.com:');
    writeln(bedna[i].evidencia.hodnotenie);
  end;
  readln
end;

procedure mazanie;
var cislo_mazanie_zaznamu:integer;
begin
  write('Zadaj cislo zaznamu: ');
  readln(cislo_mazanie_zaznamu);
  seek (f, cislo_mazanie_zaznamu -1);
  write (f, bedna [poc_zaznamov]);
  seek (f, poc_zaznamov -1);
  truncate (f);
  bedna [cislo_mazanie_zaznamu]:= bedna [poc_zaznamov];
  poc_zaznamov:= poc_zaznamov-1;
  readln;
  writeln ('Mazanie uspesne');
  readln;
end;

procedure triedenie;
var pom: zbran;
    j: integer;
begin
  for j:=1 to poc_zaznamov-1 do 
  begin
  for i:=1 to poc_zaznamov-j do 
    if bedna[i].nazov>bedna[i+1].nazov then
    begin 
      pom:=bedna[i]; 
      bedna[i]:=bedna[i+1]; 
      bedna[i+1]:=pom;
    end;
  end;
end;

begin
  poc_zaznamov:= 0;
  assign (f,'databaza.dat ');
  {$I-}
  reset (f);
  chyba :=ioresult;
  {$I+}
  if chyba >0 then rewrite (f)
  else poc_zaznamov:= filesize (f);

  for i:= 1 to poc_zaznamov do read (f, bedna [i]);
  repeat
    clrscr;
    menu (10,1);
    readln (volba);
    clrscr;

    menu (10,1);
    case volba of
      1:pridaj;
      2:vypis;
      3:mazanie;
      4:triedenie;
    end;
  until volba=5;

  seek(f,0);
  for i:= 1 to poc_zaznamov do write (f, bedna [i]);
  close (f);
end.
Je toto validny kod v Pascale?

Kód: Vybrať všetko

begin
  ch:=readkey;
  if ch=#0 then i:=sipky(i,max_menu);
  if ch=#13 then 
  begin
    ch:=chr(i+48);
    if ch=chr(max_menu+48) then ch:=#27;
end;
Ja by som pohyb po menu implementoval cca nasledovnym sposobom.

Kód: Vybrať všetko

procedure vypisMenu(polozkyMenu: array[0..4] of String; aktualnaPolozka: integer);
var i: integer;
begin
  clrscr;
  for i := 0 to 4 do
  begin
    { Kurzor nad aktualnym zaznamov v menu }
    if aktualnaPolozka = i then write('-> ')
    else write('   ');
    writeln(polozkyMenu[i]);
  end;
end;

procedure menuVstup(aktualnaPolozka: integer);
begin
  { Volane procedury/funkcie pre kazdu polozku v menu }
  case aktualnaPolozka of 
    0 : pridaj;
    1 : vypis;
    2 : mazanie;
    3 : triedenie;
    4 : exit; { Upratat a ukoncit beh }
  end;
end;

procedure menu(polozkyMenu: array[0..4] of String; startPolozka: integer);
var klaveska: char;
    aktualnaPolozka: integer;
begin
  aktualnaPolozka := startPolozka mod 5; 
  while true do 
  begin
    vypisMenu(polozkyMenu, startPolozka);
    { Cakanie na vstup od uzivatela a vykonanie prislusnych akcii }
    klavesa := readkey;
    case klavesa of
      'W' : aktualnaPolozka := (aktualnaPolozka - 1) mod 5;
      'S' : aktualnaPolozka := (aktualnaPolozka + 1) mod 5;
      #13 : menuVstup(aktualnaPolozka);
    end;
  end;
end;
Napísať odpoveď