Проста база даних

Програма Витрати являє собою текстовий файл. Для редагування та перегляду даних використовується компонент stringGrid. На початку роботи дані автоматично завантажуються в компонент stringGrid із файлу, наприкінці – записуються у файл.

Код написання програми

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
// *** налаштувати таблицю ***
StringGrid1->Options
<< goEditing // дозволити редагувати
<< goTabs; // Tab - перехід до наступної комірки
// заголовки стовпців
StringGrid1->Cells[0][0] = "Дата";
StringGrid1->Cells[1][0] = "Сума";
StringGrid1->Cells[2][0] = "Коментар";
}
void __fastcall TForm1::StringGrid1KeyPress(TObject *Sender, char &Key)
{
int cRow, cCol;
if ( Key == VK_RETURN)
{
// перемістити курсор у наступну клітинку
cRow = StringGrid1->Row;
cCol = StringGrid1->Col;
if ( cCol < StringGrid1->ColCount - 1 )
StringGrid1->Col = StringGrid1->Col + 1;
else
if ( cRow < StringGrid1->RowCount - 1 )
{
StringGrid1->Row = StringGrid1->Row + 1;
StringGrid1->Col =1 ;
}
}
}
// додати рядок
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// додати рядок у таблицю
StringGrid1->Row = StringGrid1->RowCount-1; // перейти до останнього рядка
StringGrid1->RowCount++; // додати рядок
StringGrid1->Row =
StringGrid1->RowCount-1; // перейти до останнього рядка
}
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
int f; // дескриптор файлу
/*файл можна відкрити в режимі fmCreate, тоді, якщо
файл існує, його буде відкрито для запису,
якщо файлу немає, то він буде створений */
if ( FileExists("tabl.grd") )
f = FileOpen("tabl.grd",fmOpenWrite);
//інакше
f = FileCreate("tabl.grd");
if ( f != -1)
{
// зберегти таблицю у файлі
for (int i = 1; i StringGrid1-RowCount; i++)
{
AnsiString st = StringGrid1->
Rows[i]->DelimitedText +"\r\n";
FileWrite(f,st.c_str(), st.Length());
}
FileClose(f);
}
else
// помилка доступу до файлу
ShowMessage ("Помилка доступу до файлу");
}
int GetLine(int f, AnsiString *st);// читає рядок із файлу
// завантажує таблицю з файлу
void __fastcall TForm1::FormActivate(TObject *Sender)
{
int f; // дескриптор файлу
AnsiString st; // прочитаний рядок
bool f1 = true; // true - читання першого рядка
if (( f = FileOpen("tabl.grd",fmOpenRead)) == -1 )
return;
// файл відкрито
// завантажити таблицю
while ( GetLine(f, &st) != 0)
{
// додати рядок у таблицю
if (f1)
{
StringGrid1->Rows[StringGrid1->Row]->
DelimitedText = st;
f1 = false;
}
else
{
StringGrid1->RowCount++;
StringGrid1->Row = StringGrid1->RowCount-1;
StringGrid1->Rows[StringGrid1->Row]->
DelimitedText = st;
}
}
FileClose(f);
}
// читає з файлу рядок символів
// від поточної позиції до символу "новий рядок"
// значення функції - кількість прочитаних символів
int GetLine(int f, AnsiString *st)
{
unsigned char buf[256]; // рядок (буфер)
unsigned char *p = buf; // покажчик на рядок
int n; // кількість прочитаних байт (значення ф-і FileRead)
int len = 0; // довжина рядка
n = FileRead(f, p, 1);
while ( n != 0)
{
if ( *p == '\r')
{
n = FileRead(f, p, 1); //прочитати'\n'
break;
}
len++;
p++;
n = FileRead(f, p, 1);
}
*p = '\0';
if ( len !=0)
st->printf("%s", buf) ;
return len;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *