Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2016, 09:45   #1
leftdead76
 
Регистрация: 23.10.2016
Сообщений: 4
По умолчанию как работать StringGrid в Builder c++

Привет! я выполняю задание связанное с линейными списками и их выводом в табличном виде в 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
leftdead76 вне форума Ответить с цитированием
Старый 02.12.2016, 13:39   #2
Почтальон
Пользователь
 
Регистрация: 12.05.2016
Сообщений: 16
По умолчанию

Цитата:
Сообщение от leftdead76 Посмотреть сообщение
Дело в том, что при внесении самих данных некоторые значение, которые не должны повторяться - повторяются, но я не знаю как это исправить
Перед добавлением в таблицу проверяйте эти значения на повторы в таблице. Если существуют - предупреждайте пользователя, иначе добавляйте в таблицу.
Почтальон вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перенести данные из StringGrid в DBGrid при помоще компонента DataSource в C++ Builder 6 scorer123 Помощь студентам 2 29.06.2015 15:25
Не хочет работать перевод из Edit в StringGrid Лия92 Общие вопросы C/C++ 2 01.12.2010 19:23
как создать базу данных в builder c++ с использованием stringgrid boris2010 C++ Builder 1 15.03.2010 09:54
Как работать с службами Windows в C++ Builder? Namolem Помощь студентам 0 15.02.2010 19:01
Как установить ограничение на вод символов в ячейке StringGrid(C++Builder 6). TheWanderer C++ Builder 1 05.02.2010 09:43