12492

Составить список учебной группы, включающей n человек

Лабораторная работа

Информатика, кибернетика и программирование

Отчет по лабораторной работе №3 по дисциплине Языки программирования Задание: Составить список учебной группы включающей n человек. Для каждого учащегося указать фамилию дату рождения день месяц год год поступления в ВУЗ экзаменационные оценки за первые два ...

Русский

2013-04-29

657.5 KB

13 чел.

Отчет

по лабораторной работе №3

по дисциплине

Языки программирования

Задание:

Составить список учебной группы, включающей n человек. Для каждого учащегося указать фамилию, дату рождения (день, месяц, год), год поступления в ВУЗ, экзаменационные оценки за первые два года обучения (2 года по 2 семестра по 4 экзамена в семестре).

Составить программу, которая обеспечивает ввод полученной информации, распечатку её в виде таблицы, а также распечатку информации согласно конкретному варианту. Список студентов в программе хранить в виде односвязного списка. Ввод, вывод и обработку списка группы реализовать в виде процедур. Все процедуры и функции работы с односвязным списком поместить в отдельный программный модуль.

В отчет поместить исходные данные и результат обработки этих данных составленной программой.

Примечание1: Обеспечить контроль вводимых пользователем данных. Т.е. фамилия начинается с буквы, дата рождения является реальной датой в диапазоне от 1.01.1980 до 31.12.1990, год поступления в ВУЗ=[2000-2010], оценки=[2,3,4,5].

Примечание2: Для облегчения отладки программы, список группы можно хранить в типизированном файле. Тогда программа будет по выбору пользователя реализовывать следующие действия: ввод списка студентов, вывод списка студентов на экран, запись списка в файл, чтение списка из файла, обработка списка.

Вариант №10:

Удалить студентов, получивших в последнюю сессию все оценки 5.


Текст программы на языке «Pascal»:

Часть 1:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,

 EditBtn, StdCtrls, Spin, MaskEdit, Buttons, LCLType, DateUtils;

type

 student=record

   name:string[25];

   birthday:TDate;

   vuz:integer;

   mark:array[1..16] of byte;

 end;

 { TForm1 }

 TForm1 = class(TForm)

   bbSave: TBitBtn;

   bbClose: TBitBtn;

   deBirthDay: TDateEdit;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   lbNumber: TLabel;

   lbTitle: TLabel;

   leName: TLabeledEdit;

   meMark: TMaskEdit;

   seVuz: TSpinEdit;

   procedure bbCloseClick(Sender: TObject);

   procedure bbSaveClick(Sender: TObject);

   procedure FormClick(Sender: TObject);

   procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);

   procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);

   procedure FormCreate(Sender: TObject);

   procedure Label2Click(Sender: TObject);

   procedure lbNumberClick(Sender: TObject);

   procedure seVuzChange(Sender: TObject);

 private

   { private declarations }

 public

   { public declarations }

   f:file of student;

   k:integer;

 end;

var

 Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Label2Click(Sender: TObject);

begin

end;

procedure TForm1.lbNumberClick(Sender: TObject);

begin

end;

procedure TForm1.bbSaveClick(Sender: TObject);

var

 data:student;

 i:integer;

 lat,rus,rus_m,name_ok,mark_ok:boolean;

begin

 data.Name:=leName.Text;

 data.BirthDay:=deBirthDay.Date;

 data.Vuz:=seVuz.Value;

 if length(meMark.Text)<16 then

   begin

   ShowMessage('Внимание! Недостаточное количество оценок.');

   deBirthDay.SetFocus;

   exit;

   end;

 for i:=1 to 16 do

   data.mark[i]:=StrToInt(meMark.Text[i]);

 lat:=   (length(data.name)>=1) and

         (data.name[1] in ['A'..'Z','a'..'z']);

 rus:=   (length(data.name)>=2) and

         (ord(data.name[1])=208) and

         (ord(data.name[2]) in [144..175]);

 rus_m:= ((length(data.name)>=2) and

         (ord(data.name[1])=208) and

         (ord(data.name[2]) in [176..191])) or

         ((length(data.name)>=2) and

         (ord(data.name[1])=209) and

         (ord(data.name[2]) in [128..143]));

 name_ok:=lat or rus or rus_m;

 if not name_ok then

    begin

      ShowMessage('Внимание! Фамилия должна начинаться с буквы.');

      leName.SetFocus;

      exit;

    end;

   if (YearOf(data.BirthDay)<1980)

   or (YearOf(data.BirthDay)>1995) then

    begin

      ShowMessage('Внимание! Год рождения указан неверно.');

      deBirthDay.SetFocus;

      exit;

    end;

 mark_ok:=true;

   for i:=1 to 16 do

     begin

     if (data.mark[i]>5) or

        (data.mark[i]<2) then

         mark_ok:=false;

     end;

  if not mark_ok then

    begin

      ShowMessage('Внимание! Оценки указаны неверно.');

      meMark.SetFocus;

      exit;

    end;

 write(f,data);

 lbNumber.Caption:=IntToStr(k);

 inc(k);

end;

procedure TForm1.FormClick(Sender: TObject);

begin

end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);

begin

 closefile(f);

end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);

begin

 CanClose:= Application.MessageBox('Вы уверены?',

            'Внимание!!!',MB_YESNOCANCEL)

            =IDYES;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 assignfile(f,'students.dat');

 rewrite(f);

 k:=1;

end;

procedure TForm1.bbCloseClick(Sender: TObject);

begin

end;

procedure TForm1.seVuzChange(Sender: TObject);

begin

end;

end.


Часть 2:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,

 Buttons, LazUTF8;

type

 student=record

   name:string[25];

   birthday:TDate;

   vuz:integer;

   mark:array[1..16] of byte;

 end;

 link=^element;

 element = record

   data:student;

   next:link;

 end;

 { TForm1 }

 TForm1 = class(TForm)

   bbPrintAll: TBitBtn;

   bbVariant: TBitBtn;

   bbClose: TBitBtn;

   mmOutput: TMemo;

   procedure bbPrintAllClick(Sender: TObject);

   procedure bbVariantClick(Sender: TObject);

   procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);

   procedure FormCreate(Sender: TObject);

 private

   { private declarations }

 public

   { public declarations }

 end;

var

 Form1: TForm1;

 first: link;

implementation

{$R *.lfm}

{ TForm1 }

procedure AddFirst(A:link);

begin

 A^.next := first;

 first := A;

end;

procedure AddAfter(A, old:link);

begin

 A^.next := old^.next;

 old^.next := A;

end;

procedure DelFirst;

var

 temp:link;

begin

 temp:=first;

 first:=first^.next;

 Dispose(temp);

end;

procedure DelAfter(old:link);

var

 temp:link;

begin

 temp:=old^.next;

 old^.next:=old^.next^.next;

 Dispose(temp);

end;

Procedure PrintAll(mmOut:TMemo);

var

  a:link;

  i,j:integer;

  str:string;

begin

  mmOut.Lines.Add('№ Ф.И.О.                  Д.рожд.   ВУЗ  Оценки');

  a:=first;

  i:=1;

   while a<>nil do

     begin

       str:=IntToStr(i);

       str:=str+' '+a^.data.name;

     while UTF8Length(str)<25 do str:=str+' ';

       str:=str+DateToStr(a^.data.birthday)+' ';

       str:=str+IntToStr(a^.data.vuz)+' ';

     for j:=1 to 16 do

       str:=str+IntToStr(a^.data.mark[j]);

   mmOut.Lines.Add(str);

   a:=a^.next;

   inc(i);

 end;

end;

procedure TForm1.FormCreate(Sender: TObject);

var

  f:file of student;

  p:link;

begin

  first:=nil;

  AssignFile(f,'students.dat');

  ReSet(f);

    while not (eof(f)) do

      begin

        p:=new(link);

        read(f,p^.data);

        AddFirst(p);

      end;

  CloseFile(f);

end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);

begin

 while first<>nil do

   DelFirst;

end;

procedure TForm1.bbPrintAllClick(Sender: TObject);

begin

 PrintAll(mmOutput);

end;

procedure TForm1.bbVariantClick(Sender: TObject);

var

  curr,next_student,pred:link;

  k,j:integer;

begin

  curr:=first;

  pred:=first;

    while curr<>nil do

    begin

      next_student:=curr^.next;

      k:=0;

      for j:=1 to 16 do

      if curr^.data.mark[j]=5 then

         k:=k+1;

      if k=16 then

      begin

        if curr=first then

        DelFirst

        else

        DelAfter(pred);

      end

    else

      pred:=curr;

      curr:=next_student;

  end;

end;

end.


Форма:

Часть 1:

Рис. 1 Создание списка группы.


Часть 2:

Рис. 2 Вывод списка группы.

Рис. 2 Вывод списка после обработки.


 

А также другие работы, которые могут Вас заинтересовать

76748. Отечественные анатомы XX века 185.74 KB
  Открылись новые кафедры анатомии человека лаборатории и институты морфологии. Большую роль в обмене опытом и консолидации морфологов сыграл журнал Архив анатомии гистологии эмбриологии основанный в 1916 г. Целая плеяда выдающихся российских ученыханатомов заняла лидерские позиции и сделала огромный вклад в развитие анатомии советского периода.
76749. Индивидуальная изменчивость органов 186.7 KB
  При этом индивидуальный соматотип и характер реактивности окончательно складываются в пубертатном периоде что по В. Возрастная периодизация человека Внутриутробное антенатальное развитие. Зародышевый эмбриональный период 02 месяца: период оплодотворения дробления и образования бластоцисты имплантация в стенку матки первая неделя 67 дней; период гаструляции и формирования трех первичных зародышевых листков: экто энто и мезодермы 24я недели; период обособления тела зародыша с развитием органов и тканей и образованием...
76750. Кость как орган: ее развитие, строение, рост 186.52 KB
  Как орган кость обеспечена сосудами и нервами находящимися в надкостнице а вглубь кости проникающими через питательные отверстия. На 68 неделе эмбрионального развития из соединительной ткани начинает формироваться костная например в костях свода черепа такие кости называют первичными покровными. При хрящевом остеогенезе в соединительной ткани появляется хрящ а потом в нем развивается костная ткань что характерно для большинства костей скелета и такие кости называют вторичными. Разрастание костной ткани в хряще осуществляется...
76751. Позвонки: их строение в различных отделах 191.33 KB
  Отростки processi: поперечные: правый и левый processus trnsversus для прикрепления мышц и связок; суставные верхние и суставные нижние processus rticulre superiores et inferiores для образования межпозвоночных суставов; остистый processus spinlis для прикрепления связок и мышц. Атлант tls первыйшейный позвонок отличительные признаки передняя и задняя дуга rcus nterior et rcus posterior для прикрепления мембран и связок; борозды позвоночной артерии на задней дуге сверху sulci . vertebrle; передний и задний...
76752. Позвоночный столб в целом 188.39 KB
  Грудной отдел 12 позвонков наличие реберных ямок на телах для суставов головки ребра и суставных поверхностей на поперечных отростках для ребернопоперечных суставов Поясничный отдел 5 позвонков массивность тела специфическое положение отростков сосцевидные бугорки на верхних суставных отростках. Величина изгибов меняется в зависимости от массы тела и его отдельных частей физической нагрузки мышечного напряжения возраста пола наконец от положения тела при вертикальном она увеличивается горизонтальном уменьшается. С...
76753. Ребра и грудина. Грудная клетка в целом 184.3 KB
  На позвоночном конце ребра находятся: головка с гребнем у IIX ребер и верхней нижней суставными поверхностями покрытыми гиалиновым хрящом у I XI и XII ребер гребень отсутствует; шейка переходящая углом в тело; на переходе бугорок на 10 верхних ребрах с двумя возвышениями: медиальнонижнее имеет суставную ямку для сочленения с поперечным отростком позвонка к другому возвышению прикрепляется связка; последние два ребра бугорка не имеют у первого ребра бугорок совпадает с вершиной угла. Тело ребра изогнутое у позвоночного конца...
76754. Развитие черепа в онтогенезе 191.91 KB
  Кости лицевого черепа развиваются на основе висцеральных дуг которых закладывается 5 пар а между ними 5 пар висцеральных карманов старое название жаберные дуги и жаберные карманы. Висцеральные дуги для лицевого черепа. Ядра точки окостенения подразделяются на: первичные 4150 появляющиеся во внутриутробном периоде в костях мозгового черепа их больше всего начало появления 78 недели к рождению они образуют 20 крупных очагов оссификации; вторичные появляющиеся после рождения; в больших костях черепа их мало но между костями в...
76755. Варианты и аномалии костей черепа 181.64 KB
  Теменные кости выраженность теменных бугров особенно у женщин; появление межтеменной кости. Затылочная кость наличие поперечного шва отделяющего верхнюю часть чешуи и образование вставочной дополнительной кости; присутствие более мелких добавочных костей часто расположенных в швах кости швов; значительная выраженность затылочных выступов; уплощение чешуи слабая выраженность борозд или наоборот увеличение изогнутости чешуи и углубление борозд; разнообразные формы большого отверстия костных валиков вокруг внутреннего его края;...
76756. Первая и вторая висцеральные дуги 187.99 KB
  Развитие лицевого (висцерального) черепа определяется мозгом и краниальным (глоточным) отделом первичной кишки, в котором на боковых стенках между висцеральными (жаберными) карманами появляются хрящевые висцеральные (жаберные) дуги, но особое значение для черепа имеют первые две.