Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.07.2015, 21:11
login login вне форума
Прохожий
 
Регистрация: 20.09.2009
Сообщения: 13
Репутация: 10
По умолчанию Есть готовый код, нужны пояснения

Есть лабораторная работа с заданием:
У администратора железнодорожных касс хранится информация о свободных местах в поездах дальнего следования на ближайшую неделю в следующем виде: дата выезда, пункт назначения, время отправления, число свободных мест. Оргкомитет международной конференции обращается к администратору с просьбой зарезервировать m мест до города N на k-й день недели с временем отправления поезда не позднее t часов вечера. Вывести время отправления или сообщение о невозможности выполнить заказ в полном объеме.
Есть код:
Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, XPMan;
 
type
  TForm1 = class(TForm)
    XPManifest1: TXPManifest;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    Button3: TButton;
    Button5: TButton;
    BitBtn1: TBitBtn;
    Button4: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
Type
  TPoezda = record
  data,punkt,time,mesta: string[40];    //поля дата,пункт,время,кол-во мест
  end;
 
 Var
  Fz : file of TPoezda;            //файл типа запись
  Ft:TextFile;                    //текстовый файл
  Poezd:array[1..100] of TPoezda;//массив записей
  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:='';
   Memo1.Clear;
   Button1.Hide;
   nzap:=0;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
     nzap:=nzap+1;
with poezd[nzap] do begin
           data:=Edit1.Text;
           punkt:=Edit2.Text;
           time:=Edit3.Text;
           mesta:=Edit4.Text;
           Memo1.Lines.Add(data+' '+punkt+' '+time+' '+mesta);
end;
 
   Write(fz,Poezd[nzap]);  //запись в файл
   Edit1.Text:='';
   Edit2.Text:='';
   Edit3.Text:='';
   Edit4.Text:='';
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
   OpenDialog1.Title :='Создать новый файл';    //Измен. заголовка окна
if OpenDialog1.Execute then    //диалог выбора имени файла
begin
 FileNameZ:= OpenDialog1.FileName;
 AssignFile(Fz, FileNameZ); //связывание Fz с именем файла
 Rewrite(Fz); //создание нового файла
 Button1.Show;
end;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
Var data,punkt,time,mesta: string;
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,poezd[nzap]); //чтение записи файла
 with poezd[nzap] do
   Memo1.Lines.Add(data+' '+punkt+' '+time+' '+mesta);
end;
Button1.Show;
end;
 
procedure TForm1.Button4Click(Sender: TObject);
var pz:Tpoezda;
    data,punkt,time,mesta,d,p,t,m: string;
 
begin
d:=InputBox('Ввод данных','Введите день недели','');
p:=InputBox('Ввод данных','Введите город','');
t:=InputBox('Ввод данных','Введите время','');
m:=InputBox('Ввод данных','Введите кол-во мест','');
nzap:=nzap+1;
 
//Memo1.Clear;
 
with poezd[nzap] do
 begin
  if d=data and p=punkt and t<=time and m<=mesta
  then
  Memo1.Lines.Add(d+' '+p+' '+t+' '+m)
  else
  Memo1.Lines.Add('Невозможно выполнить заказ в полном объёме')
 end;
 
end;
 
procedure TForm1.Button5Click(Sender: TObject);
Var i:word;
begin
if SaveDialog1.Execute then begin
    FileNameT:=SaveDialog1.FileName;
    AssignFile(Ft,FileNameT);
    Rewrite(Ft);
    end;
for i:=1 to nzap do
  with poezd[i] do
  Writeln(Ft,i:4,'.',data+' '+punkt+' '+time+' '+mesta);  // Запись в текстовой файл
  CloseFile(Ft);
end;
 
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 CloseFile(fz);
end;
 
end.

Нужны пояснения для каждой кнопки и каждого эдита, если можно..
Как работать с программой и т.д. Краткий обзор для нуба

Последний раз редактировалось Admin, 13.07.2015 в 21:14.
Ответить с цитированием
  #2  
Старый 14.07.2015, 06:50
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от login
...Нужны пояснения для каждой кнопки и каждого эдита, если можно..
Как работать с программой и т.д. Краткий обзор для нуба
Открываете новый проект, на форму набрасываете компонентов по-списку что в секции type прописаны, а именно: чотире лейбла, столько же едитов, пять кнопок плюс одну с картинкой, поле мемо и диалоги окрытия и сохранки файлов, зачем-то ещё манифест нужно подбросить, видимо для украски. Дальше жмёте на все кнопки, это чтоб в юните формы появились их процедуры обработки клика, ещё выбираете в инспекторе процедуру создания формы, а затем меняете весь текст на приведённый вами, и на этом с адаптацией вроде всё.

В лейблы на-русском вбиваете:

Label1 - "Дата выезда:", распологаете его рядом с Edit1
Label2 - "Пункт назначения:", рядом с Edit2
Label3 - "Время отправления:", рядом с Edit3
Label4 - "Число свободных мест:", рядом с Edit4

из этих надписей сразу видно, в каком едите и какую инфу следует набирать при добавлении новой записи

По кнопкам:

Button1 - это добавление новой записи (её содержимое формируется на основе данных из едитов) к типизированному, на этот момент уже открытому файлу и поэтому, она изначально на форме не видна, чтобы небыло ошибки доступа к файлу

Button2 - это создание нового файла, имя ему задаётся в диалоге и в конце на форме отображается первая кнопка, записи теперь добавить можно смело

Button3 - это загрузка существующего на диске типизированного файла с данными, тоже имя задаётся через диалог, одновременно происходит отображение его содержимого в мемо, вероятно для наглядности, про видимость первой кнопки вы и сами возможно догадаетесь

Button4 - это поиск подходящих под заданные условия записей, они вводятся последовательно, следуя подсказкам ввода данных. Кстати, сравнение может и не работать, поскольку не хватает кое-где парных скобок плюс несовпадение некоторых типов данных, в смысле должно быть так
Код:
...
if (d = data) and (p = punkt) and (StrToDateTime(t) <= StrToDateTime(time)) and (StrToInt(m) <= StrToInt(mesta))
...


Button5 - а это сохранение данных из типизированного файла в обычном, текстовом, имя ему задаётся в сейв-диалоге

BitBtn1 - вот здесь наблюдается косяк, какбы закрывается открытый (может быть) основной файл-хранилище, а на самом деле это нужно делать ещё при добавлении новой записи, такой вот недоработок у предоставленного алгоритма детектируется, есть и другие (напр. типы данных в записях), но эти грабли лучше пропустить

Как работать с программой:

Запускаете, при исполнении задаёте новый файл, набиваете его данными и сохраняете на диске. При повторной загрузке в мемо отобразится список возможных вариантов, из них уже можно производить отбор подходящих под условия задачи, примерно так это всё и работает
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
login (14.07.2015)
  #3  
Старый 14.07.2015, 08:43
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Alegun, вах, шайтан!
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
login (14.07.2015)
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:52.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter