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 Вывод списка после обработки.


 

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

34690. Предложение. Закон предложения. Кривая предложения 17.42 KB
  Закон предложения. Кривая предложения. Предложение и величина предложения это разные понятия. Величина предложения зависит от цены.
34691. Рыночное равновесие. Излишек и дефицит. Реакция рынка на изменение спроса и предложения 413.88 KB
  Реакция рынка на изменение спроса и предложения Взаимодействие спроса и предложения на рынке совершенной конкуренции ведет к установлению рыночного равновесия. Графически рыночное равновесие отображается точкой равновесия Е точка пересечения кривых спроса и предложения где Pравн. Этот график называют ножницами Маршалла в честь математика и экономиста Альфреда Маршалла который работал над теорией спроса и предложения. В этих условиях производители будут конкурировать друг с другом предлагая заплатить более высокую цену что...
34692. Эластичность спроса по цене. Факторы, влияющие на ценовую эластичность спроса 26.19 KB
  Эластичность спроса по цене. Факторы влияющие на ценовую эластичность спроса. По закону спроса мы знаем что величина спроса зависит от цены: чем выше цена товара тем меньше величина спроса на него и наоборот чем ниже цена тем больше величина спроса. Мера того насколько изменяется величина спроса относительно изменения цены называется эластичностью спроса по цене.
34693. Эластичность спроса по доходу. Коэффициент эластичности спроса по доходу 247.26 KB
  Эластичность спроса по доходу. Коэффициент эластичности спроса по доходу. Эластичность спроса зависит не только цены товара но и от доходов потребителей. Мера того насколько изменяется величина спроса относительно изменения величины дохода покупателя называется эластичностью спроса по доходу.
34694. Перекрестная эластичность спроса по цене. Коэффициент перекрестной эластичности спроса по цене 13.62 KB
  Перекрестная эластичность спроса по цене. Коэффициент перекрестной эластичности спроса по цене. Мера того насколько изменяется величина спроса на данный товар или услугу относительно изменения цены другого товара или услуги называется перекрестной эластичностью спроса по цене. Для измерения перекрестной эластичности спроса по цене используют коэффициент перекрестной эластичности который рассчитывается по формуле: где изменение величины спроса товара в изменение цены товара а.
34695. Эластичность предложения по цене. Факторы, влияющие на эластичность предложения 21.08 KB
  Эластичность предложения по цене. Факторы влияющие на эластичность предложения. По закону предложения мы знаем что величина предложения зависит от цены. Закон предложения гласит: чем выше цена товара тем больше величина предложения на него и наоборот чем ниже цена товара тем меньше величина предложения на него.
34696. Фирма и индивидуальные предприниматели. Организационно-правовые формы фирмы 20.46 KB
  Чем отличаются друг от друга хозяйственные товарищества и общества Вопервых товарищество это группа лиц которые принимают участие в работе фирмы а общество объединение капиталов его участники могут в фирме и не работать. К хозяйственным обществам относят общество с ограниченной ответственностью и общество с дополнительной ответственностью. Общество с ограниченной ответственностью имеет уставной капитал который разделен на доли. Общество с дополнительной ответственностью отличается от общества с ограниченной ответственностью...
34697. Общие, средние и предельные издержки фирмы 17.64 KB
  Общие средние и предельные издержки фирмы. Экономисты различают общие средние и предельные издержки. Общие издержки ТC это издержки всего выпуска продукта фирмы. Общие издержки делятся на постоянные и переменные издержки.
34698. Типы экономических систем. Традиционная экономическая система 19.1 KB
  Традиционная экономическая система. Экономическая наука выделяет четыре основных типа экономических систем: традиционная командная или административноплановая рыночная смешанная. Самой древней из экономических систем является традиционная система. Традиционная экономическая система способ организации экономической жизни при котором земля и капитал находятся в общем владении племени а ограниченные ресурсы распределяются в соответствии с длительно существующими традициями.