Проблемы с односвязными списками
Вячеслав Макаров

Приветствую! работаю на Builder Borland c++ - программирую таблицы и кнопки
такое задание :
Реализовать ведение списка забронированных и списка купленных билетов в кинозале кинотеатра. Билет содержит следующие сведения: номер ряда, номер места. Забронированный билет – номер ряда, номер места, фамилию бронирующего. нъНа основе односвязного списка
Большую часть программы я реализовал, использовал
А точнее: информация о забронированных билетах (внесение брони в таблицу, вывод этого билета из таблицы)
Мне нужно сделать тоже самое для обычного билета - внесение информации в таблицу и вывод ее
В ходе выполнения задания я запутался с переменными программы ( уже несколько часов не могу доделать программу, а начал несколько дней назад), помогите, пожалуйста доделать задание )

сpp файл:
```
//---------------------------------------------------------------------------

include <vcl.h>

pragma hdrstop

include <fstream.h>

include "structUnit1.h"

include "stdio.h"

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

pragma package(smart_init)

pragma resource "*.dfm"

TForm1 Form1;
AnsiString fname;
struct List {
int id_number, id_number2;
AnsiString writer, writer2;
AnsiString name;
int amound;
List
next;
};

struct List1 {
int id_read;
AnsiString name_read;
List1* next;
};

List *h = 0; //указатель на начало списка
List *ptr = 0; //
bool spisok_pust = 1;
List *h2 = 0; //указатель на начало списка
List *ptr2 = 0; //
bool spisok_pust2 = 1;

List1 *h1 = 0;
List1 *ptr1 = 0;
bool spisok_pust1 = 1;

List* Vvod(int id, AnsiString na, int am)
{
List *p = 0;
p = new List;
p->id_number = id;
p->name = na;
p->amound = am;
return p;
}

List* Vvod2(int id2, AnsiString na2, int am2)
{
List *p2 = 0;
p2 = new List;
p2->id_number2 = id2;
p2->name = na2;
p2->amound = am2;
return p2;
}

List1* Vvod1(int id_r, AnsiString n_r)
{
List1 *p = 0;
p = new List1;
p->id_read = id_r;
p->name_read = n_r;
return p;
}

void Insert_to_list(int id, AnsiString na, int am)
{
List * ptr_new = 0;
if (spisok_pust)
{
h = Vvod(id, na, am);//создание первого эл-та в списке
h->next = 0;
ptr = h;
spisok_pust = false;
}
else
{
ptr_new = Vvod(id, na, am);
ptr->next = ptr_new; //ptr указывает на узел после которого вставляется
ptr = ptr_new; //ptr указывает на вставленный узел
ptr->next = 0;
}
}

void Insert_to_list2(int id2, AnsiString na2, int am2)
{
List * ptr_new2 = 0;
if (spisok_pust2)
{
h2 = Vvod2(id2, na2, am2);//создание первого эл-та в списке
h2->next = 0;
ptr2 = h2;
spisok_pust2 = false;
}
else
{
ptr_new2 = Vvod2(id2, na2, am2);
ptr2->next = ptr_new2; //ptr указывает на узел после которого вставляется
ptr2 = ptr_new2; //ptr указывает на вставленный узел
ptr2->next = 0;
}
}

void Del1(int id_r)
{
List1* ptr3 = h1;
List1* prev = h1;
while (ptr3)
{
prev = ptr3;
if (ptr3->id_read == id_r && h1 == ptr3 && h1->next != 0)//удаление первого элемента
{
h1 = ptr3->next;
delete ptr3; break;
}
if (ptr3->id_read == id_r && h1 == ptr3 && h1->next == 0) //единственный эл-т в списке
{
delete h1;
h1 = 0;
spisok_pust1 = true; break;

    }
    ptr3 = ptr3->next;
    if (ptr3->id_read == id_r && ptr3->next == 0) //удаление последнего эл-та
    {
        prev->next = 0;
        delete ptr3; break;
    }
    if (ptr3->id_read == id_r)
    {
        prev->next = ptr3->next;
        delete ptr3; break;
    }

}

}

int Size_of_List1(List* head)
{
int s = 0;
List* ptr4;
ptr4 = head;
while (ptr4 != 0)
{
ptr4 = ptr4->next;
s++;
}
return s;
}

int Size_of_List2(List* head)
{
int s2 = 0;
List* ptr6;
ptr6 = head;
while (ptr6 != 0)
{
ptr6 = ptr6->next;
s2++;
}
return s2;
}

int Size_of_List(List1* head)
{
int s = 0;
List1* ptr4;
ptr4 = head;
while (ptr4 != 0)
{
ptr4 = ptr4->next;
s++;
}
return s;
}

bool isExist(int id_r)
{
List* pt = 0;
pt = h;
while (pt != 0)
{
if (pt->id_number == id_r)
return true;
else pt = pt->next;
}
return false;
}

bool isExist2(int id_r2)
{
List* pt2 = 0;
pt2 = h2;
while (pt2 != 0)
{
if (pt2->id_number2 == id_r2)
return true;
else pt2 = pt2->next;
}
return false;
}

int Search(AnsiString n_r)
{
int s = 0;
List1* ptr4;
ptr4 = h1;
while (ptr4 != 0)
{

    if (ptr4->name_read == n_r)
        s++;
    ptr4 = ptr4->next;
}
return s;

}

void EDIT(int id, AnsiString na, int am)
{
List* ptr5;
ptr5 = h;
while (ptr5 != 0)
{

    if (ptr5->id_number == id)
    {
        ptr5->id_number = id;
        ptr5->name = na;
        ptr5->amound = am;
    }
    ptr5 = ptr5->next;
}

}

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

//---------------------------------------------------------------------------
int n = 0;
void _fastcall TForm1::InsertClick(TObject *Sender)
{
int i, id, am;
AnsiString na;
id = StrToInt(Edit4->Text);
//wr=Edit1->Text.Trim().c
str();
na = Edit2->Text.Trim().c_str();
am = StrToInt(Edit3->Text);
Insert_to_list(id, na, am);

}
//-------------------------------------------------------------------------
void _fastcall TForm1::Insert2Click(TObject *Sender)
{
int i, id2, am2;
AnsiString na2;
id2 = StrToInt(Edit11->Text);
//wr=Edit1->Text.Trim().c
str();
na2 = Edit9->Text.Trim().c_str2();
am2 = StrToInt(Edit10->Text);
Insert_to_list2(id2, na2, am2);

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

void _fastcall TForm1::OutputClick(TObject Sender)
{
List
ptr_list = h;
int i = 1; //количество книг в биьлиотеке
sg->Cells[0][0] = "Идентификационный номер книги";
sg->Cells[1][0] = "Автор";
sg->Cells[2][0] = "Название книги";
sg->Cells[3][0] = "Кол-во экземпляров";
while (ptr
list != 0)
{
sg->Cells[0][i] = IntToStr(ptr_list->id_number);
sg->Cells[1][i] = ptr_list->writer;
sg->Cells[2][i] = ptr_list->name;
sg->Cells[3][i] = IntToStr(ptr_list->amound);
ptr_list = ptr_list->next;
i++;
}
}
//--------------------------------------------------

void _fastcall TForm1::Output2Click(TObject Sender)
{
List2
ptr_list2 = h2;
int i = 1; //количество книг в биьлиотеке
sg2->Cells[0][0] = "Идентификационный номер книги";
sg2->Cells[1][0] = "Автор";
sg2->Cells[2][0] = "Название книги";
sg2->Cells[3][0] = "Кол-во экземпляров";
while (ptr
list2 != 0)
{
sg2->Cells[0][i] = IntToStr2(ptr_list->id_number);
sg2->Cells[1][i] = ptr_list2->writer;
sg2->Cells[2][i] = ptr_list2->name;
sg2->Cells[3][i] = IntToStr(ptr_list2->amound);
ptr_list2 = ptr_list->next;
i++;
}
}
//---------------------------------------------------------------------------

void _fastcall TForm1::QueryClick(TObject *Sender)
{
AnsiString n_r = Edit5->Text.Trim().c
str();
int s = Search(n_r);
Label5->Caption = IntToStr(s);

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

void _fastcall TForm1::Button1Click(TObject *Sender)
{
int i, id_r;
AnsiString n_r;
id_r = StrToInt(Edit6->Text);
if (isExist(id_r))
{
n_r = Edit7->Text.Trim().c_str();
Insert_to
list1(id_r, n_r);
Button3->Enabled = true;
}
else
ShowMessage("Книга не найдена!!!");
}
//---------------------------------------------------------------------------

void _fastcall TForm1::Button2Click(TObject Sender)
{
List1
ptr_list1 = h1;
int i = 1;
sg1->Cells[0][0] = "Идентификационный номер книги";
sg1->Cells[1][0] = "Фамилия читателя";
while (ptr_list1 != 0)
{
sg1->Cells[0][i] = IntToStr(ptr
list1->id_read);
sg1->Cells[1][i] = ptr_list1->name_read;
ptr_list1 = ptr_list1->next;
i++;
}
}
//---------------------------------------------------------------------------

void _fastcall TForm1::Button3Click(TObject *Sender)
{
int id_r = StrToInt(Edit6->Text);
Del1(id_r);
if (spisok_pust1 == true)
Button3->Enabled = false;
int s = Size
of_List(h1);
for (int i = 1; i <= s + 1; i++)
{
sg1->Cells[0][i] = " ";
sg1->Cells[1][i] = " ";
}

List1* ptr_list1 = h1;
int i = 1;
sg1->Cells[0][0] = "Идентификационный номер книги";
sg1->Cells[1][0] = "Фамилия читателя";
while (ptr_list1 != 0)
{
    sg1->Cells[0][i] = IntToStr(ptr_list1->id_read);
    sg1->Cells[1][i] = ptr_list1->name_read;
    ptr_list1 = ptr_list1->next;
    i++;
}

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int i = 1;
int id, am;
AnsiString na;
id = StrToInt(Edit4->Text);

na = Edit2->Text.Trim().c_str();
am = StrToInt(Edit3->Text);
int s = Size_of_List1(h);

for (int j = 1; j <= s + 1; j++)
{
    sg->Cells[0][j] = " ";
    sg->Cells[1][j] = " ";
    sg->Cells[2][j] = " ";
    sg->Cells[3][j] = " ";
}

EDIT(id, na, am);
List* ptr_list = h;
while (ptr_list != 0)
{
    sg->Cells[0][i] = IntToStr(ptr_list->id_number);
    sg->Cells[1][i] = ptr_list->writer;
    sg->Cells[2][i] = ptr_list->name;
    sg->Cells[3][i] = IntToStr(ptr_list->amound);
    ptr_list = ptr_list->next;
    i++;
}

}

//=======================================================================

void __fastcall TForm1::Button8Click(TObject *Sender)
{
int i = 1;
int id, am;
AnsiString na;
id = StrToInt(Edit4->Text);

na = Edit9->Text.Trim().c_str();
am = StrToInt(Edit10->Text);
int s = Size_of_List1(h);

for (int j = 1; j <= s + 1; j++)
{
    sg2->Cells[0][j] = " ";
    sg2->Cells[1][j] = " ";
    sg2->Cells[2][j] = " ";
    sg2->Cells[3][j] = " ";
}

EDIT(id, na, am);
List* ptr_list = h;
while (ptr_list != 0)
{
    sg2->Cells[0][i] = IntToStr(ptr_list->id_number);
    sg2->Cells[1][i] = ptr_list->writer;
    sg2->Cells[2][i] = ptr_list->name;
    sg2->Cells[3][i] = IntToStr(ptr_list->amound);
    ptr_list = ptr_list->next;
    i++;
}

}
//---------------------------------------------------------------------------
```
лог ошибок :[C++ Error] structUnit1.cpp(263): E2316 'c_str2' is not a member of 'AnsiString'
[C++ Error] structUnit1.cpp(291): E2316 'fastcall TForm1::Output2Click(TObject *)' is not a member of 'TForm1'
[C++ Error] structUnit1.cpp(297): E2206 Illegal character 'К' (0xca)
[C++ Error] structUnit1.cpp(327): E2268 Call to undefined function 'Insert
to_list1'

таблица номер 2 - sg2. Надо сделать по аналогии к таблице 1
элементы, работающие с таблицей 2 :
кнопки: Insert2,Button5,Button8 и дальше по возврастанию
текстовые лейблы: Label10,Label9,Label11 и дальше по возврастанию
Текстовые поля: Edit10,Edit9,Edit11 и дальше по возврастанию
ну или как угодна н

1 чел.