Пожалуйста, помогите исправить ошибки в программе.
Условия задачи таковы:
В деканате ВУЗа хранятся сведения о студентах: ФИО, форма обучения (очная, вечерняя, заочная), факультет, специальность, номер группы, домашний адрес и адрес родителей, дата поступления в ВУЗ, курс. Создать СУБД «Диплом». СУБД должна выдавать следующие сведения: список студентов по номеру группы; список студентов на заочной форме обучения; сведения о студенте по введенным ФИО.

Обязательные процедуры в СУБД:
1. Создание БД.
2. Вывод БД.
3. Добавление записей.
4. Корректировка сведений в БД.
5. Печать сведений из БД по запросу.
6. Функциональное меню.


Вот исходник:
Код
program sema35;program sema35;
uses crt;
const
cr=13;
upkey=72;
downkey=80;
esc=27;
cur_text=yellow;
cur_ground=red;
text=white;
ground=blue;
points: array[0..9] of string = ('Menu',
'1. Enter BD',
'2. Print BD',
'3. Add student',
'4. Correct BD',
'5. Create File',
'6. Spisok po gruppe',
'7. Studenti na zaochn',
'8. Inf abt student',
  'End Menu');
type
Diplom = record
       Fam: string[14];
       Name: string[11];
       Otch: string[12];
       Form: string[10];
       Facult: string[10];
       Spez: string[12];
       Grnumb: integer;
       Homadr: string[15];
       Padr: string[15];
       Entdate: string[13];
       Kurs:string[1];
     end;
tF = File of Diplom;
var
G : tF;
aBD : Diplom;
sym:integer;
y:byte;

Function getkey:integer;
  var
   s: integer;
  begin
   getkey:=ORD(readkey);
   if s=0 then
    getkey:=ORD(readkey);
  end;

procedure cursor(y,txt,ground:byte);
  var
   s: string;
   i: byte;
  begin
   gotoxy(1,y);
   textcolor(txt);
   textbackground(ground);
   s:=points[y];
   write(s);
  end;

Procedure menu(y:byte);
  var
   i:byte;
  begin
   window(1,1,80,25);
   textbackground(black);
   clrscr;
   window(30,10,53,17);
   textbackground(ground);
   clrscr;
   textcolor(text);
   for i:=0 to 6 do
    writeln(points[i]);
   window(30,11,53,16);
   cursor(y,cur_text,cur_ground);
  end;

Function up(y:byte):byte;
  begin
   if y > 1 then
    y:= y - 1
   else
    y:=5;
   up:=y;
  end;

Function down(y:byte):byte;
  begin
   if y < 5 then
    y:= y+1
   else
    y:=1;
   down:=y;
  end;

procedure Createf(var aG:tF);
  var
  st:string[8];
  begin
   clrscr;
   writeln('Vvedite imya faila');
   readln(st);
   assign(aG,st);
   readln;
  end;
Procedure Enterform (Var aG:tF);
Var
aBD : Diplom;
fm:string[10];
o:string[7];
z:string[9];
v:string[10];
begin
o:='ochnaya';
z:='zaochnaya';
v:='vechernaya';
Writeln ('Vvedite formu obucheniya studenta');
Writeln ('Ochnaya - vvedite "ochnaya"');
Writeln ('Zaochnaya - vvedite "zaochnaya"');
Writeln ('Vechernaya - vvedite "vechernaya"');
Readln (fm);
If fm <> o then
begin
If fm <> z then
begin
If fm <> v then
Writeln ('Oshibka pri vvode');
end;
end;
aBD:=fm;
End;
  Procedure CreateBD(var aG : tF);
  var
   aBD : Diplom;
   st : string;
   begin
   window(1,1,80,25);
   gotoxy(1,1);
   rewrite(aG);
   st := 'y';
   repeat
    clrscr;
    Writeln('Vvedite dannye po studentu');
    writeln;
    writeln('Familiya');
    readln(aBD.fam);
    writeln('Imya');
    readln(aBD.Name);
    writeln('Otchestvo');
    readln(aBD.Otch);
    Procedure Enterform(Var aG:tF);
    writeln('Fakultet');
    readln(aBD.Facult);
    writeln('Spezialnost');
    readln(aBD.spez);
    writeln('Nomer gruppi');
    readln(aBD.Grnumb);
    writeln('Domashnii adres');
    readln(aBD.Homadr);
    writeln('Adres roditelei');
    readln(aBD.Padr);
    writeln('Data postupleniya');
    readln(aBD.Entdate);
    writeln('Kurs obycheniya');
    readln(aBD.Kurs);
    writeln;
    writeln;
    writeln('Vvesty dannie ob eshe odnom stydente ? (y/n)');
    readln(st);
    write(aF,aBD);
   until st = 'n';
   close(aG);
  end;
Procedure AddBD (var aG : tF);
  var
   aBD : Diplom;
Reset (aG);
Seek (G, filesize);
    clrscr;
    Writeln('Vvedite dannye po studentu');
    writeln;
    writeln('Familiya');
    readln(aBD.fam);
    writeln('Imya');
    readln(aBD.Name);
    writeln('Otchestvo');
    readln(aBD.Otch);
    Procedure Enterform(Var aG:tF);
    writeln('Fakultet');
    readln(aBD.Facult);
    writeln('Spezialnost');
    readln(aBD.spez);
    writeln('Nomer gruppi');
    readln(aBD.Grnumb);
    writeln('Domashnii adres');
    readln(aBD.Homadr);
    writeln('Adres roditelei');
    readln(aBD.Padr);
    writeln('Data postupleniya');
    readln(aBD.Entdate);
    writeln('Kurs obycheniya');
    readln(aBD.Kurs);
    close(aG);
    end;
   Procedure PrintBD (var aG : tF);
   var
   aBD : Diplom;
   Reset (aG);
    
writeln(& #39;____________________________________________________________________________
___________');
    
writeln(& #39;|___________Familiya___________|__________Imya__________|__________Otchestvo
___________|');
     While not EOF (G) do
     Begin
     Read (G,aBD);
     writeln('|', aBD.fam:16,'|', aBD.Name:13,'|', aBD.Otch:14,'|');
    
writeln(& #39;|______________________________|________________________|___________________
___________|');
     end;
     Close (G):
     End;
procedure findByGroup(var aG : tF);
var
  kod : integer;
  flag : boolean;
  begin
  clrscr;
  reset(aF);
  Writeln('Vvedite nomer gruppi');
  readln(kod);
  flag:= true;
   writeln('____________________________Spisok studentov gruppi
N',kod,'___________________________');
     while not EOF(G) do
     begin
     read(aF,aBD);
     if aBD.Grnumb = kod then
     begin
    
writeln(& #39;____________________________________________________________________________
___________');
    
writeln(& #39;|___________Familiya___________|__________Imya__________|__________Otchestvo
___________|');
     writeln('|', aBD.fam:16,'|', aBD.Name:13,'|', aBD.Otch:14,'|');
    
writeln(& #39;|______________________________|________________________|___________________
___________|');
     readln;
     Flag:=true;
     end;
    Close (G);
   If flag then
   writeln(‘Studentov iz gruppi’,kod,’ne naideno’);
   end;
  
procedure ZaochGr (var aG : tF);
  var
   flag : boolean;
  begin
   clrscr;
  reset(aF);
  flag:= true;
   writeln('____________________________Spisok studentov na zaochnoi forme
obucheniya___________________________');
     while not EOF(G) do
     begin
     read(aF,aBD);
     if aBD.Form = 'zaochnaya' then
     begin
    
writeln(& #39;____________________________________________________________________________
___________');
    
writeln(& #39;|___________Familiya___________|__________Imya__________|__________Otchestvo
___________|');
     writeln('|', aBD.fam:16,'|', aBD.Name:13,'|', aBD.Otch:14,'|');
    
writeln(& #39;|______________________________|________________________|___________________
___________|');
     readln;
     Flag:=true;
     end;
    Close (G);
   If flag then
   writeln('Studentov na zaochnoi forme obucheniya ne naideno');
   end;
  
Procedure Inf_FIO(var aG : tF);
   var
   flag : boolean;
   stfam : string [16];
   stname : string[15];
   stotch : string [13];  
   begin
  clrscr;
  reset(aF);
  Writeln('Vvedite familiu studenta');
  readln(stfam);
  Writeln('Vvedite imya studenta');
  readln(stname);
  Writeln('Vvedite otchestvo studenta');
  readln(stotch);
  flag:= true;
   writeln('____________________________’Informacia o
studente’___________________________');
     while not EOF(G) do
     begin
     read(aF,aBD);
     if (aBD.fam = stfam) and (aBD.Name = stname)and (aBD.Otch = stotch) then
     begin
    
writeln(& #39;____________________________________________________________________________
___________');
    
writeln('|___________Gruppa___________|__________Kurs__________|__________Forma
obucheniya___________|');
     writeln('|', aBD.Grnumb:5,'|', aBD.Kurs:3,'|', aBD.Form:12,'|');
    
writeln(& #39;|______________________________|________________________|___________________
___________|');
     readln;
     Flag:=true;
     end;
    Close (G);
   If flag then
   writeln('Studentov s dannim FIO ne naideno');
   end;
  procedure call(y:byte);
  begin
   window(1,1,80,25);
   textbackground(black);
   clrscr;
   textcolor(white);
   gotoxy(20,5);
   Case y of
    1: Createf (G);
    2: Enterform (G);
    4: CreateBD(G);
    3: Procedure AddBD (G);
    5: PrintBD (G);
    6: FindByGroup (G);
    7: ZaochGr (G);
    8: Inf_FIO (G);
    end;  
  delay(6000);
  end;
begin
clrscr;
y:=1;
menu(y);
repeat
  sym := getkey;
  case sym of
    cr: begin
         Call(y);
         menu(y);
        end;
upkey: begin
         cursor(y,text,ground);
         y:=up(y);
         cursor(y,cur_text,cur_ground);
        end;
downkey:begin
         cursor(y,text,ground);
         y:=down(y);
         cursor(y,cur_text,cur_ground);
        end;
    esc:;
  end;
until sym = esc;
end.