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


 

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

52382. Розробка бінарного уроку на тему: «Вплив податкової системи на формування державного бюджету» 534 KB
  Згідно даних динаміки доходів Держбюджету України за 2003-2010 роки найбільшим джерелом доходів держбюджету є податок на додану вартість. Другим за величиною джерелом надходжень до бюджету є податок на прибуток підприємств. Вплив держбюджету на розвиток економіки Підприємство сплачує до дохідної частини держбюджету три основних види податків: акцизний збір податок на додану вартість податок на прибуток. Є ціле розмаїття податків про яких багато хто навіть і не чули 1 ведучий – Податок на...
52383. Сімейний бюджет. Доходи і витрати сім’ї 138 KB
  Доходи і витрати сім’ї. Мета: поглибити знання про доходи сім’ї як джерело збільшення її багатства; види доходів витрати обов’язкові платежі бюджет родини; вчити планувати бюджет родини раціонально розраховувати витрати і співставляти їх з доходами; усвідомити свою роль у формуванні сімейного бюджету; виховати грамотного споживача та дбайливого господаря. Основні поняття: доходи витрати бюджет сім’ї збалансований бюджет надлишковий бюджет дефіцитний бюджет....
52384. Відбитки готових природних форм (листя, трава). Композиція «Букет осіннього листя у вазі» 156.5 KB
  Актуалізація опорних знань Читання загадки вчителем Скажіть про яку пору року говориться в загадці Загадка Дрібненький дощик сумно плаче І листячко жовтогаряче З дерев повільно опадає Яка пора це наступає Осінь Чим вам подобається осінь А чи любите ви збирати листочки А що з ними можна зробити скласти букет зробити віночок ІІІ. Робота над темою уроку Вступна бесіда Ось і прийшла золота осінь. додаток 1 Вирушаючи з вами на осінню прогулянку до лісу ми уважно...
52385. Полуфабрикаты 294.5 KB
  В зависимости от источников образования и целевого назначения имущество организаций разделяют на собственное собственный капитал и заемная. Собственный капитал это вложения собственников и прибыль накопленная за время деятельности организации. Собственный капитал.Заемный капитал.
52387. Сценарий праздника “Прощанье с букварем” 65.5 KB
  Учитель. Дорогие гости! Сегодня мы проводим традиционный праздник в первом классе – Праздник Букваря. Говорят, Азбука – к мудрости ступенька. Вот вы и одолели самую трудную, самую важную первую ступеньку на пути к знаниям! Много праздников прекрасных На листках календаря, А меж ними тоже праздник Школьный – праздник Букваря.
52388. Праздник «Прощай, Букварик» 101.5 KB
  Многие из вас не умели читать и писать знали только некоторые буквы. Мы при расставании скажем на прощанье: Тебе за всё спасибо наш дорогой Букварь Буквы мы узнали слоги прочитали И сложили в слоги целые слова После в предложенье. Вдруг на удивленье сразу получилось Родина моя А потом и мама та что моет раму Дети в мяч играют Речка небо лес А ещё в программе прочитали сами Буквы на экране Поле из чудес. Напишу в тетради не оценки ради Буквы алфавита и пример решу.
52389. Прощание с Букварём 60.5 KB
  Букварь Книга для чтения. Плакат: Спасибо тебе Букварь Модель золотого ключика Диалог между мальчиком и девочкой В зале у нас суматоха и шум шёпот движения споры. Мы закончили первую школьную книгу букварь. А научил Вас читать и писать наш умный интересный и добрый друг букварь.
52390. Праздник «ПРОЩАЙ, БУКВАРЬ» 110 KB
  За год наши звездочки подросли поумнели многому научились и стали настоящими звездами а настоящие звезды ездят только в лимузинах вот посмотрите сами и вот подъехал лимузин и по красной дорожке идут наши звезды встречайте Музыкальная заставка Дети идут по звездной дорожке репортеры берут у них интервью Репортер: Скажите трудным для вас был первый год учебы Ученик: ответ – Смех и слезы радость и печаль За год довелось нам испытать Но стараний...