Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Сибирская государственная автомобильно-дорожная академия (СибАДИ)
Факультет "Информационные системы в управлении"
Отчет
по лабораторной работе №5
по дисциплине
Языки программирования
Преподаватель: |
|
Михайлов Е.М. |
|
Студент гр. БИ-12И1: Миллер А.Е. |
|
Омск - 2012
Задание:
Составить список учебной группы, включающей n человек (n не менее 10). Для каждого учащегося указать фамилию, дату рождения (день, месяц, год), год поступления в ВУЗ, экзаменационные оценки за один год обучения (2 семестра по 4 экзамена в семестре).
Составить программу, которая обеспечивает ввод полученной информации, распечатку её в виде таблицы, а также распечатку информации согласно конкретному варианту.
Список студентов в программе хранить в виде объекта класса TMyList. Этот класс должен быть порожден от класса TList. Описание созданного класса TMyList должно быть помещено в отдельный модуль. Созданный класс TMyList должен обязательно содержать метод Work выполняющий основное задание, указанное в Вашем варианте.
Вывод списка группы на экран реализовать с помощью объекта TMemo.
В отчет поместить:
Вариант №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, Unit2;
type
{ TForm1 }
TForm1 = class(TForm)
bbPrintAll: TBitBtn;
bbVariant: TBitBtn;
bbClose: TBitBtn;
mmOutput: TMemo;
procedure bbPrintAllClick(Sender: TObject);
procedure bbVariantClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
list:TMyList;
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
list:=TMyList.Create;
list.ReadFile('students.dat');
end;
procedure TForm1.bbPrintAllClick(Sender: TObject);
begin
list.PrintAll(mmOutput);
end;
procedure TForm1.bbVariantClick(Sender: TObject);
begin
list.Work;
mmOutput.Lines.Add('В списке удалены студенты, получивших в последнюю сессию все оценки 5.');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
list.ClearAll;
list.Free;
end;
end.
Часть 3(Модуль):
unit Unit2;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, StdCtrls, LazUTF8, DateUtils;
type
student = record
Name: string[25];
birthday: TDate;
vuz: integer;
mark: array[1..16] of byte;
end;
PStudent = ^Student;
{ TMyList }
TMyList = class(TList)
procedure Work;
procedure ReadFile(filename: string);
procedure ClearAll;
procedure PrintAll(mmOut: TMemo);
end;
implementation
{ TMyList }
procedure TMyList.Work;
var
i, j, k: integer;
p: PStudent;
begin
i := 0;
while i < Count do
begin
p := Items[i];
k := 0;
for j := 13 to 16 do
if p^.mark[j] = 5 then
k := k + 1;
if k = 4 then
Delete(i)
else
i := i + 1;
end;
end;
procedure TMyList.ReadFile(filename: string);
var
f: file of student;
p: PStudent;
begin
AssignFile(f, filename);
ReSet(f);
while not EOF(f) do
begin
new(p);
Read(f, p^);
Add(p);
end;
CloseFile(f);
end;
procedure TMyList.ClearAll;
var
p: PStudent;
i: integer;
begin
for i := 0 to Count - 1 do
begin
p := Items[i];
dispose(p);
end;
Clear;
end;
procedure TMyList.PrintAll(mmOut: TMemo);
var
i, j: integer;
p: PStudent;
str: string;
begin
for i := 0 to Count - 1 do
begin
p := Items[i];
str := IntToStr(i + 1);
with p^ do
begin
str := str + ' ' + Name;
while UTF8Length(str) < 25 do
str := str + ' ';
str := str + DateToStr(birthday) + ' ';
str := str + IntToStr(vuz) + ' ';
for j := 1 to 16 do
str := str + IntToStr(mark[j]);
end;
mmOut.Lines.Add(str);
end;
end;
end.
Форма:
Часть 1:
Рис. 1 Создание списка группы.
Часть 2:
Рис. 2 Вывод списка группы.
Рис. 2 Вывод списка после обработки.