Получать информацию о служащих фамилия которого введена с клавиатуры

КРИС31

Имеется список служащих,в котором указаны фамилия и инициалы,занимаемая должность,год поступления на работу и оклад.Составить программу которая позволяет а)вводить список б)Выводить список отсортированных по окладу в)получать информацию о служащих фамилия которого введена с клавиатуры г)получить количество служащих работающих более 10 лет
1 ответ

КРИС31

uses crt;
const nmax=20;
      tg=2012;
      line='----------------------------------------------------------------';
      sha1='|    Фамилия,    |      Должность      |    Год    |   Оклад   |';
      sha2='|    инициалы    |                     |поступления|           |';
 
type sotrudniki = record
     fam:  string[15];
     dol: string[20];
     year: integer;
     okl: real;
     end;
     mas=array [1..nmax] of sotrudniki;
 
var  s:mas;
     buf: sotrudniki;
     n,r:byte;
 
procedure Vvod(var r: byte; var ss: mas);
var i: byte;
begin
clrscr;
write('Количество сотрудников, не более ',nmax,' n=');
readln(r);
writeln('Внесите данные о сотрудниках: ');
for i:=1 to r do
    with ss[i] do
         begin
         write('ФИO ',i,' сотрудника: '); readln(fam);
         write('Должность: '); readln(dol);
         repeat
         write('Год поступления: '); readln(year);
         until (year>1950) and (year<=tg);
         write('Оклад: '); readln(okl);
         end;
writeln('Данные занесены');
writeln('Нажмите Enter чтобы продолжить');
readln;
end;
 
procedure Sort (r: byte; var ss: mas);
var i,j: byte;
begin
j:=0;
while j<=r do
      begin
      for i:=1 to r-1 do
          if ss[i].okl<ss[i+1].okl then
             begin
             buf:=ss[i];
             ss[i]:=ss[i+1];
             ss[i+1]:=buf;
             end;
      inc(j);
      end;
end;
 
procedure Vyvod(r: byte; ss: mas);
var i: byte;
begin
clrscr;
writeln(line);
writeln(sha1);
writeln(sha2);
writeln(line);
for i:=1 to r do
    with s[i] do
    begin
         writeln('|',fam:15,'|':2,dol:20,'|':2,year:8,'|':4,okl:9:1,'|':3);
         writeln(line);
    end;
writeln('');
writeln('Нажмите Enter чтобы продолжить');
readln;
end;
 
procedure VyvodF(r: byte; ss: mas);
var i: byte;
    z: string;
begin
clrscr;
write('Укажите фамилию, инициалы для поиска: '); readln(z);
for i:=1 to r do
    with ss[i] do
         if z=fam then
            begin
            writeln('Фамилия: ',fam);
            writeln('Должность: ',dol);
            writeln('Год поступления на работу: ',year);
            writeln('Оклад ',okl:0:1);
            end;
writeln('');
writeln('Нажмите Enter чтобы продолжить');
readln;
end;
 
procedure Vyvod10(r: byte; ss: mas);
var i,k: byte;
begin
clrscr; k:=0;
for i:=1 to r do
    with s[i] do
         if tg-year>10 then
            begin
            inc(k);
            if k=1 then
               begin
               writeln(line);
               writeln(sha1);
               writeln(sha2);
               writeln(line);
               end;
            writeln('|',fam:15,'|':2,dol:20,'|':2,year:8,'|':4,okl:9:1,'|':3);
            writeln(line);
            end;
if k=0 then writeln('нет сотрудников со стажем более 10 лет') else writeln('Всего ',k);
writeln('');
writeln('Нажмите Enter чтобы продолжить');
readln;
end;
 
 
begin
r:=1;
repeat
writeln('0-завершение работы');
writeln('1-ввод данных');
writeln('2-вывод несортированных данных');
writeln('3-вывод сортированных данных');
writeln('4-вывод информации по фамилии');
writeln('5-вывод информации о служащих, работающих более 10 лет');
readln(r);
case r of
     1: Vvod(n,s);
     2: Vyvod(n,s);
     3:
       begin
       Sort (n,s);
       Vyvod(n,s);
       end;
     4: VyvodF(n,s);
     5: Vyvod10(n,s);
     else r:=0;
     end;
until r=0;
readln;
end.