Создать программу “Клиенты” для работы с файлом произвольного доступа.
Примечание: Создание справочной системы описано здесь, а также
здесь (в файле 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;
}
//---------------------------------------------------------------------------
Упакованные файлы проекта
|