Текст программы «Учебная база данных» на исходном языке
uses crt; type pupil=record {переменная типа запись для хранения данных об ученике} fam, name: string[30]; {фамилия, имя} pol: boolean; {пол, мужской = true} data, ves, rost: integer; {год рождения, вес, рост} end; var p: pupil; f: file of pupil; {файл записей об учениках} knc: boolean; {флаг окончания программы} v: integer; {переменная для хранения выбора пункта меню} procedure add; {процедура добавления новой записи в файл} var u: pupil; s: string; n: integer; pl, ok :boolean; c: char; begin clrscr; {очистка экрана} writeln('---Добавление записи---'); {вывод информационных надписей на экран} writeln('Введите фамилию ученика'); readln(s) {считывание введенной пользователем информации} u.fam := s; {занесение введенной пользователем фамилии ученика в переменную типа запись} writeln('Введите имя ученика'); readln(s); u.name := s; writeln('Укажите пол ученика, если мужской - введите букву "м", если женский - "ж"'); readln(c); if (c = 'м') or (c = 'ж') then ok := true else ok := false; {проверка корректности введенных данным о поле ученика} while not ok do {выполняем до тех пор, пока пол не будет верно указан} begin writeln('Некорректный ввод данных'); writeln('Вводите строчные русские буквы!'); writeln('Укажите пол ученика, если мужской - введите букву "м", если женский - "ж"'); readln(c); if (c = 'м') or (c = 'ж') then ok := true else ok := false; end; if c = 'м' then pl := true else pl := false; u.pol := pl; writeln('Введите год рождения ученика'); readln(n); u.data := n; writeln('Введите вес ученика'); readln(n); u.ves := n; writeln('Введите рост ученика'); readln(n); u.rost := n; reset(f); {открываем файл для чтения} seek(f, filesize(f)); {устанавливаем указатель на последнюю запись файла} write(f,u); {дописываем в конец файла запись об ученике} close(f); {закрываем файл} writeln('Запись добавлена, нажмите любую клавишу для продолжения'); repeat until keypressed; {ждем, пока не нажата какая-нибудь клавиша} c := readkey; end; procedure edit; {процедура редактирования записи в файле} var u: pupil; s: string; n, i, k: integer; pl, ok, next: boolean; c: char; begin reset(f); {открываем файл для чтения} k := 0; {устанавливаем начальное значение счетчика} while k < filesize(f) do {выполняем пока счетчик меньше количества записей в файле} begin seek(f,k); {ищем запись с номером, совпадающим со счетчиком} clrscr; {очищаем экран} writeln('---Редактирование записи---'); writeln('Фамилия':15, 'Имя':15, 'Пол':10, 'Год рождения':17, 'Вес':6, 'Рост':6);{выводим заголовки для полей записи} read(f, u);{считываем запись из файла} if u.pol then s := 'Мужской' else s := 'Женский'; {переводим логическое обозачение пола в строку} writeln(u.fam:15, u.name:15, s:10, u.data:17, u.ves:6, u.rost:6);{выводим данные из записи} writeln; writeln('Enter - редактирование текущей записи, Esc - выход в меню'); writeln('любая другая клавиша - переход к следующей записи'); repeat until keypressed;{ждем, пока не нажата какая-нибудь клавиша} c := readkey; if ord(c) = 27 then exit; {если нажата клавиша ESC, то выходим из процедуры} next := true; if ord(c) = 13 then {если нажата клавиша Enter, то выполняем следующее} begin writeln; writeln('Выберите поле для редактирования');{выводим информацию о выборе поля для редактирования} writeln('1 - Фамилия'); writeln('2 - Имя'); writeln('3 - Пол'); writeln('4 - Год рождения'); writeln('5 - Вес'); writeln('6 - Рост'); writeln('0 - Отмена редактирования и переход к следующей записи'); readln(i); {считываем выбор пользователя} case i of {в зависимости от выбора пользователя выполняем} 1: begin {если пользователь ввел "1", то редактируем фамилию} writeln('Старое значение поля "Фамилия" - ', u.fam); {выводим на экран фамилию, указанную в записи} write('Введите новое значение: '); {выводим запрос для ввода измененной фамилии} readln(s); {считываем введенное пользователем значение} u.fam := s; {заносим значение введенное пользователем в запись} seek(f,k); {ищем запись с номером счетчика в файле} write(f,u); {записываем измененную запись в файл} next := false; {устанавливаем признак того, что на следующую запись после редактирования переходить не нужно} 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", то редактируем пол} if u.pol then s := 'Мужской' else s := 'Женский'; {переводим логическое обозачение пола в строку} writeln('Старое значение поля "Пол" - ', s); writeln('Введите новое значение'); writeln('Укажите пол ученика, если мужской - введите букву "м", если женский - "ж"'); readln(c); if (c = 'м') or (c = 'ж') then ok := true else ok := false; {если пользователь ввел некорректное значение обозначения пола, то устанавливаем ложное значение логического переключателя} while not ok do {пока логический переключатель не будет равен истине выполняем цикл} begin writeln('Некорректный ввод данных'); {выводим сообщение об ошибке} writeln('Вводите строчные русские буквы!'); writeln('Укажите пол ученика, если мужской - введите букву "м", если женский - "ж"'); readln(c); {считываем новое введенное пользователем значение} if (c = 'м') or (c = 'ж') then ok := true else ok := false; end; if c = 'м' then pl := true else pl := 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} if next then inc(k); {если установлен признак перехода, то увеличиваем значение счетчика} end; {while k <= filesize(f)} writeln('Вся база данных просмотрена, для возврата в меню нажмите любую клавишу'); {выводим информацию на экран} repeat until keypressed; {ждем, пока не нажата какая-нибудь клавиша} close(f); end; procedure del; {процедура удаления записи} var u: pupil; i, k: integer; next: boolean; c: char; s: string; begin reset(f); {открываем файл для чтения} k := 0; {устанавливаем начальное значение счетчика} while k < filesize(f) do {выполняем пока счетчик меньше количества записей в файле} begin seek(f,k); {ищем запись с номером, совпадающим со счетчиком} clrscr; {очищаем экран} writeln('---Удаление записи---'); writeln('Фамилия':15, 'Имя':15, 'Пол':10, 'Год рождения':17, 'Вес':6, 'Рост':6);{выводим заголовки для полей записи} read(f, u); {считываем запись из файла} if u.pol then s := 'Мужской' else s := 'Женский'; {переводим логическое обозачение пола в строку} writeln(u.fam:15, u.name:15, s:10, u.data:17, u.ves:6, u.rost:6); {выводим данные из записи} writeln; writeln('Enter - удаление текущей записи, Esc - выход в меню'); writeln('любая другая клавиша - переход к следующей записи'); repeat until keypressed; {ждем, пока не нажата какая-нибудь клавиша} c := readkey; if ord(c) = 27 then exit; {если нажата клавиша ESC, то выходим из процедуры} next := true; {устанавливем признак того, что нужно перейти на следующую запись в файле} if ord(c) = 13 then {если нажата клавиша Enter, то выполняем следующее} begin for i := k to filesize(f) - 2 do {от текущей записи до предпоследней записи файла выполняем} begin seek(f, i+1); {ищем следующую за текущей запись в файле} read(f, u); {считываем найденную запись} seek(f, i); {ищем текущую запись} write(f, u); {записываем на её место считанную ранее последующую запись} end; if k = filesize(f) - 1 then clrscr; {если значение счетчика равно последней записи, то очищаем экран} seek(f, filesize(f) - 1); {ищем последнюю запись в файле} truncate(f); {отсекаем часть файла, начиная с текущей записи} next := false; {устанавливаем признак того, что на следующую запись переходить не нужно} end; {if ord(c) = 13} if next then inc(k); {если установлен признак перехода, то увеличиваем значение счетчика} end; {while k < filesize(f) do} writeln('Вся база данных просмотрена, для возврата в меню нажмите любую клавишу'); repeat until keypressed;{ждем, пока не нажата какая-нибудь клавиша} 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);{считываем выбор пользователя} for j := 1 to filesize(f) do {начинаем пузырьковую сортировку} for i := 0 to filesize(f) - 2 do {количество повторений цикла на 1 меньше размера файла} begin seek(f, i); {ищем i-ю запись в файле} read(f, u1); {считываем найденную запись из файла} seek(f, i + 1); {ищем следующую за i-й запись в файле} read(f, u2); {считываем найденную запись из файла} if sort_type = 1 then {в зависимости от выбранного критерия сортировки устанавливаем значения переменных, которые будем сравнивать} begin p1 := u1.rost; {выбрана сортировка по росту, устанавливаем в переменные значения из поля рост} p2 := u2.rost; end else begin p1 := u1.ves; {выбрана сортировка по весу, устанавливаем в переменные значения из поля вес} p2 := u2.ves; end; if p1 > p2 then {сравниваем между собой значения переменных по которым идет сортировка. в случае, если первое больше второго, то меняем местами записи в файле} begin seek(f, i + 1); write(f, u1); seek(f, i); write(f, u2); end; end; clrscr; {очищаем экран} writeln('---Список учеников, занесенных в базу данных---'); if sort_type = 1 then writeln('сортировка по росту') else writeln('сортировка по весу'); {в зависимости от выбранного вида сортировки выводим заголовок} writeln('Фамилия':15, 'Имя':15, 'Пол':10, 'Год рождения':17, 'Вес':6, 'Рост':6);{выводим заголовки для полей записи} for i := 0 to filesize(f) - 1 do {повторяем цикл столько раз, сколько записей содержится в файле} begin seek(f, i); {ищем i-ю запись в файле} read(f, u1);{считываем найденную запись из файла} if u1.pol then s := 'Мужской' else s := 'Женский'; {переводим логическое обозачение пола в строку} writeln(u1.fam:15, u1.name:15, s:10, u1.data:17, u1.ves:6, u1.rost:6);{выводим данные из записи} end; writeln('Для выхода в главное меню нажмите любую клавишу'); repeat until keypressed;{ждем, пока не нажата какая-нибудь клавиша} 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); {считываем выбор пользователя} case v of {в зависимости от выбора пользователя выполняем} 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 «Описание программы».
Популярное: Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (167)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |