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

Тема в разделе "C/C++/C#", создана пользователем Tatali, 28 дек 2010.

  1. Tatali

    Tatali Гость

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

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

    Код (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++;
    }
    }
    }
    }
    //---------------------------------------------------------------------------
     
Загрузка...

Поделиться этой страницей