Здравствуйте, novij2011!
Во-первых, непонятно, для чего Вы для хранения информации о работнике выбрали массивы символов: в Borland C++ Builder строки удобнее хранить в виде объектов класса AnsiString, что облегчает взаимодействие с компонентами среды и работу с данными, поскольку класс AnsiString включает в себя много полезных методов, в том числе операторы сравнения строк.
Во-вторых, лучше список работников хранить в виде вектора (std::vector) объектов класса работника (в моём варианте - класс TWorker) - члена главной формы (см. приложение).
Для удобства в заголовочном файле класса главной формы приложения (TMainForm) я объявил класс TWorker только с теми членами, которые будут выводиться в StringGrid (т.е. имя, отчество, фамилия).
Внешний вид приложения показан на рисунке ниже (введённые данные отсортированы):
Ввод данных осуществляется при нажатии на кнопку SubmitButton, при этом данные сохраняются в векторе, а поля ввода очищаются (см. приложение).
При нажатии на кнопку ShowButton осуществляется сортировка объектов вектора, если он не пуст, и данные выводятся в таблицу (см. приложение).
Проект Borland Developer Studio 2006 прикреплён к ответу.
Удачи!
Приложение:
// Заголовочный файл класса главной формы
//---------------------------------------------------------------------------
#ifndef MainUnitH
#define MainUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Grids.hpp>
//---------------------------------------------------------------------------
#include <vector> // Подключаем вектор STL
using namespace std; // Подключаем пространство имён std;
//---------------------------------------------------------------------------
class TWorker // Класс работника
{
public:
TWorker(){}; // Пустой конструктор
AnsiString sName; // Имя
AnsiString sMiddleName; // Отчество
AnsiString sLastName; // Фамилия
};
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published: // IDE-managed Components
TLabel *InputLabel;
TEdit *NameEdit;
TEdit *MiddleNameEdit;
TEdit *LastNameEdit;
TLabel *NameLabel;
TLabel *MiddleNameLabel;
TLabel *LastNameLabel;
TButton *SubmitButton;
TStringGrid *WorkersGrid;
TButton *ShowButton;
void __fastcall SubmitButtonClick(TObject *Sender);
void __fastcall ShowButtonClick(TObject *Sender);
private:
vector<TWorker> Worker; // Вектор - список работников
public: // User declarations
__fastcall TMainForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif
// Файл реализации класса главной формы
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MainUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
WorkersGrid->Cells[1][0] = "Имя"; // Заголовки таблицы
WorkersGrid->Cells[2][0] = "Фамилия";
WorkersGrid->Cells[3][0] = "Отчество";
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::SubmitButtonClick(TObject *Sender)
{
// Если поля ввода не заполнены - сообщаем об ошибке
if(NameEdit->Text.IsEmpty() || MiddleNameEdit->Text.IsEmpty() || LastNameEdit->Text.IsEmpty())
{
MessageBox(0, "Введите данные!", "Ошибка!", MB_ICONWARNING | MB_OK);
return;
}
TWorker Worker;
Worker.sName = NameEdit->Text;
Worker.sMiddleName = MiddleNameEdit->Text;
Worker.sLastName = LastNameEdit->Text;
this->Worker.push_back(Worker); // Добавляем данные о работнике в вектор
NameEdit->Clear(); // Очищаем поля ввода
MiddleNameEdit->Clear();
LastNameEdit->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ShowButtonClick(TObject *Sender)
{
if(Worker.size() == 0) // Если вектор пуст - сообщаем об ошибке
{
MessageBox(0, "Нет введённых данных о работниках.", "Ошибка!", MB_ICONWARNING | MB_OK);
return;
}
TWorker TempWorker; // Сортируем вектор
for(unsigned i = 0; i <= (Worker.size() - 1); i++)
{
for(unsigned j = i + 1; j < Worker.size(); j++)
{
if(Worker[i].sLastName > Worker[j].sLastName)
{
TempWorker = Worker[i];
Worker[i] = Worker[j];
Worker[j] = TempWorker;
}
}
}
// И выводим данные в таблицу.
WorkersGrid->RowCount = (int)(Worker.size() + 1);
for(unsigned i = 0; i < Worker.size(); i++)
{
WorkersGrid->Cells[0][i + 1] = IntToStr(i + 1);
WorkersGrid->Cells[1][i + 1] = Worker[i].sName;
WorkersGrid->Cells[2][i + 1] = Worker[i].sLastName;
WorkersGrid->Cells[3][i + 1] = Worker[i].sMiddleName;
}
}
//---------------------------------------------------------------------------