end;
2: begin {если пользователь ввел "2", то редактируем имя}
writeln('Старое значение поля "Имя" - ', u.name);
write('Введите новое значение: ');
readln(s);
u.name := s;
seek(f,k);
write(f,u);
next := false;
end;
3: begin {если пользователь ввел "3", то редактируем пол}
ifu.polthens := 'Мужской' elses := 'Женский'; {переводим логическое обозачение пола в строку}
writeln('Старое значение поля "Пол" - ', s);
writeln('Введите новое значение');
writeln('Укажите пол ученика, если мужской - введите букву "м", если женский - "ж"');
readln(c);
if (c = 'м') or(c = 'ж') thenok := trueelseok := false; {если пользователь ввел некорректное значение обозначения пола, то устанавливаем ложное значение логического переключателя}
whilenotokdo{пока логический переключатель не будет равен истине выполняем цикл}
begin
writeln('Некорректный ввод данных'); {выводим сообщение об ошибке}
writeln('Вводите строчные русские буквы!');
writeln('Укажите пол ученика, если мужской - введите букву "м", если женский - "ж"');
readln(c); {считываем новое введенное пользователем значение}
if (c = 'м') or (c = 'ж') then ok := true else ok := false;
end;
ifc = 'м' thenpl := trueelsepl := false; {переводим символьное обозначение пола в логическое}
u.pol := pl; {заносим логическое значение пола в запись}
seek(f,k); {ищем запись с номером счетчика в файле}
write(f,u); {записываем измененную запись в файл}
next := false; {устанавливаем признак того, что на следующую запись после редактирования переходить не нужно}
end;
4: begin {если пользователь ввел "4", то редактируем год рождения}
writeln('Старое значение поля "Год рождения" - ', u.data);
write('Введите новое значение: ');
readln(n);
u.data := n;
seek(f,k);
write(f,u);
next := false;
end;
5: begin {если пользователь ввел "5", то редактируем вес}
writeln('Старое значение поля "Вес" - ', u.ves);
write('Введите новое значение: ');
readln(n);
u.ves := n;
seek(f,k);
write(f,u);
next := false;
end;
6: begin {если пользователь ввел "6", то редактируем рост}
writeln('Старое значение поля "Рост" - ', u.rost);
write('Введите новое значение: ');
readln(n);
u.rost := n;
seek(f,k);
write(f,u);
next := false;
end;
0: next := true;{если пользователь ввел "0", то устанавливем признак того, что нужно перейти на следующую запись в файле}
end;{case i of}
end; {if ord(c) = 13 then}
ifnexttheninc(k); {если установлен признак перехода, то увеличиваем значение счетчика}
end; {while k <= filesize(f)}
writeln('Вся база данных просмотрена, для возврата в меню нажмите любую клавишу'); {выводим информацию на экран}
repeatuntilkeypressed; {ждем, пока не нажата какая-нибудь клавиша}
close(f);
end;
procedure del; {процедураудалениязаписи}
var u: pupil;
i, k: integer;
next: boolean;
c: char;
s: string;
begin
reset(f); {открываем файл для чтения}
k := 0; {устанавливаем начальное значение счетчика}
whilek < filesize(f) do{выполняем пока счетчик меньше количества записей в файле}
begin
seek(f,k); {ищем запись с номером, совпадающим со счетчиком}
clrscr; {очищаем экран}
writeln('---Удаление записи---');
writeln('Фамилия':15, 'Имя':15, 'Пол':10, 'Год рождения':17, 'Вес':6, 'Рост':6);{выводим заголовки для полей записи}
read(f, u); {считываем запись из файла}
ifu.polthens := 'Мужской' elses := 'Женский'; {переводим логическое обозачение пола в строку}
writeln(u.fam:15, u.name:15, s:10, u.data:17, u.ves:6, u.rost:6); {выводим данные из записи}
writeln;
writeln('Enter - удаление текущей записи, Esc - выход в меню');
writeln('любая другая клавиша - переход к следующей записи');
repeatuntilkeypressed; {ждем, пока не нажата какая-нибудь клавиша}
c := readkey;
iford(c) = 27 thenexit; {если нажата клавиша ESC, то выходим из процедуры}
next := true; {устанавливем признак того, что нужно перейти на следующую запись в файле}
iford(c) = 13 then {если нажата клавиша Enter, то выполняем следующее}
begin
fori := ktofilesize(f) - 2 do {от текущей записи до предпоследней записи файла выполняем}
begin
seek(f, i+1); {ищем следующую за текущей запись в файле}
read(f, u); {считываем найденную запись}
seek(f, i); {ищем текущую запись}
write(f, u); {записываем на её место считанную ранее последующую запись}
end;
ifk = filesize(f) - 1 thenclrscr; {если значение счетчика равно последней записи, то очищаем экран}
seek(f, filesize(f) - 1); {ищем последнюю запись в файле}
truncate(f); {отсекаем часть файла, начиная с текущей записи}
next := false; {устанавливаем признак того, что на следующую запись переходить не нужно}
end; {iford(c) = 13}
ifnexttheninc(k); {если установлен признак перехода, то увеличиваем значение счетчика}
end; {while k < filesize(f) do}
writeln('Вся база данных просмотрена, для возврата в меню нажмите любую клавишу');
repeatuntilkeypressed;{ждем, пока не нажата какая-нибудь клавиша}
close(f);
end;
procedure sort; {процедурасортировкифайла}
var u1, u2: pupil;
i, j, sort_type, p1, p2: integer;
s: string;
c: char;
begin
clrscr; {очищаем экран}
reset(f);{открываем файл для чтения}
writeln('---Сортировка данных---');
writeln('Выберите критерий сортировки');{выводим информацию о выборе критерия сортировки}
writeln('1 - сортировка по росту');
writeln('2 - сортировка по весу');
readln(sort_type);{считываем выбор пользователя}
forj := 1 tofilesize(f) do {начинаем пузырьковую сортировку}
fori := 0 tofilesize(f) - 2 do {количество повторений цикла на 1 меньше размера файла}
begin
seek(f, i); {ищем i-ю запись в файле}
read(f, u1); {считываем найденную запись из файла}
seek(f, i + 1); {ищем следующую за i-й запись в файле}
read(f, u2); {считываем найденную запись из файла}
ifsort_type = 1 then {в зависимости от выбранного критерия сортировки устанавливаем значения переменных, которые будем сравнивать}
begin
p1 := u1.rost; {выбрана сортировка по росту, устанавливаем в переменные значения из поля рост}
p2 := u2.rost;
end
else
begin
p1 := u1.ves; {выбрана сортировка по весу, устанавливаем в переменные значения из поля вес}
p2 := u2.ves;
end;
ifp1 > p2 then {сравниваем между собой значения переменных по которым идет сортировка. в случае, если первое больше второго, то меняем местами записи в файле}
begin
seek(f, i + 1);
write(f, u1);
seek(f, i);
write(f, u2);
end;
end;
clrscr; {очищаем экран}
writeln('---Список учеников, занесенных в базу данных---');
ifsort_type = 1 thenwriteln('сортировка по росту') elsewriteln('сортировка по весу'); {в зависимости от выбранного вида сортировки выводим заголовок}
writeln('Фамилия':15, 'Имя':15, 'Пол':10, 'Год рождения':17, 'Вес':6, 'Рост':6);{выводим заголовки для полей записи}
fori := 0 tofilesize(f) - 1 do {повторяем цикл столько раз, сколько записей содержится в файле}
begin
seek(f, i); {ищем i-ю запись в файле}
read(f, u1);{считываем найденную запись из файла}
ifu1.polthens := 'Мужской' elses := 'Женский'; {переводим логическое обозачение пола в строку}
writeln(u1.fam:15, u1.name:15, s:10, u1.data:17, u1.ves:6, u1.rost:6);{выводим данные из записи}
end;
writeln('Для выхода в главное меню нажмите любую клавишу');
repeatuntilkeypressed;{ждем, пока не нажата какая-нибудь клавиша}
c := readkey;
close(f);
end;
begin
clrscr; {очищаем экран}
assign(f, 'data.txt'); {связываем имя файла данных с файловой переменной}
knc := false; {устанавливаем признак окончания программы в ложное значение}
repeat {повторяем, пока признак окончания программы не станет истинным}
writeln('---База данных "Ученики"---'); {выводим наименование программы и меню}
writeln('Выберите действия:');
writeln('1 - Добавление данных в базу');
writeln('2 - Редактирование данных');
writeln('3 - Удаление записей');
writeln('4 - Сортировка');
writeln('0 - Завершение работы');
write('Ваш выбор: ');
readln(v); {считываем выбор пользователя}
casevof{в зависимости от выбора пользователя выполняем}
1: add; {если пользователь ввел "1", то вызываем процедуру добавления записи}
2: edit; {если пользователь ввел "2", то вызываем процедуру редактирования записи}
3: del; {если пользователь ввел "3", то вызываем процедуру удаления записи}
4: sort; {если пользователь ввел "4", то вызываем процедуру сортировки файла} 0: knc := true; {если пользователь ввел "0", то устанавливаем признак окончания программы в значение истина}
end;
clrscr;{очищаем экран}
until knc;
end.
В представленном программном документе, в разделе «Назначение программы» указаны сведения о назначении программы и информация, достаточная для понимания функций программы и ее эксплуатации.
В разделе «Условия выполнения программы» указаны условия, необходимые для выполнения программы (минимальный состав аппаратных и программных средств и т.п.).
В данном программном документе, в разделе «Выполнение программы» указана последовательность действий оператора, обеспечивающих загрузку, запуск, выполнение и завершение программы, приведено описание функций, формата и возможных вариантов команд, с помощью которых оператор осуществляет загрузку и управляет выполнением программы, а также ответы программы на эти команды.
В разделе «Сообщения оператору» приведены тексты сообщений, выдаваемых в ходе выполнения программы, описание их содержания и соответствующие действия оператора (действия оператора в случае сбоя и т.п.).
Документация подготовлена согласно ГОСТ 7.32-2001 «Система стандартов по информации, библиотечному и издательскому делу. Отчет о научно-исследовательской работе. Структура и правила оформления», ГОСТ ЕСПД 19.402-78 «Описание программы».