Показать сообщение отдельно
  #1  
Старый 30.10.2015, 20:30
username12 username12 вне форума
Прохожий
 
Регистрация: 11.10.2015
Сообщения: 8
Версия Delphi: delpphi 10
Репутация: 10
По умолчанию Программирование с использованием записей и файлов

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

Код:
unit tema6;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Memo1: TMemo;
    Button1: TButton;
    Button3: TButton;
    Splitter1: TSplitter;
    Button5: TButton;
    BitBtn1: TBitBtn;
    SaveDialog1: TSaveDialog;
    Button2: TButton;
    OpenDialog1: TOpenDialog;
    Button4: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 Type
  TStudent = record
    FIO: string[40];			// Поле ф.и.о.
    otc: array[1..3] of word;		// Поле массива оценок
    sball : extended; 			// Поле среднего балла
    end;

 Var
  Fz  : file of  Tstudent;		// Файл типа запись
  Ft  : TextFile;			// Текстовой файл
  Stud : array[1..100] of Tstudent;	// Массив записей
  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 stud[nzap] do begin
           FIO:=Edit1.Text;
           otc[1]:=StrToInt(Edit2.Text);
           otc[2]:=StrToInt(Edit3.Text);
           otc[3]:=StrToInt(Edit4.Text);
           sball:=(otc[1]+otc[2]+otc[3])/3;
  Memo1.Lines.Add(fio+'  '+IntToStr(otc[1])+'  '+ IntToStr(otc[2])+'   '+IntToStr(otc[3]));
                                end;
     Write(fz,Stud[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 c именем файла
     Rewrite(Fz);                         // Создание нового файла
   end;
    Button1.Show;                      // Сделать видимой кнопку "Ввести запись"
end;

procedure TForm1.Button3Click(Sender: TObject); // Открыть существующий файл
begin
 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,stud[nzap]);                // Чтение записи из файла
         with stud[nzap] do
     Memo1.Lines.Add(fio+'  '+IntToStr(otc[1])+'  '+IntToStr(otc[2])+'   '+IntToStr(otc[3]));
                                 end;
     Button1.Show;                        // Сделать видимой кнопку "Ввести запись"
end;

procedure TForm1.Button4Click(Sender: TObject);  // Сортировка записей
 var i,j :  word;
       st : TStudent;
begin
 for i:=1 to nzap-1 do                   // Сортировка массива записей
  for j:=i+1 to nzap do
   if Stud[i].sball < Stud[j].sball then begin
          st:=Stud[i];
         Stud[i]:=Stud[j];
         Stud[j]:=st;
                                                         end;
      Memo1.Clear;
  for i:=1 to nzap do                    // Вывод в окно Memo1 отсортированных записей
          with stud[i] do
     Memo1.Lines.Add(IntToStr(i)+'  '+fio+'  '+FloatToStrf(sball,fffixed,4,2));
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 stud[i] do  Writeln(Ft,i:4,'. ',fio,sball:8:2);   // Запись в текстовой файл
  CloseFile(Ft);                             // Закрытие текстового файла
end;

procedure TForm1.BitBtn1Click(Sender: TObject);  
begin                              
 CloseFile(fz);       // Закрытие файла записей при нажатии на кнопку ”Сlose”
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 CloseFile(fz);      // Закрытие файла записей при нажатии на кнопку  
end;

end.