Создание информационной системы "Учреждение образования"

Написание информационной системы "Учреждение образования" на языке программирования Паскаль. Обоснование алгоритма отдельных функциональных частей. Процедура вывода на экран меню и организации работы с ним. Просмотр записей. Разработка тестовых приемов.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 06.02.2013
Размер файла 773,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://allbest.ru/

Размещено на http://allbest.ru/

СОДЕРЖАНИЕ

Введение

1. Выбор метода реализации задачи

1.1 Обоснование метода реализации задачи

1.2 Выделение функциональных частей

1.3 Составление общего алгоритма

1.4 Обоснование алгоритма отдельных функциональных частей

2. Разработка тестовых приемов

3. Разработка программы

4. Тестирование и анализ результатов

Заключение

Список литературы

Приложения

ВВЕДЕНИЕ

Информационные и управляющие системы в настоящее время составляют основную область приложений компьютерных систем для всех видов хозяйственной, финансовой, творческой деятельности, а также в образовании, фундаментальных и прикладных научных исследованиях. Хотя современные компьютерные технологии больше обслуживают потребности человека и групп людей в их общественной и технической деятельности, чем их естественные потребности, они уже стали неотъемлемой частью повседневной жизни практически по всему земному шару. Занятия некоторых людей, групп, коллективов и блоков сейчас всё в большей мере начинает зависеть от их информированности и способности результативно применять бытующие сведения.

В настоящее время персональные электронные вычислительные машины используются при решении широкого спектра проблем, поэтому логичным было бы предложить использование персональной электронной вычислительной машины для выполнения задачи, связанной не только с поиском, но и с хранением информации по выбранной теме, т. к. при отыскании целесообразных решений во всякой сфере вызывает обработку немалых объёмов сведений, что другой раз невозможно без привлечения особых технических средств. При использовании персональной электронной вычислительной машины для решения данной задачи время поиска нужной информации сократится до минимума.

Часто важен именно быстрый доступ к необходимой информации, т.к. информация может повлиять на какие-либо решения либо действия человека. Поэтому так важен скоростной доступ к полной и отсортированной информации.

В ходе выполнения курсового проекта будет создана информационная система “Учреждение образования”, которая может быть использована сотрудниками таких учреждений в целях облегчения поиска подходящей (необходимой) информации. Для лучшего использования в программе будет реализован удобный графический интерфейс и понятный любому пользователю диалоговый режим.

1. ВЫБОР МЕТОДА РЕАЛИЗАЦИИ ЗАДАЧИ

1.1 ОБОСНОВАНИЕ МЕТОДА РЕАЛИЗАЦИИ ЗАДАЧИ

Для написания информационной системы «Учреждение образования» будет выбран язык программирования Паскаль. Начинать изучение программирования лучше всего именно им - это единственный язык, который создан специально для обучения программированию. Паскаль имеет четкую систему типов данных, понятную словесную форму их описания, поддерживает как текстовый, так и графический режимы. Написанные на Паскале программы ближе всего к естественному языку. Программы записывают по синтаксису языка Паскаль, а стандартные слова - английским языком. Такая запись существенно улучшает понимание программы, а возможность автоматического перевода упрощает переход к профессиональным средам программирования. Язык Паскаль сыграл большую роль в развитии методов аналитического доказательства правильности программ и позволил реально перейти от методов отладки программ к системам автоматической проверки правильности программ.

Применение данного языка значительно подняло "планку" надёжности разрабатываемых программ за счёт требований Паскаля к описанию используемых в программе переменных, проверки согласованности программы при компиляции без её выполнения, использования в Паскале простых и гибких структур управления: ветвлений, циклов. К его преимуществам можно отнести:

- легкость написания динамических программ и программ для работы с текстовой информацией;

- возможность использования внешних процедур, что способствует развитию умения работать с библиотекой алгоритмов;

- низкие требования к аппаратуре и совместимость с широким кругом IBM-совместимых

Кроме набора средств, присущих современным языкам программирования высокого уровня (структурность, модульность, определяемые типы данных) в Паскаль включены средства для программирования "почти" на уровне ассемблера (использование указателей, побитовые операции, операции сдвига). Паскаль требует жесткой дисциплины программирования, содействующей устранению многих ошибок еще на стадии их трансляции. Данный язык не допускает использования принципов умолчаний и сокращений, требует строгого соблюдения соответствия типов данных, в нём жёстко регламентированы структура и место описания программных объектов.

Перечислим основные из них:

- ограниченное использование типов данных, в полном объёме поддерживаются только арифметические типы данных.

- вложенность блоков, в которых используются одноименные объекты, не должна превышать двух уровней.

- процедурные блоки не должны быть внутри BEGIN-блоков, вложенность процедурных блоков не ограничивается.

- допускается использовать только одномерные массивы с открытой правой границей (динамические массивы) в качестве параметров процедурных блоков; при этом адресуются элементы массива в Паскаль программе, начиная с нулевого элемента.

- ограниченное использование смешения различных типов данных.

В языке Паскаль операции отношения и рассмотренные ниже булевские операции более важны при написании программ, чем в других языках, так как они интенсивно используются для реализации разветвляющихся и циклических алгоритмов. Каждый конкретный язык ориентирован либо на компиляцию, либо на интерпретацию -- в зависимости от того, для каких целей он создавался. Например, Паскаль обычно используется для решения довольно сложных задач, в которых важна скорость работы программ. Поэтому данный язык обычно реализуется с помощью компилятора. Иногда для одного языка имеется и компилятор, и интерпретатор. В этом случае для разработки и тестирования программы можно воспользоваться интерпретатором, а затем откомпилировать отлаженную программу, чтобы повысить скорость ее выполнения. В Паскале есть весь необходимый объем команд, типов и практически нельзя встретить ситуаций, когда элементарное действие можно выполнить больше, чем 1 способом, или, наоборот, стандартных команд для какого-либо элементарного действия нет, и приходится изобретать велосипед.

В настоящее время существуют различные виды интерфейса, как диалогового, так и в виде меню. Интерфейс в данной системе будет реализован в виде меню под управлением клавиш перемещения курсора, что значительно облегчит работу с данной системой, а также сократит время доступа к информации.

Храниться информация будет в виде записей. Это очень удобно, т.к. запись может содержать элементы, принадлежащие различным типам. Она хорошо подходит для объединения разнородной информации о каком-либо объекте. Запись будет содержать поля с информацией о:

- шифре студента;

- фамилии;

- специальности;

- имени;

- отчестве;

- год поступления.

Пользователю может понадобиться просмотр всей базы данных, для этого будет обеспечена возможность полного просмотра списка специальностей.

Некоторые данные о студентах (учащихся) могут измениться, устареть или пользователь может сам ошибиться при их вводе. Для этого необходимо создать пункт редактирования информации. Все изменения будут вноситься в файл базы данных.

В связи с тем, что может возникнуть необходимость поиска какой-либо определенной информации, необходимо предусмотреть возможность поиска по критериям пользователя. Поиск будет осуществляться по всем характеристикам.

Пользователю, который использует данную программу, необходимо дать краткую информацию о пользовании информационной системой «Учреждение образования», поэтому по каждому пункту меню будет содержаться небольшая подсказка в информационном окне.

1.2 ВЫДЕЛЕНИЕ ФУНКЦИОНАЛЬНЫХ ЧАСТЕЙ

На основании выбранного метода решения можно выделить следующие функциональные части:

- подпрограмма вывода на экран информационной заставки, в которой будет отображено название информационной системы, информация о разработчике, а также год создания;

- подпрограмма вывода меню на экран и обеспечения его работы под управлением клавиш клавиатуры;

- подпрограмма, обеспечивающая вывод на экран всех записей, включенных в информационную систему;

- подпрограмма, которая обеспечит редактирование выбранной пользователем при перемещении курсором по всем записям одной из них;

- подпрограмма, которая обеспечит удаление выбранной пользователем при перемещении курсором по всем записям одной из них;

- подпрограмма, обеспечивающая поиск нужной информации в базе по запросу пользователя;

- подпрограмма, обеспечивающая вывод помощи по работе с данной системой на экран;

1.3 СОСТАВЛЕНИЕ ОБЩЕГО АЛГОРИТМА

Процедурой assign связываем физический файл, в котором будет храниться база данных, (C:\Program Files\tp7\base.imm) с файловой переменной f, открываем типизированный файл, связанный с файловой переменной f, для чтения.

Если файл не был открыт успешно, то в центре рабочего окна выводится сообщение «Error while creating new file program will be terminated». Если открытие произошло успешно, выводится информационная заставка (используем процедуру вывода графической заставки, которая будет оставаться на экране до тех пор, пока не будет нажата какая-либо клавиша).

После завершения изображения заставки устанавливаем текстовый режим (80*25 строк, цветной). Процедурой menu на экран выводится меню и организовывается работа с ним. Выбрать пункт меню - клавиша ввода, вернуться в главное меню ESC. Посредством выбора пункта меню Выход (либо снова клавиша ESC, что нежелательно) осуществляется выход в среду TP.

1.4 ОБОСНОВАНИЕ АЛГОРИТМОВ ОТДЕЛЬНЫХ ФУНКЦИОНАЛЬНЫХ ЧАСТЕЙ

Рассмотрим алгоритмы реализации отдельных функциональных частей.

Процедура вывода информационной заставки.

Если файл с базой данных открылся (создался) успешно, тогда выводится графическая заставка. Если была нажата какая-либо клавиша, происходит выход в главное меню программы. Если файл не был открыт успешно, то в центре рабочего окна выводится сообщение «Error while creating new file program will be terminated». Вывод графической заставки осуществляется с помощью символов псевдографики, а так же некоторыми функциями и процедурами текстового режима, устанавливаем такие атрибуты текста, как цвет, мерцание.

Процедура вывода на экран меню и организации работы с ним.

При вызове подпрограммы вверху экрана в рамке выводятся следующие пункты меню: Новая, Поиск, Сортировка, Архив, Автор, Выход. При выборе курсором любого из этих пунктов меню в нижнем левом углу, благодаря возможностям текстового режима, мы можем выводить небольшую справочную информацию по каждому, что намного проще, чем, если бы обращаться к отдельному пункту меню «Справка». Подсказки необходимы для того, чтобы помочь пользователю легче усвоить интерфейс программы. Помощь содержит краткую информацию о каждом пункте меню и некоторые замечания. Данные считываются из заранее созданных строковых констант. Так же процедура предусматривает тот момент, что если достигнут последний пункт меню (самый правый) и нажата правая стрелка курсора, происходит перемещение к первому пункту меню (самому левому), т.е Новая.

Добавление новой информации.

Позволяет производить добавление записей при просмотре списка и при формировании нового списка. С помощью процедуры ввода записи выводим схематичное окно-запрос «Пожалуйста, введите информацию», содержащее все поля записей. Вводим с клавиатуры значения. Если пользователь ошибся при вводе, то он сможет удалить ненужные символы при помощи клавиши Backspace. Не обязательно заполнять все поля записи, достаточно будет заполнить одно из полей. Пока не был произведен выход из системы, связываем файловую переменную f с именем файла filename. Открываем этот файл для чтения и записи. Переводим указатель в конец файла. Добавляем туда записи, учитывая, что количество компонент файла увеличилось. Закрываем файл. Открываем измененный файл для чтения и записи. С помощью процедуры вывода на экран таблицы с записями в сформированную область выводим измененные данные. Затем пользователю выдается запрос на создание ещё одной новой записи. Если пользователь не подтверждает запрос, происходит выход в главное меню.

Просмотр записей.

Позволяет отображать полный список в окне таблицы. Очищается часть экрана, выводится шапка таблицы (некоторые названия полей записей), переменной, хранящей номер выводимой записи присваивается значение 1, на экран по порядку выводятся все записи с полями хранящиеся в файле, при этом значение переменной хранящей номер записи увеличивается на 1, значения полей выводимых записей отделены друг от друга. Выделяем подсветкой первую запись.

Если нажата клавиша управления курсором вверх, то номера perv и last уменьшаем на 1. Если значение perv<0, то присваиваем переменным perv=0 last=2, избегая тем самым ситуации, когда компьютер пытается прочесть несуществующую запись. Далее выводим на экран записи из файла с perv по last с полями хранящиеся в файле.

Если нажата клавиша управления курсором вниз, то номера perv и last увеличиваются на 1. Если значение last больше чем количество записей в файле, то переменным присваиваем last количество записей в файле, perv--уменьшаем на 1, избегая тем самым ситуации, когда компьютер пытается прочесть несуществующую запись. Далее выводим на экран записи из файла с perv по last с полями хранящиеся в файле. Если клавиша ESC была нажата, то на экране появляется главное меню. По окончании процедуры выводимый файл закрывается.

Редактирование записей.

Изменить запись можно будет только тогда, когда существует хоть одна запись, иначе программа выведет сообщение о том, что файл не содержит записей. Подпрограмма редактирования записей позволяет вносить изменения в какие-либо записи полного списка, изменяя при этом всю строку. Выбираем курсором изменяемую запись, нажимаем ENTER.

Формируем область, в которой будут вводиться новые данные. Если не был произведен выход из системы, запрашиваем подтверждение на изменение данных с помощью процедуры подтверждения. Если изменение было утверждено, редактируем исходную запись, с помощью ранее описанной процедуры. Если пользователь ошибся при вводе (случайно нажал не тот символ), то он сможет удалить ненужные символы при помощи клавиши Backspace. Связываем файловую переменную f с именем файла filename и открываем его для чтения и записи. Переводим указатель в конец файла и записываем туда измененные данные. Закрываем файл. Формируем область для вывода измененных данных и выводим их.

Удаление записи.

Подпрограмма удаления записей позволяет производить удаление каких-либо записей из списка таблицы. Удалить запись можно будет только в том случае, когда в файле содержатся записи, иначе программа выведет сообщение о том, что файл пуст. Проверяем, существуют ли записи в данной таблице, если да, то выдаем запрос на подтверждение «Вы точно хотите удалить?», используя соответствующую процедуру. При утвердительном ответе, связываем файл filename с файловой переменной f. Открываем этот файл для чтения и записи. Связываем другой файл index.sss с другой файловой переменной index. Открываем его для чтения и записи. В нем переводим указатель на первую компоненту. Считываем записи и закрываем данный файл. Связываем файл newfile.dat с файловой переменной f2. Открываем его для записи. Указатель ставим в начало файла и, пока не конец файла f, считываем запись в переменную, откуда потом заносим данные в файл f2, исключая запись выделенную запись. Закрываем файл f2 и файл f. Удаляем файл f. Переименовываем f2 в filename, связываем файл filename с файловой переменной f. Формируем прямоугольную область и открываем файл f. С помощью процедуры вывода таблицы формируем таблицу с записями из файла f. Закрываем файл. Выводим на экран полученные записи. Все изменения сохранятся в файле, и после чего программа автоматически выйдет в главное меню.

Процедура поиска записей по ключу пользователя.

Открывается файл базы данных, если файл базы данных пуст, то выводим сообщение об ошибке. Иначе, на диске создается вспомогательный файл и связывается с файловой переменной fh. Выводится запрос о вводе пользователем критерия поиска. Запрос аналогичен, как и при создании новой записи - со всеми полями. Нам необходимо ввести ключевые поля поиска. Выведутся те значения записей, которые найдутся в результате поиска. Отобранные данные будут выведены на экран в ранее сформированную область. Открываем файл filename для записи. Переводим указатель в начало файла. Пока не достигнут конец файла, считываем записи в переменную и, если поле идентично введенной записи, записываем эту запись в файл f1. Если количество записей больше одного, то с помощью клавиш управления курсором можно пролистать вверх/вниз выведенные записи. После нажатия клавиши ESC произойдет выход в главное меню. Если ни одно поле не введено, то на экран выведутся из файла все существующие записи. Если ввести такое значение, которое не существует в базе данных, на экране появится сообщение: «Ничего не найдено!».

Автор.

Выводится краткая информация об авторе. В нижнем левом углу (где ранее выводилась небольшая справочная информация).

информационный программирование алгоритм текстовый

2. РАЗРАБОТКА ТЕСТОВЫХ ПРИМЕРОВ

Если файл «C:\Program Files\tp7\base.imm», который содержит базу данных, открылся или создан, (если он не существовал ранее) - появится графическая информационная заставка.

Если этот файл не открылся или не создан, если он не существовал ранее, то в центре рабочего окна выводится сообщение «Error while creating new file program will be terminated». При успешной работе появится горизонтальное меню и список с некоторыми полями записей.

В нижнем левом углу будут выводиться небольшие подсказки о принципе работы с пунктами меню и непосредственно с самими записями.

Перемещение по пунктам меню будет осуществляться с помощью клавиш управления курсором. Активный - первый пункт меню Новая. Если пытаться нажать клавишу управления курсором влево, то активным станет последний пункт меню Выход, если пытаться нажать клавишу управления курсором вправо, то активным станет первый пункт меню Новая.

Клавишей ENTER выберем первый пункт меню Новая - в результате на экране появится запрос с названиями полей добавляемой записи:

- шифр студента;

- фамилия;

- специальность;

- имя;

- отчество;

- год поступления.

Вводя с клавиатуры значение, количество символов которого превышает цифру, стоящую после названия поля в скобках, заметим, что при достижении этого количества символов в строке, курсор не сдвигается с места, пока не будет нажата клавиша ENTER. Затем автоматически переходит к введению следующего поля записи. Если же будет осуществляться попытка ввода строки меньшего размера, то операция подтверждается клавишей ENTER. Такая ситуация произойдет с вводом значений всех полей записи. Что касается типа полей, то они все текстовые.

Введем, к примеру, запись следующего содержания:

Шифр

4653456

Фамилия

Петровский

Специальность

АСОИ

Имя

Евгений

Отчество

Иванович

Год поступления

1999

После введения значения последнего поля записи на экране появляется запрос на добавление: ”Продолжать вводить записи?”. Он содержит клавиши «ДА» и «НЕТ». Выбор одной из них осуществляется с помощью клавиш курсора <=,=>

Если нажать «ДА», то на экране появится запрос на добавление: ”Продолжать вводить записи?”. После нажатия клавиши ESC произойдет выход в главное меню.

Если выбрать «НЕТ», то произойдет выход в главное меню. В этом пункте меню мы можем редактировать записи, удалять, просматривать полную информацию о них, переносить в архив.

Сделаем активным пункт меню Поиск. После нажатия клавиши ENTER на экране появится запрос, как и при создании новой записи - со всеми полями, нам необходимо ввести ключевые поля поиска. Выведутся те значения записей, которые найдутся в результате поиска. Если количество записей больше одного, то с помощью клавиш управления курсором можно пролистать вверх/вниз выведенные записи. После нажатия клавиши ESC произойдет выход в главное меню. Если ничего не будет введено, программа выведет все записи. Если ввести такое значение, которое не существует в базе данных, на экране появится сообщение: «Ничего не найдено!». Сделаем активным пункт меню Сортировка. После нажатия клавиши ENTER на экране появится запрос и схематичный курсор, управляя которым мы можем выбрать сортируемое поле из всех существующих. После нажатия клавиши ESC произойдет выход в главное меню.

Сделаем активным пункт меню Архив. После нажатия клавиши ENTER на экране появится список записей, которые содержатся в архиве (если архив не содержал никаких записей - ничего и не выведется). Так же если архив содержит более одной записи, можно просматривать их, пролистывая вверх/вниз с помощью клавиш курсора. После нажатия клавиши ESC произойдет выход в главное меню.

Сделаем активным пункт меню Автор. После нажатия клавиши ENTER в левом нижнем углу (где ранее выводилась справочная информация о, выведется следующая информация Сачевичик Алексей, АС-563 январь 2013 г.) и после нажатия клавиши ESC произойдет выход в главное меню.

Сделаем активным пункт меню Выход. После нажатия клавиши ENTER произойдет выход в среду TP.

3. РАЗРАБОТКА ПРОГРАММЫ

Для лучшей структурированности программа разбита на функции и процедуры.

В ходе разработки понадобилось использование такого стандартного модуля как Crt, а также некоторых процедур и функций пользователя.

Модуль CRT содержит ряд подпрограмм, которые предоставляют возможность программам, работающим под DOS, эффективно управлять такими характеристиками персонального компьютера, как режимы экрана, расширенные коды клавиатуры, цвета, звука и окна. Одним из основных преимуществ использования модуля CRT является повышение скорости и гибкости при выполнении операций работы с экраном.

Процедуры и функции модуля CRT:

Clrscr - очистка экрана (заполнение пробелами текущего цвета);

Gotoxy(x,y) - перемещает курсор в т. (x,y) относительно начала координат текущего открытого окна;

WhereX и WhereY - определяет положение курсора на экране: его горизонтальную и вертикальную координаты относительно начала координат текущего открытого окна;

TextColor(i) - устанавливает цвет текста равным i;

TextBackGround(i) - устанавливает цвет фона равным i;

Readkey - функция, считывает символ с клавиатуры и возвращает значение типа char;

Window(X1,Y1,X2,Y2) - открывает текстовое окно с координатами левого верхнего угла (X1,Y1) и нижнего правого (X2,Y2);

Keypressed - возвращает булевское значение True, если была нажата какая-либо клавиша, и false в противном случае.

Так же мной были использованы записи. Запись представляет собой структурированный тип данных, который содержит определенное число элементов (полей), причем различные поля записи могут иметь разный тип. Для описания переменных типа запись используется зарезервированное слово record.

В процессе работы программы используются файлы типа запись (где хранятся базы данных)

Так же в программе использовались типизированные файлы (линейная последовательность элементов одинакового типа), данные в которых хранятся во внутреннем представлении.

Основные процедуры и функции, используемые мной в программе:

Assign(файловая переменная, <путь к файлу>) - связывает файловую переменную с именем файла;

Reset (файловая переменная)- открывает файл для чтения и записи, связанный с файловой переменной;

Seek(файловая переменная, номер компоненты) - смещает указатель файла, связанного с файловой переменной, к требуемому компоненту файла. Нумеруются компоненты с нуля.

FileSize(файловая переменная) - возвращает значение типа longint, которое содержит количество компонентов (записей) файла.

Из процедур и функций пользователя мною использовались процедура вывода графической заставки на экран; процедуры добавления записи в базу; редактирования записи, выбранной курсором из базы; удаления записи из файла, выбранной курсором из базы; процедура вывода записей из файла на экран; а также процедура поиска записей в файле по значению поля, заданному пользователем.

4. ТЕСТИРОВАНИЕ И АНАЛИЗ РЕЗУЛЬТАТОВ

После запуска программы на экране появляется графическая информационная

заставка (Рис. 4.1.).

После нажатия клавиши ENTER, на экране появляется горизонтальное меню (рис.4.2)

Рис. 4.2. Горизонтальное меню и информация.

Видно, что активный пункт меню - Новая. Нажимая клавиши управления курсором, перемещаюсь по пунктам меню. На пункте меню Новая нажимаю клавишу ENTER, на экране выводится сообщение (рис.4.3):

Рис. 4.3. Запрос на новую запись.

Ввожу следующую информацию:

Шифр

4653456

Фамилия

Петровский

Специальность

АСОИ

Имя

Евгений

Отчество

Иванович

Год поступления

1999

После ввода информации и нажатия клавиши ENTER, появляется запрос (рис.4.4). Нажимаю НЕТ - появляется первоначальная заставка (рис 4. 2.). Добавленную запись мы сразу же видим на экране.

Рис.4.4 Добавление записи.

Если бы мы нажали клавишу ДА, появилось снова бы сообщение (рис.4.3.).

Выход в главное меню при неполном заполнении записи осуществляется путём нажатия клавиши ESC.

Нажав клавишу TAB, видим, что появилась полная информация об окне (рис.4.5), расположенном первым по списку, нажимая клавиши v^, мы перемещаемся по записям и наблюдаем полную информацию о каждом.

Рис. 4.5. Полная информация о записях.

При нажатии клавиш: DEL - появляется запрос (рис. 4.6.), ENTER - появляется такой же запрос, как и при создании новой записи (рис 4.3.), но поля уже содержат данные, INS -запрос о подтверждении переноса в архив (рис. 4.7.).

Рис. 4.6. Удаление записи

Рис 4.7. Перенос записи в архив.

Нажимаем клавишу ESC и возвращаемся в главное меню, выбираем пункт Поиск. Критерий поиска - любое поле записи (если же не указаны искомые данные, система выведет всю базу данных). Найдём всех студентов, факультета «АСОИ» (рис. 4.8.). В том случае, если программа не найдет записей по исходному запросу, то появится сообщение «Ничего не найдено!».

Рис. 4.8. Заполнение ключевых полей поиска.

Результат (рис.4.9), затем клавишей ESC возвращаемся в главное меню, выбираем пункт Сортировка. Появляется запрос (рис.4.10), перемещаясь с помощью клавиш v^ выбираем сортируемое поле, например фамилия, результат (рис. 4.11.)

Рис. 4.9. Результат поиска.

Рис. 4.10. Запрос на сортировку.

Рис. 4.11. Результат сортировки.

Опять же клавишей ESC возвращаемся в главное меню, выбираем пункт Архив.

Нажимаем клавишу ENTER и просматриваем содержимое архива (поскольку мы не заносили туда никакой информации - результат пустой список). Возвращаемся в главное меню клавишей ESC, выбираем пункт Автор и нажимаем ENTER (рис 4.12.). Возвращение в главное меню - клавиша ESC.

Рис. 4.12. Краткая информация об авторе.

При выборе пункта меню Выход, мы возвращаемся в среду TP.

ЗАКЛЮЧЕНИЕ

В результате выполнения курсовой работы был разработан алгоритм реализации и написана программа для информационной системы «Учреждение образования». Данная программа позволяет создать базу данных, хранящую в себе данные о студентах (учащихся), таких как шифр, фамилия, имя, отчество, специальность, год поступления. Обеспечена возможность добавление записей, их редактирование и удаление.

В итоге программа оказалась нетребовательной к ресурсам компьютера и может легко использоваться на недорогих ЭВМ. Также, для лучшего использования программа имеет удобный интерфейс и понятный любому пользователю диалоговый режим. В ходе проделанной работы была построена гибкая модель базы данных, в которой легко создать нужный запрос; данные представлены в удобном для пользователя виде.

Пояснительная записка содержит подробное описание процесса проектирования и создания, как базы данных, так и программного обеспечения, работающего с ней.

Так как программа работает с динамическими списками, то она быстра и позволяет избежать избыточности данных в таблицах.

В дальнейшем программа может быть усовершенствована путем добавления новых функций и модулей, например, для применения в более профессиональной среде и вывода на печать файла с информацией о студентах (учащихся). Это сможет значительно расширить область применения программы и сделать ее еще более востребованной.

СПИСОК ЛИТЕРАТУРЫ

- Вальвачев А.Н., Крисевич В.С. Программирование на языке ПАСКАЛЬ для персональных ЭВМ ЕС: Справочное пособие. - Мн.: Выш. шк., 1989.

- Базенков Т.Н., Дереченик С.С. СТ БПИ - 02 - 98. Графическая конструкторская документация электронной аппаратуры в курсовых и дипломных проектах (работах): Общие требования к разработке и правила оформления. - Брест, 1998.

- ГОСТ 19.002 - 80 ЕСПД Схемы алгоритмов и программ. Правила выполнения. - М. : Издательство стандартов, 1990.

- ГОСТ 19.003 - 80 ЕСПД Схемы алгоритмов и программ. Обозначения условные и графические. - М.: Издательство стандартов, 1990.

- ГОСТ 19.701 - 90 ЕСПД Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. - М. : Издательство стандартов, 1990.

- СТБПИ - 02 - 98 Стандарты института. Графическая конструкторская и программная документация электронной аппаратуры в курсовых и дипломных проектах (работах). Общие требования к разработке и правила оформления. - Брест : БПИ, 1998.

- Епанешников А.М., Епанешников В.А.. «Программирование в среде TURBO PASCAL 7.0». Москва, «Диалог-мифи», 1996. Вальвачев А.Н., Крисевич В.С.. «Программирование на языка ПАСКАЛЬ». Минск, «Вышэйшая школа», 1989

ПРИЛОЖЕНИЯ

ПРИЛОЖЕНИЕ 1. БЛОК-СХЕМА АЛГОРИТМА

ПРИЛОЖЕНИЕ 2. ТЕКСТ ПРОГРАММЫ

Program kurs;

uses crt;

Type

Record_Base=record {тип данных mag представляющий из себя запись с 6-ю переменными}

Record_Number:String[9]; {Шифр Студента}

Record_Famile:string[40]; {Фамилия}

Record_Special:string[20]; {Специальность}

Record_Name:string[20]; {Имя}

Record_Fathername:String[15]; {Отчество}

Record_Year:String[20]; {Год поступления}

end;

FileType=file of Record_Base;

Const

MENU1_Q=6;

MENU1_S:array[0..MENU1_Q-1] of string[25] = ('Новая','Поиск','Сортировка','Архив','Автор','Выход');

MENU2_S:array[1..6] of string[30] =

('Шифр : ','Фамилия : ','Специал. : ','Имя : ','Отчество : ','Год пост.: ');

FILENAME:string = 'Base.imm';ARCHIVNAME:string = 'Archiv.rar';

STR1='г= ДЕТАЛИ ====================¬';

STR2='г= КРАТКИЕ ДАННЫЕ ===========¬';

STR3='г= ИНФОРМАЦИЯ ================¬';

Var

c:char;

z:word;

cod1,cod2,cod3,cod4,c1,c2,c3,c4,i,last1,last2,lastfile:integer;

s:string;

f,f1:FileType;

Man:Record_Base;

ramka,n,flag,archiv:boolean;

Procedure enter(x,y:integer;max:integer;mode:string;var flag:boolean;var str:string);

var s:string; c:char;

Begin

s:=mode; while keypressed do c:=readkey;

repeat gotoxy(x,y); for i:=1 to max do write(' '); gotoxy(x,y); write(s);

repeat c:=readkey;if ord(c)=0 then begin c:=readkey; c:=#0; end; until (ord(c)<>0);

case ord(c) of 8 : delete(s,length(s),1); end;

if (length(s)<max) and (ord(c)<>8) and (ord(c)<>13) then s:=s+c;

until (ord(c)=13) or (ord(c)=27); flag:=c=#27;

str:=s;

End;

Procedure Panel(var x:integer;var n:word);

var leng,i,j:word; c:char;

Begin

Window(1,1,80,1); leng:=80 div MENU1_Q;

Repeat window(2,18,Length(STR1)-1,23); textattr:=$0f;

clrscr; gotoxy(2,2); write('Нажмите "Tab", чтобы увидеть');

gotoxy(5,3); write('полную информацию');

gotoxy(6,4); write('или "Enter", чтобы '); textattr:=$0f;

case x of

0:begin gotoxy(1,5);write('добавить новую запись в базу');end;

1:begin gotoxy(5,5);write('найти запись в базе');end;

2:begin gotoxy(3,5);write('сортировать записи в базе');end;

3:begin gotoxy(1,5);if archiv then write(' просмотреть содержимое базы')

else write('просмотреть содержимое архива');end;

4:begin gotoxy(2,5);write('увидеть информацию об авторе');end;

5:begin gotoxy(6,5);write('выйти из программы');end;

end;

window(1,1,80,1); textattr:=$07;

clrscr; textattr:=$1b;

for i:=0 to MENU1_Q-1 do begin

if x=i then textattr:=$3f; for j:=1 to (leng-length(MENU1_S[i])) div 2 do

write(' '); write(MENU1_S[i]);

for j:=1 to (leng-length(MENU1_S[i])) div 2 do

write(' '); textattr:=$1b; end;

c:=readkey;if ord(c)=0 then c:=readkey; case ord(c) of

77 : x:=(x+1)*ord(x<>MENU1_Q-1);

75 : x:=(x-1)*ord(x<>0)+(MENU1_Q-1)*ord(x=0);

9 : n:=111

else n:=x;

end;

Until (ord(c)=27) or (ord(c)=13) or (ord(c)=9);

TextAttr:=$07; Window(1,1,80,50); if ord(c)=27 then halt;

End;

Function windows(x,y:integer;height,widgth,mode:integer;message:string):boolean;

const

STR:array [1..1] of string[20] = (' ВНИМАНИЕ! ');

Button1=' ДА '; Button2=' НЕТ '; Button3=' OK ';

var

p:pointer; i,j,k:integer; c:char; t:boolean; oldmaxx,oldmaxy,oldminx,oldminy:integer;

cur1,cur2:byte;

Begin

oldmaxx:=lo(windmax)+1; oldmaxy:=hi(windmax)+1;

oldminx:=lo(windmin)+1; oldminy:=hi(windmin)+1;

randomize; window(1,1,80,25); getmem(p,(height+1)*(widgth+2)*2);

{Save window} for i:=0 to height do for j:=0 to (widgth+2)*2-1 do

move(ptr(segb800,80*2*(y+i-1)+x*2-2+j)^,ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,1);

{Print window} textattr:=$1b; window(x,y,x+widgth-1,y+height-1);

clrscr; window(1,1,80,25); gotoxy(x+(widgth-length(message)) div 2,y+1);write(message);

gotoxy(x,y);write(#201); for i:=1 to round((widgth-length(STR[mode])-2)/2) do

Write(#205); write(STR[mode]); for i:=1 to (widgth-length(STR[mode])-2) div 2 do

Write(#205); write(#187);

for i:=1 to height-2 do

begin

gotoxy(x,y+i);write(#186); gotoxy(x+widgth-1,y+i);write(#186);

end;

gotoxy(x,y+height-1); write(#200);

for i:=1 to widgth-2 do Write(#205); write(#188);

{Making dark area}

j:=$08; for i:=1 to height-1 do

for k:=0 to 1 do move(j,ptr(segb800,80*2*(y-1+i)+(x+k)*2+widgth*2-1)^,1);

for i:=1 to widgth do move(j,ptr(segb800,80*2*(y+height-1)+(x+1)*2+i*2-1)^,1);

t:=true; case mode of

1:

begin

Repeat

if t=true then textattr:=$3f else textattr:=$07;

gotoxy(x+3,y+3);write(Button1); if t=false then textattr:=$3f else textattr:=$07;

gotoxy(x+widgth-3-length(Button2),y+3);write(Button2);

c:=readkey; case ord(c) of 75 : t:=true; 77 : t:=false; end;

Until (ord(c)=13) or (ord(c)=27) or (ord(c)=32);

if ord(c)=27 then t:=false; end;

2:

repeat textattr:=$3b;

gotoxy(Widgth div 2+x-length(Button3) div 2,height div 2+1+y);write(Button3);

c:=readkey; until (ord(c)=27) or (ord(c)=13) or (ord(c)=32);

end; {Print old window}

for i:=0 to height do for j:=0 to (widgth+2)*2-1 do

move(ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,ptr(segb800,80*2*(y+i-1)+x*2+j-2)^,1);

dispose(p); window(oldminx,oldminy,oldmaxx,oldmaxy);

windows:=t;

End;

Procedure windows_enter(x,y:integer;height,widgth:integer;mode:integer;var man:Record_Base;var flag,l:boolean);

const

STRin=' Пожалуйста, введите информацию ';

var

p:pointer; i,j,k:integer; c:char; oldmaxx,oldmaxy,oldminx,oldminy:integer;

cur1,cur2:byte; str:string;

Begin

oldmaxx:=lo(windmax)+1; oldmaxy:=hi(windmax)+1;

oldminx:=lo(windmin)+1; oldminy:=hi(windmin)+1;

asm

mov ah,03h

int 10h

mov cur1,ch

mov cur2,cl

end;

window(1,1,80,25); getmem(p,(height+1)*(widgth+2)*2);

{Save window} for i:=0 to height do for j:=0 to (widgth+2)*2-1 do

move(ptr(segb800,80*2*(y+i-1)+x*2-2+j)^,ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,1);

{Print window}

textattr:=$1b; window(x,y,x+widgth-1,y+height-1);

clrscr; window(1,1,80,25); gotoxy(x,y);write(#201);

for i:=1 to round((widgth-length(STRin)-2)/2) do Write(#205);

write(STRin); for i:=1 to (widgth-length(STRin)-2) div 2 do

Write(#205); write(#187);

for i:=1 to height-2 do begin gotoxy(x,y+i);write(#186);

gotoxy(x+widgth-1,y+i);write(#186); end;

gotoxy(x,y+height-1); write(#200); for i:=1 to widgth-2 do Write(#205);

write(#188); {Making dark area} j:=$08;

for i:=1 to height-1 do for k:=0 to 1 do

move(j,ptr(segb800,80*2*(y-1+i)+(x+k)*2+widgth*2-1)^,1);

for i:=1 to widgth do move(j,ptr(segb800,80*2*(y+height-1)+(x+1)*2+i*2-1)^,1);

for i:=1 to 12 do

begin

gotoxy(x+3,y+i); write(MENU2_S[i]); end;

if (mode=1) or (mode=2) then with man do begin

Record_Number:='';Record_Famile:='';

Record_Special:='';Record_Name:='';Record_Fathername:='';Record_Year:='';

end; textattr:=$1f; with man do begin

Gotoxy(Length(MENU2_S[1])+x+3,1+y);Write(Record_Number);

Gotoxy(Length(MENU2_S[2])+x+3,2+y);Write(Record_Famile);

Gotoxy(Length(MENU2_S[3])+x+3,3+y);Write(Record_Special);

Gotoxy(Length(MENU2_S[4])+x+3,4+y);Write(Record_Name);

Gotoxy(Length(MENU2_S[5])+x+3,5+y);Write(Record_Fathername);

Gotoxy(Length(MENU2_S[6])+x+3,6+y);Write(Record_Year);

end;

With Man do

begin if (mode=1) or (mode=3) then

Repeat Enter(x+3+Length(MENU2_S[1]),y+1,15,Record_Number,flag,Str);

if (length(Str)=0) and (not flag) then windows(23,9,5,36,2,'Это поле обязательно для ввода!'); textattr:=$1f;

until (length(Str)<>0) or flag else

Enter(x+3+Length(MENU2_S[1]),y+1,15,'',flag,Str);

Record_Number:=str; if (mode=1) or (mode=3) then

Repeat if not flag then

Enter(x+3+Length(MENU2_S[2]),y+2,20,'',flag,Str);

if (length(Str)=0) and (not flag) then windows(23,9,5,36,2,'Это поле обязательно для ввода!'); textattr:=$1f;

until (length(Str)<>0) or flag else if not flag then

Enter(x+3+Length(MENU2_S[2]),y+2,20,'',flag,Str);

Record_Famile:=str; if not flag then

Enter(x+3+Length(MENU2_S[3]),y+3,20,Record_Special,flag,str);Record_Special:=str;

if not flag then

Enter(x+3+Length(MENU2_S[4]),y+4,20,Record_Name,flag,str);Record_Name:=str;

if not flag then

Enter(x+3+Length(MENU2_S[5]),y+5,15,Record_Fathername,flag,str);Record_Fathername:=str;

if not flag then

Enter(x+3+Length(MENU2_S[6]),y+6,18,Record_Year,flag,str);Record_Year:=str;

end;

textattr:=$0b; if mode=1 then

l:=windows(23,9,5,30,1,'Продолжать вводить записи?');

{Print old windows} for i:=0 to height do for j:=0 to (widgth+2)*2-1 do

move(ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,ptr(segb800,80*2*(y+i-1)+x*2+j-2)^,1);

dispose(p); window(oldminx,oldminy,oldmaxx,oldmaxy);

End;

Procedure windows_sort (x,y:integer; height, widgth: integer; var flag:boolean; var n:integer);

const STRin=' Выберите поле сортировки ';

var p:pointer; i,j,k: integer; c:char; oldmaxx, oldmaxy, oldminx, oldminy: integer;

cur1,cur2:byte; str:string;

Begin

oldmaxx:=lo(windmax)+1; oldmaxy:=hi(windmax)+1; oldminx:=lo(windmin)+1;

oldminy:=hi(windmin)+1; window(1,1,80,25); getmem(p,(height+1)*(widgth+2)*2);

{Save window} for i:=0 to height do for j:=0 to (widgth+2)*2-1 do

move(ptr(segb800,80*2*(y+i-1)+x*2-2+j)^,ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,1);

{Print window} textattr:=$1b; window(x,y,x+widgth-1,y+height-1); clrscr;

window(1,1,80,25); gotoxy(x,y);write(#201); for i:=1 to round((widgth-length(STRin)-2)/2) do

Write(#205); write(STRin); for i:=1 to (widgth-length(STRin)-2) div 2 do

Write(#205); write(#187); for i:=1 to height-2 do begin

gotoxy(x,y+i);write(#186); gotoxy(x+widgth-1,y+i);write(#186); end;

gotoxy(x,y+height-1); write(#200); for i:=1 to widgth-2 do Write(#205);

write(#188); {Making dark area} j:=$08; for i:=1 to height-1 do for k:=0 to 1 do

move(j,ptr(segb800,80*2*(y-1+i)+(x+k)*2+widgth*2-1)^,1); for i:=1 to widgth do

move(j,ptr(segb800,80*2*(y+height-1)+(x+1)*2+i*2-1)^,1); for i:=1 to 12 do

begin gotoxy(x+3,y+i); write(MENU2_S[i]); end;

flag:=false; n:=1; textattr:=$1f; repeat gotoxy(x+23,y+n); write(#17,#205,#205,#205); c:=readkey;if ord(c)=0 then c:=readkey; gotoxy(x+23,y+n); write(' ');

case ord(c) of 72 : n:=12*ord(n=1)+(n-1)*ord(n<>1);

80 : n:=1*ord(n=12)+(n+1)*ord(n<>12); end;

until (ord(c)=27) or (ord(c)=13); if ord(c)=27 then flag:=true;

textattr:=$1b; {Print old windows} for i:=0 to height do

for j:=0 to (widgth+2)*2-1 do

move(ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,ptr(segb800,80*2*(y+i-1)+x*2+j-2)^,1);

dispose(p); window(oldminx,oldminy,oldmaxx,oldmaxy);

End;

Procedure ramka1(Nach:integer);

var i:integer;

Begin

window(1,2,Length(STR1),16); textattr:=$0b; clrscr; window(1,2,Length(STR1),17);

textattr:=$0b; gotoxy(1,Nach); if (Nach>0) and (Nach<=22) then Write(STR1);

for i:=Nach+1 to Nach+14 do if (i>0) and (i<=22) then begin

gotoxy(1,i);write(#186); gotoxy(31,i);write(#186); end;

if (Nach+14>0) and (Nach+14<=22) then begin gotoxy(1,Nach+14); Write(#200);

for i:=1 to 29 do write(#205); write(#188); end; window(2,2,Length(STR1)-1,16);

textattr:=$0b; for i:=1 to 12 do if (i+Nach>0) and (i+Nach<22) then

begin gotoxy(1,i+Nach); write(MENU2_S[i]); end; window(1,1,80,25);

End;

Procedure ramka2;

Begin

window(1,1,80,25); textattr:=$0b; gotoxy(32,3); Write(STR2);

gotoxy(32,4);Write(#186,'Шифр',#25); gotoxy(44,4);Write('Фамилия');

gotoxy(64,4);Write('Специальность'); gotoxy(80,4);write(#186);

gotoxy(32,5);write(#204); for i:=1 to 47 do write(#205); write(#185);

for i:=6 to 24 do begin gotoxy(32,i);write(#186); gotoxy(80,i);write(#186);

end; gotoxy(32,25);write(#200); for i:=1 to 47 do write(#205); write(#188);

End;

Procedure ramka3;

var i:integer;

Begin

window(1,17,Length(STR1),25); textattr:=$0b; writeln(STR3); for i:=2 to 7 do

begin gotoxy(1,i);write(#186); gotoxy(length(STR3),i);write(#186);

end; write(#200); for i:=1 to length(STR3)-2 do write(#205);

write(#188); window(1,1,80,25);End;

Procedure Delete(l:integer);

var man:Record_Base;

Begin

seek(f,l+1); while not eof(f) do begin read(f,man); seek(f,filepos(f)-2); write(f,man); seek(f,filepos(f)+1); end; seek(f,filesize(f)-1); truncate(f);

End;

Procedure Init(FILENAME:string);

Begin

assign(f,FILENAME); {$I-} reset(f); if IOResult<>0 then

begin rewrite(f); if IOResult<>0 then begin

clrscr; writeln('Error while creating new file program will be terminated');

textcolor(red+blink); Writeln('PRESS ENTER!');

textattr:=$07; Readln; Halt(1); end; end; close(f); {$I+}

End;

Procedure Show_ramka;

Begin ramka:=true;

for i:=-17 to 1 do

begin window(1,2,Length(STR1),16); clrscr; ramka1(i); delay(round(sqr(i+30)));

end;

End;

Procedure Hide_Ramka;

Begin ramka:=false;

for i:=1 downto -17 do begin window(1,2,Length(STR1),16); clrscr;

ramka1(i); delay(round(sqr(i+30))); end;

End;

Procedure New_String;

var Man:Record_Base; i:integer; c:char; str:string; l:boolean;

Begin

reset(f); window(2,18,Length(STR1)-1,22); textattr:=$0f; clrscr; gotoxy(11,3);Write('Пожалуйста,'); gotoxy(7,4);Write('введите информацию'); window(3,3,Length(STR1)-1,15); Repeat windows_enter(15,4,14,50,1,man,flag,l);

if not flag then begin seek(f,filesize(f)); write(f,Man);

if last2+filesize(f)-lastfile-1<=19 then

begin if filesize(f)=1 then textattr:=$1f else textattr:=$0b;

window(33,5,79,23);

gotoxy(1,last2+filesize(f)-lastfile-1);clreol;write(man.Record_Number);

gotoxy(12,last2+filesize(f)-lastfile-1);write(man.Record_Famile);

gotoxy(32,last2+filesize(f)-lastfile-1);write(man.Record_Special); end;

end; Until not l; close(f);

End;

Procedure Fill_Ramka2(n:integer);

var i,k:integer; Man:Record_Base;

Begin

reset(f); textattr:=$0b; window(33,5,79,23); clrscr; i:=1;

While (i<20) and (not eof(f)) do begin read(f,man); if i=n then begin

textattr:=$1f; gotoxy(1,n); clreol; end;

gotoxy(1,i);write(man.Record_Number);

gotoxy(12,i);write(man.Record_Famile);

gotoxy(32,i);write(man.Record_Special);

if i=n then textattr:=$0b; inc(i); end; window(1,1,80,25); close(f);

End;

Procedure ramka2_move(var x,l:integer);

var c:char; k:integer; man:Record_Base; flag,h:boolean;

f1:file of Record_Base;

Begin

window(2,18,Length(STR1)-1,23); textattr:=$0f;

clrscr; gotoxy(1,2); write(#24,' или ',#25,' - двигать курсор');

gotoxy(1,3); write('"del" - удалить запись');

gotoxy(1,4); write('"Enter"-редактировать запись');

gotoxy(1,5); if archiv then write('"Ins" - перенести в базу') else

write('"Ins" - перенести в архив'); if not ramka then Show_Ramka;

reset(f); seek(f,l); if filesize(f)>0 then

begin read(f,man); seek(f,l);

end; repeat textattr:=$0f; if filesize(f)>0 then

begin window(3,3,Length(STR1)-1,16);

With Man do begin

Gotoxy(Length(MENU2_S[1]),1);clreol;Write(Record_Number);

Gotoxy(Length(MENU2_S[2]),2);clreol;Write(Record_Famile);

Gotoxy(Length(MENU2_S[3]),3);clreol;Write(Record_Special);

Gotoxy(Length(MENU2_S[4]),4);clreol;Write(Record_Name);

Gotoxy(Length(MENU2_S[5]),5);clreol;Write(Record_Fathername);

Gotoxy(Length(MENU2_S[6]),6);clreol;Write(Record_Year);

end; end else ramka1(1);

window(33,5,79,23); c:=readkey;if ord(c)=0 then c:=readkey;

if ((ord(c)=72) and (filepos(f)>0)) or ((ord(c)=80) and (filepos(f)+1<filesize(f))) and (filesize(f)>0) then begin read(f,man);

seek(f,filepos(f)-1); textattr:=$0b;

gotoxy(1,x); clreol; gotoxy(1,x);write(man.Record_Number);

gotoxy(12,x);write(man.Record_Famile); gotoxy(32,x);write(man.Record_Special);

end; case ord(c) of

72 :if (filepos(f)>0) and (filesize(f)<>0) then

begin if x=1 then begin gotoxy(1,x); insline; end else dec(x);

seek(f,filepos(f)-1); read(f,man); seek(f,filepos(f)-1); end;

80 :if (filepos(f)+1<filesize(f)) and (filesize(f)<>0) then begin if x=19 then

begin gotoxy(1,1); delline; end else inc(x); seek(f,filepos(f)+1); read(f,man);

seek(f,filepos(f)-1); end; 83 : if filesize(f)<>0 then if windows(23,9,5,30,1,'Вы точно хотите удалить?') then

begin textattr:=$0b;

k:=filepos(f); delete(k); gotoxy(1,x); delline; if (k+19-x)<=filesize(f)-1 then

begin seek(f,k+19-x); read(f,man); seek(f,k); gotoxy(1,19);write(man.Record_Number);

gotoxy(12,19);write(man.Record_Famile); gotoxy(32,19);write(man.Record_Special);

end; if (k>filesize(f)-1) and (filesize(f)<>0) then

begin seek(f,k-1); dec(x); end else seek(f,k); if filesize(f)<>0 then

begin read(f,man); seek(f,filepos(f)-1); end;

k:=filepos(f); end;

82 : if filesize(f)<>0 then begin

if archiv then h:=windows(23,9,5,30,1,'Перенести в базу?')

else h:=windows(23,9,5,30,1,'Перенести в архив?');

if h then begin {$I-} assign(f1,ARCHIVNAME); reset(f1); if IOResult<>0 then rewrite(f1);

if IOResult<>0 then halt(1); seek(f1,filesize(f1));

write(f1,man); close(f1); {$I+} k:=filepos(f);

delete(k); gotoxy(1,x); delline; if (k+19-x)<=filesize(f)-1 then

begin seek(f,k+19-x); read(f,man); seek(f,k); gotoxy(1,19);write(man.Record_Number);

gotoxy(12,19);write(man.Record_Famile); gotoxy(32,19);write(man.Record_Special);

end; if (k>filesize(f)-1) and (filesize(f)<>0) then

begin seek(f,k-1); dec(x); end else seek(f,k); if filesize(f)<>0 then begin read(f,man); seek(f,filepos(f)-1); end; k:=filepos(f); end; end; 13 : begin windows_enter(15,4,14,50,3,man,flag,h); if not flag then

begin write(f,man); seek(f,filepos(f)-1); end else begin

read(f,man); seek(f,filepos(f)-1); end; end; end; if filesize(f)<>0 then

begin gotoxy(1,x); textattr:=$1f; clreol; gotoxy(1,x);write(man.Record_Number);

gotoxy(12,x);write(man.Record_Famile); gotoxy(32,x);write(man.Record_Special);

end; l:=filepos(f); until (ord(c)=9) or (ord(c)=27); seek(f,0); close(f); Hide_ramka;

window(2,18,Length(STR1)-1,23); textattr:=$1b; clrscr; window(1,1,80,25);

End;

Procedure About;

Begin

window(2,18,Length(STR1)-1,23); clrscr;

gotoxy(2,3); Write(' Сачевичик Алексей, АС-563 Январь 2012 ');

readkey; clrscr; window(1,1,80,25);

End;

Procedure Find;

var Number:array[1..1000] of word; man1,man2:Record_Base; i,max,x,k,s,p:word;d,flag,l :boolean;

Begin

window(2,18,Length(STR1)-1,23); textattr:=$0f; clrscr;

gotoxy(11,3);Write('Пожалуйста,'); gotoxy(7,4);Write('введите информацию');

textattr:=$0f; windows_enter(15,4,14,50,2,man1,flag,l);

reset(f); i:=0;if not flag thenbegin window(33,5,79,23);

clrscr; while not eof(f) do begin read(f,Man2);

d:=(Man1.Record_Number=copy(Man2.Record_Number,1,length(Man1.Record_Number))) or (Man1.Record_Number='');

d:=d and ((Man1.Record_Famile=copy(Man2.Record_Famile,1,length(Man1.Record_Famile))) or (Man1.Record_Famile=''));

d:=d and ((Man1.Record_Special=copy(Man2.Record_Special,1,length(man1.Record_Special))) or (Man1.Record_Special=''));

d:=d and ((Man1.Record_Name=copy(Man2.Record_Name,1,length(man1.Record_Name))) or (Man1.Record_Name=''));

d:=d and ((Man1.Record_Fathername=copy(Man2.Record_Fathername,1,length(man1.Record_Fathername)))

or (Man1.Record_Fathername=''));

d:=d and ((Man1.Record_Year=copy(Man2.Record_Year,1,length(man1.Record_Year))) or (Man1.Record_Year='')); if d then begin

if i=0 then textattr:=$1f else textattr:=$0b; if i<=18 then

begin gotoxy(1,i+1);clreol; gotoxy(1,i+1);write(man2.Record_Number);

gotoxy(12,i+1);write(man2.Record_Famile); gotoxy(32,i+1);write(man2.Record_Special);

end; inc(i); Number[i]:=filepos(f)-1; end; end;if i>0 then begin if not ramka then show_ramka; max:=i; i:=1; x:=1; if max<>0 then begin seek(f,Number[1]);

read(f,man1); seek(f,Number[1]); end; window(2,18,Length(STR1)-1,23); textattr:=$0f;

clrscr; gotoxy(1,2); write(#24,' или ',#25,' - двигать курсор');

gotoxy(1,3); write('"del" - удалить запись'); gotoxy(1,4);

write('"Enter"-редактировать запись'); gotoxy(1,5); if archiv then

write('"Ins" - перенести в базу') else write('"Ins" - перенести в архив');

repeat textattr:=$0f; if max<>0 then begin window(3,3,Length(STR1)-1,16);

With Man do begin

Gotoxy(Length(MENU2_S[1]),1);clreol;Write(Man1.Record_Number);

Gotoxy(Length(MENU2_S[2]),2);clreol;Write(Man1.Record_Famile);

Gotoxy(Length(MENU2_S[3]),3);clreol;Write(Man1.Record_Special);

Gotoxy(Length(MENU2_S[4]),4);clreol;Write(Man1.Record_Name);

Gotoxy(Length(MENU2_S[5]),5);clreol;Write(Man1.Record_Fathername);

Gotoxy(Length(MENU2_S[6]),6);clreol;Write(Man1.Record_Year);

clrscr;ramka1(1);window(33,5,79,23); end; c:=readkey;if ord(c)=0 then c:=readkey; if ((ord(c)=72) and (i>1)) or ((ord(c)=80) and (i<max)) and (max>0) then

begin textattr:=$0b; gotoxy(1,x); clreol; seek(f,Number[i]); read(f,man1);

gotoxy(1,x);write(man1.Record_Number); gotoxy(12,x);write(man1.Record_Famile);

gotoxy(32,x);write(man1.Record_Special); end; case ord(c) of 72:if (i>1) and (max<>0) then

begin if x=1 then begin gotoxy(1,x); insline; end else dec(x);

dec(i); end; 80 :if (i<max) and (max<>0) then begin

if x=19 then begin gotoxy(1,1); delline; end else inc(x); inc(i); end;

82 :

if filesize(f)<>0 then begin if archiv then l:=windows(23,9,5,30,1,'Перенести в базу?')

else l:=windows(23,9,5,30,1,'Перенести в архив?'); if l then

begin {$I-} assign(f1,ARCHIVNAME); reset(f1); if IOResult<>0 then rewrite(f1);

if IOResult<>0 then halt(1); seek(f1,filesize(f1)); write(f1,man1);

close(f1); {$I+} textattr:=$0b; delete(Number[i]); for k:=1 to max do

if k>=i then if k+1<=max then Number[k]:=Number[k+1]-1; dec(max);

gotoxy(1,x); delline; if (19-x+i)<=max then begin


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.