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

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

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

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

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

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

Доброго времени суток.
Программа типа склад с добавлением товара на склад.
У товара есть срок годности.
Не могу прописать такое условие чтоб если товару осталось меньше 30 дней срок годности то выдавало сообщение об этом.
Просто не знаю как это приписать вроде если прописывать от срока окончания годности отнять срок изготовления, то это как то не грамотно по мойму будет. Да и плюс у меня в структуре сроки годности типа AntiString.
А перевести в int тоже нельзя потому что в другом месте тогда программа не простит такой тип. Можно наверно как то в самом условие менять типы но не знаю как... Да и как вообще грамтно прописать условие не знаю подскажите плиз.
Код:
struct man
{
		AnsiString fio; // фамилия
		AnsiString date;
		AnsiString dateok;
		  // дата
		int HECH; // шифр

} m[1000];
	AnsiString FAM[100][100];//массив строк в котором значение хеш функции это индекс массива куда записывается инфа о человеке
int C = 0;
TForm1 *Form1;
отрывок где прописанны условия туда надо добавить еще условие со сроком годности...
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)// функция добавление нового человека
{         bool add_now( true );

	if ( FIO1->Text.IsEmpty( ) ) {
		ShowMessage( "Введите наименование товара" );
		return;
	}
	if ( DateTimePicker1->DateTime > DateTimePicker2->DateTime ) {
		ShowMessage( " введите корректную дату изготовления" );
		return;
	}
	for ( size_t i = 0; i < sizeof( m ) / sizeof( m[0] ); ++i ) {
		if ( m[i].fio == FIO1->Text ) {
			add_now = ( Application->MessageBox(L"Такой элемент уже есть, добавить его повторно?",
			L"Предупреждение", MB_YESNO ) == IDYES );
		}
	}
	if ( add_now ) {
	int k=0;
		C = db->Lines->Count / 4;
        m[C].fio = FIO1->Text; // запись в структуру фамилии
        m[C].date = DateTimePicker1->Date.DateString( );
        m[C].dateok = DateTimePicker2->Date.DateString( ); // запись в структуру даты
        // запись в структуру время
		m[C].HECH = HF( m[C].fio.c_str( ) );
        m[C].HECH = m[C].HECH * -1; // присвоить хеш по фамилии

        for ( int 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
	}  }
Вложения
Тип файла: rar человека машинное взаимодейстццвие.rar (20.0 Кб, 15 просмотров)

Последний раз редактировалось Stilet; 06.03.2013 в 12:37.
lexflax вне форума Ответить с цитированием
Старый 06.03.2013, 12:30   #2
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Начнём с того, что из AnsiString можно запросто получить TDateTime.
Код:
TDateTime dt = TDateTime( m[C].dateok );
Легче стало?

Последний раз редактировалось FataLL; 06.03.2013 в 12:39.
FataLL вне форума Ответить с цитированием
Старый 11.03.2013, 07:25   #3
lexflax
Пользователь
 
Регистрация: 12.04.2011
Сообщений: 74
По умолчанию

нет не стало я так понимаю типы данных все равно не подходят условие стало таким:
TDateTime dt = TDateTime( m[C].dateok );
TDateTime dd = TDateTime( m[C].date);
if ( dt-dd<30) {
ShowMessage( " срок годности меньше 30 дней" );
return;
}
выдает ошибку в условии такую:
E2015 Ambiguity between '_fastcall operator TDateTime:ouble() const' and '_fastcall operator TDateTime::int() const'
lexflax вне форума Ответить с цитированием
Старый 11.03.2013, 10:13   #4
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Компилятор не знает, к какому типу привести даты к целому или вещественному. Поэтому, нормальные люди юзают
Код:
if( DaysBetween( dt, dd ) < 30 )
{
  ShowMessage( " срок годности меньше 30 дней" );
  return;
}
А настоящие индейцы, которые, как я, сидят на c++builder 5, делают явное приведение типа
Код:
if( (double) (dt - dd) < 30.0 )
{
  ShowMessage( " срок годности меньше 30 дней" );
  return;
}
FataLL вне форума Ответить с цитированием
Старый 11.03.2013, 17:44   #5
lexflax
Пользователь
 
Регистрация: 12.04.2011
Сообщений: 74
По умолчанию

большое спасибо))) хоть условие теперь корректное есть)))теперь надо сделать чтоб когда в базе уже есть товары у которых срок годности стал меньше 30 дней он подсвечивал их цветом.
При загрузке у меня из файла информация загружается в компонент комбобокс.
Но сравнение тут будет идти немного другое...
Есть начальная дата изготовления.
Есть дата окончания срока годности.
Как определить текущую дату? как в программу можно подавать это значение при ее загрузке?
Ведь в таком случае будет сравниваться так что от даты окончания срока годности будем отнимать текущую дату и если ее значение меньше 30 дней то выдавать об этом предупреждение.
lexflax вне форума Ответить с цитированием
Старый 11.03.2013, 22:08   #6
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Код:
TDateTime dt = Now(); // Текущая дата и время
FataLL вне форума Ответить с цитированием
Старый 12.03.2013, 07:10   #7
lexflax
Пользователь
 
Регистрация: 12.04.2011
Сообщений: 74
По умолчанию

вернемся к условию 3 дней при вводе нового товара.
начал проверять выявил ошибку.
TDateTime dt = TDateTime( m[C].dateok );
TDateTime dd = TDateTime( m[C].date);
if( (double) (dt - dd) < 30.0 )
{
ShowMessage( " срок годности меньше 30 дней" );
return;
допустим в вожу имя и даты
дата изготовления 11.02.2011
дата окончания срока годности 15.01.2013.
он не пропускает выдает что срок годности остался меньше 30 дней.
Хотя если 15.01.2013-11.02.2011 то будет явно намного больше 30 дней.
Как тут можно поправить данный случай?
lexflax вне форума Ответить с цитированием
Старый 12.03.2013, 10:17   #8
Vzlom
Форумчанин
 
Регистрация: 11.02.2013
Сообщений: 155
По умолчанию

TDateTime для dd и dt совподают у вас, TDateTime и TDateTime1 должно быть у вас, TDateTime не может принимать 2 даты одновременно.
Vzlom вне форума Ответить с цитированием
Старый 12.03.2013, 10:18   #9
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

1) Чему равно m[C].dateok?
2) Чему равно m[C].date?
3) Чему равно (double) (dt - dd)?
Отладка рулит.

Цитата:
Сообщение от Vzlom Посмотреть сообщение
TDateTime для dd и dt совподают у вас, TDateTime и TDateTime1 должно быть у вас, TDateTime не может принимать 2 даты одновременно.
TDateTime - это какбэ тип данных, дружище. Ты же переменные не описываешь как int i, int1 n? Или описываешь?

Последний раз редактировалось Stilet; 24.03.2013 в 13:36.
FataLL вне форума Ответить с цитированием
Старый 12.03.2013, 11:10   #10
Vzlom
Форумчанин
 
Регистрация: 11.02.2013
Сообщений: 155
По умолчанию

Цитата:
Сообщение от FataLL Посмотреть сообщение
TDateTime - это какбэ тип данных, дружище. Ты же переменные не описываешь как int i, int1 n? Или описываешь?
Тогда, что на это скажешь? Это типы вычитаются у него?
if( (double) (dt - dd) < 30.0 )
Vzlom вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Учет срока годности товара Slavatron1984 Microsoft Office Excel 7 01.04.2014 15:38
прописать дополнительное условие (if, then,else) delphi tarasov_88 Помощь студентам 5 11.09.2012 20:33
Как прописать условие? bwitcher Помощь студентам 7 18.12.2010 01:02
Вычисление срока Neymexa Microsoft Office Excel 6 15.02.2010 21:50
Запретить изменения Книги после истечения месячного срока komar73 Microsoft Office Excel 0 31.03.2009 11:01