Winni Назад Создать программу для работы с файлом произвольного доступа "записная книжка".



 Создать программу для работы с файлом произвольного доступа 
"записная книжка". Файл содержит сведения о знакомых. 
Структура записи: фамилия имя отчество, телефон, возраст. 
Программа должна выдавать следующую информацию:
•о знакомых возраста Х, Х вводится с клавиатуры, 
•о знакомых, фамилия которых начинается с буквы W, W вводится с клавиатуры, 
•о знакомых с номером телефона N, N вводится с клавиатуры. 
Программа должна содержат диаграмму распределения знакомых по возрастам: 
сколько процентов составляют знакомые до 16 лет, сколько процентов
 составляют знакомые в возрасте 16 до 25, от 25 до 40 лет, после 40 лет. 
Программа должна содержать справочную систему.

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

#include 
#include 
#pragma hdrstop

#include "Unit1.h"
#include "grafik.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

	struct Notes
	{
	 char Name[60];      // Фамилия, имя, отчество
	 char Phone[16];
         int Age;
};
int poisk;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
	 // Если файл NoteBook.dat не существует, в Меmo1 посылается сообщение
	if(!FileExists("NoteBook.dat"))
	{
	   Memo1->Text="Файл NoteBook.dat не существует";
	   // btnAdd->Enabled=false; Зачем ? 
	  }
}
//---------------------------------------------------------------------------


void __fastcall TForm1::btnAddClick(TObject *Sender)
{
	Notes Note1;
	// Получение значений из полей ввода
	strcpy(Note1.Name,edFio->Text.c_str());
	strcpy(Note1.Phone,edTel1->Text.c_str());
	Note1.Age=edVozr1->Text.ToInt();

	 // если файл не существует
	 if(!FileExists("NoteBook.dat"))
	  { // создать файл
	    ofstream ofile("NoteBook.dat",ios::binary);
	    ofile.write((char*)&Note1, sizeof(Notes));
	    ofile.close();   // закрыть файл
	}
	  else
	  { // дописать в конец файла
	   ofstream ofile("NoteBook.dat",ios::app | ios::binary);
	   ofile.write((char*)&Note1, sizeof(Notes));
	   ofile.close();   // закрыть файл
	 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btncalcClick(TObject *Sender)
{
	 Memo1->Clear();
	 Notes Note1;
	 fstream file("NoteBook.dat", ios::binary | ios::in | ios::out);
	 char str[80];
	 file.seekg(0);
	 while (!file.read((char*)&Note1, sizeof(Notes)).eof())
	 {
	  sprintf(str,"%s\tТел: %s\tВозраст: %d", Note1.Name, Note1.Phone, Note1.Age);
	  Memo1->Lines->Add(str);
	 }
         file.close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnFindClick(TObject *Sender)
{
         // Очистка Memo1
	 Memo1->Clear();
	 Notes Note1;

	 // открытие файла для чтения
	 fstream file("NoteBook.dat", ios::binary | ios::in | ios::out);
	 char str[80];
	 file.seekg(0);   //указатель размещается на первую запись

	 // поиск по возрасту
	 if (poisk==1)
	  {
	   while (!file.read((char*)&Note1, sizeof(Notes)).eof())
	    {
	    if (Note1.Age==edvozr2->Text.ToInt())
	      {
	      sprintf(str,"%s\tТел: %s\tВозраст: %d", Note1.Name, Note1.Phone, Note1.Age);
	      Memo1->Lines->Add(str);
	      }
	    }
	  }

	 // поиск по первой букве
	 if (poisk==2)
	  {
	  char buk, bukm[2];
	  strcpy(bukm,edbukv->Text.c_str());
	  buk=bukm[0];
	  while (!file.read((char*)&Note1, sizeof(Notes)).eof())
	   {
	    if (Note1.Name[0]==buk)
	      {
	       sprintf(str,"%s\tТел: %s\tВозраст: %d", Note1.Name, Note1.Phone, Note1.Age);
	       Memo1->Lines->Add(str);
	      }
	   }
	  }

	 // поиск по телефону
	 if (poisk==3)
	  {
	  AnsiString  tel1;
	    while (!file.read((char*)&Note1, sizeof(Notes)).eof())
	   {
	    tel1=Note1.Phone;
	    if (tel1== edtel2->Text.Trim())
	      {
	       sprintf(str,"%s\tТел: %s\tВозраст: %d", Note1.Name, Note1.Phone, Note1.Age);
	       Memo1->Lines->Add(str);
	      }
	   }
	  }
	 file.close(); // Закрытие файла
}
//---------------------------------------------------------------------------

void __fastcall TForm1::btnQuitClick(TObject *Sender)
{
  Form1->Close();        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::edvozr2Change(TObject *Sender)
{
 btnFind->Enabled=true;
 poisk=1;
 edbukv->Text="";
 edtel2->Text="";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::edbukvChange(TObject *Sender)
{
 btnFind->Enabled=true;
 poisk=2;
 edtel2->Text="";
 edvozr2->Text="";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::edtel2Change(TObject *Sender)
{
  btnFind->Enabled=true;
  poisk=3;
  edbukv->Text="";
  edvozr2->Text="";
}
//---------------------------------------------------------------------------

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

void __fastcall TForm1::btnHelpClick(TObject *Sender)
{
Application->HelpContext(1);                       
}
//---------------------------------------------------------------------------
//--------------------  grafik.cpp  -----------------------------------

#include 
#include 
#pragma hdrstop

#include "grafik.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;

	struct Notes
	{
	 char Name[60];      // Фамилия, имя, отчество
	 char Phone[16];
         int Age;
};
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormActivate(TObject *Sender)
{
	 int v[5], pr[5];

	 v[1]=v[2]=v[3]=v[4]=0;

	 Notes Note1;
	 fstream file("NoteBook.dat",ios::binary | ios::in |ios::out);
	 char str[80];

	// Рассчитаем количество знакомых  в каждой возрастной категории
	// v[1] - до16
	// v[2] - от 16 до 25
	// v[3] - от 25 до 40
	// v[4] - после 40

	 file.seekg(0);
	 while (!file.read((char*)&Note1,sizeof(Notes)).eof())
	 {
	 sprintf(str, "%s\tТел: %s\tВозраст: %d", Note1.Name, Note1.Phone, Note1.Age);
	 if (Note1.Age<16) v[1]++;
	 if ((Note1.Age>=16)&&(Note1.Age<25)) v[2]++;
	 if ((Note1.Age>=25)&&(Note1.Age<40)) v[3]++;
	 if (Note1.Age>=40) v[4]++;
	 }
	 file.close();

	// Общее количество человек
	 v[0]=v[1]+v[2]+v[3]+v[4];

	// Рассчитаем, какой процент составляет первая возрастная категория (до 16)
	 pr[1]=(float)v[1]/v[0]*100;
	// Изменим высоту прямоугольника, пусть 1% будет отображаться 2 пикселями
	 Shape1->Height=(int)(pr[1]*2);
	// Изменим подпись
	 Label5->Caption=IntToStr(pr[1])+"%";
	// Если категория составляет 0%, будем отображать ее горизонтальной чертой
	 if (Shape1->Height==0) Shape1->Height=1;

	        // Выполним расчеты для возрастной категории от 16 до 25
	 pr[2]=(float)v[2]/v[0]*100;
	 Shape2->Height=(int)(pr[2]*2);
	 Label6->Caption=IntToStr(pr[2])+"%";
	 if (Shape2->Height==0) Shape2->Height=1;

	        // Выполним расчеты для возрастной категории от 25 до 40
	 pr[3]=(float)v[3]/v[0]*100;
	 Shape3->Height=(int)(pr[3]*2);
	 Label7->Caption=IntToStr(pr[3])+"%";
	 if (Shape3->Height==0) Shape3->Height=1;

	        // Выполним расчеты для возрастной категории после 40
	 pr[4]=(float)v[4]/v[0]*100;
	 Shape4->Height=(int)(pr[4]*2);
	 Label8->Caption=IntToStr(pr[4])+"%";
	 if (Shape4->Height==0) Shape4->Height=1;
	//Передвинем фигуры так, чтобы их нижняя граница была на одном уровне
	 Shape1->Top=240 - Shape1->Height;
	 Shape2->Top=240 - Shape2->Height;
	 Shape3->Top=240 - Shape3->Height;
	 Shape4->Top=240 - Shape4->Height;
}
//---------------------------------------------------------------------------
Упакованные файлы проекта
Rambler's Top100
Hosted by uCoz