Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик ПиОА / СправПосЛР89.doc
Скачиваний:
33
Добавлен:
22.03.2015
Размер:
524.8 Кб
Скачать

14.11 Визуальное программирование с использованием структур

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

  1. Обозначения:

stud- структурный тип, содержащий поля:fam,name,otch,gr,rtg.

grz- заданное значение критерия поиска по году рождения.

m– счетчик количества записей в таблице.

n– количество строк в таблице.

  1. Интерфейс программы

  1. Функциональная модель.

Создание динамической внутренней таблицы происходит при вводе размерности таблиц в поле Edit1.

Данные набираются непосредственно в ячейках визуальной таблицы.

Количество набранных записей вводится в поле Edit2.

Кнопкой «Запись» данные переносятся во внутреннюю таблицу.

Поле Edit3 определяет номер записи, после которой необходимо вставить новую запись.

Кнопкой «Вставить» последующие записи сдвигаются на одну позицию вниз.

Поле Edit5 предназначено для ввода критерия поиска по году рождения.

Кнопка «Найти» обеспечивает поиск записей и отображение их в визуальной таблице.

Кнопка «Восстановить» обеспечивает исходное состояние визуальной таблицы до поиска.

  1. Программная реализация

4.1. Файл Unit1.H

#ifndef Unit1H

#define Unit1H

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Grids.hpp>

class TForm1 : public TForm

{

__published: // IDE-managed Components

TStringGrid *StringGrid1;

TEdit *Edit1;

TLabel *Label1;

TButton *Button1;

TEdit *Edit2;

TLabel *Label2;

TButton *Button2;

TEdit *Edit3;

TLabel *Label3;

TButton *Button3;

TLabel *Label4;

TEdit *Edit4;

TLabel *Label5;

TButton *Button4;

TEdit *Edit5;

TButton *Button5;

void __fastcall FormCreate(TObject *Sender);

void __fastcall Edit1Change(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button5Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

struct stud{AnsiString fam,name,otch; int gr,rtg;};

extern PACKAGE TForm1 *Form1;

4.2. Файл Unit1.Cpp

#endif

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

stud*pst;intn,m,k; // Определение глобальных переменных

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner){ }

// Функция очистки визуальной таблицы-----------------------

void clearSring()

{int i;

for(i=1; i<n; i++)

{Form1->StringGrid1->Cells[0][i]="0";

Form1->StringGrid1->Cells[1][i]="";

Form1->StringGrid1->Cells[2][i]="";

Form1->StringGrid1->Cells[3][i]="";

Form1->StringGrid1->Cells[4][i]="0";

Form1->StringGrid1->Cells[5][i]="0";

}

}

// Функция очистки внутренней таблицы-------------------------

void clearTab()

{ int i;

for(i=1; i<n; i++)

{ pst[i].fam = "";

pst[i].name = "";

pst[i].otch = "";

pst[i].gr = 0;

pst[i].rtg = 0; }

}

// Формирование визуальной таблицы при открытии формы----

void __fastcall TForm1::FormCreate(TObject *Sender)

{ StringGrid1->Cells[0][0] = "№ п/п";

StringGrid1->Cells[1][0] = "Фамилия";

StringGrid1->Cells[2][0] = "Имя";

StringGrid1->Cells[3][0] = "Отчество";

StringGrid1->Cells[4][0] = "Год рожд";

StringGrid1->Cells[5][0] = "Рейтинг";

clearTab();

clearSring();

}

// Создание внутренней динамической таблицы----------------

void __fastcall TForm1::Edit1Change(TObject *Sender)

{ n=StrToInt(Edit1->Text);

StringGrid1->RowCount=n+1;

pst=new stud[n];

}

// Обработчик события OnClick для кнопки «Записать»----------

void __fastcall TForm1::Button1Click(TObject *Sender)

{ m=StrToInt(Edit2->Text); int i;

for(i=0; i<m; i++)

{ pst[i].fam = StringGrid1->Cells[1][i+1];

pst[i].name = StringGrid1->Cells[2][i+1];

pst[i].otch = StringGrid1->Cells[3][i+1];

pst[i].gr = StrToInt(StringGrid1->Cells[4][i+1]);

pst[i].rtg = StrToInt(StringGrid1->Cells[5][i+1]);}

}

// Обработчик события OnClick для кнопки «Вставить после»---

void __fastcall TForm1::Button2Click(TObject *Sender)

{ k=StrToInt(Edit3->Text);

for(int i=m; i>=k; i--)

for(int j=0; j<6; j++)

{ StringGrid1->Cells[j][i+1]=StringGrid1->Cells[j][i];

m++;}

/* Очистка освободившейся строки */

StringGrid1->Cells[1][k+1] = "";

StringGrid1->Cells[2][k+1] = "";

StringGrid1->Cells[3][k+1] = "";

StringGrid1->Cells[4][k+1] = "0";

StringGrid1->Cells[5][k+1] = "0";

}

// Обработчик события OnClick для кнопки «Найти»

void __fastcall TForm1::Button5Click(TObject *Sender)

{ int grz=StrToInt(Edit5->Text);

int i1=0;

clearSring();

for(int i=0;i<m;i++)

{if(pst[i].gr==grz)

{ i1=i1+1;

StringGrid1->Cells[0][i1] = IntToStr(i1);

StringGrid1->Cells[1][i1] = pst[i].fam;

StringGrid1->Cells[2][i1] = pst[i].name;

StringGrid1->Cells[3][i1] = pst[i].otch;

StringGrid1->Cells[4][i1] = pst[i].gr;

StringGrid1->Cells[5][i1] = pst[i].rtg;

}

}

}

    1. Вывод графических объектов в приложениях Windows

Графические объекты выводятся на канве (свойство Canvas) для объектов классовTForm,TImage,TPaintBoxи др. Графические объекты могут формироваться с помощью графических примитивов или с помощью графических точек.

В первом случае:

а) Вывод линии

Image1 ->Canvas->MoveTo(10,30); // логический курсор устанавливается

// в точку с координатами (10,30)

Image1 ->Canvas->LineTo(20,50); // вывод линии из текущей точки

// в точку с заданными координатами

б) Вывод фигуры

Image1 -> Canvas -> Rectangle(0,0,20,40);

Во втором случае:

а) Вывод точки красного цвета с координатами (10,20):

Image1 -> Canvas -> Pixels[10][20] = clRed;

Если в программе необходимо вывести графики нескольких функций, то удобнее использовать указатель на функцию.

Пример.

double(*pf)(double); // объявлен указатель на функцию

double f1(double a) {… } // функция расчета ординаты первого графика

double f2(double b) {…} // функция расчета ординаты второго графика

double f3(double c) {…} // функция расчета ординаты третьего графика

cin >> k;

switch (k){

case1:pf=f1;break; // указатель инициализируется адресом первой функции

case 2: pf = f2; break;

case 3: pf = f3; break;

}

for (x = 0; x < n; x++)

Image1 ->Canvas->Pixels[x][pf(x)]; // выводится график заданной с клавиатуры

// функции в окно объекта Image1

    1. Пример использования функций

Задача. Написать определение функции поиска максимального элемента и определение его индекса. Продемонстрировать ее использование в программе.

Пример:

int fmax(int a[], int n, int &imax)

{ int max = a[0]; int i;

for(i=1;i<n;i++) {if(a[i] > max) {max = a[i]; imax = i;}

return max;

}

void main()

{ int array[10], k;

for(i=0;i<10;i++) cin >> array[i];

int m = fmax(array, 10, k);

cout << m << “ “ << k;

}

    1. Функции, реализующие операторы АТД «Список»

Соседние файлы в папке Курсовик ПиОА