If Stud[i].sball < Stud[j].sball then begin

st:=Stud[i];

Stud[i]:=Stud[j];

Stud[j]:=st;

end;

Memo1.Clear;

for i:=1 to nzap do // Вывод в окно Memo1 отсортированных записей

with stud[i] do

Memo1.Lines.Add(IntToStr(i)+’ ‘+fio+’ ‘+FloatToStrf(sball,fffixed,4,2));

end;

 

procedure TForm1.Button5Click(Sender: TObject); // Сохранение var i:word; // результатов сортировки в текстовом файле

Begin

if SaveDialog1.Execute then // Выполнение стандартного диалога

begin // выбора имени файла

FileNameT:= SaveDialog1.FileName; // Возвращение имени

// дискового файла

AssignFile(Ft, FileNameT); // Связывание файловой переменной Ft c

// именем файла

Rewrite(Ft); // Открытие нового текстового файла

end;

for i:=1 to nzap do

with stud[i] do Writeln(Ft,i:4,’. ‘,fio,sball:8:2); // Запись в

// текстовой файл

CloseFile(Ft); // Закрытие текстового файла

end;

 

procedure TForm1.BitBtn1Click(Sender: TObject);

Begin

CloseFile(fz); // Закрытие файла записей при нажатии на кнопку “Сlose”

end;

end.

8.6. Выполнение индивидуального задания

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

1. В магазине формируется список лиц, записавшихся на покупку товара. Каждая запись этого списка содержит: порядковый номер, Ф.И.О., домашний адрес покупателя и дату постановки на учет. Удалить из списка все повторные записи, проверяя Ф.И.О. и домашний адрес.

2. Список товаров, имеющихся на складе, включает в себя наименование товара, количество единиц товара, цену единицы и дату поступления товара на склад. Вывести в алфавитном порядке список товаров, хранящихся больше месяца, стоимость которых превышает 1000000 руб.

3. Для получения места в общежитии формируется список студентов, который включает Ф.И.О. студента, группу, средний балл, доход на члена семьи. Общежитие в первую очередь предоставляется тем, у кого доход на члена семьи меньше двух минимальных зарплат, затем остальным в порядке уменьшения среднего балла. Вывести список очередности предоставления мест в общежитии.

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

5. Информация о сотрудниках фирмы включает: Ф.И.О., табельный номер, количество проработанных часов за месяц, почасовой тариф. Рабочее время свыше 144 часов считается сверхурочным и оплачивается в двойном размере. Вывести размер заработной платы каждого сотрудника фирмы за вычетом подоходного налога, который составляет 12% от суммы заработка.

6. Информация об участниках спортивных соревнований содержит: наименование страны, название команды, Ф.И.О. игрока, игровой номер, возраст, рост, вес. Вывести информацию о самой молодой команде.

7. Для книг, хранящихся в библиотеке, задаются: регистрационный номер книги, автор, название, год издания, издательство, количество страниц. Вывести список книг с фамилиями авторов в алфавитном порядке, изданных после заданного года.

8. Различные цехи завода выпускают продукцию нескольких наименований. Сведения о выпущенной продукции включают: наименование, количество, номер цеха. Для заданного цеха необходимо вывести количество выпущенных изделий по каждому наименованию в порядке убывания количества.

9. Информация о сотрудниках предприятия содержит: Ф.И.О., номер отдела, должность, дату начала работы. Вывести списки сотрудников по отделам в порядке убывания стажа.

10. Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит: Ф.И.О., адрес, оценки. Определить количество абитуриентов, проживающих в г.Минске и сдавших экзамены со средним баллом не ниже 4.5, вывести их фамилии в алфавитном порядке.

11. В справочной аэропорта хранится расписание вылета самолетов на следующие сутки. Для каждого рейса указаны: номер рейса, тип самолета, пункт назначения, время вылета. Вывести все номера рейсов, типы самолетов и времена вылета для заданного пункта назначения в порядке возрастания времени вылета.

12. У администратора железнодорожных касс хранится информация о свободных местах в поездах дальнего следования на ближайшую неделю в следующем виде: дата выезда, пункт назначения, время отправления, число свободных мест. Оргкомитет международной конференции обращается к администратору с просьбой зарезервировать m мест до города N на k-й день недели с временем отправления поезда не позднее t часов вечера. Вывести время отправления или сообщение о невозможности выполнить заказ в полном объеме.

13. Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит: Ф.И.О. абитуриента, оценки. Определить средний балл по университету и вывести список абитуриентов, средний балл которых выше среднего балла по университету. Первыми в списке должны идти студенты, сдавшие все экзамены на 5.

14. В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Каждая квитанция содержит следующую информацию: наименование группы изделий(телевизор, радиоприемник и т. п.),марку изделия, дату приемки в ремонт, состояние готовности заказа (выполнен, не выполнен). Вывести информацию о состоянии заказов на текущие сутки по группам изделий.

15. На междугородной АТС информация о разговорах содержит дату разговора, код и название города, время разговора, тариф, номер телефона в этом городе и номер телефона абонента. Вывести по каждому городу общее время разговоров с ним и сумму.


 

Тема 9. Программирование с отображением графической информации

Цель лабораторной работы: изучить возможности построения изображений с использованием класса TСanvas и графиков с помощью компонента TСhart.

9.1. Как рисуются изображения

Нарисовать картинку в среде Delphi можно на многих компонентах (например на форме, на TPaintBox), однако наиболее удобно использовать компонент TImage (страница Additional). Нарисованную в Image1 картинку можно перенести в отчет, используя процедуру ClipBoard.Assign(Image1.Picture) (модуль Clipbrd). Для рисования используют класс TСanvas, который является свойством многих компонентов, и представляет собой прямоугольный холст в виде матрицы из пикселей и набор инструментов для рисования на нем. Каждый пиксел имеет координтау (x, y), где x – порядковый номер пиксела, начиная от левой границы холста, а y – порядковый номер пиксела, начиная от верхней границы холста. Левый верхний угол холста имеет координату (0, 0), а правый (Image1.Width, Image1.Height).

Основные свойства класса TCanvas:

Property Pen : TPen; – карандаш (имеет цвет и толщину),

Property Brush : TBrush; – кисть (имеет цвет),

Property Font : TFont; – шрифт.

Некоторые методы класса TCanvas:

Pгосеdure Еlliрsе(Х1, Y1, Х2, Y2: Integer) –чертит эллипс в охватывающем прямоугольнике (X1, Y1), (Х2, Y2) и заполняет внутреннее пространство эллипса текущей кистью.

Pгосedure LineТо (X, У: Integer) – чертит линию от текущего положения пера до точки (X. У).

Procedure МоvеТо(Х, У: Integer) – перемещает карандаш в положение (X, У) без вычерчивания линий.

Pгосedure Роlуgоn (Роints: аrrау оf ТРоint) – вычерчивает карандашом многоугольник по точкам, заданным в массиве Роints. Например: Canvas.Polygon([Point(x1, y1), Point(x2, y2), Point(x3, y3]);. Конечная точка соединяется с начальной и многоугольник заполняется кистью. Для вычерчивания без заполнения используйте метод Роlуline.

Pгосedure Rectangle (X1, У1, Х2, У2: Integer) – вычерчивает и заполняет прямоугольник (X1, У1), (Х2, У2). Для вычерчивания без заполнения используйте FrameRect или РоlуLine.

Procedure ТехtОut (Х, У: Integer; const Техt: String)– выводит текстовую строку Техt так, чтобы левый верхний угол прямоугольника, охватывающего текст, располагался в точке (X, У).

9.2. Как строится график с помощью компонента TChart

Обычно результаты расчетов представляются в виде графиков и диаграмм. Система DELPHI имеет мощный пакет стандартных программ вывода на экран и редактирования графической информации, который реализуется с помощью визуально отображаемого на форме компонента TChart.

Построение графика (диаграммы) производится после вычисления таблицы значений функции y=f(x). Полученная таблица передается в специальный двумерный массив ChartI.SeriesList[k] (k – номер графика (0,1,2,...)) компонента TСhart с помощью метода AddXY. Компонент TChart осуществляет всю работу по отображению графиков, переданных в объект ChartI.SeriesList[k]: строит и размечает оси, рисует координатную сетку, подписывает название осей и самого графика, отображает переданную таблицу в виде всевозможных графиков или диаграмм. При необходимости, с помощью встроенного редактора EditingChart компоненту TСhart передаются данные о толщине, стиле и цвете линий, параметрах шрифта подписей, шагах разметки координатной сетки и другие настройки. В процессе работы программы изменение параметров возможно через обращение к соответствующим свойствам компонента TChart. Так, например, свойство Chart1.BottomAxis содержит значение максимального предела нижней оси графика. Перенести график в отчет можно через буфер обмена используя процедуру ChartI.CopyToClipboardMetafile(True).

9.3. Пример написания программы

Задание: составить программу, выводящую график функции sin(x) двумя способами. В первом случае использовать компонент Timage, во втором – компонент TChar. Для размещения исходных данных и двух графиков использовать три панели компонента TPageControl.

9.3.1. Работа с компонентом TPageControl

Если на одной форме необходимо разместить большое количество информации или необходимо разделить эту информацию, удобно использовать компонент TPageControl (страница Win32). Этот компонент может содержать несколько перекрывающих друг друга пнелей, доступ к которым осуществляется с помощью закладок. Для добавления новой панели необходимо щелкнуть по компоненту правой кнопкой мыши и выбрать пункт NewPage. Размещение элементов на нужной панели производится точто также как и на форме.

Расположите на форме компонент PageControl1, создайте три панели и расположите на них компоненты в соответствии с рис. 9.1.— 9.3.

 

Рис. 9.1.

 

Рис. 9.2.

 

Рис. 9.3.

9.3.2. Работа с компонентом TChart

Для изменения параметров компонента TChart необходимо дважды щелкнуть по нему мышью в окне формы. Появится окно редактирования EditingChat1 (рис. 9.4). Для создания нового объекта Series1 щелкнуть по кнопке Add на странице Series. В появившемся диалоговом окне TeeChart Gallery выбрать пиктограмму с надписью Line (график выводится в виде линий). Если нет необходимости представления графика в трехмерном виде, отключить независимый переключатель 3D. После нажатия на кнопку OK появится новая серия с название Series1. Для изменения названия нажать кнопку Title. Закладка Legend задает список обозначений даиграммы (можно убирать с экрана). Название графика вводится на странице Titles. Разметка осей меняется на странице Axis. Страница Series задает характеристики (цвет, толщина линий) для определенного графика.

Нажимая различные кнопки меню, познакомтесь с другими возможностями EditingChat.

Рис. 9.4.

 

Текст программы приведен на Листинге 9.1

Листинг 9.1.

unit Unit9;

Interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, StdCtrls, ComCtrls, Series, Clipbrd;

 

Type

TForm1 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

TabSheet3: TTabSheet;

Label1: TLabel;

Label2: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

Label3: TLabel;

Label8: TLabel;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Button1: TButton;

Button2: TButton;

Image1: TImage;

Button3: TButton;

Button4: TButton;

Chart1: TChart;

Series1: TLineSeries;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

Private

{ Private declarations }

Public

{ Public declarations }

end;

Var

Form1: TForm1;

xn, xk, x, y, h : extended;

xomin, xomax, yomin, yomax : extended;

m, i, delt : integer;

Implementation

{$R *.dfm}

 

Function f(x: extended):extended;

Begin

Result:=sin(x); // Функция

end;

 

procedure TForm1.FormCreate(Sender: TObject);

Begin

Edit1.Text:='0,1'; Edit2.Text:='6'; Edit3.Text:='50'; Edit4.Text:='0';

Edit5.Text:='6'; Edit6.Text:='-1'; Edit7.Text:='1';

end;

 

procedure TForm1.Button1Click(Sender: TObject); // Рисование в Image1

var xmax, ymax, xt, yt, yo : integer;

hx, hy : extended;

Begin

xn:=StrToFloat(Edit1.Text);

xk:=StrToFloat(Edit2.Text);

m:=StrToInt(Edit3.Text);

xomin:=StrToFloat(Edit4.Text);

xomax:=StrToFloat(Edit5.Text);

yomin:=StrToFloat(Edit6.Text);

yomax:=StrToFloat(Edit7.Text);