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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2013, 09:02   #1
lexflax
Пользователь
 
Регистрация: 12.04.2011
Сообщений: 74
Сообщение не получается условие сравнения

Доброго времени суток.
По учебе задали написать программу склад.
В задании множества условий.
1) если имя товара не введено, то отказать пользователю в добавлении его в базу и выдать сообщение " введите наименование".
2) если дата изготовления выше даты окончания срока годности то выдать " дата изготовления не корректна" и тоже запретить добавлять эту запись в базу.
3) если товар с таким именем уже есть то выдать сообщние об этом и спросить у пользователя добавить его или нет.
Я выполнил первые два условия, третье условие не получается выполнить никак(((( помогите пожалуйста.
Сама база записывается в текстовый файл db.txt.
Я прописываю условие третьего пункта но оно работает некорректно. А именно если в пустую баззу записать элемент с именем "стиморол" а потом повторно попытаться его добавить то он как и полагается выдает сообщение и не добавляет его. Но если после элемента с именем "стиморол" добавить "дирол" а потом снова попытаться добавить стиморол то он его уже пропускает в базу тем самым получается что в базе оказывается два элемента с одинаковым именем стиморол.
вот само условие когда проверяются все три пункта.
if (FIO1->Text == "")
ShowMessage("Введите наименование товара");
else
if (DateTimePicker1->DateTime>DateTimePicker2->DateTime)
ShowMessage(" введите корректную дату изготовления");
if (m[C].fio ==FIO1->Text)
ShowMessage("такой элемент уже есть");
весь код прекрепил файлом помогите плиз может кто похожее делал киньте код посмотреть.
Вложения
Тип файла: rar человека машинное взаимодействие1.rar (19.3 Кб, 6 просмотров)
lexflax вне форума Ответить с цитированием
Старый 03.03.2013, 10:08   #2
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Что-то в архиве не всё... :-) Надо будет последовательно просмотреть весь список, попутно сравнивая наименования товаров с введённым. Я так понимаю, всё хранится в каком-то массиве m. Все проверки лучше всего выполнять в теле функции, которая возвращает, например, true, если можно добавлять, и false, если нельзя. Например
Код:
bool __fastcall TForm1::IsValid( const AnsiString& sName, const TDateTime& dtDate )
{
  bool bResult = true;
  if( sName.IsEmpty() )
  {
    ShowMessage( "Введите наименование товара" );
    bResult = false;
  }
  else if( dtDate > DateTimePicker2->DateTime )
  {
    ShowMessage( "Введите корректную дату изготовления" );
    bResult = false;
  }
  else
  {
    for( int i = 0; i < сколько_товаров_вообще; i++ )
    {
      if( m[i].fio == sName)
      {
        ShowMessage( "Такой элемент уже есть" );
        bResult = false;
        break;
      }
  }
  return bResult;
}

// Где-то в программе ...
if( IsValid( FIO->Text, DateTimePicker1->DateTime )
{
  // Добавляешь элемент
}
else
{
  // Не добавляешь.. :-)
}
FataLL вне форума Ответить с цитированием
Старый 03.03.2013, 12:57   #3
lexflax
Пользователь
 
Регистрация: 12.04.2011
Сообщений: 74
По умолчанию

ну вот весь код, я не могу сообразить как его переделать по вашему примеру
Код:
struct man
{
		AnsiString fio; // фамилия
		AnsiString date;
		AnsiString dateok;
		  // дата
		int HECH; // шифр

} m[1000];
	AnsiString FAM[100][100];//
int C = 0;
TForm1 *Form1;
//---------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
		: TForm(Owner)
{
}

//-------------------------------------------
int __fastcall TForm1::HF(char *key) // функция хеширование возвращает значение типа int
{
  int len = strlen(key), hashf = 0;

  // если длина ключа равна 0 или 1, возвратить key[0].
  // иначе сложить первый и последний символ
  if (len <= 1)
	hashf = key[0];
  else
  for (int i = 0; i < len; i++) {


	hashf = hashf+key[i];} //складывает первый второй и последний символ

  return hashf % 100;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender) // функция загрузки файла во время запуска
{
		MkDir("List");//
		if ((access("List\\db.txt",0)) == 0) //
		{
				db->Lines->LoadFromFile("List\\db.txt");// загрузка в db из файла db.txt
				Rec->Caption = db->Lines->Count/4; //  определение количества записей
				for (int i=0,j=0; j < db->Lines->Count;i++,j+=4)// цикл по строкам
				{       int k=0;
						m[i].fio = db->Lines->Strings[j]; //запись в элемент структуры из db
						m[i].date = db->Lines->Strings[j+1];
						m[i].dateok=db->Lines->Strings[j+2]; // запись в элемент даты из db
						// запись в элемент тиме из db
						for (k = 0; FAM[m[i].HECH][k].Length()!=0; k++) {
						}
						FAM[m[i].HECH][k]=db->Lines->Strings[j+3];
						 // запись в индекс массива строк фам+дата+время из db
						ComboBox1->Items->Add(m[i].fio);
						 // вывод фамилии в список
						ComboBox1->Items->Add("Дата изготовления: " + m[i].date);
						ComboBox1->Items->Add("Дата окончания срока годности: " + m[i].dateok);// вывод даты в список
						// вывод в список времени
						ComboBox1->Items->Add("=================================");
				}
		}
}
//----------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)// функция добавление нового человека
{               if (FIO1->Text == "") {
  ShowMessage("Введите наименование товара.");
}
else if (m[C].fio == FIO1->Text) {
  ShowMessage("Та мы уже такое покупали...");
}
else if (DateTimePicker1->DateTime > DateTimePicker2->DateTime) {
  ShowMessage("Введите корректную дату изготовления.");
}
		else
		{       int k=0;
				C = (db->Lines->Count/4);
				AnsiString Temp;
				m[C].fio = FIO1->Text;// запись в структуру фамилии
				m[C].date = DateTimePicker1->Date.DateString();
				m[C].dateok = DateTimePicker2->Date.DateString();// запись в структуру даты
				// запись в структуру время
				Temp =m[C].fio;//присвоить фамилию
				char *exp = Temp.c_str();
				m[C].HECH=HF(exp);
				(m[C].HECH=m[C].HECH * -1); // присвоить хеш по фамилии
				
				for (k = 0; FAM[m[C].HECH][k].Length()!=0; k++) {


				FAM[m[C].HECH][k]= m[C].fio; }
			//запись в елемент массива фам+дата+время

				ComboBox1->Items->Add(m[C].fio);  // вывод в список фамилии
				ComboBox1->Items->Add("Дата изготовления: " + m[C].date);
				ComboBox1->Items->Add("Дата окончания срока годности " + m[C].dateok); // вывод в список даты
				 // вывод в список времени
				ComboBox1->Items->Add("=================================");
				db->Lines->Add(m[C].fio);// добавление в db ифну из фио
				db->Lines->Add(m[C].date);
				db->Lines->Add(m[C].dateok);// добавление в db инфу из date
				// добавление в db инфу из time
				 // добавление в db инфу из шифра
				db->Lines->Add (FAM[m[C].HECH][k]);// добавление в db инфу строкового массива в котором фам+дата+время
				// добавление в db шифра
				Rec->Caption = db->Lines->Count/4;//подчет количества записей
				db->Lines->SaveToFile("List\\db.txt");//сохранение информации db в файл db.txt

				FIO1->Clear();}// очистка поля FIO1
		}

//--------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{       int g=0;
		Button3->Hide();//скрыть кнопку
		Count->Caption = 0;
		Search->Clear();int k=0;
		if (FIO2->Text == "")
				ShowMessage("Наименование товара");
		else
		{db->Lines->LoadFromFile("List\\db.txt"); // загрузка информации из файла
		 AnsiString Tem;
		 Tem =(FIO2->Text); // фио2 это поля для ввода , присваивавем его значение в тем
		 char *exx = Tem.c_str();
		 int ZZ;
		 ZZ=HF(exx);
		 ZZ=ZZ*-1; // в значение зз хранится результат перевода фамилии в хеш код
		 Button3->Show(); // показать кнопку
		  //с
		 for (k = 0;  FAM[ZZ][k].Length()!=0; k++, g++)
		  {Search->Lines->Add(FAM[ZZ][k]);
		  }
		 }//вывести в поле значение которое совпадает с индексом фамилии это фам+дата+время
		 Count->Caption = g; // присвоить значение счестчика полю типа label

Последний раз редактировалось ACE Valery; 03.03.2013 в 15:09.
lexflax вне форума Ответить с цитированием
Старый 03.03.2013, 18:18   #4
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Кто ж вас так, бедных, учит?... Мдяяя... И как там вообще что-то работает?
Код:
bool __fastcall TForm1::IsValid( const AnsiString& sName, const TDateTime& dtDate )
{
  bool bResult = true;
  if( sName.IsEmpty() )
  {
    ShowMessage( "Введите наименование товара" );
    bResult = false;
  }
  else if( dtDate > DateTimePicker2->DateTime )
  {
    ShowMessage( "Введите корректную дату изготовления" );
    bResult = false;
  }
  else
  {
    for( int i = 0; i < db->Lines->Count/4; i += 3 )
    {
      if( m[i].fio == sName )
      {
        ShowMessage( "Такой элемент уже есть" );
        bResult = false;
        break;
      }
  }
  return bResult;
}
//-------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)// функция добавление нового человека
{
  if ( IsValid( FIO->Text, DateTimePicker1->DateTime ) ) // <== сюда "вставляешь"! :-)
  {
    int k=0;
    C = (db->Lines->Count/4);
    // ...и т.д.
Но это всё не самое главное...
FataLL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Народ не получается с задачей в c++! Ни как не получается даже начать! дайте решение,хотя бы набросайте чего нибудь! sonat Помощь студентам 2 30.05.2012 08:27
Не получается составить условие artemavd Общие вопросы Delphi 10 19.12.2011 04:58
Не срабатывает условие сравнения чисел. Solvinder Помощь студентам 1 28.04.2011 23:01
Сравнения изображений ВасяСВВ Общие вопросы C/C++ 0 05.04.2011 17:17