2. Составить программу, которая содержит текущую информацию о книгах в

  • Автор темы Tatali
  • Дата начала
T

Tatali

#1
Составить программу, которая содержит текущую информацию о книгах в библиотеке. Сведения о книгах включают:
• номер УДК;
• фамилию и инициалы автора;
• название;
• год издания;
• количество экземпляров данной книге в библиотеке.
Программа должна обеспечивать:
• начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева;
• добавление данных о книгах, вновь поступивших в библиотеку;
• удаление данных о списываемых книгах;
• по запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам издания.

Програмка есть только там задание неправильно сделано. Вместо двоичного дерева списки

C++:
struct Book
{
AnsiString Avtor;		 // Данные о авторе книги
AnsiString Nazvanie; // Данные о названии книги
AnsiString Data;		 // Данные года издания книги
int Kolvo;					// Данные количества экземпляров
};

//---------------------------------------------------------------------------

#include <vcl.h>
#include <dstring.h>
#pragma hdrstop
#include <dir.h>
#include <fstream.h>
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TList *Library = new TList;
TMain *Main;
//---------------------------------------------------------------------------
// различные сортировки
int __fastcall SortAvtor(void*Item1,void*Item2)
{
return CompareText(((Book*)Item1)->Avtor,((Book*)Item2)->Avtor); 
}
int __fastcall SortNazvanie(void*Item1,void*Item2)
{
return CompareText(((Book*)Item1)->Nazvanie,((Book*)Item2)->Nazvanie);
}

int __fastcall SortData(void*Item1,void*Item2)
{
return CompareText(((Book*)Item1)->Data,((Book*)Item2)->Data);
} 


void __fastcall TMain::FormCreate(TObject *Sender)
{
TabSheet2->Show();

StringGrid1->Cells[0][0]="ФИО автора";
StringGrid1->Cells[1][0]="Название книги";
StringGrid1->Cells[2][0]="Год издания";
StringGrid1->Cells[3][0]="Количество экземпляров";

StringGrid2->Cells[0][0]="ФИО автора";
StringGrid2->Cells[1][0]="Название книги";
StringGrid2->Cells[2][0]="Год издания";
StringGrid2->Cells[3][0]="Количество экземпляров";

ComboBox1->Items->Clear();
int nach = 1900;
int konech = 2008;
for(int i = nach;i <= konech;i++)
ComboBox1->Items->Add(IntToStr(i));
ComboBox1->ItemIndex = konech - nach - 5;
}
//---------------------------------------------------------------------------

void __fastcall TMain::AddBtnClick(TObject *Sender)
{
AnsiString Avtor = Edit1->Text;					 // добавление новых данных
AnsiString Nazvanie = Edit2->Text;			 // добавление новых данных
AnsiString Data = ComboBox1->Items->Strings[ComboBox1->ItemIndex];
String Kolvo = Edit4->Text;

if(Kolvo < 0 )
{
ShowMessage("Неправильный формат");
return;
}

if(Avtor.Trim()==""||Nazvanie.Trim()==""||Data.Trim()==""||Kolvo.Trim()=="")
{
ShowMessage("Заполните все поля");
return;
}
else
{
Book *b1 = new Book(Avtor,Nazvanie,Data,StrToInt(Kolvo));
Library->Add(b1);
}

for(int i = 0;i < Library->Count; i++)
{
Book*b=(Book*)Library->Items[i];				 
StringGrid1->Cells[0][i+1] = b->Avtor;		  //  Вывод на экран 
StringGrid1->Cells[1][i+1] = b->Nazvanie;	// добавленной книги
StringGrid1->Cells[2][i+1] = b->Data;		  //
StringGrid1->Cells[3][i+1] = b->Kolvo;		 //
}
StringGrid1->RowCount = Library->Count+1;
TabSheet1->Show();
Edit1->Text = "";
Edit2->Text = "";
Edit4->Text = "";

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


void __fastcall TMain::DeleteBtnClick(TObject *Sender)
{


if(CheckBox1->Checked)
{ 
if(StringGrid1->Row != 0)
Library->Delete(StringGrid1->Row-1);
StringGrid1->RowCount = Library->Count+1;
}

else
{
if(StringGrid1->Row != 0)
{
Book*b = (Book*) Library->Items[StringGrid1->Row - 1];
if(b->Kolvo < StrToInt(DelBook->Text))
{
ShowMessage("Выберете меньшее количество книг");
return;
}
if(b->Kolvo == StrToInt(DelBook->Text))
{
Library->Delete(StringGrid1->Row-1);
StringGrid1->RowCount = Library->Count+1;
}
if(b->Kolvo > StrToInt(DelBook->Text))
{
b->Kolvo -= StrToInt(DelBook->Text);
}
}
}



for(int i = 0; i < Library->Count;i++)
{
Book*b = (Book*) Library->Items[i];
StringGrid1->Cells[0][i+1] = b->Avtor;
StringGrid1->Cells[1][i+1] = b->Nazvanie;
StringGrid1->Cells[2][i+1] = b->Data;
StringGrid1->Cells[3][i+1] = b->Kolvo;
}



StringGrid2->Cells[0][0]="ФИО автора";
StringGrid2->Cells[1][0]="Название книги";
StringGrid2->Cells[2][0]="Год издания";
StringGrid2->Cells[3][0]="Количество экземпляров";
for(int i = 1;i <=Library->Count;i++)
{
StringGrid2->Cells[0][i]="";
StringGrid2->Cells[1][i]="";
StringGrid2->Cells[2][i]="";
StringGrid2->Cells[3][i]="";
}

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

void __fastcall TMain::N2Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
for(int i = Library->Count;i > 0;i--)
Library->Delete(i-1);

ifstream cFile(OpenDialog1->FileName.c_str(),ios::in);
const int MaxLen = 255;
char S_Avtor[MaxLen],S_Nazvanie[MaxLen],S_Data[MaxLen];
int mDay,q;

while(cFile >> S_Data)
{

cFile.getline(S_Avtor,MaxLen);
cFile >> q;
cFile.getline(S_Nazvanie,MaxLen);

AnsiString A = S_Avtor, N = S_Nazvanie, D = S_Data;
A = A.Trim();N = N.Trim();D = D.Trim();
Book*b1 = new Book(A,N,D,q);
Library->Add(b1);
}
}

StringGrid1->RowCount = Library->Count + 1;
for(int i = 0;i < Library->Count;i++)
{
Book*b = (Book*) Library->Items[i];
StringGrid1->Cells[0][i+1] = b->Avtor;
StringGrid1->Cells[1][i+1] = b->Nazvanie;
StringGrid1->Cells[2][i+1] = b->Data;
StringGrid1->Cells[3][i+1] = b->Kolvo;
}
TabSheet1->Show();
}
//---------------------------------------------------------------------------

void __fastcall TMain::N3Click(TObject *Sender)
{
char myFile[10];

if(SaveDialog1->Execute())
{
if(FileExists(SaveDialog1->FileName))
{
fnsplit(SaveDialog1->FileName.c_str(),0,0,myFile,0);
strcat(myFile,".BK");
RenameFile(SaveDialog1->FileName,myFile);
}
fstream ClientFile(SaveDialog1->FileName.c_str(),ios::out);
for(int i = 1;i < StringGrid1->RowCount;i++ )
{
AnsiString S_Avtor = StringGrid1->Cells[0][i];
AnsiString S_Nazvanie = StringGrid1->Cells[1][i];
AnsiString S_Data = StringGrid1->Cells[2][i];
AnsiString S_Kolvo = StringGrid1->Cells[3][i];
ClientFile<<S_Data.c_str()<<" "<<S_Avtor.c_str()<<"\n"<<S_Kolvo.c_str()<<" "<<S_Nazvanie.c_str()<<"\n";
}
ClientFile.close();
}		
}
//---------------------------------------------------------------------------

void __fastcall TMain::N4Click(TObject *Sender)
{
Main->Close();
}
//---------------------------------------------------------------------------

void __fastcall TMain::N_AvtorClick(TObject *Sender)
{
TabSheet1->Show();
N_Nazvanie->Checked = false;
N_Data->Checked = false;
Library->Sort(SortAvtor);
for(int i = 0;i < Library->Count;i++)
{
Book*b = (Book*)Library->Items[i];
StringGrid1->Cells[0][i+1] = b->Avtor;
StringGrid1->Cells[1][i+1] = b->Nazvanie;
StringGrid1->Cells[2][i+1] = b->Data;
StringGrid1->Cells[3][i+1] = b->Kolvo;
}
}
//---------------------------------------------------------------------------




void __fastcall TMain::N_NazvanieClick(TObject *Sender)
{
TabSheet1->Show();
N_Avtor->Checked = false;
N_Data->Checked = false;
Library->Sort(SortNazvanie);
for(int i = 0;i < Library->Count;i++)
{
Book*b = (Book*)Library->Items[i];
StringGrid1->Cells[0][i+1] = b->Avtor;
StringGrid1->Cells[1][i+1] = b->Nazvanie;
StringGrid1->Cells[2][i+1] = b->Data;
StringGrid1->Cells[3][i+1] = b->Kolvo;
}
}
//---------------------------------------------------------------------------

void __fastcall TMain::N_DataClick(TObject *Sender)
{
TabSheet1->Show();
N_Avtor->Checked = false;
N_Nazvanie->Checked = false;
Library->Sort(SortData);
for(int i = 0;i < Library->Count;i++)
{
Book*b = (Book*)Library->Items[i];
StringGrid1->Cells[0][i+1] = b->Avtor;
StringGrid1->Cells[1][i+1] = b->Nazvanie;
StringGrid1->Cells[2][i+1] = b->Data;
StringGrid1->Cells[3][i+1] = b->Kolvo;
}
}
//---------------------------------------------------------------------------

void __fastcall TMain::N6Click(TObject *Sender)
{
Dialog->Show();
}
//---------------------------------------------------------------------------

void __fastcall TMain::ComboBox2Change(TObject *Sender)
{
if(ComboBox2->ItemIndex == 0 )
{
TabSheet1->Show();
Library->Sort(SortAvtor);
for(int i = 0;i < Library->Count;i++)
{
Book*b = (Book*)Library->Items[i];
StringGrid1->Cells[0][i+1] = b->Avtor;
StringGrid1->Cells[1][i+1] = b->Nazvanie;
StringGrid1->Cells[2][i+1] = b->Data;
StringGrid1->Cells[3][i+1] = b->Kolvo;
}
}
if(ComboBox2->ItemIndex == 1)
{
TabSheet1->Show();
Library->Sort(SortNazvanie);
for(int i = 0;i < Library->Count;i++)
{
Book*b = (Book*)Library->Items[i];
StringGrid1->Cells[0][i+1] = b->Avtor;
StringGrid1->Cells[1][i+1] = b->Nazvanie;
StringGrid1->Cells[2][i+1] = b->Data;
StringGrid1->Cells[3][i+1] = b->Kolvo;
}
}

if(ComboBox2->ItemIndex == 2)
{
TabSheet1->Show();
Library->Sort(SortData);
for(int i = 0;i < Library->Count;i++)
{
Book*b = (Book*)Library->Items[i];
StringGrid1->Cells[0][i+1] = b->Avtor;
StringGrid1->Cells[1][i+1] = b->Nazvanie;
StringGrid1->Cells[2][i+1] = b->Data;
StringGrid1->Cells[3][i+1] = b->Kolvo;
}
}
}
//---------------------------------------------------------------------------

void __fastcall TMain::CheckBox1Click(TObject *Sender)
{
if(CheckBox1->Checked)
{
DelBook->Visible = false;
Label5->Visible = false;
}

else
{
DelBook->Visible = true;
Label5->Visible = true;
}
}
//---------------------------------------------------------------------------



void __fastcall TMain::Button1Click(TObject *Sender)
{
StringGrid2->Cells[0][0]="ФИО автора";
StringGrid2->Cells[1][0]="Название книги";
StringGrid2->Cells[2][0]="Год издания";
StringGrid2->Cells[3][0]="Количество экземпляров";
for(int i = 1;i <=Library->Count;i++)
{
StringGrid2->Cells[0][i]="";
StringGrid2->Cells[1][i]="";
StringGrid2->Cells[2][i]="";
StringGrid2->Cells[3][i]="";
}


int j=1;

if(RadioFio->Checked)
{
for(int i = 0;i < Library->Count;i++)
{
Book*b = (Book*)Library->Items[i];

if((AnsiPos(FindEdit->Text,b->Avtor)==True))
{
StringGrid2->Cells[0][j] = b->Avtor;
StringGrid2->Cells[1][j] = b->Nazvanie;
StringGrid2->Cells[2][j] = b->Data;
StringGrid2->Cells[3][j] = b->Kolvo;
j++;
}
}
}

if(RadioNazvanie->Checked)
{
for(int i = 0;i < Library->Count;i++)
{
Book*b = (Book*)Library->Items[i];

if(AnsiPos(FindEdit->Text,b->Nazvanie)==True)
{
StringGrid2->Cells[0][j] = b->Avtor;
StringGrid2->Cells[1][j] = b->Nazvanie;
StringGrid2->Cells[2][j] = b->Data;
StringGrid2->Cells[3][j] = b->Kolvo;
j++;
}
}
}
}
//---------------------------------------------------------------------------