Смекни!
smekni.com

Описание программы "Учебная база данных" (стр. 3 из 3)

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 «Описание программы».