Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Компоненты 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.061 c
15-1273005004
Юрий
2010-05-05 00:30
2010.08.27
С днем рождения ! 5 мая 2010 среда


15-1274300990
Юрий
2010-05-20 00:29
2010.08.27
С днем рождения ! 20 мая 2010 четверг


2-1269087279
AntonioBanderas
2010-03-20 15:14
2010.08.27
Права пользователей FireBird


15-1273818579
bss
2010-05-14 10:29
2010.08.27
Иерархия классов настроек


2-1275394725
Студент
2010-06-01 16:18
2010.08.27
Table.Locate не правильно ищет по 2 полям





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский