Информационно-справочная система "Обработка результатов сдачи сессии"

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 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

  • Обоснование выбора языка программирования. Описание разработки структуры программы. Спецификация переменных и процедур. Руководство оператора, словесный алгоритм. Состав информационной системы поиска квартир и характеристика её программных интерфейсов.

    отчет по практике [2,2 M], добавлен 15.09.2014

  • Описание процесса проектирования информационно–справочной системы с помощью среды разработки PascalABC.Net, ее использование для регистрации обращений в медицинское учреждение. Логическая структура программы, алгоритм ее работы, особенности интерфейса.

    курсовая работа [628,8 K], добавлен 07.06.2017

  • Использование хеширования для поиска данных. Хеширование и хеш-таблицы. Способы разрешения конфликтов. Использование средств языка программирования в работе с хеш-таблицами. Описание разработанного приложения. Структура программы. Инструкция пользователя.

    курсовая работа [1,1 M], добавлен 19.08.2016

  • Методика разработки программы "Обработка результатов экзаменационной сессии", ее содержание и требования. Алгоритм выполнения задач для работы с файлами, взаимодействие с пакетом MS Office, работа с таблицами и проверка правильности входной информации.

    курсовая работа [1016,7 K], добавлен 05.01.2013

  • Разработка информационно-справочной системы на тему "Наука и техника. Средства передвижения". Характеристика программного продукта. Анализ существующих аналогов. Выбор языка программирования Turbo Pascal версии 7.0. Метод и алгоритм решения задачи.

    курсовая работа [262,5 K], добавлен 29.01.2009

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