Консультация № 177350
19.03.2010, 16:23
43.65 руб.
0 9 1
Здравствуйте!

Извините что к вам обращаюсь но нужно дописать программу, которая у меня не получается из-за использования вектора.

Нужно сохранить из StringGrid данные в txt файл и открыть текстовый файл.,т.е считывать данные из текствого файла в stringgrid.
Также реализовать поиск(чтобы пользователь вводил слово в тестовое поле edit) и это слово чтобы программа искала в stringgrid (и выводились записи с найденными словами)

Если можно, то использовать вторую форму для ввода данных (имя,фамилия,отчество, пол, должность,адрес,телефон,стаж)





Приложение:

/---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <Stdio.h>
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <iomanip.h>
#include <fstream.h>
#include <sstream.h>



//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
struct btrud
{ char family [20];//фамилия
char name [20];//имя
char Patronymic [20];//отчество
char pol [8];//пол
char address [20];//адрес
char speciality [20];//должность
char experience[4];//стаж
char education [20];//образование
char phone [20];//телефон
};
btrud rabotnik[10];
FILE* f;

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]="Должность";
StringGrid1->Cells[6][0]="Стаж";
StringGrid1->Cells[7][0]="Образование";
StringGrid1->Cells[8][0]="Телефон";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N9Click(TObject *Sender)//очистить БД
{
for (int i=0;i<StringGrid1->ColCount;i++)
for (int j=0;j<StringGrid1->RowCount;j++)
StringGrid1->Cells[i][j]="";
StringGrid1->Cells[0][0]="Фамилия";
StringGrid1->Cells[1][0]="Имя";
StringGrid1->Cells[2][0]="Отчество";
StringGrid1->Cells[3][0]="Пол";
StringGrid1->Cells[4][0]="Адрес";
StringGrid1->Cells[5][0]="Должность";
StringGrid1->Cells[6][0]="Стаж";
StringGrid1->Cells[7][0]="Образование";
StringGrid1->Cells[8][0]="Телефон";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N7Click(TObject *Sender)//добавить строку в StringGrid1
{
StringGrid1->RowCount=StringGrid1->RowCount+1;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N8Click(TObject *Sender)
{
StringGrid1->RowCount=StringGrid1->RowCount-1;
}
//---------------------------------------------------------------------------


void __fastcall TForm1::N13Click(TObject *Sender)
{
StringGrid1->Options
<< goEditing // разрешить редактировать
<< goTabs; // <Tab> - переход к следующей ячейке
}
//---------------------------------------------------------------------------


void __fastcall TForm1::N4Click(TObject *Sender) //Сохранение БД
{
int i;
for (i=0; i<10; i++)

strcpy(rabotnik[i].family, AnsiString(StringGrid1->Cells[0][i+1]).c_str());
for (i=0; i<10; i++)
strcpy(rabotnik[i].name, AnsiString(StringGrid1->Cells[1][i+1]).c_str());
for (i=0; i<10; i++)
strcpy(rabotnik[i].Patronymic, AnsiString(StringGrid1->Cells[2][i+1]).c_str());
for (i=0; i<10; i++)
strcpy(rabotnik[i].pol, AnsiString(StringGrid1->Cells[3][i+1]).c_str());
for (i=0; i<10; i++)
strcpy(rabotnik[i].address, AnsiString(StringGrid1->Cells[4][i+1]).c_str());
for (i=0; i<10; i++)
strcpy(rabotnik[i].speciality, AnsiString(StringGrid1->Cells[5][i+1]).c_str());
for (i=0; i<10; i++)
strcpy(rabotnik[i].experience, AnsiString(StringGrid1->Cells[6][i+1]).c_str());
for (i=0; i<10; i++)
strcpy(rabotnik[i].education, AnsiString(StringGrid1->Cells[7][i+1]).c_str());
for (i=0; i<10; i++)
strcpy(rabotnik[i].phone, AnsiString(StringGrid1->Cells[8][i+1]).c_str());
for (i=0; i<10; i++)
f=fopen("F:\\baza.txt","wb");
if (f)
{
fwrite(rabotnik, sizeof(rabotnik),1, f);
}
fclose(f);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N3Click(TObject *Sender)//открыть БД
{
f=fopen("F:\\baza.txt","rb");
fread(rabotnik,sizeof(rabotnik), 1, f);
for(int i=0;i<10;i++)
{
StringGrid1->Cells[0][i+1]=rabotnik[i].family;
StringGrid1->Cells[1][i+1]=rabotnik[i].name;
StringGrid1->Cells[2][i+1]=rabotnik[i].Patronymic;
StringGrid1->Cells[3][i+1]=rabotnik[i].pol;
StringGrid1->Cells[4][i+1]=rabotnik[i].address;
StringGrid1->Cells[5][i+1]=rabotnik[i].speciality;
StringGrid1->Cells[6][i+1]=rabotnik[i].experience;
StringGrid1->Cells[7][i+1]=rabotnik[i].education;
StringGrid1->Cells[8][i+1]=rabotnik[i].phone;
}
fclose(f);
}

//---------------------------------------------------------------------------
















//и программа сортировки дангных

//---------------------------------------------------------------------------

#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)
{
if(Worker[i].sLastName > Worker[i + 1].sLastName)
{
TempWorker = Worker[i];
Worker[i] = Worker[i + 1];
Worker[i + 1] = 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;
}
}
//---------------------------------------------------------------------------

Обсуждение

давно
Старший Модератор
17042
808
20.03.2010, 10:00
общий
это ответ
Здравствуйте, novij2011!
Вообще-то, если Вы хотели создать базу данных, то следовало работать с компонентами вкладки DataAccess, а не с текстовыми файлами, но раз вопрос был сформулирован именно так, то вот вариант решения.
Главная форма приложения MainForm выглядит следующим образом:



Форма ввода данных о работнике - InputForm - вызывается из обработчика события активации меню void __fastcall TMainForm::InputDataMenuItemClick(TObject *Sender).
Данные о работниках загружаются в вектор объектов класса TWorker - член класса главной формы.
Класс работника TWorker объявлен в заголовочном файле TWorker.h.
Сортировка по фамилии реализована в меню "Поиск".
В остальном - см. приложение, код комментирован.
Файл проекта Borland Developer Studio 2006 прикреплён к ответу.

Приложение:
// Файл TWorker.h
// Класс работника
//---------------------------------------------------------------------------
#ifndef _TWorker_h_
#define _TWorker_h_
//---------------------------------------------------------------------------
enum TSex {Male = 0, Female = 1, Unknown = 2};
//---------------------------------------------------------------------------
class TWorker
{
public:
TWorker() {}; // Пустой конструктор

AnsiString sLastName; // Фамилия
AnsiString sName; // Имя
AnsiString sMiddleName; // Отчество
TSex Sex; // Пол
AnsiString sAddress; // Адрес
AnsiString sAppointment; // Должность
AnsiString sSeniority; // Стаж
AnsiString sEducation; // Образование
AnsiString sPhone; // Телефон
};
//---------------------------------------------------------------------------
#endif

// Файл InputUnit.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "InputUnit.h"
#include "TWorker.h"
#include "MainUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TInputForm *InputForm;
//---------------------------------------------------------------------------
__fastcall TInputForm::TInputForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TInputForm::CancelButtonClick(TObject *Sender)
{
InputForm->Close();
}
//---------------------------------------------------------------------------
void __fastcall TInputForm::ClearButtonClick(TObject *Sender)
{
NameEdit->Clear();
MiddleNameEdit->Clear();
LastNameEdit->Clear();
AddressEdit->Clear();
AppointmentEdit->Clear();
SeniorityEdit->Clear();
EducationEdit->Clear();
PhoneEdit->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TInputForm::SubmitButtonClick(TObject *Sender)
{
if(NameEdit->Text.IsEmpty() ||
MiddleNameEdit->Text.IsEmpty() ||
LastNameEdit->Text.IsEmpty() ||
AddressEdit->Text.IsEmpty() ||
AppointmentEdit->Text.IsEmpty() ||
SeniorityEdit->Text.IsEmpty() ||
EducationEdit->Text.IsEmpty() ||
PhoneEdit->Text.IsEmpty())
{
MessageBox(0, "Введите данные!", "Ошибка!", MB_ICONWARNING | MB_OK);
return;
}

TWorker TmpWorker;
TmpWorker.sName = NameEdit->Text;
TmpWorker.sMiddleName = MiddleNameEdit->Text;
TmpWorker.sLastName = LastNameEdit->Text;
if(SexBox->Text == "Мужской") TmpWorker.Sex = Male;
else if(SexBox->Text == "Женский") TmpWorker.Sex = Female;
else if(SexBox->Text == "Не указан") TmpWorker.Sex = Unknown;
TmpWorker.sAddress = AddressEdit->Text;
TmpWorker.sAppointment = AppointmentEdit->Text;
TmpWorker.sSeniority = SeniorityEdit->Text;
TmpWorker.sEducation = EducationEdit->Text;
TmpWorker.sPhone = PhoneEdit->Text;
MainForm->Worker.push_back(TmpWorker);

this->ClearButtonClick(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TInputForm::FormCloseQuery(TObject *Sender, bool &CanClose)
{
if(MainForm->Worker.size() == 0) return;
MainForm->ShowWorkers(); // Если список работников не пуст, показываем его
}
//---------------------------------------------------------------------------

// Файл MainUnit.h
//---------------------------------------------------------------------------

#ifndef MainUnitH
#define MainUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
#include "TWorker.h"
#include <Menus.hpp>
#include <Dialogs.hpp>
#include <Grids.hpp> // Подключаем класс работника
//---------------------------------------------------------------------------
#include <vector>
using namespace std;
//---------------------------------------------------------------------------
class TMainForm : public TForm
{
__published: // IDE-managed Components
TMainMenu *MainMenu;
TMenuItem *DataMenuItem;
TMenuItem *LoadDataMenuItem;
TOpenDialog *OpenDialog;
TMenuItem *N1;
TMenuItem *ExitMenuItem;
TStringGrid *WorkersGrid;
TMenuItem *InputDataMenuItem;
TMenuItem *SearchMenuItem;
TMenuItem *SearchByLastNameMenuItem;
TMenuItem *ShowMenuItem;
TSaveDialog *SaveDialog;
TMenuItem *SaveDataMenuItem;
TMenuItem *N2;
TMenuItem *N3;
TMenuItem *SortByLastNameMenuItem;
void __fastcall LoadDataMenuItemClick(TObject *Sender);
void __fastcall ExitMenuItemClick(TObject *Sender);
void __fastcall InputDataMenuItemClick(TObject *Sender);
void __fastcall SearchByLastNameMenuItemClick(TObject *Sender);
void __fastcall ShowMenuItemClick(TObject *Sender);
void __fastcall SaveDataMenuItemClick(TObject *Sender);
void __fastcall SortByLastNameMenuItemClick(TObject *Sender);
private:
void ShowSortedByLastName(); // Показать список работников, отсортированный по фамилии
public:
vector<TWorker> Worker; // Список работников

void ShowWorkers(); // Показать список работников
__fastcall TMainForm(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TMainForm *MainForm;
//---------------------------------------------------------------------------
#endif

// Файл MainUnit.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "MainUnit.h"
#include "InputUnit.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] = "Отчество";
WorkersGrid->Cells[4][0] = "Пол";
WorkersGrid->Cells[5][0] = "Адрес";
WorkersGrid->Cells[6][0] = "Должность";
WorkersGrid->Cells[7][0] = "Стаж";
WorkersGrid->Cells[8][0] = "Образование";
WorkersGrid->Cells[9][0] = "Телефон";
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::LoadDataMenuItemClick(TObject *Sender)
{
this->Worker.clear(); // Очищаем вектор перед загрузкой новых данных
AnsiString sFileName; // Название файла для чтения
if(OpenDialog->Execute())
{
sFileName = OpenDialog->FileName; // Выбор пользователя

TStringList* pTmpStrings = new TStringList(); // Список строк для загруженных данных
TWorker TmpWorker;
pTmpStrings->LoadFromFile(sFileName); // Загружаем строки из файла
int iLines = 0; // Загружено строк
int iElement = 0; // Номер члена загружаемого объекта
while(iLines != (pTmpStrings->Count - 1))
{
if(iElement == 0)
{
TmpWorker.sLastName = pTmpStrings->Strings[iLines];
iElement++;
iLines++;
}
else if(iElement == 1)
{
TmpWorker.sName = pTmpStrings->Strings[iLines];
iElement++;
iLines++;
}
else if(iElement == 2)
{
TmpWorker.sMiddleName = pTmpStrings->Strings[iLines];
iElement++;
iLines++;
}
else if(iElement == 3)
{
TSex Sex = (TSex)StrToInt(pTmpStrings->Strings[iLines]);
TmpWorker.Sex = Sex;
iElement++;
iLines++;
}
else if(iElement == 4)
{
TmpWorker.sAddress = pTmpStrings->Strings[iLines];
iElement++;
iLines++;
}
else if(iElement == 5)
{
TmpWorker.sAppointment = pTmpStrings->Strings[iLines];
iElement++;
iLines++;
}
else if(iElement == 6)
{
TmpWorker.sSeniority = pTmpStrings->Strings[iLines];
iElement++;
iLines++;
}
else if(iElement == 7)
{
TmpWorker.sEducation = pTmpStrings->Strings[iLines];
iElement++;
iLines++;
}
else if(iElement == 8)
{
TmpWorker.sPhone = pTmpStrings->Strings[iLines];
iElement++;
iLines++;
}
else if(iElement == 9)
{
iElement = 0; // Новый элемент для загрузки - первый член
this->Worker.push_back(TmpWorker); // Добавляем загруженные данные работника в вектор
iLines++;
}
}
delete pTmpStrings;
}
else return;

if(Worker.size() == 0)
{
MessageBox(0, "Нет введённых данных о работниках!", "Ошибка!", MB_ICONWARNING | MB_OK);
return;
}

this->ShowWorkers(); // Если список работников не пуст, показываем его
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ExitMenuItemClick(TObject *Sender)
{
MainForm->Close(); // Завершаем работу программы
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::InputDataMenuItemClick(TObject *Sender)
{
InputForm->ShowModal(); // Показываем диалог ввода данных о работнике
}
//---------------------------------------------------------------------------
void TMainForm::ShowWorkers()
{
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].sLastName;
WorkersGrid->Cells[2][i + 1] = Worker[i].sName;
WorkersGrid->Cells[3][i + 1] = Worker[i].sMiddleName;
if(Worker[i].Sex == Male) WorkersGrid->Cells[4][i + 1] = "Мужской";
else if(Worker[i].Sex == Female) WorkersGrid->Cells[4][i + 1] = "Женский";
else if(Worker[i].Sex == Unknown) WorkersGrid->Cells[4][i + 1] = "Не указан";
WorkersGrid->Cells[5][i + 1] = Worker[i].sAddress;
WorkersGrid->Cells[6][i + 1] = Worker[i].sAppointment;
WorkersGrid->Cells[7][i + 1] = Worker[i].sSeniority;
WorkersGrid->Cells[8][i + 1] = Worker[i].sEducation;
WorkersGrid->Cells[9][i + 1] = Worker[i].sPhone;
}
}
//---------------------------------------------------------------------------
void TMainForm::ShowSortedByLastName()
{
if(Worker.size() == 0) 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;
}
}
}

this->ShowWorkers();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::SearchByLastNameMenuItemClick(TObject *Sender)
{
if(Worker.size() == 0)
{
MessageBox(0, "Нет введённых данных о работниках!", "Ошибка!", MB_ICONWARNING | MB_OK);
return;
}

AnsiString sSearchString = InputBox("Поиск", "Введите фамилию для поиска:", "");
if(sSearchString.IsEmpty())
{
MessageBox(0, "Не введена фамилия для поиска!", "Ошибка", MB_ICONWARNING | MB_OK);
return;
}

int iFound = 0; // Найдено элементов
WorkersGrid->RowCount = 2;
WorkersGrid->Rows[1]->Clear(); // Очищаем таблицу
WorkersGrid->FixedRows = 1;
for(unsigned i = 0; i < Worker.size(); ++i)
{
if(Worker[i].sLastName == sSearchString) // Если фамилия работника совпадает с данными поиска...
{
iFound++; // ...добавляем работника в список
WorkersGrid->RowCount = iFound + 1;
WorkersGrid->Cells[0][iFound] = IntToStr(i + 1);
WorkersGrid->Cells[1][iFound] = Worker[i].sLastName;
WorkersGrid->Cells[2][iFound] = Worker[i].sName;
WorkersGrid->Cells[3][iFound] = Worker[i].sMiddleName;
if(Worker[i].Sex == Male) WorkersGrid->Cells[4][iFound] = "Мужской";
else if(Worker[i].Sex == Female) WorkersGrid->Cells[4][iFound] = "Женский";
else if(Worker[i].Sex == Unknown) WorkersGrid->Cells[4][iFound] = "Не указан";
WorkersGrid->Cells[5][iFound] = Worker[i].sAddress;
WorkersGrid->Cells[6][iFound] = Worker[i].sAppointment;
WorkersGrid->Cells[7][iFound] = Worker[i].sSeniority;
WorkersGrid->Cells[8][iFound] = Worker[i].sEducation;
WorkersGrid->Cells[9][iFound] = Worker[i].sPhone;
}
}

if(iFound == 0) MessageBox(0, "Фамилии нет в списке.", "Нет совпадений", MB_ICONINFORMATION | MB_OK);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ShowMenuItemClick(TObject *Sender)
{
if(Worker.size() == 0)
{
MessageBox(0, "Нет введённых данных о работниках!", "Ошибка!", MB_ICONWARNING | MB_OK);
return;
}

this->ShowWorkers();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::SaveDataMenuItemClick(TObject *Sender)
{
if(Worker.size() == 0)
{
MessageBox(0, "Нет введённых данных о работниках!", "Ошибка!", MB_ICONWARNING | MB_OK);
return;
}

AnsiString sFileName; // Название файла для записи
if(SaveDialog->Execute())
{
sFileName = SaveDialog->FileName; // Выбор пользователя
TStringList* pTmpStrings = new TStringList(); // Список строк для загрузки данных из вектора
for(unsigned i = 0; i < Worker.size(); ++i)
{
pTmpStrings->Add(Worker[i].sLastName);
pTmpStrings->Add(Worker[i].sName);
pTmpStrings->Add(Worker[i].sMiddleName);
if(Worker[i].Sex == Male) pTmpStrings->Add("0");
else if(Worker[i].Sex == Female) pTmpStrings->Add("1");
else if(Worker[i].Sex == Unknown) pTmpStrings->Add("2");
pTmpStrings->Add(Worker[i].sAddress);
pTmpStrings->Add(Worker[i].sAppointment);
pTmpStrings->Add(Worker[i].sSeniority);
pTmpStrings->Add(Worker[i].sEducation);
pTmpStrings->Add(Worker[i].sPhone);
pTmpStrings->Add("***");
}
pTmpStrings->Add(""); // Последняя строка файла - пустая
pTmpStrings->SaveToFile(sFileName); // Сохраняем данные в файл
delete pTmpStrings;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::SortByLastNameMenuItemClick(TObject *Sender)
{
if(Worker.size() == 0)
{
MessageBox(0, "Нет введённых данных о работниках!", "Ошибка!", MB_ICONWARNING | MB_OK);
return;
}
this->ShowSortedByLastName(); // Сортируем по фамилии и показываем список работников
}
//---------------------------------------------------------------------------
5
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
20.03.2010, 10:16
общий
Еще раз здравствуйте.В коде
Код:

void TMainForm::ShowWorkers()
{
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].sLastName;
WorkersGrid->Cells[2][i + 1] = Worker[i].sName;
WorkersGrid->Cells[3][i + 1] = Worker[i].sMiddleName;
if(Worker[i].Sex == Male) WorkersGrid->Cells[4][i + 1] = "Мужской";
else if(Worker[i].Sex == Female) WorkersGrid->Cells[4][i + 1] = "Женский";
else if(Worker[i].Sex == Unknown) WorkersGrid->Cells[4][i + 1] = "Не указан";
WorkersGrid->Cells[5][i + 1] = Worker[i].sAddress;
WorkersGrid->Cells[6][i + 1] = Worker[i].sAppointment;
WorkersGrid->Cells[7][i + 1] = Worker[i].sSeniority;
WorkersGrid->Cells[8][i + 1] = Worker[i].sEducation;
WorkersGrid->Cells[9][i + 1] = Worker[i].sPhone;
}
}


компилятор показывает ошибку

[BCC32 Error] MainUnit.cpp(133): E2015 Ambiguity between '_fastcall Sysutils::IntToStr(int) at e:\program files\embarcadero\rad studio\7.0\include\vcl\SysUtils.hpp:2093' and '_fastcall Sysutils::IntToStr(__int64) at e:\program files\embarcadero\rad studio\7.0\include\vcl\SysUtils.hpp:2096'

не подскажите как её исправить?

И спасибо вам огромное за сделанный труд.
давно
Старший Модератор
17042
808
20.03.2010, 10:28
общий
novij2011:
Попробуйте так:

Код:

WorkersGrid->Cells[0][i + 1] = IntToStr((int)(i + 1));
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
20.03.2010, 10:56
общий
Спасибо. Ошибка исчезла.
Неизвестный
20.03.2010, 11:18
общий
И еще хотелось бы узнать про эти строчки
>
Код:
#ifndef _TWorker_h_
#define _TWorker_h_
//---------------------------------------------------------------------------
enum TSex {Male = 0, Female = 1, Unknown = 2};


и
Код:
include<TWorker.h


что они означают? и почему подключается библиотека include<TWorker.h. Её же нет в стандартных библиотеках?
давно
Старший Модератор
17042
808
20.03.2010, 15:02
общий
novij2011:
Конструкция

Код:

#ifndef <Название заголовочного файла>
#define <Название заголовочного файла>

// Какой-то код...

#endif


называется защитой включения (include guard) — это особая конструкция, применяемая для избежания проблем с "двойным подключением" при использовании директивы препроцессора #include.

Что касается

Код:

enum TSex {Male = 0, Female = 1, Unknown = 2};


Это мы объявили т.н. перечислимый тип (enumeration) для кодирования пола. Если пол будет кодироваться строкой, то есть вероятность ошибки (например, для мужского пола может быть введено "М", "м", "муж", "мужской"). Можно кодировать пол целым числом, но тогда возникает вероятность ошибки типа Worker.Sex = 666; т.е. выхода за пределы кодирующих значений. Перечислимый тип позволяет вводить только предусмотренные значения (в нашем случае Male, Female и Unknown). В то же время перечислимый тип может быть легко приведён к целому.

Цитата: 324805
и почему подключается библиотека include<TWorker.h. Её же нет в стандартных библиотеках?


Мы сами создали заголовочный файл TWorker.h, объявив в нём перечислимый тип TSex и класс TWorker. Прошу обратить внимание, что подключаем этот файл мы не в угловых скобках, как стандартные заголовочные файлы (они ищутся компилятором в папке include среды разработки), а в кавычках (эти файлы ищутся компилятором в папке программы).
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
20.03.2010, 16:34
общий
а можно у вас еще узнать что обозначают эти строчки

void __fastcall TInputForm::SubmitButtonClick(TObject *Sender)
{
if(NameEdit->Text.IsEmpty() ||
MiddleNameEdit->Text.IsEmpty() ||
phoneEdit->Text.IsEmpty())

TWorker TmpWorker;
TmpWorker.sName = NameEdit->Text;

TmpWorker.sAddress = AddressEdit->Text;

MainForm->Worker.push_back(TmpWorker);

this->ClearButtonClick(Sender);
давно
Старший Модератор
17042
808
20.03.2010, 18:49
общий
novij2011:
Условие NameEdit->Text.IsEmpty() - если текст поля ввода (NameEdit->Text) пуст (IsEmpty()) или (||)... и далее проверяется текст всех других полей ввода.

Код:

TWorker TmpWorker;
TmpWorker.sName = NameEdit->Text;


- создаём объект TmpWorker класса TWorker. После этого свойству sName объекта присваиваем текст из поля ввода NameEdit.

Код:

TmpWorker.sAddress = AddressEdit->Text;


Свойству sAddress объекта присваиваем текст из поля ввода AddressEdit.

Код:

MainForm->Worker.push_back(TmpWorker);


Об этом я Вам уже писал. Добавляем объект TmpWorker в конец (push_back) вектора Worker главной формы (MainForm).

Код:

this->ClearButtonClick(Sender);


Вызываем функцию - обработчик события щелчка по кнопке ClearButton (хотя по кнопке реально никто не щёлкал). Это делается для того, чтобы очистить поля ввода для добавления информации о новом работнике.
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
20.03.2010, 18:59
общий
спасибо вам![
Форма ответа