Описать сведения о записной книжке - 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 происходит выход из программы.
- В случае ошибки или некорректного ввода данных программа возвращает сообщение об ошибке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д