program examen;
uses crt;
 type rez = record
      fio : string [100];
      him : integer;
      mat : integer;
      inf : integer;
 end;
var
    s: rez;
    f: file of rez;
    k,x,n: longint;
    menu,nu: integer;
    name: string [100];

procedure rec;
begin
 assign (f, 'D:\rez.dat');
 rewrite (f);
 writeln ('| для корректной работы программы вводите оценики по пяти бальной шкале!');
 writeln ('| Введите количество студентов:');
 readln (x);
  n:=0;
   for k:= 1 to x do begin
   clrscr;
   writeln ('| Фамилия студента: '); readln (s.fio);
   writeln ('| Введите оценки:');
   writeln ('|   Химия'); readln (s.him);
   writeln ('|   Математика'); readln (s.mat);
   writeln ('|   Информатика'); readln (s.inf);
   seek (f,n);
   write (f,s);
   n:=n+1;
   end;
  close (f);
  writeln ('| база успешно создана.');
  readln;
end;

procedure rec_dop;
begin

writeln ('| для корректной работы программы вводите оценики по пяти бальной шкале!');
 writeln ('| Введите количество добавляемых записей:');
 assign (f, 'D:\rez.dat');
 reset (f);
 seek (f, filesize(f));

 readln (x);

   for k:= 1 to x do begin
   clrscr;
   writeln ('| Фамилия студента: '); readln (s.fio);
   writeln ('| Введите оценки:');
   writeln ('|   Химия'); readln (s.him);
   writeln ('|   Математика'); readln (s.mat);
   writeln ('|   Информатика'); readln (s.inf);



   write (f,s)
   end;
  close (f);
  writeln ('| база успешно создана.');
  readln;
end;


procedure stependiya_down;
begin
 assign (f, 'D:\rez.dat'); reset (f);
 writeln ('| Данные студенты не будут получать степендию:');
  while not eof (f) do
   begin
   read (f, s);
    if (s.him < 4 ) or (s.mat < 4 ) or (s.inf < 4 )
     then writeln ('| ',s.fio);
    end;
   close (f);
   writeln ('| у данных студентов имеются 3');
  readln;
end;

procedure stependiya_sred;
begin
 assign (f, 'D:\rez.dat'); reset (f);
 writeln ('| Данные студенты будут получать обычную степендию:');
 while not eof (f) do
  begin
  read (f, s);
   if (s.him < 5) and (s.mat = 5 ) and (s.inf = 5) or
      (s.him = 5) and (s.mat < 5 ) and (s.inf = 5) or
      (s.him = 5) and (s.mat = 5 ) and (s.inf < 5)
    then writeln ('| ',s.fio);
   end;
  close (f);
  writeln ('| т.к. у них менее 50% отличных оценок.');
  readln;
end;

procedure stependiya_up;
begin
 assign (f, 'D:\rez.dat'); reset (f);
 writeln ('| Данные студенты будут получать повышенную степендию:');
 while not eof (f) do
  begin
  read (f, s);
   if (s.him = 5) and (s.mat = 5 ) and (s.inf = 5)
      then writeln ('| ',s.fio);
   end;
   close (f);
   writeln ('| т.к. у них более 50% отличных оценок. ');
  readln;
end;

procedure spisok;
begin
 assign (f, 'D:\rez.dat'); reset (f);
 writeln ('| Весь список студентов.:');
 while not eof (f) do
  begin

  read (f, s);
   if (s.him > 0)
      then writeln ('| ',s.fio, ' химия: ',s.him, ' математика: ',s.mat, ' информатика: ',s.inf);
   end;
   close (f);
   writeln ('|  ');
  readln;
end;

procedure student;
begin
 assign (f, 'D:\rez.dat'); reset (f);
 writeln ('| Введите ФИО студента:');
 readln (name);
 while not eof (f) do
  begin
   read (f, s);
   if s.fio = name
      then  writeln ('| ',s.fio, ' химия: ',s.him, ' математика: ',s.mat, ' информатика: ',s.inf);
   end;
   close (f);
   writeln ('|  ');
  readln;
end;

begin
 clrscr;

 writeln ('| ');
 writeln ('| Выберите действие: ');
 writeln ('| ');
 writeln ('| 1 - создать базу;');
 writeln ('| 2 - добавить записи;');
 writeln ('|  ');
 writeln ('| Вывести спики:');
 writeln ('| 3 - кто не будет получать степендию');
 writeln ('| 4 - кто будет получать обычную степендию');
 writeln ('| 5 - кто будет получать повышенную степендию');
 writeln ('| 6 - вывести весь список с оценками');
 writeln ('| 7 - вывести одного студента');
 writeln ('| ');
 writeln ('| 8 - выход');
 writeln ('| ');

 readln (menu);
  case menu of
  1: rec ;
  2: rec_dop;
  3: stependiya_down;
  4: stependiya_sred;
  5: stependiya_up ;
  6: spisok;
  7: student;
  8: exit;

  else writeln ('не правильный ввод! ');
  end;
 readln;
end.
