Структурирование программ с использованием вспомогательных алгоритмов - Pascal ABC
Формулировка задачи:
Сформировать файл, содержащий данные о работниках предприятия: фамилия, имя, отче-ство, должность, стаж работы, оклад.
1. Составить список тех, стаж работы которых превышает 10 лет. Оформить программу с использованием подпрограмм.
2. Организовать поиск данных о работниках по фамилии.
Решение задачи: «Структурирование программ с использованием вспомогательных алгоритмов»
textual
Листинг программы
type rab=record
fm,ot:string[15];
im,dl:string[10];
st,ok:integer;
end;
tfile=file of rab;
const fname='rabotniki';//файл будет в папке с программой
procedure createfile(var f:tfile);
var n,i:integer;
r:rab;
begin
assign(f,fname);
rewrite(f);
writeln('Сколько записей внести в файл n=');
readln(n);
for i:=1 to n do
begin
writeln('работник ',i);
with r do
begin
write('Фамилия: ');readln(fm);
write('Имя: ');readln(im);
write('Отчество: ');readln(ot);
write('Должность: ');readln(dl);
write('Стаж работы: ');readln(st);
write('Оклад: ');readln(ok);
write(f,r);
end;
end;
close(f);
end;
procedure tab;
begin
writeln('------------------------------------------------------------------');
writeln('| Фамилия | Имя | Отчество | Должность|Стаж|Оклад|');
writeln('------------------------------------------------------------------');
end;
procedure spisok(var f:tfile);
var r:rab;
begin
writeln('Полный список работающих');
tab;
reset(f);
while not eof(f) do
begin
read(f,r);
with r do
writeln('|',fm:15,'|',im:10,'|',ot:15,'|',dl:10,'|',st:4,'|',ok:5,'|');
end;
writeln('------------------------------------------------------------------');
end;
procedure staz(var f:tfile);
var r:rab;
k:byte;
begin
reset(f);
writeln('Список работников чей стаж больше 10 лет');
k:=0;
tab;
while not eof(f) do
begin
read(f,r);
with r do
begin
if st>10 then
begin
k:=1;
writeln('|',fm:15,'|',im:10,'|',ot:15,'|',dl:10,'|',st:4,'|',ok:5,'}');
end;
end;
end;
if k=0 then writeln('Таких работников нет')
else writeln('------------------------------------------------------------------');
close(f);
end;
procedure poisk(var f:tfile);
var r:rab;
fam:string[15];
k:byte;
begin
write('Введите фамилию для поиска');
readln(fam);
reset(f);
writeln('Список работников чья фамилия ',fam);
k:=0;
tab;
while not eof(f) do
begin
read(f,r);
with r do
begin
if fm=fam then
begin
k:=1;
writeln('|',fm:15,'|',im:10,'|',ot:15,'|',dl:10,'|',st:4,'|',ok:5,'}');
end;
end;
end;
if k=0 then writeln('Таких работников нет')
else writeln('------------------------------------------------------------------');
close(f);
end;
var f:tfile;
begin
createfile(f);
spisok(f);
staz(f);
poisk(f);
end.
Объяснение кода листинга программы
- Создание файла rabotniki с использованием типа rab и переменной f.
- Задание имени файла в переменной fname.
- Объявление типа rab и переменной r.
- Объявление переменных n и i для использования в процедуре createfile.
- Вызов процедуры createfile с переменной f.
- Чтение ввода о количестве записей для внесения в файл (n).
- Цикл for для внесения n записей в файл.
- Внутри цикла вызов процедуры createfile для каждой записи.
- Вывод информации о работнике на экран.
- Запись информации о работнике в файл.
- Вызов процедуры close для закрытия файла.
- Объявление переменной k для использования в процедуре staz.
- Вызов процедуры staz с переменной f.
- Проверка, есть ли работники с стажем больше 10 лет.
- Вывод сообщения в зависимости от результата проверки.
- Вызов процедуры close для закрытия файла.
- Объявление переменных fam и k для использования в процедуре poisk.
- Вызов процедуры poisk с переменной f.
- Проверка введенной фамилии на соответствие фамилии работника.
- Вывод сообщения в зависимости от результата проверки.
- Вызов процедуры close для закрытия файла.