12492

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

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

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

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

Русский

2013-04-29

657.5 KB

11 чел.

Отчет

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


 

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

15453. Утворення Київської Русі. Основні етапи її розвитку 73.5 KB
  Утворення Київської Русі. Основні етапи її розвитку. Протягом VIII IX ст. словяни розселилися на території Східної Європи. Найбільшими словянськими племенами були: поляни що жили на Середній Наддніпрянщині сіверяни на р. Десна вятичі на Оці на заході від полян дрегов
15454. Соціально-економічний ї політичний устрій Київської Русі 29.5 KB
  Соціально-економічний ї політичний устрій Київської Русі Київська Русь започаткувала феодальний період в історії народів Східної Європи які не знали рабовласницької формації. Феодалізм зароджувався у них на основі первіснообщинного ладу. Головною особливістю ран...
15455. Причини та наслідки занепаду Київської Руcі 32 KB
  Причини та наслідки занепаду Київської Руcі. XIIXIII століття на Русі увійшли в історію як період феодальної роздробленості. По смерті великого князя київського Мстислава сина Володимира Мономаха Київська Русь розпадається на багато князівств і земель. Поза сум...
15456. Формування Галицько-Волинського князівства. Суспільні відносини в державі 39.5 KB
  Формування ГалицькоВолинського князівства. Суспільні відносини в державі. Серед руських князівств найбільшими були РостовоСуздальське ПолоцькоМінське і ГалицькоВолинське князівство. Київ став стольним містом Київської землі яка займала територію Середнього...
15457. Діяльність князів Романа і Данила. Розквіт Галицько-Волинського князівства 31.5 KB
  Діяльність князів Романа і Данила. Розквіт ГалицькоВолинського князівства. Обєднання Галичини й Волині Правління Романа Мстиславича Скориставшись смертю у 1199 р. останнього представника династії Ростиславичів Володимира Ярославича Роман Мстиславич спи...
15458. Зовнішня політика та значення Галицько-Волинської держави 40.5 KB
  Зовнішня політика та значення ГалицькоВолинської держави. По смерті Ярослава Мудрого з початком феодальної роздробленості Галицьке князівство відокремилося від Києва. Першими галицькими князями були нащадки онуків Ярослава Мудрого Ростиславичі а на Волині Мстисла...
15459. Шляхи та причини входження українських земель до Великого князівства Литовського, мовний та культурно-релігійний склад держави 40.5 KB
  Шляхи та причини входження українських земель до Великого князівства Литовського мовний та культурнорелігійний склад держави. В 40х роках ХІV ст. українські землі зазнали розчленування. Після війни 13511352 рр. між Польщею і Литвою Галичина залишилась під владою Польщі а Бе...
15460. Кревська унія 37.5 KB
  Кревська унія. У XIV ст. українські землі роздроблені на окремі князівства й ослаблені зопотоординським ігом підпали під владу кількох феодальних держав. Після смерті 1340 р. галицьковолинського князя Юрія II Польща й Угорщина напали на Галичину яка внаслідок довгої та
15461. Українські землі в складі Речі Посполитої. Люблінська унія та стан справ в українських землях після унії 35 KB
  Українські землі в складі Речі Посполитої. Люблінська унія та стан справ в українських землях після унії. Польські феодали почали наступ на українські землі відразу після монголотатарської навали. Особливо активізувався цей процес у другій половині XVI першій чверт...