Запись содержит данные о студенте: фамилию и инициалы, номер курса, номер группы, кол-во часов, пропущенных по уважительной и неуважительной причине

Для каждого студента заданной группы определить суммарное число пропущенных часов и выдать список студентов этой группы, пропустивших более 30 часов.

code: #pascal
uses crt; 
const n=50; 
       lim=30; 
type student=record 
       fio:string; 
       kurs:byte; 
       group,h_uv,h:integer; 
      end; 
var arr:array[1..n] of student; 
     k,count:byte; 
 
procedure AddRec; 
var i:byte; 
begin 
  inc(Count); 
  if Count>n then 
   begin 
    writeln('Nevozmozhno dobavit zapis!'); 
    readkey; 
    exit; 
   end; 
  writeln('Record #',Count); 
  with arr[Count] do 
   begin 
    write('FIO: '); 
    readln(fio); 
    write('Kurs: '); 
    readln(kurs); 
    write('Gruppa: '); 
    readln(group); 
    writeln('Propushenno chasov:'); 
    write(' - po uvazhitelnoi prichine: '); 
    readln(h_uv); 
    write(' - bez uvazhitelnoy prichiny: '); 
    readln(h); 
   end; 
  writeln('Ok!'); 
end; 
 
procedure WriteRec(nomrec:byte); 
begin 
  writeln('Record #',nomrec); 
  with arr[nomrec] do 
   begin 
    writeln('FIO: ',fio); 
    writeln('Kurs: ',kurs); 
    writeln('Gruppa: ',group); 
    writeln('Propushenno chasov:'); 
    writeln(' - po uvazhitelnoi prichine: ',h_uv); 
    writeln(' - bez uvazhitelnoy prichiny: ',h); 
   end; 
  writeln('-'); 
end; 
 
procedure WriteAllRec; 
var i:byte; 
begin 
  for i:=1 to Count do 
  WriteRec(i); 
  writeln('Records: ',Count); 
end; 
 
function AllHours(nomrec:byte):integer; 
begin 
  with arr[nomrec] do 
  AllHours:=h_uv+h; 
end; 
 
procedure BadStudentsList(nomgroup:byte); 
var i,kol:byte; 
begin 
  kol:=0; 
  for i:=1 to Count do 
  if (arr[i].group=nomgroup) and 
     (AllHours(i)>lim) then 
   begin 
    inc(kol); 
    WriteRec(i); 
    writeln(' - vsego chasov: ',AllHours(i)); 
    writeln; 
   end; 
  if kol>0 then writeln('Records: ',kol) 
  else writeln('V zadannoi gruppe net takih studentov!'); 
end; 
 
function Menu:byte; 
var ch:char; 
begin 
  ClrScr; 
  writeln('1 - dobavit zapis'); 
  writeln('2 - prosmotr vseh zapisei'); 
  writeln('3 - prosmotr zadannoi zapisi'); 
  writeln('4 - spisok studentov, propustivshih >',lim,' chasov'); 
  writeln; 
  writeln('Esc - Exit'); 
  writeln; 
  write('-> '); 
  ch:=readkey; 
  if not(ch in ['1'..'4',#27]) then 
  writeln('Error!') 
  else 
  case ch of 
   '1':Menu:=1; 
   '2':Menu:=2; 
   '3':Menu:=3; 
   '4':Menu:=4; 
   #27:Halt; 
  end; 
end; 
 
begin 
  Count:=0; 
  repeat 
   case Menu of 
    1:begin 
       ClrScr; 
       AddRec; 
      end; 
    2:begin 
       ClrScr; 
       if Count>0 then WriteAllRec 
       else writeln('Net ne odnoi zapisi!'); 
       readkey; 
      end; 
    3:begin 
       if Count>0 then 
        begin 
         repeat 
          ClrScr; 
          write('Zadaite nomer zapisi: '); 
          readln(k); 
          if (k<=0) or (k>Count) then 
           begin 
            writeln('Error!'); 
            readkey; 
           end; 
         until (k>0) and (k<=Count); 
         WriteRec(k); 
        end 
       else 
        begin 
         ClrScr; 
         writeln('Net ne odnoi zapisi!'); 
        end; 
       readkey; 
      end; 
    4:begin 
       ClrScr; 
       if Count>0 then 
        begin 
         write('Zadaite nomer gruppy: '); 
         readln(k); 
         BadStudentsList(k); 
        end 
       else writeln('Net ne odnoi zapisi!'); 
       readkey; 
      end; 
   end; 
  until Count>n; 
end.

автор: delpas

Поделиться:

Похожие статьи: