Структура:
type rStudent = record Familia, Imja, Otchestvo : String[30]; Year, Enter : Word; Married : Boolean; Mark : Byte; end;
tSt = ^rSt; rSt = record St : rStudent; Pred, Next : tSt; end;
Глобальные переменные:
var First, Last : tSt;
Начало основного модуля:
First := nil; Last := nil;
Процедура чтения из файла:
procedure ReadFile(Name : String);
var Cur : tSt; F : File of rStudent;
begin
Assign(F, Name);
{$I-} Reset(F); {$I+}
if IOResult <> 0 then Exit;
while Not EOF(F) do
begin
New(Cur);
Read(F, Cur^.St); Cur^.Pred := Last; Cur^.Next := nil;
if First = nil then First := Cur else Last^.Next := Cur; Last := Cur;
end;
Close(F);
end;
Процедура записи в файл:
procedure SaveFile(Name : String);
var Cur : tSt; F : File of rStudent;
begin
Assign(F, Name);
Rewrite(F); Cur := First;
while Cur <> nil do begin Write(F, Cur^.St); Cur := Cur^.Next; end;
Close(F);
end;
Процедура вывода списка на экран:
procedure OutSpis;
var Cur : tSt;
begin
if First = nil then begin WriteLn('Список пуст. '); Exit; end;
Cur := First;
repeat
WriteLn(Cur^.St.Familia, #32, Cur^.St.Imja, #32, Otchestvo);
Write('г/р ', Cur^.St.Year, ' поступил ', Cur^.St.Enter, ' семейное положение: ');
if Not Cur^.St.Mark then Write(' не '); WriteLn('женат/замужем');
Cur := Cur^.Next;
until Cur = nil;
end;
Добавление нового студента:
procedure InsertSt;
var Cur : tSt; Ch : Char;
begin
WriteLn('Введите данные по студенту: ');
New(Cur); Write('Фамилия: '); ReadLn(Cur^.St.Familia);
Write('Имя: '); ReadLn(Cur^.St.Imja);
Write('Отчество: '); ReadLn(Cur^.St.Otchestvo);
Write('Год рождения: '); ReadLn(Cur^.St.Year);
Write('Год поступления: '); ReadLn(Cur^.St.Enter);
Write('Для женатых/замужних ввести 1 иначе не женат/замужняя: '); ReadLn(Ch);
Cur^.St.Married := Ch = #49;
Cur^.Pred := Last; Cur^.Next := nil;
if First = nil then First := Cur else Last^.Next := Cur; Last := Cur;
end;
Основное готово.
Осталось свести в единую программу с выбором действий…