Heterogeneous library

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Category: KMP (Club of young programmers)
eknihy.pngProgram: Eknihy.pasGzoznam.pasGfront.pasGzasob.pas
File exe: Eknihy.exe
need: Knihy.txt

Heterogeneous library. Use these lists
- CONTAINER - dynamic array of pointers to content
- LIST - linear list with threaded head
- FRONT - dynamic array
{ eknihy.pas                Copyright (c) TrSek alias Zdeno Sekerak  }
{ Heterogenna evidencia knih.                                        }
{ Pouziva:                                                           }
{   - ZASOBNIK - dynamicke pole so smernikmi na obsah                }
{   - ZOZNAM - linearny zretazeny zoznam s hlavou                    }
{   - FRONT - dynamicke pole                                         }
{   - Interaktívne menu                                              }
{                                                                    }
{ Datum:17.04.2007                              http://www.trsek.com }
Program eKnihy;
Uses crt, gzoznam, gzasob, gfront;
 
Const EscPgm=#27;
      EscHlp=#27;
      EscInf=#27;
      Enter =#13;
 
      MAX = 11;
 
Type cMenu = object
        Koniec : boolean;
           Key : integer;
        constructor Init;
        destructor  Done; virtual;
        procedure   OknoZakl;
        procedure   Ukoncenie;
        procedure   Help;
        procedure   Prev;
        procedure   Next;
        procedure   View;
     end;
 
 
Var knizky : cEvidKni;
      menu : cMenu;
 
 
constructor cMenu.Init;
begin
  ClrScr;
  Koniec:=False;
  Key:=1;
end;
 
 
destructor cMenu.Done;
Begin
End;
 
 
procedure cMenu.OknoZakl;
Begin
  textcolor(lightgray);
  textbackground(red);
  Clrscr;
  gotoxy(28,1);  write('Heterogenna evidencia ver.1.1');
  window(2,2,78,22);
  textbackground(black);
  clrscr;
End;
 
 
procedure cMenu.Ukoncenie;
var Znak: char;
Begin
  window(25,15,55,20);
  textcolor(red);
  textbackground(white);
  clrscr;
  gotoxy(7,4);
  write('Ukoncit program A/N');
 
  Repeat
    Znak:=readkey;
  Until Znak in ['A','a','N','n'];
 
  Koniec := Znak in ['A','a'];
End;
 
 
procedure cMenu.Help;
Begin
  window(10,7,70,17);
  textcolor(black);
  textbackground(yellow);
  clrscr;
  gotoxy(8,2);
  write('Help');
 
  Repeat
  Until Readkey = EscHlp;
End;
 
 
procedure cMenu.Prev;
begin
   Key := Key-1;
   { uz je hore }
   if( Key<1 )then
       Key:=MAX;
end;
 
 
procedure cMenu.Next;
begin
   Key := Key+1;
   { uz je dole }
   if( Key>MAX )then
       Key:=1;
end;
 
 
procedure cMenu.View;
const
MenuList : array[1..MAX] of string = (
	' 1. Pridaj               ',
	' 2. Vymaz                ',
	' 3. Edituj               ',
	' 4. Presun na prvy       ',
	' 5. Presun na predosly   ',
	' 6. Presun na nasledovny ',
	' 7. Presun na posledny   ',
	' 8. Hladaj               ',
	' 9. Zrus hladanie        ',
	' A. Zoznam autorov       ',
	' 0. Koniec (ESC)         '
	);
var i: integer;
  mList: cMenuList;
begin
  OknoZakl;
  mList.Init;
 
  { naplnime zoznam }
  for i:=1 to MAX do
    mList.Pridaj( MenuList[i]);
 
  { nastavime kluc }
  mList.SetHighlight( MAX-Key+1 );
 
  { zobrazime menu }
  mList.MainMenu;
  while( not(mList.JePrazdna)) do
  	 mList.UkazPolozku;
 
  { zrusime alokovanu memory }
  mList.Done;
  writeln;
  writeln(' ---------------------------');
  writeln(' Pohyb sipkami, shortcut 1-8');
end;
 
 
 
{ vypise zoznam autorov }
procedure Autori;
var mAutori: cAutori;
    autor: string;
    ind: integer;
begin
  mAutori.Init;
  Knizky.MoveFirst;
 
  if( Knizky.JePrazdna = false )then
  { kazdeho autora zaradim }
  repeat
 
    ind := Knizky.Index;        { posledny index }
    autor := Knizky.Aktual^.Info.autor;
    mAutori.Pridaj( autor );
    Knizky.MoveNext;
 
  until ( ind = Knizky.Index );
 
  { teraz ich vypisem }
  mAutori.MainMenu;
  while( not(mAutori.JePrazdna)) do
  	 mAutori.UkazPolozku;
 
  mAutori.Done;
 
  { pocka na klaves }
  writeln;
  writeln(' Stlac Enter');
  readln;
end;
 
Begin
 Menu.Init;
 Menu.OknoZakl;
 Knizky.Init;
 
 Repeat
   Menu.View;
   Knizky.UkazZaznam;
   Knizky.Status;
 
   Case Readkey of
        EscPgm : Menu.Ukoncenie;
        Enter  : Case Menu.Key of
		        1  : Knizky.PridajZozbraz;  { pridaj dalsi zaznam }
		        2  : Knizky.VyradAktual;    { vymaz aktualny zaznam }
		        3  : Knizky.ZmenAktual;     { zmeni aktualny zaznam }
		        4  : Knizky.MoveFirst;	    { pohyb po zaznamoch }
		        5  : Knizky.MovePrev;
		        6  : Knizky.MoveNext;
		        7  : Knizky.MoveLast;
		        8  : Knizky.Search;	    { hladaj }
		        9  : Knizky.ZrusFilter;	    { zrus hladanie }
		       10  : Autori;		    { koniec }
		       11  : Menu.Ukoncenie;	    { koniec }
        		 End;
        #0     : Case Readkey of
                 {F1}   #59 : Menu.Help;
                 {Prev} #72 : Menu.Prev;
                 {Next} #80 : Menu.Next;
                 End;
 
		{ shortcut }
        #49    : Knizky.PridajZozbraz;	{ pridaj dalsi zaznam }
        #50    : Knizky.VyradAktual;	{ vymaz aktualny zaznam }
        #51    : Knizky.ZmenAktual;     { zmeni aktualny zaznam }
        #52    : Knizky.MoveFirst;	{ pohyb po zaznamoch }
        #53    : Knizky.MovePrev;
        #54    : Knizky.MoveNext;
        #55    : Knizky.MoveLast;
        #56    : Knizky.Search;		{ hladaj }
        #57    : Knizky.ZrusFilter;	{ zrus hladanie }
        'A'    : Autori;                { zoznm autorov }
        #48    : Menu.Ukoncenie;	{ koniec }
   End;
 Until Menu.Koniec;
 
 Menu.Done;
 Knizky.Done;
End.