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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2015, 18:33   #1
GalaiAnton
Пользователь
 
Регистрация: 07.03.2015
Сообщений: 37
По умолчанию Вывести информацию о рейсах, которыми можно воспользоваться для прибытия в пункт назначения раньше заданного времени.

Код:
  Type
  Tavt=record
  Nmar: integer;
  Tipavt: string[20];
  Punkt: string[20];
  VrOtpr: TDateTime;
  VrPr: TDateTime;
  Pun:string[20];
  Vr:TDateTime;
  end;
 
  Var
  Fz:File of Tavt; //Файл типа запись
  Ft:TextFile; //Текстовый файл
  Avto:array[1..100] of Tavt; //Массив записей
  nzap:integer;  //Номер записи
  FileNameZ, FileNameT : string; //Имя файла
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
   Edit1.Text:='';
   Edit2.Text:='';
   Edit3.Text:='';
   Edit4.Text:='';
   Edit5.Text:='';
   Edit6.Text:='';
   Edit7.Text:='';
   Memo1.Clear;
    Button1.Hide;// Сделать невидимой кнопку "Ввести запись"
    nzap:=0;
end;
 
procedure TForm1.Button1Click(Sender: TObject); //Ввести новую запись
begin
nzap:=nzap+1;
  with Avto[nzap] do begin
           Nmar:=StrToInt(Edit1.Text);
           Tipavt:=Edit2.Text;
           Punkt:=Edit3.Text;
           VrOtpr:=StrToTime(Edit4.Text);
           VrPr:=StrToTime(Edit5.Text);
           Pun:=Edit6.Text;
           Vr:=StrToTime(Edit7.Text);
  Memo1.Lines.Add(IntToStr(Nmar)+' '
  +Tipavt+'  '
  +Punkt+'   '
  +timeToStr(VrOtpr)+'   '
  +timeToStr(VrPr)+'  '+Pun+'  '+TimeToStr(Vr));
  end;
     Write(fz,Avto[nzap]);                  // Запись в файл
   Edit1.Text:='';
   Edit2.Text:='';
   Edit3.Text:='';
   Edit4.Text:='';
   Edit5.Text:='';
   Edit6.Text:='';
   Edit7.Text:='';
end;
 
procedure TForm1.Button2Click(Sender: TObject); //Создание нового файла записей
begin
 OpenDialog1.Title :='Создать новый файл';    // Изменение заголовка окна диалога
 if OpenDialog1.Execute then  // Выполнение стандартного диалога выбора имени файла
   begin
    FileNameZ:= OpenDialog1.FileName; // Возвращение имени дискового файла
    AssignFile(Fz,FileNameZ);  // Связывание файловой переменной Fz c именем файла
     Rewrite(Fz);                         // Создание нового файла
   end;
 Button1.Show;   //Сделать видимой кнопку "Ввести запись"
end;
 
procedure TForm1.Button3Click(Sender: TObject);//Открыть существующий файл
begin
Memo1.Clear;
 if OpenDialog1.Execute then  // Выполнение стандартного диалога выбора имени файла
   begin
    FileNameZ:=OpenDialog1.FileName; // Возвращение имени дискового файла
    AssignFile(Fz, FileNameZ);    // Связывание файловой переменной Fz c именем файла
     Reset(Fz);                                // Открытие существующего файла
   end;
  while not eof(fz) do begin
   nzap:=nzap+1;
     Read(fz,Avto[nzap]);                // Чтение записи из файла
         with Avto[nzap] do
    Memo1.Lines.Add(IntToStr(Nmar)+' '
  +Tipavt+'  '
  +Punkt+'  '
  +TimeToStr(VrOtpr)+'  '
  +TimeToStr(VrPr)+'  '+Pun+'  '+TimeToStr(Vr));
  end;
     Button1.Show;                       // Сделать видимой кнопку "Ввести запись"
 
end;
 
procedure TForm1.Button5Click(Sender: TObject); //Сохранение результатов в текстовом файле
var i:word;
begin
  if SaveDialog1.Execute then  // Выполнение стандартного диалога выбора имени файла
  begin
   FileNameT:=SaveDialog1.FileName; // Возвращение имени дискового файла
    AssignFile(Ft, FileNameT);     // Связывание файловой переменной Ft c именем файла
      Rewrite(Ft);                           // Открытие нового текстового файла
    end;
  for i:=1 to nzap do
         with Avto[i] do  Write(ft,
  IntToStr(Nmar)+' '
  +Tipavt+'  '
  +Punkt+'  '
  +TimeToStr(VrOtpr)+'  '
  +TimeToStr(VrPr)+'  '+Pun+'  '+TimeToStr(Vr));
    CloseFile(Ft);                              // Закрытие текстового файла
 
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
CloseFile(Fz);
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(Fz);
end;
 
procedure TForm1.Button4Click(Sender: TObject); //Вывод записей
var i,j:Integer;
st:Tavt;
begin
for i:=1 to nzap do //Сортировка массива записей
for j:=1 to nzap do
if (Avto[i].Punkt = Avto[j].Pun) and (Avto[i].VrPr <= Avto[j].Vr) then begin
st:=Avto[i];
end;
Memo1.Clear;
for i:=1 to nzap do // Вывод в окно Memo1 отсортированных записей
with avto[i] do
Memo1.Lines.Add(IntToStr(i)+'.' + IntToStr(Nmar)+' '
  +Tipavt+'  '
  +Punkt+'  '
  +TimeToStr(VrOtpr)+'  '
  +TimeToStr(VrPr)+'  '+Pun+'  '+TimeToStr(Vr));
end;
 
end.
У меня вопрос по кнопке 4,подскажите,как сделать так,чтобы когда я нажимаю на кнопку 4,выводились только рейсы,которыми можно воспользоваться для прибытия в пункт назначения раньше заданного времени.У меня выводит все рейсы,правильные они или нет,а мне надо,чтобы выводило только правильные...Как это сделать?
GalaiAnton вне форума Ответить с цитированием
Старый 26.03.2015, 18:50   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Скинь примеры файлов, с которыми работает программа. Чёт не хочется самому их набивать. Дальше будем уже смотреть.
Sibedir вне форума Ответить с цитированием
Старый 26.03.2015, 18:57   #3
GalaiAnton
Пользователь
 
Регистрация: 07.03.2015
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Скинь примеры файлов, с которыми работает программа. Чёт не хочется самому их набивать. Дальше будем уже смотреть.
Тот файл,с которым оно работает,называется A.dat,я его открываю,нажимаю вывести и оно мне все выводит,а мне надо только те рейсы,которыми можно воспользоваться раньше заданного времени...
Вложения
Тип файла: rar Лаб. 6.rar (180.7 Кб, 18 просмотров)
GalaiAnton вне форума Ответить с цитированием
Старый 26.03.2015, 19:23   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Давай по порядку
Код:
for i:=1 to nzap do //Сортировка массива записей
for j:=1 to nzap do
if (Avto[i].Punkt = Avto[j].Pun) and (Avto[i].VrPr <= Avto[j].Vr) then begin
st:=Avto[i];
end;
Это не сортировка. Это вообще не понятно что. Зачем это здесь?

----------------------------------------
Еще
Код:
 Tavt=record
  Nmar: integer;
  Tipavt: string[20];
  Punkt: string[20];
  VrOtpr: TDateTime;
  VrPr: TDateTime;
  Pun:string[20];
  Vr:TDateTime;
  end;
Закоментируй пожалуйста, а то не всё понятно.

Последний раз редактировалось Sibedir; 26.03.2015 в 19:28.
Sibedir вне форума Ответить с цитированием
Старый 26.03.2015, 20:22   #5
GalaiAnton
Пользователь
 
Регистрация: 07.03.2015
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Давай по порядку
Код:
for i:=1 to nzap do //Сортировка массива записей
for j:=1 to nzap do
if (Avto[i].Punkt = Avto[j].Pun) and (Avto[i].VrPr <= Avto[j].Vr) then begin
st:=Avto[i];
end;
Это не сортировка. Это вообще не понятно что. Зачем это здесь?

----------------------------------------
Еще
Код:
 Tavt=record
  Nmar: integer;
  Tipavt: string[20];
  Punkt: string[20];
  VrOtpr: TDateTime;
  VrPr: TDateTime;
  Pun:string[20];
  Vr:TDateTime;
  end;
Закоментируй пожалуйста, а то не всё понятно.
Nmar это номер маршрута
Tipavt это тип автобуса
Punkt пункт прибытия
VrOtp время отправления
VrPr время прибытия
Pun пункт,который я ввожу и когда Пункт прибытия будет = пункту
Vr Время,которое я ввожу и когда VrPr>=Vr,то оно мне должно вывести в Memo1,а если не совпадает,то не должно выводить,но реализуя это в кнопке 4 оно не хочет этого делать...
GalaiAnton вне форума Ответить с цитированием
Старый 26.03.2015, 20:51   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

До завтра выбыл. Спать пошел.
Sibedir вне форума Ответить с цитированием
Старый 27.03.2015, 00:55   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Код:
procedure TForm1.Button4Click(Sender: TObject); //Вывод записей
var i, j: Integer;
  times: TTime;
  x: Tavt;
begin
  try
    times := StrToTime(trim(Edit7.text))
  except
    ShowMessage('Введите время формата ОО:ОО:ОО');
    exit;
  end;

  Memo1.Clear;

       //сортировка массива записей по неубыванию
       // по времени прибытия
  for I := 1 to filesize(fz) do
    for j := 1 to filesize(fz) do
      if (avto[j].VrPr > avto[j + 1].VrPr) then
      begin
        x := avto[j + 1];
        avto[j + 1] := avto[j];
        avto[j] := x;
      end;

  j := 1; //количество найденых записей



  for i := 1 to nzap do //поиск записей по условию: если введенное время меньше или равно времени
  //прибытия, записанному в массив и если пункт равен введенному (регистрочувствтелен)
    with avto[i] do
      if ((times <= avto[i].VrPr) and (trim(Edit6.text) = = Avto[i].Pun)) then // как-то так, объясните точнее
      begin


        Memo1.Lines.Add(IntToStr(j) + ') ' + 'Время прибытия: ' + TimeToStr(Vr));
        Memo1.Lines.Add(IntToStr(Nmar) + ' '
          + Tipavt + '  '
          + Punkt + '  '
          + TimeToStr(VrOtpr) + '  '
          + TimeToStr(VrPr) + '  ' + Pun);
        Memo1.Lines.Add('-----------------------------------------');
        Inc(j);
      end;
end;
Вроде работает, особо времени не было проверять, ибо уже спать пора
from dark to light)

Последний раз редактировалось Алексей_2012; 27.03.2015 в 01:15.
Алексей_2012 вне форума Ответить с цитированием
Старый 27.03.2015, 01:40   #8
GalaiAnton
Пользователь
 
Регистрация: 07.03.2015
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Код:
procedure TForm1.Button4Click(Sender: TObject); //Вывод записей
var i, j: Integer;
  times: TTime;
  x: Tavt;
begin
  try
    times := StrToTime(trim(Edit7.text))
  except
    ShowMessage('Введите время формата ОО:ОО:ОО');
    exit;
  end;

  Memo1.Clear;

       //сортировка массива записей по неубыванию
       // по времени прибытия
  for I := 1 to filesize(fz) do
    for j := 1 to filesize(fz) do
      if (avto[j].VrPr > avto[j + 1].VrPr) then
      begin
        x := avto[j + 1];
        avto[j + 1] := avto[j];
        avto[j] := x;
      end;

  j := 1; //количество найденых записей



  for i := 1 to nzap do //поиск записей по условию: если введенное время меньше или равно времени
  //прибытия, записанному в массив и если пункт равен введенному (регистрочувствтелен)
    with avto[i] do
      if ((times <= avto[i].VrPr) and (trim(Edit6.text) = = Avto[i].Pun)) then // как-то так, объясните точнее
      begin


        Memo1.Lines.Add(IntToStr(j) + ') ' + 'Время прибытия: ' + TimeToStr(Vr));
        Memo1.Lines.Add(IntToStr(Nmar) + ' '
          + Tipavt + '  '
          + Punkt + '  '
          + TimeToStr(VrOtpr) + '  '
          + TimeToStr(VrPr) + '  ' + Pun);
        Memo1.Lines.Add('-----------------------------------------');
        Inc(j);
      end;
end;
Вроде работает, особо времени не было проверять, ибо уже спать пора
Благодарю,я уже разобрался с этим!Всем спасибо!
GalaiAnton вне форума Ответить с цитированием
Старый 27.03.2015, 06:59   #9
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от GalaiAnton Посмотреть сообщение
Nmar это номер маршрута
Tipavt это тип автобуса
Punkt пункт прибытия
VrOtp время отправления
VrPr время прибытия
Pun пункт,который я ввожу и когда Пункт прибытия будет = пункту
Vr Время,которое я ввожу и когда VrPr>=Vr,то оно мне должно вывести в Memo1,а если не совпадает,то не должно выводить,но реализуя это в кнопке 4 оно не хочет этого делать...
И еще
Зачем хранишь
Цитата:
Pun пункт,который я ввожу ...
Vr Время,которое я ввожу ...
в каждой записи?
Sibedir вне форума Ответить с цитированием
Старый 27.03.2015, 15:50   #10
GalaiAnton
Пользователь
 
Регистрация: 07.03.2015
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
И еще
Зачем хранишь

в каждой записи?
Спасибо,я уже разобрался,все хорошо работает!
GalaiAnton вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На оси ОХ даны три точки с действительными координатами. Вывести координаты двух точек, между которыми лежит третья (Паскаль) PASKAL12 Помощь студентам 6 08.10.2013 07:20
задача на типы по Паскалю: Вывести число первого понедельника для каждого месяца для заданного года Ind Паскаль, Turbo Pascal, PascalABC.NET 3 23.12.2012 00:31
[РЕШЕНО] пропал пункт открыть с помощью, подскажите как его можно вернуть Simply-Art Windows 7 11.02.2009 10:49
Подскажите пожалуйста чем удобнее воспользоваться для поиска нужного значения Ivo4ka Microsoft Office Excel 9 01.10.2007 20:17