Программа для работы с динамическими массивами - Pascal
Формулировка задачи:
Решение задачи: «Программа для работы с динамическими массивами»
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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д