Программа для работы с динамическими массивами - Pascal

Узнай цену своей работы

Формулировка задачи:

Ребята может кто поможет очень нужно составить программу. Суть такая: В радиоателье хранятся квитанции о сданной в ремонт аппаратуре. Данные о квитанциях хранятся в динамическом списке. Каждая квитанция содержит следующую информацию: наименование группы изделий (телевизор, радиотелефон и т.п.), марка изделия, дата приемки в ремонт, состояние готовности заказа (выполнен, не выполнен). Необходимо выдать информацию о состоянии готовности заказов на текущие сутки по группам изделий. В программе должны присутствовать следующие процедуры: 1. Формирование динамического списка; 2. Вывод списка на экран; 3. Вывод состояния готовности; 4. Добавление элемента в список; 5. Удаление элемента из списка; 6. Поиск элемента списка по соответствующему полю; 7. Сортировка по алфавиту; 8. Запись в файл и загрузка из файла. Выбор необходимого действия обеспечить через удобный интерфейс. Для записи и загрузки из файла использовать типизированный файл. Буду очень благодарен за помощь.

Решение задачи: «Программа для работы с динамическими массивами»

textual
Листинг программы
Uses
    Crt,Dos;
 
Type
  TDic = record
   ID: Integer;
   Context: String[50];
   DicName: String[20];
  end;
 
  PDicList = ^TDicList;
  TDicList = record
   Data: TDic;
   Prev,Next: PDicList;
  end;
 
  TDictionary = object
   FileName: String;
   Items: PDicList;
   procedure Add(id: Integer; Context, DicName: String);
   procedure Load(FN: String);
   procedure Save(FN: String);
   function GetContext(id: Integer): String;
   function GetID(Context, DicName: String): Integer;
  end;
 
  TData = record
   ID: Integer;
   ProductionID: Integer;
   Mark: String[50];
   Date: String[10];
   Completed: Boolean;
  end;
 
  PDataList = ^TDataList;
  TDataList = record
   Data: TData;
   Prev,Next: PDataList;
  end;
 
  TDatabase = object
   FileName: String;
   Items: PDataList;
   procedure Add(id, ProductionID: Integer; Mark,Date: String; Completed: Boolean);
   procedure Load(FN: String);
   procedure Save(FN: String);
  end;
 
procedure TDictionary.Add(id: Integer; Context, DicName: String);
Var
  P: PDicList;
begin
 New(P);
 P^.Data.ID := id;
 P^.Data.Context := Context;
 P^.Data.DicName := DicName;
 P^.Prev := nil;
 P^.Next := nil;
 if Items <> nil
 then begin
      Items^.Next := P;
      P^.Prev := Items;
      end;
 Items := P;
end;
 
procedure TDictionary.Load(FN: String);
Var
  DicFile: file of TDic;
  Rec: TDic;
begin
 FileName := FN;
 Assign(DicFile, FileName);
 {$I-}Reset(DicFile);{$I+}
 if IOResult <> 0 then Exit;
 while not Eof(DicFile)
 do begin
    Read(DicFile, Rec);
    Add(Rec.ID, Rec.Context, Rec.DicName);
    end;
 Close(DicFile);
end;
 
procedure TDictionary.Save(FN: String);
Var
  DicFile: file of TDic;
  P: PDicList;
begin
 Assign(DicFile, FN);
 Rewrite(DicFile);
 P := Items;
 while P <> nil
 do begin
    Write(DicFile, P^.Data);
    P := P^.Prev;
    end;
 Close(DicFile);
end;
 
function TDictionary.GetContext(id: Integer): String;
Var
 P: PDicList;
begin
 GetContext := #0;
 P := Items;
 while P <> nil
 do begin
    if P^.Data.ID = id
    then begin
         GetContext := P^.Data.Context;
         Exit;
         end;
    P := P^.Prev;
    end;
end;
 
function TDictionary.GetID(Context,DicName: String): Integer;
Var
 P: PDicList;
begin
 GetID := -1;
 P := Items;
 while P <> nil
 do begin
    if (P^.Data.Context = Context) and (P^.Data.DicName = DicName)
    then begin
         GetID := P^.Data.ID;
         Exit;
         end;
    P := P^.Prev;
    end;
end;
 
procedure TDatabase.Add(id, ProductionID: Integer; Mark,Date: String; Completed: Boolean);
Var
  P: PDataList;
begin
 New(P);
 P^.Data.ID := id;
 P^.Data.ProductionID := ProductionID;
 P^.Data.Mark := Mark;
 P^.Data.Date := Date;
 P^.Data.Completed := Completed;
 P^.Prev := nil;
 P^.Next := nil;
 if Items <> nil
 then begin
      Items^.Next := P;
      P^.Prev := Items;
      end;
 Items := P;
end;
 
procedure TDatabase.Load(FN: String);
Var
  DataFile: file of TData;
  Rec: TData;
begin
 FileName := FN;
 Assign(DataFile, FileName);
 {$I-}Reset(DataFile);{$I+}
 if IOResult <> 0 then Exit;
 while not Eof(DataFile)
 do begin
    Read(DataFile, Rec);
    Add(Rec.ID, Rec.ProductionID, Rec.Mark, Rec.Date, Rec.Completed);
    end;
 Close(DataFile);
end;
 
procedure TDatabase.Save(FN: String);
Var
  DataFile: file of TData;
  P: PDataList;
begin
 Assign(DataFile, FN);
 Rewrite(DataFile);
 P := Items;
 while P <> nil
 do begin
    Write(DataFile, P^.Data);
    P := P^.Prev;
    end;
 Close(DataFile);
end;
 
Var
  Dic: TDictionary;
  DB: TDatabase;
  P: PDataList;
begin
 ClrScr;
 
 Dic.Add(1,'Холодильник','Категория');
 Dic.Add(2,'Стиральная машина','Категория');
 Dic.Add(3,'Телевизор','Категория');
 Dic.Add(4,'Микроволновая печь','Категория');
 Dic.Add(5,'Телефон','Категория');
 Dic.Add(6,'Кофеварка','Категория');
 
 Dic.Save('DicData.dat');
 
 {Dic.Load('DicData.dat');}
 
 DB.Add(1,Dic.GetID('Холодильник','Категория'),'Simens','2009.10.31',False);
 DB.Add(2,Dic.GetID('Телевизор','Категория'),'LG','2009.10.31',False);
 DB.Add(3,Dic.GetID('Кофеварка','Категория'),'Mulinex','2009.10.31',False);
 DB.Add(4,Dic.GetID('Телефон','Категория'),'Motorolla','2009.10.31',True);
 DB.Save('Data.dat');
 
 {DB.Load('Data.dat');}
 
 P := DB.Items;
 while P <> nil
 do begin
    WriteLn(P^.Data.ID,' ',Dic.GetContext(P^.Data.ProductionID),' ',P^.Data.Mark,' ',
            P^.Data.Date,' ',P^.Data.Completed);
    P := P^.Prev;
    end;
 ReadLn;
end.

Объяснение кода листинга программы

Этот код представляет собой программу для работы с динамическими массивами, которая использует структуры данных из пакета Pascal.Data. В начале кода определяются типы данных, которые будут использоваться в программе. Затем определяются объекты TDictionary и TDatabase, которые представляют собой словарь и базу данных соответственно. В этих объектах определены методы для добавления, загрузки и сохранения данных. Далее определяются переменные экземпляра для объектов TDictionary и TDatabase. После этого происходит инициализация объектов TDictionary и TDatabase с помощью метода New. Затем происходит чтение данных из файла в объект TDictionary с помощью метода Load. После этого происходит запись данных из объекта TDatabase в файл с помощью метода Save. Далее идет цикл, в котором выводятся данные из объекта TDatabase в консоль. В конце кода происходит выход из программы с помощью метода ReadLn.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы