2011-2012 учебный год
К сегодняшнему занятию Вами изучены следующие элементы управления
Edit
Label
Button
RadioButton
CheckBox
SpinEdit (на вкладке Misc)
FloatSpinEdit (на вкладке Misc)
ListBox (на вкладке Standard)
Memo (на вкладке Standard)
GroupRadioButton (на вкладке Standard)
ShowMessage, MessageBox
StringGrid (на вкладке Additional)
Компонент TStringGrid - на вкладке компонентов Additional.
Настройка таблицы StringGrid1
в окне Инспектор объектов
Убрать заголовки строк
FixedCols = 0
Убрать заголовки колонок
FixedRows = 0
Установить количество колонок
ColCount = 5
Установить количество строк
RowCount = 1
Установить ширину всех колонок
DefaultColWidth = 30
Установить высоту всех строк
DefaultRowHeight = 30
Разрешить редактирование ячеек
Options/goEditing = True
Об отметках
Основные упражнения не отмечены никакими специальными знаками, их выполнения достаточно для удовлетворительной оценки. Дополнительные упражнения отмечены "звездочками", их выполнение необходимо для получения повышенной оценки.
"5" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной и двумя "звездочками".
"4" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной "звездочкой".
"3" - в отчете выполнены все основные упражнения.
Упражнения
Классный журнал. Вывести в таблицу сведения из классного журнала: номер записи, фамилию ученика, оценки по информатике, физике и математике.
Требования к выполнению. Использовать тип запись.
Пример интерфейса
Пример программы
var Form1: TForm1; // Глобальные константы. const N_MAX = 3; INDEX_COL = 0; TITLE_ROW = 0; procedure TForm1.Button1Click(Sender: TObject); type t_student = record name : string[25]; inf : 0..5; phys : 0..5; math : 0..5; end; var stud1, stud2, stud3 : t_student; i : Byte; begin stud1.name := 'Бабурин'; stud1.inf := 3; stud1.phys := 4; stud1.math := 5; with stud2 do begin name := 'Васильев'; inf := 5; phys := 4; math := 3; end; with stud3 do begin name := 'Дьяконова'; inf := 4; phys := 3; math := 5; end; i := 1; StringGrid1.Cells[1, i] := stud1.name; StringGrid1.Cells[2, i] := IntToStr(stud1.inf); StringGrid1.Cells[3, i] := IntToStr(stud1.phys); StringGrid1.Cells[4, i] := IntToStr(stud1.math); i := 2; with stud2 do begin StringGrid1.Cells[1, i] := name; StringGrid1.Cells[2, i] := IntToStr(inf); StringGrid1.Cells[3, i] := IntToStr(phys); StringGrid1.Cells[4, i] := IntToStr(math); end; i := 3; with stud3 do begin StringGrid1.Cells[1, i] := name; StringGrid1.Cells[2, i] := IntToStr(inf); StringGrid1.Cells[3, i] := IntToStr(phys); StringGrid1.Cells[4, i] := IntToStr(math); end; end; procedure TForm1.FormCreate(Sender: TObject); var i : 0..N_MAX; begin for i := 1 to N_MAX do begin StringGrid1.Cells[INDEX_COL, i] := IntToStr(i); end; StringGrid1.Cells[0, TITLE_ROW] := 'N'; StringGrid1.Cells[1, TITLE_ROW] := 'Фамилия'; StringGrid1.Cells[2, TITLE_ROW] := 'Информатика'; StringGrid1.Cells[3, TITLE_ROW] := 'Физика'; StringGrid1.Cells[4, TITLE_ROW] := 'Математика'; StringGrid1.ColWidths[1]:=110; StringGrid1.ColWidths[2]:=110; StringGrid1.ColWidths[3]:=60; StringGrid1.ColWidths[4]:=110; end;
Классный журнал 2. Для каждого ученика в предыдущей задаче найти среднее арифметическое и сумму оценок, вывести их в таблицу.
Требования к выполнению. Использовать массив записей, для среднего арифметического использовать вещественный тип данных и выводить с точностью до десятых.
Пример интерфейса
Пример программы
var Form1: TForm1; // Глобальные константы. const N_MAX = 3; N_SCORES = 3; INDEX_COL = 0; TITLE_ROW = 0; SUM_COL = 5; AVG_COL = 6; type t_student = record name : string[25]; inf : 0..5; phys : 0..5; math : 0..5; end; var stud : array [1..N_MAX] of t_student; procedure TForm1.Button1Click(Sender: TObject); var i : Byte; begin for i := 1 to N_MAX do begin StringGrid1.Cells[1, i] := stud[i].name; StringGrid1.Cells[2, i] := IntToStr(stud[i].inf); StringGrid1.Cells[3, i] := IntToStr(stud[i].phys); StringGrid1.Cells[4, i] := IntToStr(stud[i].math); end; end; procedure TForm1.Button2Click(Sender: TObject); const N = 3; M = 1; var i : 1..N_MAX; sum : Byte; avg : double; begin for i := 1 to N_MAX do begin with stud[i] do begin sum := inf + phys + math; avg := sum/N_SCORES; end; StringGrid1.Cells[SUM_COL, i] := IntToStr(sum); StringGrid1.Cells[AVG_COL, i] := FloatToStrF(avg, ffFixed, N, M); end; end; procedure TForm1.FormCreate(Sender: TObject); var i : 0..N_MAX; begin for i := 1 to N_MAX do begin StringGrid1.Cells[INDEX_COL, i] := IntToStr(i); end; StringGrid1.Cells[0, TITLE_ROW] := 'N'; StringGrid1.Cells[1, TITLE_ROW] := 'Фамилия'; StringGrid1.Cells[2, TITLE_ROW] := 'Информатика'; StringGrid1.Cells[3, TITLE_ROW] := 'Физика'; StringGrid1.Cells[4, TITLE_ROW] := 'Математика'; StringGrid1.Cells[5, TITLE_ROW] := 'Сумма'; StringGrid1.Cells[6, TITLE_ROW] := 'Среднее'; StringGrid1.ColWidths[1]:=110; StringGrid1.ColWidths[2]:=110; StringGrid1.ColWidths[3]:=60; StringGrid1.ColWidths[4]:=110; i := 1; stud[i].name := 'Бабурин'; stud[i].inf := 3; stud[i].phys := 4; stud[i].math := 5; i := 2; with stud[i] do begin name := 'Васильев'; inf := 5; phys := 4; math := 3; end; i := 3; with stud[i] do begin name := 'Дьяконова'; inf := 4; phys := 3; math := 5; end; end;
Классный журнал 3. Найти ученика с наибольшим и наименьшим средним баллом.
Требования к выполнению. Использовать массив записей.
Пример интерфейса
Пример программы
var Form1: TForm1; // Глобальные константы. const N_MAX = 5; N_SCORES = 3; INDEX_COL = 0; TITLE_ROW = 0; SUM_COL = 5; AVG_COL = 6; MIN_COLOR = clAqua; MAX_COLOR = clYellow; SHIFT_TEXT_X = 3; SHIFT_TEXT_Y = 3; // Глобальный тип. type t_student = record name : string[25]; inf : 0..5; phys : 0..5; math : 0..5; sum : Byte; avg : double; end; // Глобальные массив. var stud : array [1..N_MAX] of t_student; procedure TForm1.Button1Click(Sender: TObject); var i : Byte; begin for i := 1 to N_MAX do begin StringGrid1.Cells[1, i] := stud[i].name; StringGrid1.Cells[2, i] := IntToStr(stud[i].inf); StringGrid1.Cells[3, i] := IntToStr(stud[i].phys); StringGrid1.Cells[4, i] := IntToStr(stud[i].math); end; end; procedure TForm1.Button2Click(Sender: TObject); const N = 3; M = 1; var i : 1..N_MAX; begin for i := 1 to N_MAX do begin with stud[i] do begin sum := inf + phys + math; avg := sum/N_SCORES; StringGrid1.Cells[SUM_COL, i] := IntToStr(sum); StringGrid1.Cells[AVG_COL, i] := FloatToStrF(avg, ffFixed, N, M); end; end; end; procedure TForm1.Button3Click(Sender: TObject); var i, min, k_min, max, k_max : Byte; ts : string; rect : TRect; begin k_min := 1; min := stud[k_min].sum; k_max := 1; max := stud[k_max].sum; for i := 2 to N_MAX do begin if min > stud[i].sum then begin k_min := i; min := stud[i].sum; end; if max < stud[i].sum then begin k_max := i; max := stud[i].sum; end; end; // ...:: MIN MIN MIN ::... ts := StringGrid1.Cells[INDEX_COL, k_min]; rect := StringGrid1.CellRect(INDEX_COL, k_min); StringGrid1.Canvas.Brush.Color := MIN_COLOR; StringGrid1.Canvas.FillRect(rect); StringGrid1.Canvas.TextOut(rect.Left+SHIFT_TEXT_X, rect.Top+SHIFT_TEXT_Y, ts); // ...:: MAX MAX MAX ::... ts := StringGrid1.Cells[INDEX_COL, k_max]; rect := StringGrid1.CellRect(INDEX_COL, k_max); StringGrid1.Canvas.Brush.Color := MAX_COLOR; StringGrid1.Canvas.FillRect(rect); StringGrid1.Canvas.TextOut(rect.Left+SHIFT_TEXT_X, rect.Top+SHIFT_TEXT_Y, ts); end; procedure TForm1.FormCreate(Sender: TObject); var i : 0..N_MAX; begin for i := 1 to N_MAX do begin StringGrid1.Cells[INDEX_COL, i] := IntToStr(i); end; StringGrid1.Cells[0, TITLE_ROW] := 'N'; StringGrid1.Cells[1, TITLE_ROW] := 'Фамилия'; StringGrid1.Cells[2, TITLE_ROW] := 'Информатика'; StringGrid1.Cells[3, TITLE_ROW] := 'Физика'; StringGrid1.Cells[4, TITLE_ROW] := 'Математика'; StringGrid1.Cells[5, TITLE_ROW] := 'Сумма'; StringGrid1.Cells[6, TITLE_ROW] := 'Среднее'; StringGrid1.ColWidths[1]:=110; StringGrid1.ColWidths[2]:=110; StringGrid1.ColWidths[3]:=60; StringGrid1.ColWidths[4]:=110; i := 1; stud[i].name := 'Бабурин'; stud[i].inf := 3; stud[i].phys := 4; stud[i].math := 3; i := 2; with stud[i] do begin name := 'Васильев'; inf := 3; phys := 2; math := 3; end; i := 3; with stud[i] do begin name := 'Дьяконова'; inf := 5; phys := 4; math := 5; end; i := 4; with stud[i] do begin name := 'Иванов'; inf := 2; phys := 2; math := 3; end; i := 5; with stud[i] do begin name := 'Миронов'; inf := 3; phys := 5; math := 3; end; end;
*Классный журнал 4. Организовать заполнение журнала с помощью специальной формы.
Требования к выполнению. Использовать массив записей.
Домашнее задание
Классный журнал 5. Релаизовать возможность дополения сведений об ученике и добавление его фотографии.
Требования к выполнению. Использовать массив записей.