Привет! я выполняю задание связанное с линейными списками и их выводом в табличном виде в StringGrid в билдере
Дело в том, что при внесении самих данных некоторые значение, которые не должны повторяться - повторяются, но я не знаю как это исправить
Я вношу в таблицу данные : Номер места, ряда, фамилия
и именно номер места не должен повторять в одном и том же ряде, но я не пойму как это сделать
подробнее:
Я ввожу номер места и ряда дважды, если номер ряда можно оставить прежним, то номер места не может повторяться, так как я уже его ввел ранее
код прилагается , как и само изначальное задание:
Реализовать ведение списка забронированных и списка купленных билетов в кинозале кинотеатра. Билет содержит следующие сведения: номер ряда, номер места.
Код:
AnsiString fname;
struct List{
int id_number;
AnsiString writer;
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;
List1 *h1=0;
List1 *ptr1=0;
bool spisok_pust1=1;
List* Vvod(int id,AnsiString wr,AnsiString na,int am)
{
List *p=0;
p = new List;
p->id_number=id;
p->writer=wr;
p->name=na;
p->amound=am;
return p;
}
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 wr,AnsiString na,int am)
{
List * ptr_new=0;
if(spisok_pust)
{
h=Vvod(id,wr,na,am);//создание первого эл-та в списке
h->next=0;
ptr=h;
spisok_pust=false;
}
else
{
ptr_new=Vvod(id,wr,na,am);
ptr->next=ptr_new; //ptr указывает на узел после которого вставляется
ptr=ptr_new; //ptr указывает на вставленный узел
ptr->next=0;
}
}
void Insert_to_list1(int id_r,AnsiString n_r)
{
List1 * ptr_new1=0;
if(spisok_pust1)
{
h1=Vvod1(id_r,n_r);
h1->next=0;
ptr1=h1;
spisok_pust1=false;
}
else
{
ptr_new1=Vvod1(id_r,n_r);
ptr1->next=ptr_new1; //ptr1 указывает на узел после которого вставляется
ptr1=ptr_new1; //ptr1 указывает на вставленный узел
ptr1->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_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;
}
int Search(int n_r)
{
int s=0;
List* ptr4;
ptr4=h;
while(ptr4!=0)
{
if(ptr4->id_number==n_r)
s++;
ptr4=ptr4->next;
}
return s;
}
void EDIT(int id,AnsiString wr,AnsiString na,int am)
{
List* ptr5;
ptr5=h;
while(ptr5!=0)
{
if(ptr5->id_number==id)
{
ptr5->id_number=id;
ptr5->writer=wr;
ptr5->name=na;
ptr5->amound=am;
}
ptr5=ptr5->next;
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
int n=0;
void __fastcall TForm1::InsertClick(TObject *Sender)
{
int i,id,am, qwe;
AnsiString wr,na;
id=StrToInt(Edit4->Text);
am=StrToInt(Edit3->Text);
if (am > 10)
ShowMessage("Максимальное число рядов - 10");
else
if (id > 10)
ShowMessage("Максимальное число мест в ряду - 10");
else
Insert_to_list(id,wr,na,am);
if (id == )
}
//---------------------------------------------------------------------------
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]="фамилия";
while(ptr_list!=0)
{
sg->Cells[0][i]=IntToStr(ptr_list->id_number);
sg->Cells[1][i]=IntToStr(ptr_list->amound);
sg->Cells[2][i]=ptr_list->writer;
ptr_list=ptr_list->next;
i++;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::QueryClick(TObject *Sender)
{
int n_r=StrToInt(Edit5->Text);
int s=Search(n_r);
s = 10 - s;
Label5->Caption=IntToStr(s);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i,id,am, qwe;
AnsiString wr,na;
id=StrToInt(Edit7->Text);
wr=Edit2->Text.Trim().c_str();
am=StrToInt(Edit6->Text);
if (am > 10)
ShowMessage("Максимальное число рядов - 10");
else
if (id > 10)
ShowMessage("Максимальное число мест в ряду - 10");
else
Insert_to_list(id,wr,na,am);
}
}
скриншот формы
11111.png