Информационно-справочная система "Обработка результатов сдачи сессии"
Основные свойства информационно-справочной системы для обработки результатов сдачи сессии, ее функциональное назначение и логическая структура. Выбор языка и среды программирования. Описание алгоритмов сортировки и поиска, входных и выходных данных.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 23.01.2014 |
Размер файла | 742,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Аннотация
В данном документе излагается постановка задачи и общее описание информационно-справочной системы обработки результатов сдачи сессии. Приводится функциональное назначение этого программного средства, описание его логической структуры. Рассмотрены свойства информационно-справочной системы.
Документ содержит описание входных и выходных данных и может быть использован в качестве инструкции по применению рассматриваемого программного средства.
Программа написана на языке программирования Object Pascal в среде "Delphi 6.0".
Содержание
- Введение
- 1. Анализ предметной области и постановка задачи
- 1.1 Описание предметной области
- 1.2 Постановка задачи
- 2. Разработка структуры данных
- 3. Описание логической структуры
- 3.1 Обоснование выбора программных средств
- 3.2 Описание используемых методов и обоснование принятых решений
- 3.3 Описание алгоритма сортировки
- 3.4 Описание алгоритма поиска
- 4. Экспериментальная часть
- 5. Описание входных данных
- 6. Описание выходных данных
- Заключение
- Список использованных источников
- Приложение
Введение
Компьютер быстро вошел в нашу жизнь. Еще несколько лет назад было редкостью увидеть какой-нибудь персональный компьютер - они были, но были очень дорогие, и даже не каждая фирма могла иметь у себя в офисе компьютер. Теперь в каждом втором доме есть компьютер, который уже глубоко вошел в жизнь человека.
Каждый день люди используют компьютеры для различных целей. Компьютеры становятся всё более доступными, кроме того, они продолжают становиться более мощными в процессе обработки информации и более простыми в использовании.
Для решения различного рода задач на компьютере применяются различные классы программ. Так, для обработки текстов используются текстовые редакторы, для обработки изображений - графические редакторы, для хранения и обработки справочной информации, используются специализированные базы данных - компьютерные справочные системы.
Справочная система предназначена для получения пользователем максимально точной информации по интересующей его теме. Обычно выбор статьи происходит по иерархии разделов справки. Справочные системы часто комбинируются с поисковыми.
Именно справочные системы решают все поставленные задачи по обеспечению потребителей нормативной информацией. Справочные системы имеют целый ряд уникальных достоинств и возможностей.
В первую очередь это:
возможность компактно хранить большие объемы информации;
возможность структурировано отображать хранимую информацию;
возможность быстрого поиска нужных документов или даже их фрагментов в огромных массивах данных.
язык программирование справочная система
Программное обеспечение разработанной информационно-справочной системы позволяет не только комплексно хранить тексты и все эти разные по свойствам "объекты", но и связывать их друг с другом.
Информационно-справочная система "Обработка результатов сдачи сессии" предназначена для поиска информации о студентах. Поиск осуществляется на основе запроса составляемого пользователем. Результатом поиска является список студентов, удовлетворяющих запросу, с подробной и достоверной информацией о каждом из них.
Разработанная система позволяет пользователям экономить время по сравнению с обычным поиском в ведомостях.
1. Анализ предметной области и постановка задачи
1.1 Описание предметной области
Справочная система результатов сдачи сессии может быть составлена для контроля успеваемости студентов и статистики их среднего балла.
Ранее для систематизации этих данных использовались ведомости. Они представляли собой документацию большого объема, часть которой могла быть утеряна. Работа с ведомостями подразумевала однозначную постановку задачи, так как на поиск даже по точной информации о студенте уходила не одна минута. Если же предстояло найти средний бал студента, информация о котором была не полная, то такой поиск нередко заканчивался неудачей. Отсутствие возможности оперативного изменения информации о студенте, является неоспоримым минусом ведомости.
При использовании электронной справочной системы обработки результатов сдачи сессии поиск осуществляет машина, и, следовательно, результат поиска будет найден в кратчайшие сроки. Тем более, если информация об интересующем нас студенте неполная, то не составит труда перебрать все возможные варианты этой информации с необходимыми корректировками. Например, такая ситуация возникает когда вы не уверены какую конкретную оценку получил студент по определенному предмету. Это займет минимум времени по сравнению с поиском в ведомости. Еще одним плюсом электронной справочной системы является то, что она способна оперативно реагировать на изменение любой информации о студенте - начиная со смены фамилии и заканчивая признаком участия или неучастия в научно-исследовательской работе. Это связано с тем, что все данные о студентах хранятся на цифровых носителях.
1.2 Постановка задачи
Требуется разработать информационно-справочную систему, способную обрабатывать данные о студентах, а также вносить корректировки. Эта система должна содержать следующую информацию:
фамилия студента;
его порядковый номер по журналу;
результаты сдачи сессии;
признак участия или неучастия в научно-исследовательской работе.
Эта информация должна храниться на носителе в виде файлов, чтобы пользователь не вводил ранее введенные данные, а также имел возможность заново создавать, редактировать существующую или удалять информацию, не представляющую интерес.
Система должна:
1) обладать возможностью просмотра хранящейся информации о студентах.
Информация о студентах должна выводиться в таблицу, которая должна содержать поля:
для вывода фамилии студента;
для вывода его порядкового номера по журналу;
для вывода результатов сдачи сессии;
для вывода признака участия в НИР;
2) обладать возможностью сортировать данные о студентах по различным столбцам. Сортировка может быть выполнена сразу, а можно производить по шагам. Сортировка необходима:
для отображения информации в более удобном виде;
для реализации поиска в информационно-справочной системе.
3) предоставлять пользователю возможность оперативного поиска абонентов по результатам сдачи сессии. Результат поиска должен выводиться в отдельную таблицу, содержащую поля:
идентификатор;
фамилия.
Поиск осуществляется по следующим критериям:
отличники;
хорошисты;
имеют тройки;
имеют двойки.
4) обладать возможностью добавления, редактирования и удаления хранящейся информации;
5) предоставлять пользователю возможность корректировать ранее введенные данные;
6) обладать удобным и понятным интерфейсом;
7) реагировать на действия пользователя с задержкой не более 1 секунды.
2. Разработка структуры данных
В соответствии с поставленной задачей вся информация, которую предоставляет данная система, может храниться в виде трех файлов, а именно:
1) файл, содержащий информацию о студентах.
При открытии таблицы "Студенты" не требуется вводить данные вручную. Необходимо нажать Файл, Загрузить данные и в таблице появится информация о студентах, а именно: его идентификатор, фамилия, номер по журналу, участие в НИР.
2) файл, содержащий информацию о результатах.
При открытии таблицы "Результаты" мы также можем загрузить данные из файла. Тогда в таблице будет представлена следующая информация: идентификатор, предмет, процент сдачи.
3) файл, содержащий информацию об оценках.
Принцип заполнения таблицы "Оценки" будет аналогичным. Информация, которая содержится в ней, будет следующей: идентификатор записи, идентификатор студента, идентификатор предмета, оценка.
Поле "Идентификатор студента" обеспечивает связь между файлами. Количество записей в файлах ограничено максимальным значением типа Integer, именно поэтому поле "Идентификатор студента" выбран типа Integer. Это означает, что для обеспечения однозначной связи между файлами не потребуется код, выходящий за пределы типа Integer.
Для хранения информации о фамилии студента подойдет строка длиной в двадцать символов (в соответствии с вариантом задания информация об имени и отчестве студента нас не интересует), так как эта длина позволяет уместить информацию о фамилии с наибольшей экономией памяти [1].
Так как порядковый номер студента по журналу - целое число, которое не превышает максимальное значение типа Integer [1], то в разрабатываемой системе поле "Порядковый номер по журналу" выбирается типа Integer.
Определение признака участия студента в НИР подразумевает два исхода: ложь, истина. Поэтому поле для признака участия выбрано типа Boolean.
Структура записи данных о студентах приведена в таблице 1.
Таблица 1 - Структура записи данных о студентах.
Наименование поля |
Наименование сокращенное |
Тип |
Длина |
|
Идентификатор Студента |
ID |
Integer |
4 |
|
Фамилия студента |
FSTU |
String |
20 |
|
Порядковый номер по журналу |
NUMBER |
Integer |
4 |
|
Признак участия в НИР |
YCHASTIE |
Boolean |
1 |
Поле "Идентификатор предмета" обеспечивает связь между файлами. Количество записей в файлах ограничено максимальным значением типа Integer, именно поэтому поле "Идентификатор предмета" выбран типа Integer. Это означает, что для обеспечения однозначной связи между файлами не потребуется код, выходящий за пределы типа Integer.
Для хранения информации о наименовании предмета подойдет строка длиной в двадцать символов, так как эта длина позволяет уместить информацию о наименовании с наибольшей экономией памяти.
Для хранения информации о проценте сдачи выберем строку длиной в 3 символа, так как эта длина позволяет уместить информацию о наименовании с наибольшей экономией памяти (процент сдачи находится в пределе от 1 до 100 + символ (%)).
Структура записи данных о результатах приведена в таблице 2.
Таблица 2 - Структура записи данных о результатах.
Наименование поля |
Наименование сокращенное |
Тип |
Длина |
|
Идентификатор предмета |
ID |
Integer |
4 |
|
Предмет |
NAME |
String |
20 |
|
Процент сдачи |
RESULT |
Integer |
3 |
Поле "Идентификатор записи" обеспечивает связь между файлами. Количество записей в файлах ограничено максимальным значением типа Integer, именно поэтому поле "Идентификатор записи" выбран типа Integer. Это означает, что для обеспечения однозначной связи между файлами не потребуется код, выходящий за пределы типа Integer. Для хранения информации об идентификаторе предмета, идентификаторе студента и оценке также используем тип Integer. Структура записи данных об оценках приведена в таблице 3.
Таблица 3 - Структура записи данных об оценках.
Наименование поля |
Наименование сокращенное |
Тип |
Длина |
|
Идентификатор записи |
ID |
Integer |
4 |
|
Идентификатор студента |
StudentID |
Integer |
4 |
|
Идентификатор предмета |
ResultsID |
Integer |
4 |
|
Оценки |
Mark |
Integer |
2 |
Каждый файл содержит в себе определенную информацию. Для информационно-справочных систем характерно то, что вся информация в ней взаимосвязана. Система, разработанная в данной работе, не является исключением. Структура связей между файлами, представлена на рисунке 1.
Рисунок 1 - Структура связей между файлами.
3. Описание логической структуры
3.1 Обоснование выбора программных средств
При решении поставленной задачи оптимально использовать для представления информационных материалов язык Delphi, который является языком высокого уровня и позволяет быстро и эффективно создавать приложения.
Для реализации "такой-то программы" была выбрана система программирования Delphi версии 6.
Delphi - это продукт Borland International для быстрого создания приложений. Высокопроизводительный инструмент визуального построения приложений включает в себя настоящий компилятор кода и предоставляет средства визуального программирования, несколько похожие на те, что можно обнаружить в других инструментах визуального проектирования. В основе Delphi лежит язык Object Pascal, который является расширением объектно-ориентированного языка Pascal. В Delphi также входят локальный SQL-сервер, генераторы отчетов, библиотеки визуальных компонентов, и прочее.
Прежде всего Delphi предназначен для профессиональных разработчиков, желающих очень быстро разрабатывать приложения в архитектуре клиент-сервер. Delphi производит небольшие по размерам (до 15-30 Кбайт) высокоэффективные исполняемые модули (. exe и. dll). С другой стороны небольшие по размерам и быстро исполняемые модули означают, что требования к клиентским рабочим местам существенно снижаются - это имеет немаловажное значение и для конечных пользователей.
Преимущества Delphi по сравнению с аналогичными программными продуктами.
быстрота разработки приложения;
высокая производительность разработанного приложения;
низкие требования разработанного приложения к ресурсам
компьютера;
наращиваемость за счет встраивания новых компонент и
инструментов в среду Delphi;
возможность разработки новых компонент и инструментов собственными средствами Delphi (существующие компоненты и инструменты доступны в исходных кодах);
удачная проработка иерархии объектов.
Система программирования Delphi рассчитана на программирование различных приложений и предоставляет большое количество компонентов для этого [2].
К тому же работодателей интересует, прежде всего, скорость и качество создания программ, а эти характеристики может обеспечить только среда визуального проектирования, способная взять на себя значительные объемы рутинной работы по подготовке приложений, а также согласовать деятельность группы постановщиков, кодировщиков, тестеров и технических писателей. Возможности Delphi полностью отвечают подобным требованиям и подходят для создания систем любой сложности.
3.2 Описание используемых методов и обоснование принятых решений
При разработке данной системы использовалась стратегия структурного программирования "сверху вниз". Это модульное пошаговое нисходящее проектирование алгоритма и структур данных. Оно включает в себя составляющие:
1. Нисходящая разработка.
Это подход к разработке программного обеспечения, при котором оно разбивается на программные модули, образующие многоуровневую структуру. Каждый модуль - это короткая программа, решающая отдельную задачу. В процессе разработки модули нижележащих уровней заменяются заглушками. Таким образом, в любой момент разработки есть действующий вариант программного обеспечения [3].
Основной принцип нисходящей разработки заключен в следующем: сначала проектируют модуль основной программы, далее подпрограммы, вызываемые основным модулем, далее подпрограммы, вызываемые этими подпрограммами и т.д., двигаясь от блоков высшего уровня к блокам низшего [3].
2. Структурное программирование.
Этот метод программирования, предусматривающий создание понятных и простых программных модулей на требуемом языке.
3.3 Описание алгоритма сортировки
Для того, чтобы осуществлялся поиск, необходимо выполнить сортировку. Используемый метод сортировки - просеивание.
Метод просеивания работает до тех пор, пока не надо выполнять перестановку. Сравниваемая запись с меньшим ключом перемещается насколько это возможно к началу списка. Если ее ключ меньше, чем у предшественника, то выполняется обмен и начинается очередное сравнение.
Рассмотрим этот метод на примере. Осуществим сортировку студентов по столбцу Идентификатор. Имеем следующие данные: 1221 2212 3434 3245 5657 6565 2235 6576 8756 2345
Первоначально сравниваются 1-й и 2-й элементы. Их порядок правильный, поэтому они не меняются местами.
Затем сравниваются 2-й и 3-й элементы. Их порядок правильный, ничего не происходит.
Далее 3-й элемент сравнивается с 4-м. Их порядок неправильный, происходит перестановка. Данные будут иметь вид: 1221 2212 3245 3434 5657 6565 2235 6576 8756 2345
Теперь необходимо сравнить 3-й элемент сначала со 2-м, потом с 1-м. В данном примере их порядок правильный, поэтому перестановок не будет. Если порядок неправильный, происходит перестановка.
По такому же принципу происходит сортировка остальных элементов. В итоге получим желаемый результат: 1221 2212 2235 2345 3245 3434 5657 6565 6576 8756
Для ускорения работы алгоритма при каждом возврате регистрируется факт наличия или отсутствия обмена. Возврат, в результате которого не было произведено ни одного обмена, заканчивает просмотр [4]. Структурограмма алгоритма сортировки представлена на рисунке 2.
Рисунок 2 - Просеивание ("челночная" сортировка).
Сортировка осуществляется после добавления новой записи в файл или после редактирования существующей.
3.4 Описание алгоритма поиска
При выборе действия добавления записи открывается окно для ввода информации. После того как пользователь заполнит все необходимые поля, в файл будет внесена новая запись.
Бинарный (двоичный, дихотомический, половинного деления) поиск относится к наиболее эффективным методам поиска в упорядоченной последовательности записей. Идея этого метода состоит в том, чтобы искать ключ А в интервале, крайними точками которого являются два указателя - Q и P, соответствующие нижней и верхней границам поиска. Вначале А сравнивается со средним ключом в последовательности. Результат сравнения позволит определить, в какой половине последовательности продолжить поиск, применив к ней ту же процедуру, и т.д. После определенного числа сравнений либо ключ будет найден, либо будет установлено его отсутствие [4]. Структурограмма алгоритм бинарного поиска представлена на рисунке 3.
Рисунок 3 - Бинарный поиск.
4. Экспериментальная часть
При запуске программы перед пользователем открывается основное окно программы (рисунок 4). Для того чтобы найти интересующую информацию о студентах, необходимо щелкнуть мышью по соответствующей вкладке. Содержимое этих вкладок представлено на рисунках 5 и 6.
При нажатии на кнопку "Добавить" перед пользователем откроется окно с пустыми полями, которые необходимо заполнить (рисунок 7).
При нажатии на кнопку "Изменить" откроется окно "Изменение данных". В нем пользователь может редактировать необходимую информацию (рисунок 8).
Для того, чтобы удалить некоторую информацию о студенте, необходимо навести курсор на соответствующую строку и нажать кнопку "Удалить". При этом программа выдаст запрос на подтверждение действия (рисунок 9).
Рисунок 4 - Основное окно программы.
Рисунок 5 - Таблица "Результаты".
Рисунок 6 - Таблица "Оценки".
Рисунок 7 - Окно "Добавление данных".
Рисунок 8 - Изменение данных.
Рисунок 9 - Запрос на подтверждение удаления.
5. Описание входных данных
Разработанная программа предусматривает следующие режимы запуска:
· Запуск программы в первый раз. В этом режиме используемые для хранения информации файлы создадутся и будут пустыми.
· Последующие запуски. В этом режиме к входным данным относятся файлы абонентов, городов и улиц.
Файл студентов состоит из записей, которые включают в себя следующие поля: идентификатор студента, фамилия студента, номер по журналу, участие в НИР. Файл результатов является совокупностью записей, которые состоят из следующих полей: идентификатор, предмет, процент сдачи. Запись в файле оценок состоит из следующих полей: идентификатор записи, идентификатор студента, идентификатор предмета, оценка.
К входным данным относится аргумент поиска, передаваемый в процедуру поиска. В конкретном примере это оценка.
6. Описание выходных данных
Для данного программного продукта выходными данными является таблица с информацией о фамилии студента и его идентификаторе.
Выходные данные могут быть сгруппированы по следующим критериям:
отличники;
хорошисты;
имеют тройки;
имеют двойки.
Заключение
В данной работе была разработана информационно-справочная системы обработки результатов сдачи сессии. В данной системе реализованы возможности:
добавление записи;
редактирование записи;
удаление записи;
сортировка данных по различным столбцам;
поиск информации по оценкам.
Программа имеет простой и удобный интерфейс. Для использования разработанной системы не требуется специальная подготовка.
Возможно усовершенствование разработанной информационно-справочной системы.
Список использованных источников
1. Фаронов В.В. Система программирования в DELPHI. СПб.: БХВ-Петербург, 2004.888 c.
2. Милов А.В. Основы программирования в задачах и примерах: Учебный курс. Харьков: Фолио, 2003.397 c.
3. Белов В.В., Чистякова В.И. Программирование в Delphi: Учебное пособие для вузов. М.: Горячая линия - Телеком, 2009.240с.
4. Маркин А.В. Технология программирования: Методические указания к лабораторным работам / Рязан. гос. радиотехн. акад. Рязань, 2005.48 c.
Приложение
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Menus, Grids, TabNotBk, XPMan, ExtCtrls;
type
TType = (TypeString, TypeInteger);
TStringGridX = class (TStringGrid)
public
procedure MoveRow (FromIndex, ToIndex: Longint);
end;
TStudent = record
ID: integer;
FSTU: string [20];
NUMBER: integer;
YCHASTIE: boolean;
end;
TResults= record
ID: integer;
NAME: string [20];
RESULT: string [3];
end;
TMark = record
ID: integer;
StudentID: integer;
ResultsID: integer;
Mark: integer;
end;
TForm1 = class (TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Panel1: TPanel;
GroupBox1: TGroupBox;
Button15: TButton;
Button14: TButton;
Button1: TButton;
RadioGroup1: TRadioGroup;
TabbedNotebook1: TTabbedNotebook;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
GroupBox2: TGroupBox;
Button3: TButton;
Button2: TButton;
StringGrid4: TStringGrid;
RadioGroup2: TRadioGroup;
GroupBox3: TGroupBox;
Button4: TButton;
XPManifest1: TXPManifest;
procedure Button4Click (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure FormCreate (Sender: TObject);
procedure N2Click (Sender: TObject);
procedure N5Click (Sender: TObject);
procedure Button15Click (Sender: TObject);
procedure Button14Click (Sender: TObject);
procedure Button1Click (Sender: TObject);
procedure StringGrid1MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StringGrid2MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StringGrid3MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button3Click (Sender: TObject);
procedure StringGrid4MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button2Click (Sender: TObject);
private
function BinaryFind (aStart: integer; aVal: string; aCol: integer;
Tabl: TStringGrid): integer;
procedure SortDelayString (tabl: TStringGrid; aCol: integer; SorType: TType);
{ Private declarations }
public
procedure SortString (tabl: TStringGrid; aCol: integer; SorType: TType);
end;
var
Form1: TForm1;
StudentFile: file of TStudent;
ResultsFile: file of TResults;
MarksFile: file of TMark;
cIndex: integer = 1;
cCount: integer = 0;
FindCount: integer = 0;
implementation
uses
Unit6;
{$R *. dfm}
procedure TStringGridX. MoveRow (FromIndex, ToIndex: Integer);
begin
inherited;
end;
procedure TForm1. Button14Click (Sender: TObject);
var
RowIndex: integer;
begin
Form6. Caption: = 'Изменение данных';
case TabbedNotebook1. PageIndex of
0: begin
RowIndex: = StringGrid1. Row;
with form6 do
begin
LabeledEdit1. EditLabel. Caption: = 'Идентификатор';
LabeledEdit2. EditLabel. Caption: = 'Фамилия';
LabeledEdit3. EditLabel. Caption: = 'Номер по журналу';
LabeledEdit4. EditLabel. Caption: = 'Участие в НИР';
LabeledEdit1. Text: = StringGrid1. Cells [0, RowIndex];
LabeledEdit2. Text: = StringGrid1. Cells [1, RowIndex];
LabeledEdit3. Text: = StringGrid1. Cells [2, RowIndex];
LabeledEdit4. Text: = StringGrid1. Cells [3, RowIndex];
LabeledEdit4. Visible: = true;
if Form6. ShowModal = mrOk then
with StringGrid1, Form6 do
begin
Cells [0, RowIndex]: = LabeledEdit1. Text;
Cells [1, RowIndex]: = LabeledEdit2. Text;
Cells [2, RowIndex]: = LabeledEdit3. Text;
Cells [3, RowIndex]: = LabeledEdit4. Text;
end;
end;
end;
1: begin
RowIndex: = StringGrid2. Row;
with form6 do
begin
LabeledEdit1. EditLabel. Caption: = 'Идентификатор';
LabeledEdit2. EditLabel. Caption: = 'Предмет';
LabeledEdit3. EditLabel. Caption: = 'Процент сдачи';
LabeledEdit4. Visible: = false;
LabeledEdit1. Text: = StringGrid2. Cells [0, RowIndex];
LabeledEdit2. Text: = StringGrid2. Cells [1, RowIndex];
LabeledEdit3. Text: = StringGrid2. Cells [2, RowIndex];
LabeledEdit4. Visible: = false;
end;
if Form6. ShowModal = mrOk then
with StringGrid2, Form6 do
begin
Cells [0, RowIndex]: = LabeledEdit1. Text;
Cells [1, RowIndex]: = LabeledEdit2. Text;
Cells [2, RowIndex]: = LabeledEdit3. Text;
end;
end;
2: begin
RowIndex: = StringGrid3. Row;
with form6 do
begin
LabeledEdit1. EditLabel. Caption: = 'Идентификатор записи';
LabeledEdit2. EditLabel. Caption: = 'Идентификатор студента';
LabeledEdit3. EditLabel. Caption: = 'Идентификатор предмета';
LabeledEdit4. EditLabel. Caption: = 'Оценка';
LabeledEdit4. Visible: = true;
LabeledEdit1. Text: = StringGrid3. Cells [0, RowIndex];
LabeledEdit2. Text: = StringGrid3. Cells [1, RowIndex];
LabeledEdit3. Text: = StringGrid3. Cells [2, RowIndex];
LabeledEdit4. Text: = StringGrid3. Cells [3, RowIndex];
end;
if Form6. ShowModal = mrOk then
with StringGrid3, Form6 do
begin
Cells [0, RowIndex]: = LabeledEdit1. Text;
Cells [1, RowIndex]: = LabeledEdit2. Text;
Cells [2, RowIndex]: = LabeledEdit3. Text;
Cells [3, RowIndex]: = LabeledEdit4. Text;
end;
end;
end;
end;
procedure TForm1. Button15Click (Sender: TObject);
var
i, j: integer;
begin
Form6. Caption: = 'Добавление данных';
Form6. LabeledEdit1. Text: = '';
Form6. LabeledEdit2. Text: = '';
Form6. LabeledEdit3. Text: = '';
Form6. LabeledEdit4. Text: = '';
case TabbedNotebook1. PageIndex of
0: begin
with form6 do
begin
LabeledEdit1. EditLabel. Caption: = 'Идентификатор';
LabeledEdit2. EditLabel. Caption: = 'Фамилия';
LabeledEdit3. EditLabel. Caption: = 'Номер по журналу';
LabeledEdit4. EditLabel. Caption: = 'Участие в НИР';
LabeledEdit4. Visible: = true;
end;
i: = 0;
while StringGrid1. Cells [0, i] <> '' do
begin
inc (i);
if i > StringGrid1. RowCount then
begin
StringGrid1. RowCount: = StringGrid1. RowCount + 1;
i: = StringGrid1. RowCount;
break;
end;
end;
if Form6. ShowModal = mrOk then
with StringGrid1, Form6 do
begin
Cells [0, i]: = LabeledEdit1. Text;
Cells [1, i]: = LabeledEdit2. Text;
Cells [2, i]: = LabeledEdit3. Text;
Cells [3, i]: = LabeledEdit4. Text;
end;
end;
1: begin
form6. LabeledEdit1. EditLabel. Caption: = 'Идентификатор';
form6. LabeledEdit2. EditLabel. Caption: = 'Предмет';
form6. LabeledEdit3. EditLabel. Caption: = 'Процент сдачи';
form6. LabeledEdit4. Visible: = false;
i: = 0;
while StringGrid2. Cells [0, i] <> '' do
begin
inc (i);
if i > StringGrid2. RowCount then
begin
StringGrid2. RowCount: = StringGrid2. RowCount + 1;
i: = StringGrid2. RowCount;
break;
end;
end;
if Form6. ShowModal = mrOk then
with StringGrid2, Form6 do
begin
Cells [0, i]: = LabeledEdit1. Text;
Cells [1, i]: = LabeledEdit2. Text;
Cells [2, i]: = LabeledEdit3. Text;
end;
end;
2: begin
form6. LabeledEdit1. EditLabel. Caption: = 'Идентификатор записи';
form6. LabeledEdit2. EditLabel. Caption: = 'Идентификатор студента';
form6. LabeledEdit3. EditLabel. Caption: = 'Идентификатор предмета';
form6. LabeledEdit4. EditLabel. Caption: = 'Оценка';
form6. LabeledEdit4. Visible: = true;
i: = 0;
while StringGrid3. Cells [0, i] <> '' do
begin
inc (i);
if i > StringGrid3. RowCount then
begin
StringGrid3. RowCount: = StringGrid3. RowCount + 1;
i: = StringGrid3. RowCount;
break;
end;
end;
if Form6. ShowModal = mrOk then
with StringGrid3, Form6 do
begin
Cells [0, i]: = LabeledEdit1. Text;
Cells [1, i]: = LabeledEdit2. Text;
Cells [2, i]: = LabeledEdit3. Text;
Cells [3, i]: = LabeledEdit4. Text;
end;
end;
end;
end;
procedure GridDeleteRow (RowNumber: Integer; Grid: TstringGrid);
var
i: Integer;
begin
Grid. Row: = RowNumber;
if (Grid. Row = Grid. RowCount - 1) then
{ On the last row}
Grid. RowCount: = Grid. RowCount - 1
else
begin
{ Not the last row}
for i: = RowNumber to Grid. RowCount - 1 do
Grid. Rows [i]: = Grid. Rows [i + 1];
Grid. RowCount: = Grid. RowCount - 1;
end;
end;
procedure TForm1. Button1Click (Sender: TObject);
var
a: TStrings;
b: array of TStrings;
i, j: integer;
flag: boolean;
begin
flag: = false;
case TabbedNotebook1. PageIndex of
0: if StringGrid1. Cells [0, 1] = '' then
flag: = true;
1: if StringGrid2. Cells [0, 1] = '' then
flag: = true;
2: if StringGrid3. Cells [0, 1] = '' then
flag: = true;
end;
if flag then
MessageDlg ('Все записи удалены', mtInformation, [mbOk], 0)
else
if (MessageDlg ('Удалить запись? ', mtConfirmation, [mbOk, mbCancel], 0) = mrOk) then
case TabbedNotebook1. PageIndex of
0: GridDeleteRow (StringGrid1. Row, StringGrid1);
1: GridDeleteRow (StringGrid2. Row, StringGrid3);
2: GridDeleteRow (StringGrid3. Row, StringGrid3);
end;
end;
procedure TForm1. SortDelayString;
var
j, n, i: integer;
flag: integer;
res: boolean;
count: integer;
buf: array [1.50] of string;
begin
// FindCount: = 0;
try
n: = 0;
for I: = 1 to tabl. RowCount do
if Tabl. Cells [aCol, i] <> '' then
inc (n);
cCount: = n;
// for j: = 1 to n - 1 do
j: = cIndex;
begin
i: = j;
repeat
flag: = 0;
case SorType of
TypeString: res: = (Tabl. Cells [aCol, i] > Tabl. Cells [aCol, i + 1]);
TypeInteger: res: = (strtoint (Tabl. Cells [aCol, i]) > strtoint (Tabl. Cells [aCol, i + 1]));
end;
if res then
begin
TStringGridX (Tabl). MoveRow (i, i+1);
flag: = 1;
dec (i);
inc (FindCount, 1);
end;
until (flag = 0) or (i = 0);
end;
except
MessageDlg ('Неверные данные! ', mtWarning, [mbOk], 0);
end;
inc (cIndex);
if cIndex > cCount - 1 then
begin
cIndex: = 1;
if FindCount > 0 then
MessageDlg ('Сортировка закончена! Шагов: ' + inttostr (FindCount), mtWarning, [mbOk], 0);
end;
end;
procedure TForm1. Button2Click (Sender: TObject);
var
ARow: integer;
begin
ARow: = RadioGroup1. ItemIndex;
case TabbedNotebook1. PageIndex of
0: begin
if ARow in [1, 3] then
SortDelayString (StringGrid1, aRow, TypeString);
if Arow in [0, 2] then
SortDelayString (StringGrid1, aRow, TypeInteger);
end;
1: begin
if Arow = 1 then
SortDelayString (StringGrid2, aRow, TypeString);
if Arow in [0, 2] then
SortDelayString (StringGrid2, aRow, TypeInteger);
end;
2: begin
SortDelayString (StringGrid3, aRow, TypeInteger);
end;
3: begin
if (ARow = 0) then
SortDelayString (StringGrid4, aRow, TypeInteger);
if (ARow = 1) then
SortDelayString (StringGrid4, aRow, TypeString);
end;
end;
end;
procedure TForm1. Button3Click (Sender: TObject);
var
ARow: integer;
begin
ARow: = RadioGroup1. ItemIndex;
case TabbedNotebook1. PageIndex of
0: begin
if ARow in [1, 3] then
SortString (StringGrid1, aRow, TypeString);
if Arow in [0, 2] then
SortString (StringGrid1, aRow, TypeInteger);
end;
1: begin
if Arow = 1 then
SortString (StringGrid2, aRow, TypeString);
if Arow in [0, 2] then
SortString (StringGrid2, aRow, TypeInteger);
end;
2: begin
SortString (StringGrid3, aRow, TypeInteger);
end;
3: begin
if (ARow = 0) then
SortString (StringGrid3, aRow, TypeInteger);
if (ARow = 1) then
SortString (StringGrid3, aRow, TypeString);
end;
end;
end;
procedure TForm1. Button4Click (Sender: TObject);
var
s: string;
r, k, old, cnt, i: integer;
stId: string;
begin
for i: = 1 to stringgrid4. rowcount do
StringGrid4. Rows [i]. Clear;
// StringGrid4. Cells [0, 1]: = '';
// StringGrid4. Cells [1, 1]: = '';
r: = 0;
k: = 0;
old: = 0;
s: = IntToStr (5 - RadioGroup2. ItemIndex);
cnt: = 1;
while r >= 0 do
begin
r: = BinaryFind (k, s, 3, StringGrid3);
k: = r;
if r >= 0 then
begin
stId: = StringGrid3. Cells [1, r];
StringGrid4. Rows [cnt]. Add (stId);
r: = BinaryFind (1, stId, 0, StringGrid1);
if r >= 0 then
StringGrid4. Rows [cnt]. Append (StringGrid1. Cells [1, r])
else
StringGrid4. Rows [cnt]. Append ('Фамилия отсутствует');
inc (cnt, 1);
r: = 0;
end;
end;
end;
procedure TForm1. FormCreate (Sender: TObject);
begin
with StringGrid1 do
begin
Cells [0, 0]: = 'Идентификатор';
Cells [1, 0]: = 'Фамилия';
Cells [2, 0]: = 'Номер по журналу';
Cells [3, 0]: = 'Участие в НИР';
end;
with StringGrid2 do
begin
Cells [0, 0]: = 'Идентификатор';
Cells [1, 0]: = 'Предмет';
Cells [2, 0]: = 'Процент сдачи';
end;
with StringGrid3 do
begin
Cells [0, 0]: = 'Идентификатор записи';
Cells [1, 0]: = 'Идентификатор студента';
Cells [2, 0]: = 'Идентификатор предмета';
Cells [3, 0]: = 'Оценка';
end;
with StringGrid4 do
begin
Cells [0, 0]: = 'Идентификатор';
Cells [1, 0]: = 'Фамилия';
end;
end;
procedure TForm1. N2Click (Sender: TObject);
var
i, j: integer;
StudentRecord: TStudent;
ResultRecord: TResults;
MarkRecord: TMark;
begin
try
case TabbedNotebook1. PageIndex of
0: begin
AssignFile (StudentFile, 'students. std');
Reset (StudentFile);
i: = 0;
j: = 1; repeat
with StudentRecord, StringGrid1 do
begin
Read (StudentFile, StudentRecord);
Cells [0, j]: = IntToStr (ID);
Cells [1, j]: = FSTU;
Cells [2, j]: = IntToStr (NUMBER);
if YCHASTIE then
Cells [3, j]: = 'Да'
else
Cells [3, j]: = 'Нет';
inc (j);
end;
until Eof (StudentFile);
CloseFile (StudentFile);
end;
1: begin
AssignFile (ResultsFile, 'results. rsl');
Reset (ResultsFile);
i: = 0;
j: = 1;
repeat
with ResultRecord, StringGrid2 do
begin
Read (ResultsFile, ResultRecord);
Cells [0, j]: = IntToStr (ID);
Cells [1, j]: = ResultRecord. NAME;
Cells [2, j]: = RESULT;
inc (j);
end;
until Eof (ResultsFile);
CloseFile (ResultsFile);
end;
2: begin
AssignFile (MarksFile, 'mark. mrk');
Reset (MarksFile);
i: = 0;
j: = 1;
repeat
with MarkRecord, StringGrid3 do
begin
Read (MarksFile, MarkRecord);
Cells [0, j]: = IntToStr (ID);
Cells [1, j]: = IntToStr (StudentID);
Cells [2, j]: = IntToStr (ResultsID);
Cells [3, j]: = IntToStr (Mark);
inc (j);
end;
until Eof (MarksFile);
CloseFile (MarksFile);
end;
end;
except
MessageDlg ('Неверное содержимое файла! ', mtWarning, [mbOk], 0);
end;
end;
procedure TForm1. N3Click (Sender: TObject);
var
j: integer;
StudentRecord: TStudent;
ResultRecord: TResults;
MarkRecord: TMark;
begin
try
case TabbedNotebook1. PageIndex of
0: begin
AssignFile (StudentFile, 'students. std');
Rewrite (StudentFile);
for J: = 1 to StringGrid1. RowCount - 1 do
if StringGrid1. Cells [0, j] <> '' then
with StudentRecord, StringGrid1 do
begin
ID: = StrToIntDef (Cells [0, j], - 1);
FSTU: = Cells [1, j];
NUMBER: = StrToIntDef (Cells [2, j], - 1);
YCHASTIE: = ( (Cells [3, j]) = 'Да') or ( (Cells [3, j]) = 'ДА') or
( (Cells [3, j]) = 'да');
Write (StudentFile, StudentRecord);
end;
CloseFile (StudentFile);
end;
1: begin
AssignFile (ResultsFile, 'results. rsl');
Rewrite (ResultsFile);
for J: = 1 to StringGrid2. RowCount - 1 do
if StringGrid2. Cells [0, j] <> '' then
with ResultRecord, StringGrid2 do
begin
ID: = StrToIntDef (Cells [0, j], - 1);
ResultRecord. NAME: = Cells [1, j];
RESULT: = Cells [2, j];
Write (ResultsFile, ResultRecord);
end;
CloseFile (ResultsFile);
end;
2: begin
AssignFile (MarksFile, 'mark. mrk');
Rewrite (MarksFile);
for J: = 1 to StringGrid1. RowCount - 1 do
if StringGrid3. Cells [0, j] <> '' then
with MarkRecord, StringGrid3 do
begin
ID: = StrToIntDef (Cells [0, j], - 1);
StudentID: = StrToIntDef (Cells [1, j], - 1);
ResultsID: = StrToIntDef (Cells [2, j], - 1);
Mark: = StrToIntDef (Cells [3, j], - 1);
Write (MarksFile, MarkRecord);
end;
CloseFile (MarksFile);
end;
end;
except
MessageDlg ('Неверные данные! ', mtWarning, [mbOk], 0);
end;
end;
procedure TForm1. N5Click (Sender: TObject);
begin
Close
end;
procedure TForm1. SortString;
var
j, n, i: integer;
flag: integer;
res: boolean;
buf: array [1.50] of string;
begin
FindCount: = 0;
try
n: = 0;
for I: = 1 to tabl. RowCount do
if Tabl. Cells [aCol, i] <> '' then
inc (n);
for j: = 1 to n - 1 do
begin
i: = j;
repeat
flag: = 0;
case SorType of
TypeString: res: = (Tabl. Cells [aCol, i] > Tabl. Cells [aCol, i + 1]);
TypeInteger: res: = (strtoint (Tabl. Cells [aCol, i]) > strtoint (Tabl. Cells [aCol, i + 1]));
end;
if res then
begin
TStringGridX (Tabl). MoveRow (i, i+1);
flag: = 1;
dec (i);
inc (FindCount, 1);
end;
until (flag = 0) or (i = 0);
end;
if FindCount > 0 then
MessageDlg ('Сортировка закончена! Шагов: ' + inttostr (FindCount), mtWarning, [mbOk], 0);
except
MessageDlg ('Неверные данные! ', mtWarning, [mbOk], 0);
end;
FindCount: = 0;
end;
procedure TForm1. StringGrid1MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Coord: TGridCoord;
ARow, Acol: integer;
begin
Coord: = StringGrid1. MouseCoord (x, y);
ACol: = Coord. Y;
ARow: = Coord. X;
if (Acol >= 0) and (ARow >= 0) then
begin
if (ACol = 0) then
begin
if Arow in [1, 3] then
SortString (StringGrid1, aRow, TypeString);
if Arow in [0, 2] then
SortString (StringGrid1, aRow, TypeInteger);
end;
end;
end;
procedure TForm1. StringGrid2MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Coord: TGridCoord;
ARow, Acol: integer;
begin
Coord: = StringGrid2. MouseCoord (x, y);
ACol: = Coord. Y;
ARow: = Coord. X;
if (Acol >= 0) and (ARow >= 0) then
begin
if (ACol = 0) then
begin
if Arow = 1 then
SortString (StringGrid2, aRow, TypeString);
if Arow in [0, 2] then
SortString (StringGrid2, aRow, TypeInteger);
end;
end;
end;
procedure TForm1. StringGrid3MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Coord: TGridCoord;
ARow, Acol: integer;
begin
Coord: = StringGrid3. MouseCoord (x, y);
ACol: = Coord. Y;
ARow: = Coord. X;
if (Acol >= 0) and (ARow >= 0) then
begin
if (ACol = 0) then
SortString (StringGrid3, aRow, TypeInteger);
end;
end;
procedure TForm1. StringGrid4MouseUp (Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Coord: TGridCoord;
ARow, Acol: integer;
begin
Coord: = StringGrid4. MouseCoord (x, y);
ACol: = Coord. Y;
ARow: = Coord. X;
if (Acol >= 0) and (ARow >= 0) then
begin
if (ARow = 0) then
SortString (StringGrid4, aRow, TypeInteger);
if (ARow = 1) then
SortString (StringGrid4, aRow, TypeString);
end;
end;
function TForm1. BinaryFind (aStart: integer; aVal: string; aCol: integer; Tabl: TStringGrid): integer;
var
q, p, i, flag: integer;
v: string;
begin
q: = aStart + 1; // начало диапазона
p: = 0; // конец диапазона;
result: = - 1;
for i: = 1 to tabl. RowCount - 1 do
if Tabl. Cells [0, i] <> '' then
inc (p);
// q: = 1; // Start;
{ if (p = 0) then
exit; }
repeat
if p < q then
begin
flag: = 1;
result: = - 1;
end
else
begin
i: = trunc ( (q + p) /2);
v: = Tabl. Cells [aCol, i];
if (aVal < Tabl. Cells [aCol, i]) then
p: = i - 1
else if True then
if (aVal > Tabl. Cells [aCol, i]) then
q: = q + 1
else
begin
flag: = 1;
result: = i;
end;
end;
until flag = 1;
end;
end.
Размещено на Allbest.ru
Подобные документы
Общее описание информационно–справочной системы, предназначенной для контролирования работы промоутеров. Описание входных и выходных данных. Проектирование интерфейса пользователя. Выбор стратегии разработки тестов. Поиск информации, просмотр отчётов.
курсовая работа [3,6 M], добавлен 27.07.2014Анализ информационных потоков. Описание информационных задач. Функциональное назначение программы, ее структура, описание логики. Тексты запросов на языке SQL. Назначение и условия применения информационно-справочной системы, описание операций, отчетов.
курсовая работа [3,0 M], добавлен 16.12.2013Описание процесса проектирования информационно–справочной системы с помощью среды разработки Delphi 10 Lite, ее использование для регистрации сварочных работ. Функциональное назначение программы и ее логическая структура. Свойства информационной системы.
курсовая работа [1,7 M], добавлен 10.01.2015Реализация информационно-справочной системы "Отдел кадров" на языке программирования, с использованием технологии сериализации объектов. Средства конструктора баз данных Windows Forms. Обработка информации и соответствующие организационные ресурсы.
отчет по практике [95,7 K], добавлен 09.08.2015Теоретические основы проектирования информационно-справочных систем. Значение информационно-справочных компонент в корпоративных информационных системах. Разработка концептуальной и инфологической модели информационно-справочной системы ГОУ НПО ПУ №33.
дипломная работа [645,4 K], добавлен 02.09.2010Описание процесса проектирования информационно–справочной системы с помощью среды разработки PascalABC.Net, ее использование для регистрации обращений в медицинское учреждение. Логическая структура программы, алгоритм ее работы, особенности интерфейса.
курсовая работа [628,8 K], добавлен 07.06.2017Обоснование выбора языка программирования. Описание разработки структуры программы. Спецификация переменных и процедур. Руководство оператора, словесный алгоритм. Состав информационной системы поиска квартир и характеристика её программных интерфейсов.
отчет по практике [2,2 M], добавлен 15.09.2014Использование хеширования для поиска данных. Хеширование и хеш-таблицы. Способы разрешения конфликтов. Использование средств языка программирования в работе с хеш-таблицами. Описание разработанного приложения. Структура программы. Инструкция пользователя.
курсовая работа [1,1 M], добавлен 19.08.2016Методика разработки программы "Обработка результатов экзаменационной сессии", ее содержание и требования. Алгоритм выполнения задач для работы с файлами, взаимодействие с пакетом MS Office, работа с таблицами и проверка правильности входной информации.
курсовая работа [1016,7 K], добавлен 05.01.2013Разработка информационно-справочной системы на тему "Наука и техника. Средства передвижения". Характеристика программного продукта. Анализ существующих аналогов. Выбор языка программирования Turbo Pascal версии 7.0. Метод и алгоритм решения задачи.
курсовая работа [262,5 K], добавлен 29.01.2009