Описать сведения о записной книжке - PascalABC.NET
Формулировка задачи:
Пожалуйста, помогите с этим заданием
1. Описать файл записей с именем note.dat, содержащий следующие поля: фамилия, имя, номер телефона, день рождения (массив из трех чисел).
2. Написать программу, выполняющую следующие действия:
- ввод данных с клавиатуры в массив, состоящий из восьми элементов типа Note, с упорядочением записей по алфавиту;
- вывод на экран информации о людях, чьи дни рождения приходятся на месяц, значение которого введено с клавиатуры, а если таких нет - вывод на экран соответствующего сообщения;
Решение задачи: «Описать сведения о записной книжке»
textual
Листинг программы
type rec = record
surname: string[20];
name: string[20];
tel: integer;
dr: array [1..3] of integer;
end;
var n,nmenu,i,j: integer;k:byte; vmas: array [1..8] of rec;s:boolean;
f1:file of rec;
v:rec;
label T;
begin
k:=0;
assign(f1,'Note.dat');
reset(f1);
while not eof(f1) do begin
read(f1,vmas[k+1]);
k:=k+1;
end;
close(f1);
T:
n:=1;
writeln ('<br>');
writeln ('| MENU |');
writeln ('| 1) Ввод данных |');
writeln ('| 2) Вывод людей с др |');
writeln ('| в выбранном месяце |');
writeln ('| 3)Вывод по алфавиту |');
writeln ('| 0) Выход |');
writeln ('<br>');
while n>0 do
begin
writeln ('выберите пункт меню');
readln (nmenu);
case nmenu of
1: //Ввод
begin
reset(f1);
writeln('Введите фамилию');
readln(v.surname);
writeln('Введите Имя');
readln(v.name);
writeln('Введите телефон');
readln(v.tel);
writeln('Введите день рождения через пробел');
readln(v.dr[1],v.dr[2],v.dr[3]);
seek(f1,k);
write(f1,v);
close(f1);
goto T;
end;
2:begin
writeln('Введите месяц в цифровом представлении, например "01"');
readln(j);
s:=false;
for i:=1 to 8 do
if vmas[i].dr[2]=j then begin
s:=true;
writeln('День рождения этого человека во введенном месяце',vmas[i].surname,vmas[i].name)
end;
if s=false then writeln('Нет таких людей');
goto T;
end;
3:begin
for j:=1 to 8 do
for i:=1 to 7 do
if vmas[i].surname>vmas[i+1].surname then begin
v:=vmas[i+1];
vmas[i+1]:=vmas[i];
vmas[i]:=v;
end;
for i:=1 to 8 do
if vmas[i].tel<>0 then
writeln(vmas[i].surname,vmas[i].name,vmas[i].tel,vmas[i].dr);
goto T;
end;
0:exit;
end;
end;
end.
Объяснение кода листинга программы
- Объявлен тип записи
rec, который содержит поля surname, name, tel и dr. - Объявлены переменные n, nmenu, i, j, k, vmas, s, f1, v и T.
- Задано значение k=0 и открывается файл f1 с именем
Note.dat. - В цикле while не eof(f1) считываются данные из файла f1 и записываются в массив vmas.
- В блоке T создается меню с пунктами для выбора.
- В цикле while n>0 происходит взаимодействие с пользователем:
- Вводится номер пункта меню (nmenu).
- В зависимости от выбранного пункта меню выполняются соответствующие действия:
- При выборе пункта 1 происходит ввод данных о человеке и запись их в файл f1.
- При выборе пункта 2 происходит вывод людей с заданным днем рождения.
- При выборе пункта 3 происходит сортировка записей в алфавитном порядке по фамилии и их вывод.
- При выборе пункта 0 происходит выход из программы.
- В случае ошибки или некорректного ввода данных программа возвращает сообщение об ошибке.