Ohledně grafiky: jasně, Graph. Ale v ní jsou jenom funkce jako start a konec grafického režimu, vyplnění celé obrazovky nějakou barvou, kreslení bodů, čar, obdélníků, kruhů, elips a podobně a psaní textu libovolným fontem a velikostí. Není tam ovšem pár drobností jako třeba zadávání textu z klávesnice (nějaká obdoba Readln), blikající kurzor a tak. To by sis všechno musel dotvořit sám: čtení kláves přes Readkey, vypsání znaku na obrazovku, při zmáčknutí Backspacu přemáznutí posledního znaku obdélníkem v barvě pozadí a posun kurzoru zpátky, vykreslení kurzoru čárou nebo podtržítkem atd.. Kdybys chtěl, mám na tyhle věci hotovou sadu jednotek, ale je to v podstatě jenom emulace windowsí grafiky v TP - to v Delphi uděláš rovnou a prakticky bez práce.
A teď ke tvému zdrojáku.
Za goto tě neukamenuju, jenom naznačím, jak se dá pohodlně obejít bez něj:
var volba:(zacatek,konec,menu,napoveda,deklarace,pridavani,vypis);
...
volba:=zacatek;
repeat
case volba of
zacatek:begin
...sem dej to, co mas za navestim volba_zacatek, zaver predelej na:
case vyber of 'k','K':volba:=konec;
'n','N':volba:=napoveda;
else volba:=menu;
end;
end;
menu:begin
...to co mas v uvodu, nakonec tohle:
case vyber of 'z','Z':volba:=deklarace;
'p','P':volba:=pridavani;
...atd...
end;
end;
...atd...
until volba=konec;
Plus ještě doporučuji lépe využívat funkci Upcase, abys nemusel testovat velkou i malou variantu zadaného písmena.
Typ TRadky a proměnnou Radky poněkud nechápu. Co s polem třiceti čísel? Kdybys do toho chtěl ukládat obsah databáze, muselo by to být pole array[0..hodně] of string[přiměřeně]. K jednotlivým buňkám bys pak přistupoval přes jeden index, který by se vypočítal jako řádek*počet_sloupců+sloupec. To by předpokládalo počítat řádky a sloupce od nuly, jinak by se to muselo upravit na (řádek-1)*počet_sloupců+(sloupec-1). Ale dokud máš data jenom v souboru, tohle nebudeš potřebovat.
Procedura VymazatTabulku nebude fungovat, protože proměnnou typu text nemůžeš jen tak vypsat na obrazovku - je to blok informací o souboru určený pro operační systém, ne pro lidi, takže není čitelný. Správě by poslední příkaz měl být writeln('Soubor tabulka.txt byl smazan!');.
Zacatek: z praktického hlediska nevidím důvod, proč dělat takovéhle "předmenu", když by se odkaz na nápovědu, informace o verzi atd. daly zabudovat do hlavního menu o kousek dál. Ale chyba to není. Jenom to návěští volba_menu je tu dost nevhodné, protože když sem skočíš odjinud, nebudeš mít vypsanou nabídku kláves, které máš zmáčknout.
Uvod: tady už ses do těch skoků a cyklů pěkně zamotal. Když se zmáčkne Esc, program neskončí (jak každý uživatel očekává), ale počká na stisk Enteru (jedno zbloudilé readln;) a pak pokračuje odstavcem jump_deklarace. Až to všechno předěláš na cyklus s casem uvnitř, tyhle problémy zmizí.
Deklarace: já osobně bych si to rozdělil na dvě samostatné části: zadávání z klávesnice do proměnné Databaz a následné kompletní uložení této proměnné do souboru. Ale je to jenom věc vkusu, fungovat to bude i takhle. Zbytek víceméně v pořádku, jenom když už si necháš zadat název databáze, měl bys ho taky uložit, aby příště tabulka nebyla bezejmenná. Nebo ještě lépe: zadané jméno tabulky použít jako jméno souborů pro databázi. Tím bys mohl mít několik databází zároveň. Uživatel by třeba zadal jméno "houby" a ty bys definici tabulky uložil do souboru například "houby.tab" a data do "houby.dat" (koncovky samozřejmě libovolné, jenom je potřeba nějak odlišit definici od dat).
Pridavani: vyhoď příkaz rewrite(s);, jinak si obsah souboru pokaždé zase smažeš. Komentář "generuje dotaz pomoci konstant" nechápu, ale to nevadí, na program nemá vliv. Zbytek vypadá v pořádku.
Vypis: tady je to nějaké pomotané. Definici tabulky (proměnná Databaz) máš přece hotovou, tak proč ji znovu načítáš? Načtení bude potřeba oddělit a hodit pod samostatný příkaz menu "načtení definice tabulky" (takže budeš mít dvě možnosti: buď načíst existující definici nebo vytvořit novou). Potom je ve výpisu potenciální problém: zarovnáváš to na šířku 10, ale jména mají deklarovanou délku 50. Takže když někdo zadá jméno delší než 10 znaků, zarovnání ti rozhodí. Takže uprav obě čísla na stejnou hodnotu, třeba 25 (ty se vejdou na obrazovku tři vedle sebe; kdyby jich bylo víc, musel bys vyřešit scrollování do stran). Podobně pro délku dat. Potom zruš to zbloudilé readln; hned za výpisem sloupců. Čtení a zobrazování dat je v pořádku.