Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Компоненты TOpenDialog и TSaveDialog   Найти похожие ветки 

 
Boortwint ©   (2010-04-02 13:52) [0]

Дали мне тут задание задание.
Создать програмулину для работы на автобусной станции.
Суть ее заключается в том, чтобы с помомощью этой программы вбить номер маршрута автобуса, его тип, пункт назначения, время отправления и время прибытия.
Необходимо вывести маршрут, который занимает минимальное время. Отсюда первый вопрос: какой тип данных нужно использовать, чтобы введенное в edit число преобразовывалось во время?. Я использовал DateTime, но число у меня преобразовывалось в дату, т.е., к примеру, 02.04.2010, а оно мне не надо. Нужно время.
Информация должна сохраняться в отдельном txt файле.
Все чего мог я добиться - это создать 2 кнопки: "открытие" и "создание" файла. Необходимо еще придумать как создать кнопку сохранить, но до меня не доходит как это сделать.
       Type
 Tavt=record                 //Объявление типа "запись"
 Nmar: integer;              //номер маршрута
 Tipavt: string[20];        //Тип автобуса
 Punkt: string[20];         //пункт назначения
 VrOtpr: TDateTime;      //время отправления
 VrPr: TDateTime;         //время прибытия
 end;

 Var
 Fz:File of Tavt;
 Ft:TextFile;
 Avto:array[1..100] of Tavt; //объявления массива типа Tavt
 nzap:integer;
 FileNameZ, FileNameT : string;

var
 Form1: TForm1;

Выше приведены все типы переменных, которые я использовал

Кнопка ввода информации в файл:
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:=StrToInt(Edit4.Text);
          VrPr:=StrToInt(Edit5.Text);
 Memo1.Lines.Add(IntToStr(Nmar)+" "
 +Tipavt+"  "
 +Punkt+"   "
 +DateToStr(VrOtpr)+"   "
 +DateToStr(VrPr));
                               end;
    Write(fz,Avto[nzap]);    
  Edit1.Text:="";
  Edit2.Text:="";
  Edit3.Text:="";
  Edit4.Text:="";
  Edit5.Text:="";

end;


Кнопка создания файла:
procedure TForm1.Button2Click(Sender: TObject);
begin
  OpenDialog1.Title :="Создать новый файл";  
if OpenDialog1.Execute then  /
  begin
   FileNameZ:= OpenDialog1.FileName;
   AssignFile(Fz,FileNameZ);  /
    Rewrite(Fz);                        
  end;

Кнопка открытия файла
procedure TForm1.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute then  
  begin
   FileNameZ:= OpenDialog1.FileName; // возвращение имени дискового файла
   AssignFile(Fz, FileNameZ);    // связывание файловой переменной с именем файла
    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+"   "
 +DateToStr(VrOtpr)+"   "
 +DateToStr(VrPr));
                                end;

end;


Возникает вопрос: как сохранять все это дело в файле и как осуществить выборку наименьшего времени пути до пункта назначения. Буду рад любой помощи. Заранее спасибо.


 
Anatoly Podgoretsky ©   (2010-04-02 14:42) [1]

> Boortwint  (02.04.2010 13:52:00)  [0]

Button1.Caption := "Сохранить";


 
Dennis I. Komarov ©   (2010-04-02 15:02) [2]


> Button1.Caption := "Сохранить";

Дык тогда "Открыть" пропадет...


 
Dennis I. Komarov ©   (2010-04-02 15:04) [3]


> Boortwint ©   (02.04.10 13:52)  

http://yandex.ru/yandsearch?text=%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F+%D0%B3%D1%80%D0%B0%D1%84%D0%BE%D0%B2+%D0%B8+%D0%B5%D0%B5+%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5&stpar2=%2Fh1%2Ftm7%2Fs1&stpar4=%2Fs1&stpar1=%2Fu1&stpar3=%2Fk2%2Ftc29%2Fnc1&lr=11


 
И. Павел ©   (2010-04-02 15:05) [4]

Странно, что автора итрересуют не графы и алгоритм поиска оптимального маршрута а ввод/вывод.


 
oldman ©   (2010-04-02 15:10) [5]


> Я использовал DateTime, но число у меня преобразовывалось
> в дату, т.е., к примеру, 02.04.2010, а оно мне не надо.


Оно не преобразовывалось, оно так выводилось на экран.
Поверь, время там тоже есть, но прячется.


 
Демо ©   (2010-04-02 15:12) [6]

         VrOtpr:=StrToInt(Edit4.Text);
         VrPr:=StrToInt(Edit5.Text);


А почему к целому преобразуешь?
Ведь функция для преобразования даты/времени есть - StrToDate, например?


 
Anatoly Podgoretsky ©   (2010-04-02 15:23) [7]


> Дык тогда "Открыть" пропадет...

Не пропадет, открыть у тебя на button3


 
Dennis I. Komarov ©   (2010-04-02 15:29) [8]


> Не пропадет, открыть у тебя на button3

Дядя Толя, да у меня ни button1, ни button2 нету... Каюсь, код смотреть не стал после:

> Все чего мог я добиться - это создать 2 кнопки: "открытие"
> и "создание" файла. Необходимо еще придумать как создать
> кнопку сохранить, но до меня не доходит как это сделать.
>  

По логике открыть должна быть первой... ;)


 
Jeer ©   (2010-04-02 15:32) [9]


> Странно, что автора итрересуют не графы и алгоритм поиска
> оптимального маршрута а ввод/вывод.


Так он и это не умеет, а ты про оптимизацию, графы..


 
Anatoly Podgoretsky ©   (2010-04-02 17:54) [10]


> Дядя Толя, да у меня ни button1, ни button2 нету... Каюсь,
>  код смотреть не стал после:

Так сделай, чего же расстраиваться.


 
Boortwint ©   (2010-04-02 18:09) [11]

Стебаться мы умеем, это да))
Ну, благо пару полезных постов я нашел. Спасибо.


 
Boortwint ©   (2010-04-05 13:15) [12]


procedure TForm1.Button5Click(Sender: TObject);
var i:word;
begin
Memo1.Clear;
 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  Writeln(ft,
 IntToStr(Nmar)+" "
 +Tipavt+"  "
 +Punkt+"  "
 +TimeToStr(VrOtpr)+"  "
 +TimeToStr(VrPr));
   CloseFile(Ft);                              // Закрытие текстового файла
end;

Забацал кнопку сохранения. При ее нажатии прога сохраняет содержимое memo1 в отдельный файл. Кнопка, в принципе, работает, но сохраняет какую-то кракозябу. Появляются лишние цифры.
У кого-нибудь есть идеи где я мог напортачить?


 
Putnik ©   (2010-04-05 14:41) [13]

memo1.lines.savetofile?


 
12 ©   (2010-04-05 14:47) [14]


> но сохраняет какую-то кракозябу. Появляются лишние цифры.
>  

как узнали?


 
Boortwint ©   (2010-04-05 14:57) [15]


> как узнали?

Забиваю, к примеру, данные:
1  икарус  Кукуево  13:00  15:00
2  Зил       Кукуево  13:00  16:00.
Жму "сохранить" и в новом файле появляется что-то типа:
86548783 укуево 13:00  15:00
2  Зил       Кукуево  13:00  16:00.

Не могу причину найти.


 
И. Павел ©   (2010-04-05 15:04) [16]

Вот это почитайте, а потом отладьте программу: посмотрите, какие данные пишутся в файл:
http://www.nmarket.ru/program/delphi/lessons-1/les-26.php

PS:может просто в Кукуево икарусы не ездят :)


 
Boortwint ©   (2010-04-05 15:06) [17]

Еще нашел баг. Сохранение данных зависит от имени файла, в который они сохраняются.
Например, если обозвать файл "20", то сохранение будет происходить с ошибками, вроде таких, какие описаны моим постом выше.
Если, к примеру "5", то вообще ничего происходить не будет. Ерунда какая-то.


 
Boortwint ©   (2010-04-05 15:08) [18]


> И. Павел

Спасибо, посмотрю.


 
12 ©   (2010-04-05 15:15) [19]

86548783 укуево
надо найти, когда строка получает такое значение.
Как присваиваете очередную запись?

попробуйте в самом начале обнулиться
zeromemory(@Avto, SizeOf(Tavt)*100);


 
Anatoly Podgoretsky ©   (2010-04-05 16:06) [20]

> Boortwint  (05.04.2010 15:06:17)  [17]

Великий русский сказочник Андерсон


 
Boortwint ©   (2010-04-05 16:49) [21]


> Великий русский сказочник Андерсон

Реально Андерсон)) и Шарль Перро.
Сейчас сделал тоже самое на другом компе. Не работает моя теораия.
Мда


 
Сергей М. ©   (2010-04-05 16:55) [22]


> Не работает моя теораия.


Так работать-то нечему)
Никакой теории не видать, одни пляски с бубном)


 
Dennis I. Komarov ©   (2010-04-05 17:48) [23]


> Так сделай, чего же расстраиваться.

А зачем? :)


 
Игорь Шевченко ©   (2010-04-05 19:51) [24]

отладчик рулез фарева


 
MsGuns ©   (2010-04-06 09:18) [25]

Пипец всем автобусам, пассажирам и заодно дорогам :)


 
Boortwint ©   (2010-04-27 13:09) [26]

Ребят, возникла одна задача:
Есть два массива с данными формата "string"
Avto[nzap]:=(IntToStr(Nmar)+"  "
 +Tipavt+"  "
 +Punkt+"  "
 +TimeToStr(VrOtpr)+"  "
 +TimeToStr(VrPr)
 +TimeToStr(vrem));
где Nmar - номер маршрута
Tipavt - тип автобуса
Punkt - пункт назначения
VrOtpr -  время отправления
VrPr - время прибытия
vrem - время пути

Мне необходимо внести в другой массив vyb[k] только строки с определенным номером маршрута с минимальным временем пути.
Для определения Пункта назначения я использовал элемент Edit.

procedure TForm1.Button7Click(Sender: TObject);
var
l: integer;
pun:string; // пункт назначения, который я ввожу в Edit для выборки
begin
k:=0;
pun:=Edit1;
for l:=1 to nzap do
        with Avto[nzap] do
        if Punkt=pun   then
        begin
        k:=k+1;
Vyb[k]:=(IntToStr(Nmar)+"  "
 +Tipavt+"  "
 +Punkt+"  "
 +TimeToStr(VrOtpr)+"  "
 +TimeToStr(VrPr)+"  "
 +TimeToStr(vrem));
  end;
  end;

в коде есть ошибки, потому что я выбрал его из более объемного кода, который считывает массив из файла и т.д. Это не суть важно.

Выборку по пункту назначения я умею делать, но как из массива Avto[nzap] выбрать маршрут с минимальным временем пути? Я понимаю, что необходимо сделать сравнение всех элементов, НО КАК?
Помогите, плиз. Голова уже пухнет.


 
12 ©   (2010-04-27 13:15) [27]

Vyb уже получили
осталось по нему пробежаться и найти минимум


 
Boortwint ©   (2010-04-27 13:35) [28]

Вот я и не понимаю как по нему пробежаться. ((
когда я работал с одномерными массивами, которые содержали в себе числовые данные, я тупо сравнивал эти элементы и легко получал результат.
А тут элементы массива содержат сразу несколько элементов, причем сравнение необходимо делать по одному из них, то есть по переменной vrem.


 
Sha ©   (2010-04-27 13:37) [29]

> Помогите, плиз. Голова уже пухнет.

Это от разговоров.
Начни думать.


 
Плохиш ©   (2010-04-27 13:38) [30]

Автобусы продолжают бороздить просторы большого театра.


 
Anatoly Podgoretsky ©   (2010-04-27 13:44) [31]


> когда я работал с одномерными массивами, которые содержали
> в себе числовые данные, я тупо сравнивал эти элементы и
> легко получал результат.
> А тут элементы массива содержат сразу несколько элементов,
>  причем сравнение необходимо делать по одному из них, то
> есть по переменной vrem.

А надо с многомерными, а так ты загнал себя в угол, теперь выполняй парсинг строки массива, но правильнее - переписать все нафиг.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.063 c
2-1272386845
romario
2010-04-27 20:47
2010.08.27
Как передать данные из одной процедуры в другую


2-1275547550
My__Nick__Name
2010-06-03 10:45
2010.08.27
Unicode в Open Office 3


2-1270073429
Виктор
2010-04-01 02:10
2010.08.27
Запретить печать из TWebBrowser


2-1269849342
senatormisha
2010-03-29 11:55
2010.08.27
Перезапуск формы


2-1273822922
Гном45
2010-05-14 11:42
2010.08.27
Прибавить месяц