Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
4 / 2 / 2
Регистрация: 17.03.2013
Сообщений: 106
1

Программа, которая выводит в StringGrid1 заданные пользователем значения

20.05.2013, 15:04. Просмотров 3313. Ответов 17
Метки нет (Все метки)


Нужно сделать программу которая выводит в StringGrid1 заданные пользователем значения, они вводятся в Edit1-Edit6 (используется структура), еще нужно реализовать сохранение таблицы в файл, удаление строки и столбца, изменение данных в ячейке таблицы.
Вот сама структура:
C++
1
2
3
4
5
6
7
8
9
struct employee
{char name[64];
char years[3];
char last_name[64];
long employee_id;
float salary;
char phone[10];
int office_number;};
employee worker;
так-то нужно еще сделать какую-либо сортировку, но мне бы сперва все остальное сделать.
Плиз только не нужно использовать сложных функций, лучше как-нибудь попроще и попонятней.

Добавлено через 19 минут
char years[3];- не надо, извиняюсь.

Добавлено через 55 минут
Вот что у меня пока получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//структура сотрудник
struct employee
{float name;
float last_name;
float employee_id;
float salary;
float phone;
float office_number;};
employee worker;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button6Click(TObject *Sender)
{
//вывод данных
// получить данные из полей ввода
worker.name=StrToFloat(Edit1 -> Text);
worker.last_name=StrToFloat(Edit2 -> Text);
worker.employee_id=StrToFloat(Edit3 -> Text);
worker.salary=StrToFloat(Edit4 -> Text);
worker.phone=StrToFloat(Edit5 -> Text);
worker.office_number=StrToFloat(Edit6 -> Text);
// вывести результат в таблице
StringGrid1->Cells[1][0]=FloatToStrF(worker.name);
StringGrid1->Cells[2][0]=FloatToStrF(worker.last_name);
StringGrid1->Cells[3][0]=FloatToStrF(worker.employee_id);
StringGrid1->Cells[4][0]=FloatToStrF(worker.salary);
StringGrid1->Cells[5][0]=FloatToStrF(worker.phone);
StringGrid1->Cells[6][0]=FloatToStrF(worker.office_number);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
//выход
Forml -> Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
//удаление строки
int i;
i=StrToFloat(Edit7 -> Text);
class TPublicGrid: public  TStringGrid
{
public:
using TStringGrid::DeleteRow;
};
for (int i = StringGrid1->RowCount ; i--;)
{
if(Form1->StringGrid1->Cells[1][i] == "")
((TPublicGrid*)StringGrid1)->DeleteRow(i);
}
}
//---------------------------------------------------------------------------
Понятно что не работает, вот код ошибки компилятора:
[C++ Error] Unit1.cpp(32): E2060 Illegal use of floating point
[C++ Error] Unit1.cpp(33): E2277 Lvalue required
[C++ Error] Unit1.cpp(36): E2277 Lvalue required
[C++ Error] Unit1.cpp(39): E2034 Cannot convert 'char *' to 'long double'
[C++ Error] Unit1.cpp(39): E2342 Type mismatch in parameter 'Value' (wanted 'long double', got 'char *')
[C++ Error] Unit1.cpp(39): E2193 Too few parameters in call to '_fastcall FloatToStrF(long double,TFloatFormat,int,int)'
[C++ Error] Unit1.cpp(40): E2034 Cannot convert 'char *' to 'long double'
[C++ Error] Unit1.cpp(40): E2342 Type mismatch in parameter 'Value' (wanted 'long double', got 'char *')
[C++ Error] Unit1.cpp(40): E2193 Too few parameters in call to '_fastcall FloatToStrF(long double,TFloatFormat,int,int)'
[C++ Error] Unit1.cpp(41): E2193 Too few parameters in call to '_fastcall FloatToStrF(long double,TFloatFormat,int,int)'
[C++ Error] Unit1.cpp(42): E2193 Too few parameters in call to '_fastcall FloatToStrF(long double,TFloatFormat,int,int)'
[C++ Error] Unit1.cpp(43): E2034 Cannot convert 'char *' to 'long double'
[C++ Error] Unit1.cpp(43): E2342 Type mismatch in parameter 'Value' (wanted 'long double', got 'char *')
[C++ Error] Unit1.cpp(43): E2193 Too few parameters in call to '_fastcall FloatToStrF(long double,TFloatFormat,int,int)'
[C++ Error] Unit1.cpp(44): E2193 Too few parameters in call to '_fastcall FloatToStrF(long double,TFloatFormat,int,int)'
[C++ Error] Unit1.cpp(50): E2451 Undefined symbol 'Forml'
[C++ Warning] Unit1.cpp(68): W8004 'i' is assigned a value that is never used

Добавлено через 40 минут
Исправил часть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button4Click(TObject *Sender)
{
//удаление строки
class TPublicGrid: public  TStringGrid
{
public:
using TStringGrid::DeleteRow;
};
for (int i = StringGrid1->RowCount ; i--;)
{
if(Form1->StringGrid1->Cells[1][i] == "")
((TPublicGrid*)StringGrid1)->DeleteRow(i);
}
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2013, 15:04
Ответы с готовыми решениями:

StringGrid1->Cells[0][1048560] выводит ошибку. Почему?
Мне нужно вывести 36 миллионов значений в один столбец StringGrid. Если я пишу unsigned long long...

Задать начальные значения положения для линии которая рисуется пользователем вручную
У меня есть код который рисует линию за мышкой в елементе image1. Image1-&gt;Canvas-&gt;LineTo(X, Y); ...

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

Программа, которая выводит на экран в шестнадцатеричных кодах значения
Написать программу, которая выводит на экран в шестнадцатеричных кодах значения, содержащиеся в...

17
Почетный модератор
Эксперт С++
5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
20.05.2013, 15:05 2
Смотрите, вы вводите
C++
1
2
3
4
...
float name;
...
worker.name=StrToFloat(Edit1 -> Text);
То есть из Edit1 вы хотите поместить имя работника в переменную name структуры worker, которая имеет тип с плавающей точкой. Еще раз: текст в значение с плавающей точкой. Букву в цифру.
StrToFloat действительно преобразует переданное в него значение в тип float, но только если это будет хотя бы число. А по хорошему еще и правильно оформленное число.
0
4 / 2 / 2
Регистрация: 17.03.2013
Сообщений: 106
20.05.2013, 15:11  [ТС] 3
Пропала ошибка:
[C++ Warning] Unit1.cpp(68): W8004 'i' is assigned a value that is never used

Добавлено через 2 минуты
Нет-нет структура такая:
C++
1
2
3
4
5
6
7
8
struct employee
{char name[64];
char last_name[64];
long employee_id;
float salary;
char phone[10];
int office_number;};
employee worker;
Просто экспериментировал со структурой и забыл исправить

Добавлено через 3 минуты
Чего-то я не понимаю, если тип char, то должно быть StrToChar? Так что-ли.
0
Почетный модератор
Эксперт С++
5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
20.05.2013, 15:21 4
Цитата Сообщение от demigod324 Посмотреть сообщение
если тип char, то должно быть StrToChar?
Нет. String это и есть массив char-ов.
Попробуйте заместо char name[64]; в структуре объявить String name;
Или, если так хочется использовать массив символов, то так и пишите: StringGrid1->Cells[1][0]=worker.name;
0
4 / 2 / 2
Регистрация: 17.03.2013
Сообщений: 106
20.05.2013, 15:38  [ТС] 5
Но StringGrid1->Cells[1][0]=worker.name; - это ввод в таблицу, а данные то надо откуда-то брать, но в строке
worker.name=StrToFloat(Edit1 -> Text); ошибка. А если я сделаю String name, то
StringGrid1->Cells[1][0]=CharToStrF(worker.name); так и оставить?

Добавлено через 2 минуты
Еще нашел сохранение и загрузку:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void __fastcall SaveCells( TStringGrid* StringGrid, const AnsiString& FileName)
{
//сохранение
  std::auto_ptr<TStrings> SaveStrings( new TStringList());
  const int col_count =StringGrid->ColCount;
  for (int index = 0; index < col_count; ++index)
 
 {
    SaveStrings->AddStrings(
      StringGrid->Cols[index]);
  }
  SaveStrings->SaveToFile(FileName);
}
//---------------------------------------------------------------------------
void __fastcall LoadCells(TStringGrid* StringGrid, const AnsiString& FileName)
{
//загрузка
  std::auto_ptr<TStrings> LoadStrings( new TStringList());
  LoadStrings->LoadFromFile(FileName);
 
  int index = 0;
  const int col_count =  StringGrid->ColCount;
  const int row_count =  StringGrid->RowCount;
  for (int col=0;col<col_count;++col)
  {
     for (int row=0;row<row_count;++row)
     {
        StringGrid->Cells[col][row] = LoadStrings->Strings[index++];
     }
  }
}
Можно ли тупо вставить, если нет, то что надо изменить. И пожалуйста объясните каким образом это работает?

Добавлено через 1 минуту
Не если делаю string name сразу выдает ошибку.
0
Почетный модератор
Эксперт С++
5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
20.05.2013, 15:39 6
Цитата Сообщение от demigod324 Посмотреть сообщение
А если я сделаю String name, то StringGrid1->Cells[1][0]=CharToStrF(worker.name); так и оставить?
Если все объявите как String, то проблем вообще не будет: у StringGrid1->Cells[1][0] тип String, у Edit->Text тоже тип String. И передавать их друг другу можно будет с помощью обычного оператора присваивания =. Никакие CharToMagic не потребуются.

Цитата Сообщение от demigod324 Посмотреть сообщение
в строке worker.name=StrToFloat(Edit1 -> Text); ошибка
Уберите StrToFloat.
0
4 / 2 / 2
Регистрация: 17.03.2013
Сообщений: 106
20.05.2013, 15:40  [ТС] 7
Извиняюсь забыл добавить using namespace std;
Теперь робит)
0
Почетный модератор
Эксперт С++
5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
20.05.2013, 15:41 8
Цитата Сообщение от demigod324 Посмотреть сообщение
Не если делаю string name сразу выдает ошибку.
String
0
4 / 2 / 2
Регистрация: 17.03.2013
Сообщений: 106
20.05.2013, 15:47  [ТС] 9
А скобки оставить?
Так должно выглядеть:
C++
1
2
worker.name=(Edit1 -> Text);
StringGrid1->Cells[1][0]=worker.name;
Добавлено через 2 минуты
Написал с большой буквы, без скобок. Теперь ближайшая ошибка у выхода:
C++
1
2
3
4
5
void __fastcall TForm1::Button5Click(TObject *Sender)
{
//выход
Forml -> Close();
}
Добавлено через 1 минуту
Все тупанул вместо 1 поставил l
0
Почетный модератор
Эксперт С++
5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
20.05.2013, 15:47 10
Цитата Сообщение от demigod324 Посмотреть сообщение
А скобки оставить?
Так должно выглядеть:
worker.name=(Edit1 -> Text);
StringGrid1->Cells[1][0]=worker.name;
Лучше убрать. Они бессмысленны тут.
И тем не менее вам придется каким-то образом защитить свою программу от ввода цифр с строковое поле и ввода букв в числовое.
0
4 / 2 / 2
Регистрация: 17.03.2013
Сообщений: 106
20.05.2013, 15:54  [ТС] 11
Скомпилировал, ошибок не выдает, выдает это:
[Linker Error] Unresolved external '__fastcall TForm1::StringGrid1Click(System::TObject *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ

[Linker Error] Unresolved external '__fastcall TForm1::Button1Click(System::TObject *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ

Добавлено через 2 минуты
Защиту я сделаю когда буду улучшать свою программу. Сейчас надо сделать основу, я просто впервые делаю в Form, раньше делал в Console Wizard)

Добавлено через 2 минуты
Подожди так в строковую строковое поле нельзя вводить цифры, то есть в String name вводим только буквы
0
Почетный модератор
Эксперт С++
5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
20.05.2013, 15:56 12
Цитата Сообщение от demigod324 Посмотреть сообщение
Скомпилировал, ошибок не выдает, выдает это:
[Linker Error] Unresolved external '__fastcall TForm1::StringGrid1Click(System::TObject *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
[Linker Error] Unresolved external '__fastcall TForm1::Button1Click(System::TObject *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
Это означает, что вы когда-то добавили кнопку и стрингрид на форму, а потом удалили руками коды обработчиков.
Добавьте куда угодно вне функций следующий код и попробуйте скомпилировать еще раз:
C++
1
2
void __fastcall TForm1::Button1Click(System::TObject *){}
void __fastcall TForm1::StringGrid1Click(System::TObject *){}
Цитата Сообщение от demigod324 Посмотреть сообщение
Подожди так в строковую строковое поле нельзя вводить цифры, то есть в String name вводим только буквы
Это по логике. А если кто-нибудь захочет специально туда ввести цифры? Вот от этого и нужно защищать.
C++
1
String name = "2323423G";
0
4 / 2 / 2
Регистрация: 17.03.2013
Сообщений: 106
20.05.2013, 16:07  [ТС] 13
Если да то строки
C++
1
2
3
4
String employee_id;
String salary;
String phone;
String office_number;
Лучше переделать в
C++
1
2
3
4
int employee_id;
int salary;
int phone;
int office_number;
Тогда как будут выглядеть
C++
1
2
3
4
worker.employee_id=Edit3 -> Text;
worker.salary=Edit4 -> Text;
worker.phone=Edit5 -> Text;
worker.office_number=Edit6 -> Text;
и
C++
1
2
3
4
StringGrid1->Cells[3][0]=worker.employee_id;
StringGrid1->Cells[4][0]=worker.salary;
StringGrid1->Cells[5][0]=worker.phone;
StringGrid1->Cells[6][0]=worker.office_number;
Добавлено через 5 минут
А не извиняюсь, можно и цифры, что-то тупанул, еще начал с позиции (0,0) тоже сначала не заметил

Добавлено через 4 минуты
Теперь все выглядит вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <memory>
#include "Unit1.h"
#include <string>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
using namespace std;
//структура сотрудник
struct employee
{String name;
String last_name;
String employee_id;
String salary;
String phone;
String office_number;};
employee worker;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button6Click(TObject *Sender)
{
//вывод данных
// получить данные из полей ввода
worker.name=Edit1 -> Text;
worker.last_name=Edit2 -> Text;
worker.employee_id=Edit3 -> Text;
worker.salary=Edit4 -> Text;
worker.phone=Edit5 -> Text;
worker.office_number=Edit6 -> Text;
// вывести результат в таблице
StringGrid1->Cells[0][0]=worker.name;
StringGrid1->Cells[1][0]=worker.last_name;
StringGrid1->Cells[2][0]=worker.employee_id;
StringGrid1->Cells[3][0]=worker.salary;
StringGrid1->Cells[4][0]=worker.phone;
StringGrid1->Cells[5][0]=worker.office_number;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
//выход
Form1 -> Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
//удаление строки
class TPublicGrid: public  TStringGrid
{
public:
using TStringGrid::DeleteRow;
};
for (int i = StringGrid1->RowCount ; i--;)
{
if(Form1->StringGrid1->Cells[1][i] == "")
((TPublicGrid*)StringGrid1)->DeleteRow(i);
}
}
//---------------------------------------------------------------------------
void __fastcall SaveCells( TStringGrid* StringGrid, const AnsiString& FileName)
{
//сохранение
  std::auto_ptr<TStrings> SaveStrings( new TStringList());
  const int col_count =StringGrid->ColCount;
  for (int index = 0; index < col_count; ++index)
 
 {
    SaveStrings->AddStrings(
      StringGrid->Cols[index]);
  }
  SaveStrings->SaveToFile(FileName);
}
//---------------------------------------------------------------------------
void __fastcall LoadCells(TStringGrid* StringGrid, const AnsiString& FileName)
{
//загрузка
  std::auto_ptr<TStrings> LoadStrings( new TStringList());
  LoadStrings->LoadFromFile(FileName);
 
  int index = 0;
  const int col_count =  StringGrid->ColCount;
  const int row_count =  StringGrid->RowCount;
  for (int col=0;col<col_count;++col)
  {
     for (int row=0;row<row_count;++row)
     {
        StringGrid->Cells[col][row] = LoadStrings->Strings[index++];
     }
  }
}
Но мне нужно чтобы данные сначала добавлялись в первую строку затем во вторую и т.д. Еще не работает сохранение, загрузка и удаление строки. Также не знаю как удалить столбец
0
Почетный модератор
Эксперт С++
5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
20.05.2013, 16:20 14
Цитата Сообщение от demigod324 Посмотреть сообщение
Но мне нужно чтобы данные сначала добавлялись в первую строку затем во вторую и т.д.
Меняйте второй индекс у ячеек:
C++
1
2
3
4
5
6
StringGrid1->Cells[0][0]=worker.name;
StringGrid1->Cells[1][0]=worker.last_name;
StringGrid1->Cells[2][0]=worker.employee_id;
StringGrid1->Cells[3][0]=worker.salary;
StringGrid1->Cells[4][0]=worker.phone;
StringGrid1->Cells[5][0]=worker.office_number;
Можно объявить глобальную переменную и в ней вести счетчик добавленных пользователей.
C++
1
2
int GlobalRowCount = 0;
StringGrid1->Cells[5][GlobalRowCount++]=worker.office_number;
И вообще нафига вам структура? Коли можно сразу из Edit-ов пихать в StringGrid.
0
4 / 2 / 2
Регистрация: 17.03.2013
Сообщений: 106
20.05.2013, 16:40  [ТС] 15
Такое условие было в РГЗ (Расчетно графическое задание)

Добавлено через 5 минут
То есть будет выглядеть вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
StringGrid1->Cells[0][0]=worker.name;
StringGrid1->Cells[1][0]=worker.last_name;
StringGrid1->Cells[2][0]=worker.employee_id;
StringGrid1->Cells[3][0]=worker.salary;
StringGrid1->Cells[4][0]=worker.phone;
StringGrid1->Cells[5][0]=worker.office_number;
StringGrid1->Cells[0][GlobalRowCount++]=worker.name;
StringGrid1->Cells[1][GlobalRowCount++]=worker.last_name;
StringGrid1->Cells[2][GlobalRowCount++]=worker.employee_id;
StringGrid1->Cells[3][GlobalRowCount++]=worker.salary;
StringGrid1->Cells[4][GlobalRowCount++]=worker.phone;
StringGrid1->Cells[5][GlobalRowCount++]=worker.office_number;
или уже с нулями не надо

Добавлено через 2 минуты
Таблицу получается надо сразу делать под размер всех данных, а можно сделать чтобы строки сами добавлялись

Добавлено через 4 минуты
Так что-то не выходит как этот счетчик реализовать? Просто ввожу данные, они выводятся, а новые просто перезаписывают старые
0
Почетный модератор
Эксперт С++
5842 / 2851 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
20.05.2013, 16:44 16
Цитата Сообщение от demigod324 Посмотреть сообщение
или уже с нулями не надо
Не надо.
Можно сделать веселее, без каких-то дополнительных переменных:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
StringGrid1->RowCount = 1;
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
StringGrid1->Cells[0][StringGrid1->RowCount]=worker.name;
StringGrid1->Cells[1][StringGrid1->RowCount]=worker.last_name;
StringGrid1->Cells[2][StringGrid1->RowCount]=worker.employee_id;
StringGrid1->Cells[3][StringGrid1->RowCount]=worker.salary;
StringGrid1->Cells[4][StringGrid1->RowCount]=worker.phone;
StringGrid1->Cells[5][StringGrid1->RowCount++]=worker.office_number;
}
0
4 / 2 / 2
Регистрация: 17.03.2013
Сообщений: 106
20.05.2013, 17:20  [ТС] 17
Спасибо, вообще круто, но мне нужна еще помощь с сохранением и загрузкой

Добавлено через 51 секунду
Что нужно изменить или есть способ проще

Добавлено через 17 минут
Нашел такой код, его можно переделать для моего
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
  TStringList *Table1 = new TStringList ;
  AnsiString file1 = "23\\1.333" ;
  int tek_pos ;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
  Table1->LoadFromFile(file1) ;
 
  StringGrid1->RowCount = Table1->Count ;
 
  for(int i = 0 ; i<StringGrid1->RowCount ; i++)
    {
      StringGrid1->Rows[i]->DelimitedText = Table1->Strings[i] ;
    }
 
  tek_pos = StringGrid1->RowCount ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  delete Table1 ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        Table1->Append("\n");
        StringGrid1->RowCount++;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
       if(StringGrid1->RowCount==2)
         {
           ShowMessage("            Далее некуда!            ") ;
         }
       else
         {
           Table1->Delete(StringGrid1->RowCount-1) ;
           StringGrid1->RowCount-- ;
         }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
  StringGrid1->Cells[0][tek_pos]=Edit1->Text;
  tek_pos++;
 
  if(tek_pos>StringGrid1->RowCount)
   {
      StringGrid1->RowCount++;
      Table1->Append("\n");
   }
 
  Edit1->Text="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
  for(int i = 0 ; i<StringGrid1->RowCount ; i++)
    {
      Table1->Strings[i] = StringGrid1->Rows[i]->DelimitedText  ;
    }
 
  Table1->SaveToFile(file1) ;
}
//---------------------------------------------------------------------------
Добавлено через 8 минут
Вот вроде удаление строки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void DeleteRowFromStringGrid(TStringGrid *Grid, int ARow)
{
        int count = Grid->RowCount; // всего строк
        int row = Grid->Row; // выбранная строка
 
        if ( count - Grid->FixedRows <= 1 ) return; // оставляет по крайней мере одну строку
 
        // --------------------------- Смещаем строки вверх ------------------------
        for ( ARow; ARow < count; ARow++ )
        {
                Grid->Rows[ARow] = Grid->Rows[ARow+1];
        }
        // --------------------------------------------------------------------------
 
        Grid->RowCount--;
        Grid->SetFocus();
}
Как привязать к Button
0
4 / 2 / 2
Регистрация: 17.03.2013
Сообщений: 106
20.05.2013, 23:50  [ТС] 18
Сделал прогу, но не знаю как сделать сохранение, загрузку(необязательно), удаление строки и столбца(необязательно), еще нужно как-то сделать сортировку по какому либо признаку
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <memory>
#include "Unit1.h"
#include <string>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
using namespace std;
//структура сотрудник
struct employee
{String name;
String last_name;
String employee_id;
String salary;
String phone;
String office_number;};
employee worker;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
StringGrid1->RowCount = 1;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button6Click(TObject *Sender)
{
//вывод данных
//получить данные из полей ввода
worker.name=Edit1 -> Text;
worker.last_name=Edit2 -> Text;
worker.employee_id=Edit3 -> Text;
worker.salary=Edit4 -> Text;
worker.phone=Edit5 -> Text;
worker.office_number=Edit6 -> Text;
// вывести результат в таблице
StringGrid1->Cells[0][StringGrid1->RowCount]=worker.name;
StringGrid1->Cells[1][StringGrid1->RowCount]=worker.last_name;
StringGrid1->Cells[2][StringGrid1->RowCount]=worker.employee_id;
StringGrid1->Cells[3][StringGrid1->RowCount]=worker.salary;
StringGrid1->Cells[4][StringGrid1->RowCount]=worker.phone;
StringGrid1->Cells[5][StringGrid1->RowCount++]=worker.office_number;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
//выход
Form1 -> Close();
}
//---------------------------------------------------------------------------


Добавлено через 1 час 7 минут
Добавил удаление и добавление строки, следовательно изменение данных в таблице)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <vcl.h>
#pragma hdrstop
#include <memory>
#include "Unit1.h"
#include <string>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
using namespace std;
//структура сотрудник
struct employee
{String name;
String last_name;
String employee_id;
String salary;
String phone;
String office_number;};
employee worker;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
StringGrid1->RowCount = 1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
StringGrid1->RowCount--;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
//вывод данных
//получить данные из полей ввода
worker.name=Edit1 -> Text;
worker.last_name=Edit2 -> Text;
worker.employee_id=Edit3 -> Text;
worker.salary=Edit4 -> Text;
worker.phone=Edit5 -> Text;
worker.office_number=Edit6 -> Text;
//вывод данных в таблице
StringGrid1->Cells[0][StringGrid1->RowCount]=worker.name;
StringGrid1->Cells[1][StringGrid1->RowCount]=worker.last_name;
StringGrid1->Cells[2][StringGrid1->RowCount]=worker.employee_id;
StringGrid1->Cells[3][StringGrid1->RowCount]=worker.salary;
StringGrid1->Cells[4][StringGrid1->RowCount]=worker.phone;
StringGrid1->Cells[5][StringGrid1->RowCount++]=worker.office_number;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
//выход
Form1 -> Close();
}
//-------------------------------------------------------------------------
 
 
 
void __fastcall TForm1::Button7Click(TObject *Sender)
{
StringGrid1->RowCount++;
}
//---------------------------------------------------------------------------
Добавлено через 4 часа 15 минут
Все сделал)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.05.2013, 23:50

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Разработайте программу, которая выполняет заданные действия и выводит результат в заданном формате
1. Введите с клавиатуры переменные x,z (типа float), вычислите выражение res=(4.2*x-z)2/3.5 и...

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

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.