paprikodlak

DataShredder

Mar 29th, 2013
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 7.90 KB | None | 0 0
  1. program DataShredder;
  2. uses crt;
  3. type
  4.   zaznam = record jmeno, prijmeni:string; vek:real; end;
  5. var
  6. ukonceni:boolean;
  7. prikaz:string;
  8. data: file of zaznam;
  9.  
  10. function overeni(jmeno:string):boolean;
  11. var
  12.    pf : file;
  13. begin
  14. {$I-}
  15.    Assign(pf,jmeno);                                          
  16.    Reset(pf);
  17.    if IOResult=0 then
  18.    begin
  19.       Close(pf);
  20.       overeni:=true;
  21.    end
  22.    else
  23.       overeni:=False;
  24. {$I+}      
  25. end;
  26.  
  27. procedure nova;
  28. var nazev:string;
  29. begin
  30. clrscr;
  31. repeat
  32. writeln('Zadejte název:');
  33. readln(nazev);
  34. until length(nazev) > 0;
  35.  
  36. assign(data,nazev);
  37. if overeni(nazev) then writeln('Taková databáze již existuje.')
  38. else begin rewrite(data); close(data); writeln('Databáze vytvořena.');end;
  39.  
  40. writeln;
  41. end;
  42.  
  43. procedure vlozit;
  44. var nazev:string; i,j:integer; zasobnik:zaznam;
  45. begin
  46. clrscr;
  47. repeat
  48. writeln('Do jakého souboru chcete zapisovat?');
  49. readln(nazev);
  50. until length(nazev) > 0;
  51. if not overeni(nazev) then begin  writeln; writeln('Taková databáze neexistuje.'); writeln;writeln('Stiskem ENTER se vrátíte do menu.'); readln; exit; end;
  52.  
  53.  
  54. writeln('Kolik položek chcete zapsat?');
  55. readln(i);
  56.  
  57. assign(data, nazev);
  58. reset(data);
  59. j:=1;
  60. for j:=1 to i do begin
  61. with zasobnik do
  62.    begin
  63.       Writeln;
  64.       Write('jmeno: ');
  65.       Readln(jmeno);
  66.       Write('prijmeni: ');
  67.       Readln(prijmeni);
  68.       Write('vek: ');
  69.       Readln(vek);
  70.      
  71.    end;
  72. seek(data,FileSize(data));
  73. write(data,zasobnik);
  74. end;
  75.  
  76. close(data);
  77. clrscr;
  78. writeln('Zadání dat proběhlo úspěšně.');
  79. writeln;
  80. end;
  81.  
  82. procedure vypsat;
  83. var zasobnik:zaznam; nazev:string;
  84. begin
  85. repeat
  86. writeln('Z jakého souboru chcete vypisovat?');
  87. readln(nazev);
  88. until length(nazev) > 0;
  89. if not overeni(nazev) then begin  writeln; writeln('Taková databáze neexistuje.'); writeln;writeln('Stiskem ENTER se vrátíte do menu.'); readln; exit; end;
  90. clrscr;
  91. assign(data,nazev);
  92. reset(data);
  93.  
  94. while not eof(data) do begin
  95. read(data, zasobnik);
  96. with zasobnik do
  97.   begin
  98.     writeln();
  99.     writeln(jmeno,' ', prijmeni, ' ', vek:2:1 );
  100.  
  101.   end;
  102.  
  103. end;
  104.  
  105. close(data);
  106.  
  107. writeln;
  108. writeln('Pro pokračování stisknete ENTER.');
  109. readln;
  110. clrscr;
  111. end;
  112.  
  113. procedure smazat;
  114. var nazev:string; ov:boolean;
  115. begin
  116. repeat
  117. writeln('Zadejte název databáze, kterou chcete smazat:');
  118. readln(nazev);
  119. until length(nazev) > 0;
  120. ov:=overeni(nazev);
  121. clrscr;
  122. if ov=true then begin assign(data,nazev); erase(data); writeln('Databáze smazána.'); end else writeln('Takova databaze neexistuje.');
  123. writeln;
  124. end;
  125.  
  126. procedure tridit;
  127. var
  128. i,j,fs:integer;
  129. {f:file of zaznam;}
  130. a:array[1..1000] of string;
  131. b:array[1..1000] of string;
  132. c:array[1..1000] of real;
  133. q:zaznam;
  134. p:boolean;
  135. nazev,polozka,prvek,podle,jak:string;
  136. begin
  137. clrscr;
  138. repeat
  139. writeln('Jakou databázi chcete setřídit?');
  140. readln(nazev);
  141. until length(nazev) > 0;
  142. if not overeni(nazev) then begin  writeln; writeln('Taková databáze neexistuje.'); writeln;writeln('Stiskem ENTER se vrátíte do menu.'); readln; exit; end;
  143.  
  144.  
  145. assign(data,nazev);
  146. reset(data);
  147. fs:=filesize(data);
  148.  
  149. {Načtení do tabulky.}
  150. i:=1;
  151. while not EoF(data) do begin
  152. read(data,q);
  153. a[i]:=q.jmeno;
  154. b[i]:=q.prijmeni;
  155. c[i]:=q.vek;
  156. inc(i);
  157.  
  158. end;
  159. close(data);
  160.  
  161.  
  162. writeln('Podle kterého prvku chcete třídit? (jmeno, prijmeni, vek)');
  163. readln(prvek);
  164. case prvek of
  165.   'vek': begin
  166.  
  167. {Třízení - bubblesort}
  168. repeat
  169. p:=false;
  170. for i:=1 to fs-1 do begin
  171.   if (c[i]>c[i+1]) then
  172.          begin
  173.          p:=true;
  174.          
  175.          q.vek:=c[i]; c[i]:=c[i+1]; c[i+1]:=q.vek;
  176.          q.jmeno:=a[i]; a[i]:=a[i+1]; a[i+1]:=q.jmeno;
  177.          q.prijmeni:=b[i]; b[i]:=b[i+1]; b[i+1]:=q.prijmeni;
  178.          end;
  179.  
  180. end;
  181. until p=false;    
  182.   end;
  183.  
  184.   'jmeno': begin
  185. {Třízení - bubblesort}
  186. repeat
  187. p:=false;
  188. for i:=1 to fs-1 do begin
  189.   if (a[i]>a[i+1]) then
  190.          begin
  191.          p:=true;
  192.          
  193.          q.vek:=c[i]; c[i]:=c[i+1]; c[i+1]:=q.vek;
  194.          q.jmeno:=a[i]; a[i]:=a[i+1]; a[i+1]:=q.jmeno;
  195.          q.prijmeni:=b[i]; b[i]:=b[i+1]; b[i+1]:=q.prijmeni;
  196.          end;
  197.  
  198. end;
  199. until p=false;    
  200. end;
  201.  
  202.  
  203.   'prijmeni': begin
  204. {Třízení - bubblesort}
  205. repeat
  206. p:=false;
  207. for i:=1 to fs-1 do begin
  208.   if (b[i]>b[i+1]) then
  209.          begin
  210.          p:=true;
  211.          
  212.          q.vek:=c[i]; c[i]:=c[i+1]; c[i+1]:=q.vek;
  213.          q.jmeno:=a[i]; a[i]:=a[i+1]; a[i+1]:=q.jmeno;
  214.          q.prijmeni:=b[i]; b[i]:=b[i+1]; b[i+1]:=q.prijmeni;
  215.          end;
  216.  
  217. end;
  218. until p=false;    
  219. end;
  220.  
  221. else begin writeln('Nezadali jste, podle čeho třídit.'); writeln; exit; end; end; {else vztahujicise k case of}
  222.  
  223. writeln('Jak třídit, sestupně nebo vzestupně? (sestupne, vzestupne)');
  224. readln(jak);
  225.  
  226. {Zapsani do souboru}
  227. rewrite(data);
  228. if jak='sestupne' then begin
  229.   for i:=1 to fs do begin
  230.     j:=fs-i+1;
  231.     q.jmeno:=a[j];
  232.     q.prijmeni:=b[j];
  233.     q.vek:=c[j];
  234.     write(data,q);
  235.   end;  
  236.   jak:='sestupně'  
  237.   end
  238.  
  239. else begin  
  240.   for i:=1 to fs do begin
  241.     q.jmeno:=a[i];
  242.     q.prijmeni:=b[i];
  243.     q.vek:=c[i];
  244.     write(data,q);
  245.     end;
  246.     jak:='vzestupně'
  247. end;
  248. close(data);
  249.  
  250.                
  251. case prvek of
  252. 'vek': podle:='věku';
  253. 'jmeno': podle:='jména';
  254. 'prijmeni': podle:='příjmení'; end;
  255.  
  256.  
  257. clrscr;
  258. writeln('Setřízeno ',jak,' podle ',podle,'.');
  259. writeln;
  260.  
  261. end;
  262.  
  263.  
  264. procedure vyjmout;
  265. var nazev,jmeno,prijmeni:string; i,j,fs,id:integer;
  266. a:array[1..1000] of string;
  267. b:array[1..1000] of string;
  268. c:array[1..1000] of real;
  269. q:zaznam;
  270. begin
  271.  
  272. clrscr;
  273. repeat
  274. writeln('Z jake databaze chcete odstranit polozku?');
  275. readln(nazev);
  276. until length(nazev) > 0;
  277. if not overeni(nazev) then begin  writeln; writeln('Taková databáze neexistuje.'); writeln;writeln('Stiskem ENTER se vrátíte do menu.'); readln; exit; end;
  278.  
  279. clrscr;
  280. assign(data,nazev);
  281. reset(data);
  282.  
  283. {vypis, aby bylo videt, co tam je}
  284. while not eof(data) do begin
  285. read(data, q);
  286. with q do
  287.   begin
  288.     writeln();
  289.     writeln(jmeno,' ', prijmeni, ' ', vek:2:1 );
  290.  
  291.   end;
  292.  
  293. end;
  294. close(data);
  295.  
  296. writeln;
  297. writeln('Zadejte jmeno a prijmeni z polozky, kterou chcete odstranit.');
  298. readln(jmeno);readln(prijmeni);
  299.  
  300.  
  301. {Načtení do tabulky.}
  302. assign(data,nazev);
  303. reset(data);
  304. fs:=filesize(data);
  305. i:=1;
  306. while not EoF(data) do begin
  307. read(data,q);
  308. a[i]:=q.jmeno;
  309. b[i]:=q.prijmeni;
  310. c[i]:=q.vek;
  311. inc(i);
  312. end;
  313. close(data);
  314.  
  315. {Vymazani z tabulky zaznamu, ktery se ma odstranit}
  316.  
  317. for i:=1 to fs do begin
  318.   if a[i]=jmeno then if b[i]=prijmeni then id:=i;
  319.  
  320. end;
  321.  
  322.  
  323.  
  324. {Zapsani do souboru}
  325. rewrite(data);
  326. j:=1;
  327. for i:=1 to fs-1 do begin
  328.      if i=id then j:=i+2 else j:=i;
  329.    
  330.     q.jmeno:=a[j];
  331.     q.prijmeni:=b[j];
  332.     q.vek:=c[j];
  333.     write(data,q);
  334.     ;
  335.     end;
  336. close(data);
  337.  
  338. clrscr;
  339. writeln('Položka odstraněna.');
  340. writeln();
  341.  
  342. end;
  343.  
  344. procedure menu;
  345. begin
  346. textbackground(black);
  347. textcolor(white);
  348. writeln('Vyberte akci:');
  349.  
  350. textcolor(14);write('V:');textcolor(white);writeln(' vypsat databázi');
  351. textcolor(14);write('T:');textcolor(white);writeln(' třídit databázi');
  352. textcolor(14);write('Z:');textcolor(white);writeln(' zapsat do databáze');
  353. textcolor(14);write('O:');textcolor(white);writeln(' odstranit položku z databáze');
  354. textcolor(14);write('S:');textcolor(white);writeln(' smazat databázi');
  355. textcolor(14);write('N:');textcolor(white);writeln(' nová databáze');
  356. textcolor(14);write('E:');textcolor(white);writeln(' ukončit program');
  357. writeln;  
  358. readln(prikaz);
  359. case prikaz of
  360.   'N': nova;
  361.   'Z': vlozit;
  362.   'S': smazat;
  363.   'V': vypsat;
  364.   'O': vyjmout;
  365.   'E': ukonceni:= true;
  366.   'T': tridit;  
  367.   'n': nova;
  368.   'z': vlozit;
  369.   's': smazat;
  370.   'v': vypsat;
  371.   't': tridit;
  372.   'o': vyjmout;
  373.   'e': ukonceni:= true;
  374. else begin writeln('Zadali jste špatný příkaz'); ukonceni:= false; exit; end;
  375. end;
  376.  
  377. end;
  378.  
  379. begin
  380. textbackground(white);
  381. textcolor(black);  
  382. ukonceni:=false;
  383. writeln('Vítejte v databázovém nástroji DataShredder');
  384. writeln;
  385.  
  386. repeat
  387. menu;
  388. until ukonceni=true;
  389.  
  390. end.
Advertisement
Add Comment
Please, Sign In to add comment