Winni Назад Создать программу “Клиенты” для работы с файлом произвольного доступа.

Примечание: Создание справочной системы описано здесь, а также здесь (в файле pr25_0.doc)





Создать программу “Клиенты” для работы с файлом произвольного доступа. 
Программа должна содержать данные о банковских счетах клиентов. 

Структура записи в файл: 
•фамилия имя отчество,
•номер счета,
•вид счета (кодируется одной буквой: ‘п’ ? пенсионный, ‘c’ ? срочный, ‘н’ ? накопительный),
•сумма на счете.

Программа должна выдавать следующую информацию:
•о клиентах с суммой на счете в диапазоне от Х1 до Х2, Х1, Х2 вводятся с клавиатуры,
•о клиентах, фамилия которых начинается с буквы W, W вводится с клавиатуры,
•о клиентах с номером счета Y, Y вводится с клавиатуры.

Программа должна содержать диаграмму распределения клиентов по виду счета: 
какой процент от общего числа клиентов составляют клиенты по каждому виду счета. 
Программа должна содержать справочную систему. 

Текст файлов .cpp:
//------------------  Unit1.cpp  ---------------------------------

#include <vcl.h>
#include <fstream.h>
#pragma hdrstop

#include "Unit1.h"
#include "unNom.h"
#include "unSumm.h"
#include "unBukv.h"
#include "unDiagr.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

	struct client
	{
	 char fio[60];      // fio
	 unsigned long int nomscet;      // номер счёта
         char vid[1];  // вид счёта п  с  н
	 unsigned long int summa;         // Число жителей
};
char * fn="";


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnOpenClick(TObject *Sender)
{
	OD1->Execute();                     // Активизировать диалог "Открыть файл"
	fn=OD1->FileName.c_str();           // в fn  записать указатель на имя файла
	Label6->Caption= "Открыт: " +OD1->FileName;
                                            // вывести имя файла в компоненте
        // Label6
	// Сделать кнопки "Считать", "Добавить" активными, а "Сохранить в файле"
        // неактивной
	btnRead->Enabled=true;
	btnAdd->Enabled=true;
	btnSave->Enabled=false;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnReadClick(TObject *Sender)
{
	  Memo1->Clear();     // Очистить Мемо
	  client kli;
	  // открыть файл для чтения и записи, в двоичном режиме
	  fstream file(fn, ios::binary | ios::in | ios::out);
	  char str[120];
	  // установить указатель на начало файла
	  file.seekg(0);
	  // пока не конец файла, читать запись в переменную kli
	  while (!file.read((char*)&kli, sizeof(client)).eof())
	  {
	  // Сформировать строку str из переменной kli
	   sprintf(str,"Ф.И.О.: %s ",kli.fio);  Memo1->Lines->Add(str);
	   sprintf(str,"Счёт №: %d ",kli.nomscet); Memo1->Lines->Add(str);
	   sprintf(str,"Вид счёта: %s ", kli.vid); Memo1->Lines->Add(str);
	   sprintf(str,"Остаток: %d ",kli.summa);  Memo1->Lines->Add(str);
           Memo1->Lines->Add("  ");
	  }
	file.close();   // Закрыть файл
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnAddClick(TObject *Sender)
{
 client kli;

 if (Label5->Caption.Length() == 1)
 {
  Label5->Font->Color = clBlack;
  // Записать значения введенные пользователем в kli  showmessage
 strcpy(kli.fio,edFIO->Text.c_str());
 kli.nomscet = edNom->Text.ToInt();
 strcpy(kli.vid,Label5->Caption.c_str());
 kli.summa = edSumma->Text.ToInt();

 // открыть файл в двоичном режиме для добавления   length
 ofstream ofile(fn,ios::app | ios::binary);
 ofile.write((char*)&kli, sizeof(client));
 ofile.close();   // закрыть файл
 }
 else
 Label5->Font->Color = clRed;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnSaveClick(TObject *Sender)
{
        if (Label5->Caption.Length() == 1)
        {
        Label5->Font->Color = clBlack;
        SD1->Execute();  // Активизировать диалог "Сохранить файл"
        fn=SD1->FileName.c_str();
        // в fn  записать указатель на имя файла
	Label6->Caption= "Сохраняю в файле: "+SD1->FileName;
           // Вывести имя файла при помощи метки Label6

	 client kli;
	// Записать значения введенные пользователем в kli

         strcpy(kli.fio,edFIO->Text.c_str());
         kli.nomscet = edNom->Text.ToInt();
         strcpy(kli.vid,Label5->Caption.c_str());
         kli.summa = edSumma->Text.ToInt();

	// открыть файл
	ofstream ofile(fn,ios::binary);
	// записать kli в файл
	ofile.write((char*)&kli, sizeof(client));
	ofile.close();   // закрыть файл

	// Сделать кнопки "Считать", "Добавить" активными, а "Сохранить в файле"
	// неактивной
	btnRead->Enabled=true;
	btnAdd->Enabled=true;
	btnSave->Enabled=false;
      }
       else
       Label5->Font->Color = clRed;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CB1Change(TObject *Sender)
{ int ind1;
  ind1 = CB1->ItemIndex;
  Label5->Caption = CB1->Items->Strings[ind1];
  if (Label5->Caption.Length() == 1)
  Label5->Font->Color = clBlack;
  // TSrings
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N4Click(TObject *Sender)
{
  frmNom->Visible = true;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)
{
  frmSumm->Visible = true;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N3Click(TObject *Sender)
{
  frmBukv->Visible = true;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N5Click(TObject *Sender)
{
  frmDiagr->Visible = true;        
}
//---------------------------------------------------------------------------
//-----------------  unBukv.cpp ---------------------------------

#include <vcl.h>
#include <fstream.h>
#pragma hdrstop

#include "unBukv.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmBukv *frmBukv;

	struct client
	{
	 char fio[60];      // fio
	 unsigned long int nomscet;      // номер счёта
         char vid[1];  // вид счёта п  с  н
	 unsigned long int summa;         // Число жителей
};

char * fn="";

//---------------------------------------------------------------------------
__fastcall TfrmBukv::TfrmBukv(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmBukv::BitBtn1Click(TObject *Sender)
{
  frmBukv->Visible = false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmBukv::btnFindClick(TObject *Sender)
{
char obra[1];
 if (edBukv->Text.Length() == 1)
{
strcpy(obra,edBukv->Text.c_str());

OD1->Execute();
fn=OD1->FileName.c_str();

Memo1->Clear();
client kli;

	  // открыть файл для чтения и записи, в двоичном режиме
	  fstream file(fn, ios::binary | ios::in | ios::out);
	  char str[120];
	  // установить указатель на начало файла
	  file.seekg(0);
	  // пока не конец файла, читать запись в переменную kli
	  while (!file.read((char*)&kli, sizeof(client)).eof())
	  {
	  // Сформировать строку str из переменной kli
           if ( kli.fio[0] == obra[0])
           {
	   sprintf(str,"Ф.И.О.: %s ",kli.fio);  Memo1->Lines->Add(str);
	   sprintf(str,"Счёт №: %d ",kli.nomscet); Memo1->Lines->Add(str);
	   sprintf(str,"Вид счёта: %s ", kli.vid); Memo1->Lines->Add(str);
	   sprintf(str,"Остаток: %d ",kli.summa);  Memo1->Lines->Add(str);
           Memo1->Lines->Add("  ");
           }
	  }
	file.close();   // Закрыть файл
 }           
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

#include <vcl.h>
#include <fstream.h>
#pragma hdrstop

#include "unNom.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmNom *frmNom;

	struct client
	{
	 char fio[60];      // fio
	 unsigned long int nomscet;      // номер счёта
         char vid[1];  // вид счёта п  с  н
	 unsigned long int summa;         // Число жителей
};

char * fn="";

//---------------------------------------------------------------------------
__fastcall TfrmNom::TfrmNom(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmNom::BitBtn1Click(TObject *Sender)
{
  frmNom->Visible = false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmNom::btnFindClick(TObject *Sender)
{
unsigned long int nom;

 if (edNom->Text.Length() > 0)
{
nom = edNom->Text.ToInt();

OD1->Execute();
fn=OD1->FileName.c_str();

Memo1->Clear();
client kli;
	  // открыть файл для чтения и записи, в двоичном режиме
	  fstream file(fn, ios::binary | ios::in | ios::out);
	  char str[120];
	  // установить указатель на начало файла
	  file.seekg(0);
	  // пока не конец файла, читать запись в переменную kli
	  while (!file.read((char*)&kli, sizeof(client)).eof())
	  {
           if ( kli.nomscet == nom)
           {
	   sprintf(str,"Ф.И.О.: %s ",kli.fio);  Memo1->Lines->Add(str);
	   sprintf(str,"Счёт №: %d ",kli.nomscet); Memo1->Lines->Add(str);
	   sprintf(str,"Вид счёта: %s ", kli.vid); Memo1->Lines->Add(str);
	   sprintf(str,"Остаток: %d ",kli.summa);  Memo1->Lines->Add(str);
           Memo1->Lines->Add("  ");
           }
	  }
	file.close();   // Закрыть файл
 }          
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

#include <vcl.h>
#include <fstream.h>
#pragma hdrstop

#include "unSumm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmSumm *frmSumm;

	struct client
	{
	 char fio[60];      // fio
	 unsigned long int nomscet;      // номер счёта
         char vid[1];  // вид счёта п  с  н
	 unsigned long int summa;         // Число жителей
};

char * fn="";

//---------------------------------------------------------------------------
__fastcall TfrmSumm::TfrmSumm(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmSumm::BitBtn1Click(TObject *Sender)
{
frmSumm->Visible = false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmSumm::btnFindClick(TObject *Sender)
{
unsigned long int smin,smax;
smin = edMin->Text.ToInt();
smax = edMax->Text.ToInt();
OD1->Execute();
fn=OD1->FileName.c_str();

Memo1->Clear();
client kli;

	  // открыть файл для чтения и записи, в двоичном режиме
	  fstream file(fn, ios::binary | ios::in | ios::out);
	  char str[120];
	  // установить указатель на начало файла
	  file.seekg(0);
	  // пока не конец файла, читать запись в переменную kli
	  while (!file.read((char*)&kli, sizeof(client)).eof())
	  {
	  // Сформировать строку str из переменной kli
           if ((kli.summa > smin)&&(kli.summa < smax))
           {
	   sprintf(str,"Ф.И.О.: %s ",kli.fio);  Memo1->Lines->Add(str);
	   sprintf(str,"Счёт №: %d ",kli.nomscet); Memo1->Lines->Add(str);
	   sprintf(str,"Вид счёта: %s ", kli.vid); Memo1->Lines->Add(str);
	   sprintf(str,"Остаток: %d ",kli.summa);  Memo1->Lines->Add(str);
           Memo1->Lines->Add("  ");
           }
	  }
	file.close();   // Закрыть файл
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

#include <vcl.h>
#include <fstream.h>
#pragma hdrstop

#include "unDiagr.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmDiagr *frmDiagr;

	struct client
	{
	 char fio[60];      // fio
	 unsigned long int nomscet;      // номер счёта
         char vid[1];  // вид счёта п  с  н
	 unsigned long int summa;         // Число жителей
};

char * fn="";

//---------------------------------------------------------------------------
__fastcall TfrmDiagr::TfrmDiagr(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmDiagr::FormActivate(TObject *Sender)
{
int p,s,n;
char pp[1]="п"; char ss[1]="с"; char nn[1]="н";
p=0; s=0; n=0;

OD1->Execute();
fn=OD1->FileName.c_str();
client kli;
	  // открыть файл для чтения и записи, в двоичном режиме
	  fstream file(fn, ios::binary | ios::in | ios::out);
	  char str[120];
	  // установить указатель на начало файла
	  file.seekg(0);
	  // пока не конец файла, читать запись в переменную kli
	  while (!file.read((char*)&kli, sizeof(client)).eof())
	  {
           if (kli.vid[0] == pp[0]) p++;
           if (kli.vid[0] == ss[0]) s++;
           if (kli.vid[0] == nn[0]) n++;
	  }
	file.close();   // Закрыть файл   TChart
        Series1->AddXY(1,p,"пенсионный");
        Series1->AddXY(2,s,"срочный");
        Series1->AddXY(3,n,"накопительный");

}
//---------------------------------------------------------------------------

void __fastcall TfrmDiagr::BitBtn1Click(TObject *Sender)
{
  frmDiagr->Visible=false;
}
//---------------------------------------------------------------------------
Упакованные файлы проекта
Rambler's Top100
Hosted by uCoz