Описание предметной области - Учебно

advertisement
Министерство образования и науки Российской федерации
Федеральное агентство по образованию
Федеральное государственное образовательное учреждение
высшего профессионального образования
«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
Л.А. Мачулина, В.А. Скороходов
ИСПОЛЬЗОВАНИЕ СРЕДСТВ
VISUAL BASIC .NET В СОЗДАНИИ
ИНФОРМАЦИОННЫХ СИСТЕМ
Учебно-методическое пособие
для студентов
экономического факультета
Ростов-на-Дону
2008
Решение об издании в электронном виде принято на заседании кафедры алгебры и дискретной математики, протокол № 2 от 26 сентября 2008 г.
Пособие содержит необходимые теоретические и практические материалы
для разработки программного обеспечения информационных систем в среде программирования Visual Basic .NET в системе Visual Studio 2008 Express Edition. На
примере информационной системы «Студенты» рассматриваются основные этапы
проектирования и реализации информационных систем. Приводятся технические
задания на проекты для самостоятельной разработки.
Авторы: Л.А. Мачулина, В.А. Скороходов.
© Л.А. Мачулина, В.А. Скороходов, 2008
2
Предисловие
Данное пособие содержит описание технологии разработки большого программного проекта и реализации его средствами традиционного процедурного и
объектно-ориентированного программирования в среде визуального программирования.
В качестве объекта разработки и реализации выбран тип приложения, которое по существу является информационной системой. То есть это приложение,
прежде всего, с хорошим графическим интерфейсом, которое содержит средства
для создания и ведения базы данных, средства манипулирования данными, а также программы обработки данных для получения определенной информации.
Реализация информационной системы выполняется в среде визуального
программирования Visual Basic 2008 Express Edition.
Первая часть пособия посвящена вопросам моделирования данных и проектированию программного обеспечения информационной системы.
Вторая часть содержит описание реализации информационной системы для
анализа успеваемости в учебном заведении.
Третья часть пособия содержит варианты технических заданий на разработку информационных систем, которые должны выполняться студентами самостоятельно в рамках практикума.
Материалы, представленные в пособии, используются при проведении
учебной практики студентов специальностей «Прикладная информатика в экономике» и «Математические методы исследования операций в экономике».
3
Часть I
Проектирование информационной системы
1. Описание предметной области
На первом этапе проектирования информационной системы необходимо
выполнить анализ предметной области, т.е. определить объекты предметной области и связи между объектами.
При выборе состава и структуры предметной области возможны два подхода: функциональный и предметный.
Функциональный подход реализует принцип движения «от задач» и применяется, когда определен комплекс задач, для обслуживания которых создается
информационная система. В этом случае можно выделить минимальный необходимый набор объектов предметной области, которые должны быть описаны.
В предметном подходе объекты предметной области определяются с таким
расчетом, чтобы их можно было использовать при решении множества разнообразных, заранее не определенных задач.
Чаще всего используется комбинация этих двух подходов.
Опишем предметную область, предлагаемую в качестве примера в проекте,
реализация которого представлена в данном пособии.
Предположим, что для деканата одного из факультетов учебного заведения
требуется разработать информационную систему для автоматизации анализа и
учета данных о студентах, обучающихся на факультете, и их успеваемости в текущей сессии.
В данном случае основным объектом предметной области является студент.
Мы будем придерживаться функционального подхода, т.е. идти от задач, которые
будут решаться. Поэтому ограничимся определенным набором свойств объекта
«студент». Перечислим эти свойства:
4
– Номер зачетной книжки,
– Фамилия Имя и Отчество,
– Дата рождения,
– Пол,
– Курс,
– Номер учебной группы,
– Специальность,
– Количество сдаваемых в сессию экзаменов,
– Оценки, полученные на экзаменах.
Мы выбрали минимальный набор свойств-характеристик студента. Естественно, что этот набор может быть расширен.
Необходимо предусмотреть следующие ограничения на информацию:
1. Курсы имеют значения от 1 до 5.
2. Номер учебной группы изменяется от 1 до 15.
3. Количество сдаваемых в сессию экзаменов может изменяться от 2 до 5.
Предполагается, что с данной информационной системой будут работать
сотрудники деканата, и они должны иметь возможность решать с её помощью
следующие задачи:
1. Ввод и редактирование данных о студентах в удобной форме.
2. Просмотр данных о студентах в отсортированном виде.
3. Определение численности контингента в каждой учебной группе, на каждом курсе и в целом на факультете.
4. Подготовка к выводу на печать списков студентов.
5. Вычисление среднего балла каждого студента и вывод списков студентов
по группам в алфавитном порядке фамилий или по убыванию среднего балла.
6. Вычисление среднего балла в каждой учебной группе, на каждом курсе и
в целом по факультету.
5
7. Определение процента успеваемости в каждой учебной группе, на каждом курсе и в целом по факультету.
8. Просмотр и подготовка к выводу списков задолжников (с указанием количества задолженностей) по курсам и группам.
9. Просмотр и подготовка к выводу списков студентов, претендующих на
получение стипендии, с отметкой о том, какая стипендия полагается: обычная или
повышенная.
10. Организация поиска по фамилии или части фамилии.
2. Моделирование данных
Для проектирования концептуальной схемы (информационной структуры
программного обеспечения информационной системы) можно использовать различные модели, в частности модель «сущность – связь».
Из моделей типа «сущность – связь» наиболее известна модель П.Чена, или
ER – модель (Entity–Relationship). Общим для всех моделей этого типа является
использование трех основных конструкций: сущность, связь и атрибут.
Сущность (Entity) – собирательное понятие, некоторая абстракция реально
существующего объекта, процесса или явления, о котором необходимо хранить
информацию.
Атрибут – поименованная характеристика сущности, которая принимает
значение из некоторого множества значений. В модели атрибут выступает в качестве средства, с помощью которого моделируются свойства сущностей.
Связь (Relationship) – средство представления отношения между сущностями.
На первом этапе моделирования необходимо из описания предметной области извлечь информацию и выделить сущности.
Каждая сущность должна обладать уникальным идентификатором. Каждый
экземпляр сущности должен однозначно идентифицироваться и отличаться от
6
всех других экземпляров данного типа сущности. Каждая сущность должна обладать некоторыми свойствами:
 каждая сущность должна иметь уникальное имя, и к одному и тому же
имени должна всегда применяться одна и та же интерпретация. Одна и та
же интерпретация не может применяться к различным именам, если только они не являются псевдонимами;
 сущность обладает одним или несколькими атрибутами, которые либо
принадлежат сущности, либо наследуются через связь;
 сущность обладает одним или несколькими атрибутами, которые однозначно идентифицируют каждый экземпляр сущности;
 каждая сущность может обладать любым количеством связей с другими
сущностями модели.
Обращаясь к приведенному выше описанию предметной области, видно,
что можно выделить следующие сущности: студент и специальность.
Следующим шагом моделирования является идентификация связей.
Связь – поименованная ассоциация между двумя сущностями, значимая для
рассматриваемой предметной области. Связь – это ассоциация между сущностями, при которой, как правило, каждый экземпляр одной сущности, называемой
родительской сущностью, ассоциирован с произвольным (в том числе нулевым)
количеством экземпляров второй сущности, называемой сущностью-потомком, а
каждый экземпляр сущности-потомка ассоциирован в точности с одним экземпляром сущности-родителя. Таким образом, экземпляр сущности-потомка может
существовать только при существовании сущности родителя.
Связи может даваться имя, выражаемое грамматическим оборотом глагола
и помещаемое возле линии связи. Имя каждой связи между двумя данными сущностями должно быть уникальным, но имена связей в модели не обязаны быть
уникальными.
7
На языке ER - модели концептуальная схема может быть представлена ERD
(ER - диаграммой), в которой множество сущностей обозначается прямоугольниками, множество связей – ромбами.
Взаимосвязь сущностей описанной выше предметной области можно изобразить ER-диаграммой на рисунке 1.
Студент
Получает
Специальность
Рисунок 1. ER–диаграмма
Каждый студент обучается только на одной специальности, но одну и ту же
специальность получает много студентов. Если предположить, что возможна ситуация, когда один и тот же студент обучается сразу на двух специальностях, то в
этом случае будут существовать два экземпляра объекта с разными номерами зачетной книжки.
В предлагаемой модели сущность «Специальность» и сущность «Студент»
связаны отношением «один – много».
Последним шагом моделирования является идентификация атрибутов.
Атрибут – любая характеристика сущности, значимая для рассматриваемой
предметной области и предназначенная для квалификации, идентификации, классификации, количественной характеристики или выражения состояния сущности.
Атрибут представляет тип характеристик или свойств, ассоциированных с множеством реальных или абстрактных объектов (людей, мест, событий, состояний,
идей, пар предметов и т.д.). Экземпляр атрибута – это определенная характеристика отдельного элемента множества. Экземпляр атрибута определяется типом
характеристики и ее значением, называемым значением атрибута. В ER-модели
атрибуты ассоциируются с конкретными сущностями. Таким образом, экземпляр
сущности должен обладать единственным определенным значением для ассоциированного атрибута.
8
Атрибут может быть либо обязательным, либо необязательным. Обязательность означает, что атрибут не может принимать неопределенных значений (null
values). Атрибут может быть либо описательным (т.е. обычным дескриптором
сущности), либо входить в состав уникального идентификатора (первичного ключа).
Уникальный идентификатор – это атрибут или совокупность атрибутов
и/или связей, предназначенная для уникальной идентификации каждого экземпляра данного типа сущности. В случае полной идентификации каждый экземпляр данного типа сущности полностью идентифицируется своими собственными
ключевыми атрибутами, в противном случае в его идентификации участвуют
также атрибуты другой сущности-родителя.
Каждый атрибут идентифицируется уникальным именем, выражаемым
грамматическим оборотом существительного, описывающим представляемую атрибутом характеристику. Атрибуты изображаются в виде списка имен внутри
блока ассоциированной сущности, причем каждый атрибут занимает отдельную
строку. Атрибуты, определяющие первичный ключ, размещаются наверху списка
и выделяются жирным шрифтом.
Каждая сущность должна обладать хотя бы одним возможным ключом.
Возможный ключ сущности – это один или несколько атрибутов, чьи значения
однозначно определяют каждый экземпляр сущности. При существовании нескольких возможных ключей один из них обозначается в качестве первичного
ключа, а остальные – как альтернативные ключи.
С учетом имеющейся информации дополним построенную ранее диаграмму
(рисунок 2), определив для каждой сущности набор атрибутов. Следует отметить,
что набор атрибутов для каждой из сущностей может быть расширен, например, в
реальной ситуации для каждого студента должны выясняться и сохраняться такие
атрибуты, как дата рождения, паспортные данные, адрес и другие. Также отме-
9
тим, что некоторые из атрибутов могут иметь «пустые» значения, т.е. они могут
быть необязательными.
В предлагаемом проекте будет рассмотрен именно тот набор атрибутов
сущности «Студент», который помещен на диаграмме на рисунке 2.
Студент
Идентификационный номер студента
Курс
Номер учебной группы
Идентификац. номер специальности
Фамилия И.О.
Пол
Количество сдаваемых экзаменов
Оценки, полученные на экзаменах
Специальность
Идентификац. номер специальности
Код специальности
Название специальности
Рисунок 2. ER-диаграмма с атрибутами
Обсудим значения атрибута «идентификационный номер специальности»
сущности «Студент». Значения этого атрибута ассоциируют каждый экземпляр
сущности «Студент» с одним из экземпляров сущности «Специальность».
Значение атрибута «идентификационный номер специальности» в сущности
«Студент» обеспечивает связь сущности «Специальность» с сущностью «Студент» в отношении «один – много». Одну и ту же специальность могут получать
много студентов, но информация о специальности заполняется только один раз,
что позволяет избежать дублирования информации о специальности при её хранении.
10
3. Представление данных
Как правило, при использовании систем управления базами данных в информационных системах, после этапа моделирования данных выполняется преобразование ER–модели в реляционную модель, т.е. сущностям и связям ER–модели
ставятся в соответствие отношения, или таблицы.
Однако особенностью описываемой реализации информационной системы
является то, что она выполняется без использования систем управления базами
данных, а создание, ведение и обработка данных выполняется средствами языка и
системы программирования Visual Basic.
Для хранения данных будут использоваться файлы прямого доступа с записями пользовательского типа.
Выполним преобразование атрибутов сущностей «Студент» и «Специальность» в поля соответствующих пользовательских типов TStud (рисунок 3) и
TSpec (рисунок 4).
Студент
TStud
Идент. номер студента
Курс
Номер учебной группы
Идент. номер спец.
Фамилия И.О.
Дата рождения
Пол
Кол-во экзаменов
Оценки на экзаменах
Длинное целое
ID_Stud Long
Kurs
Byte
Байт
Group
Byte
Байт
Spec
Integer
Целое
FIO
String
Строка длины 20
DataR
Date
Дата
Pol
String
Строка длины 7
Kol
Byte
Байт
M (5)
Byte
Байт
.
Рисунок 3. Преобразование
сущности «Студент» к типу TStud
Специальность
Идент. номер спец.
Код специальности
Название спец-ности
TSpec
Code
Number
Name
Integer
String
String
Целое
Строка длины 6
Строка длины 100
Рисунок 4. Преобразование сущности «Специальность» к типу TSpec
11
Часть II
Реализация информационной системы «Студенты»
4. Предварительные замечания
Рассмотрим все этапы разработки и создания информационной системы на
примере ИС «Студенты». Разработка выполняется в среде программирования
Visual Basic 2008 Express Edition (платформа .NET), для хранения данных используются файлы прямого доступа, диалог пользователя с информационной системой
для ведения и обработки данных организован с использованием средств графического интерфейса.
Для получения наилучшего результата, изучение данного материала следует
производить последовательно для каждого блока с обязательным тестированием
каждой части кода. Т.е. каждая процедура, функция или описание переменной
должны быть тщательно изучены и протестированы не только на наличие синтаксических ошибок, зачастую возникающих при наборе текстов, но и на правильность работы приложения в целом.
5. Постановка задачи
Описание предметной области было сделано выше, в данном разделе сформулируем техническое задание на создание информационной системы для заданной предметной области.
Требуется разработать информационную систему, позволяющую обрабатывать данные о студентах и их успеваемости, представленные в определенном
формате. Информационная система должна содержать средства для ввода и редактирования данных, обеспечивать сортировку по одному или нескольким полям
данных, обеспечивать возможность поиска по одному или нескольким критериям,
выполнять обработку данных и выдавать результаты обработки.
Информация о студентах представлена следующими данными:
12
 фамилия, имя и отчество;
 дата рождения;
 пол;
 специальность;
 курс;
 группа;
 количество экзаменов;
 оценки, полученные на экзамене.
Для хранения и обработки этой информации создать базу данных в виде
набора файлов прямого доступа.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
- по ФИО;
- по курсу;
- по группе.
Необходимо также иметь возможность просмотра данных в виде, отсортированном по любой совокупности перечисленных полей.
Во избежание дублирования данных и экономии памяти для поля «специальность» создать отдельный файл-справочник (файл прямого доступа), используемый для заполнения и просмотра этого поля данных.
Критериями поиска для данной информационной системы являются: ФИО,
курс, группа.
Для заданной предметной области необходимо предусмотреть возможность
решения следующих задач:
1. Подготовка к печати списка студентов учебной группы по запросу для
одной группы и для всех групп.
2. Вычисление среднего балла для каждого студента; подготовка к выводу
результатов в виде, отсортированном по курсу и группе, а в пределах
13
группы предусмотреть одну из возможных сортировок: в алфавитном
порядке фамилий или по убыванию среднего балла.
3. Для каждой учебной группы вычисление количества студентов и среднего балла, предусмотреть сортировку по курсу и номеру группы.
Для каждой из перечисленных задач предусмотреть возможность просмотра
результатов на экране и возможность сохранения их в текстовых файлах для последующего использования.
Заметим, что при описании предметной области было определено больше
функций информационной системы и, соответственно, задач, которые могут быть
решены для выделенных данных. Однако в представляемой конкретной реализации будут решены задачи, перечисленные в техническом задании.
6. Структура проекта
ИС «Студенты» реализуется в среде программирования Visual Basic .Net и
представляет собой приложение с графическим интерфейсом, состоящее из
экранных форм, диалоговых окон и других элементов управления.
Главная форма системы содержит строку выпадающих меню, команды которых обеспечивают работу с системой. В процессе работы из главной формы вызываются подчиненные формы для ввода и редактирования исходных данных,
просмотра данных и результатов обработки.
Программы обработки содержатся в процедурах обработки событий, связанных с объектами форм, а также в пользовательских процедурах и функциях, не
связанных с объектами.
Проект, из которого строится приложение, кроме форм содержит пользовательские модули, не связанные с формами. Пользовательские модули в данном
проекте используются для объявления пользовательских типов, констант и переменных, а также для описания пользовательских процедур, реализующих алгоритмы сортировки.
14
В интерфейсе приложения используются различные элементы управления,
их назначение и особенности применения будут описываться по мере того, как
будет возникать необходимость в их применении.
7. Создание меню
Как уже было сказано, в проекте используется несколько форм для выполнения разных функций; все функции и команды информационной системы вызываются из главной формы с помощью меню.
Меню позволяет представить функции приложения в четком и, как правило,
удобном для пользователя виде.
Зачастую, меню состоит из одного или нескольких заголовков верхнего
уровня, каждый заголовок раскрывается в набор строк, каждая из которых представляет собой команду, вызов диалогового окна или подменю.
Каждый заголовок меню и каждая строка меню представляет собой объект,
обладающий своим набором свойств и событий, включая нужное нам событие
Click.
Перечислим некоторые, наиболее важные, свойства элементов меню:
– Свойство Text определяет текст, отображаемый в меню (заголовок меню
или команда меню). Текст может содержать символ «амперсенд» (&) перед символом, который используется в комбинации с клавишей Alt для
быстрого вызова.
– Свойство Name является обязательным, рекомендуется в имени пункта
использовать префикс mnu, а для команд меню использовать окончание
Item. Например, для заголовка меню Файл зададим имя mnuFile, а для
пункта Выход в меню Файл, т.е. команды Файл / Выход, зададим имя
mnuFileExitItem.
15
– Свойство Checked помещает (или удаляет) маркер-галочку рядом с командой. Задавая значение свойства Checked, можно «включать» или
«выключать» команды меню во время выполнения программы.
– Свойство Enabled по умолчанию имеет значение True. Если заголовок
меню или команду необходимо сделать недоступной, заблокировать, то
для такой команды нужно сбросить флажок в свойстве Enabled, что будет соответствовать значению False для этого свойства.
– Свойство Visible по умолчанию имеет значение True. Это свойство позволяет скрыть элемент меню (однако стоит задуматься о целесообразности этого действия, не лучше ли заблокировать элемент меню до нужного момента).
– Свойство Shortcut определяет клавиатурную комбинацию для вызова
команды с клавиатуры, обычно используются служебные клавиши Ctrl и
Alt в сочетании с другими клавишами (например, F1).
Создание приложения начнем с конструирования макета главной формы,
которая будет иметь вид, представленный на рисунке 5.
Рисунок 5. Макет главной формы в режиме конструктора
Теперь опишем начало процесса создания приложения и создание макета
главной формы. Для этого необходимо выполнить следующие действия:
1. Запустить Visual Basic.
16
2. Создать новый проект типа Windows Application, в него сразу загружается форма со стандартным именем Form1. Новый проект имеет имя WindowsApplication1, однако, рекомендуется при создании дать проекту содержательное имя.
Переименовать форму, изменив в окне свойств формы свойство Name (в
нашем приложении главная форма будет иметь имя frmMenu). Здесь же
можно сменить заголовок формы, используя свойство Text (Text = ИС
«Студенты»).
3. Сохранить проект в новом каталоге, предназначенном для хранения файлов данного проекта.
4. Для продолжения работы с проектом запустить файл проекта – файл с
расширением .sln. Затем, поместить на форму элемент MenuStrip (это будет главное меню формы), а после этого создать все элементы главного
меню, вид которого представлен в таблице 1.
5. Сохранить форму в каталоге проекта.
6. В макете формы выбрать пункты и команды меню. Двойной щелчок на
команде меню открывает окно кода формы и в нем процедуру-заготовку
для обработки события Click.
7. Сохранить проект.
Таблица 1 определяет значения свойств Text, Name и Enabled соответствующих пунктов меню (см. рис. 5).
Отступ в поле Text в таблице означает подчиненность данного пункта меню
по отношению к ближайшему верхнему пункту, у которого в поле Text нет отступа. Все действия по созданию и структурированию элементов главного меню
производятся на главной форме при помощи левой кнопки мыши.
17
Таблица 1
Text
Name
Enabled
&Файл
mnuFile
True
Создать
mnuFileNewItem
True
Открыть
mnuFileOpenItem
True
-
mnuFileSep1
True
Сохранить
mnuFileSaveItem
False
Сохранить как…
mnuFileSaveAsItem
False
-
mnuFileSep2
True
Закрыть
mnuFileCloseItem
False
Удалить
mnuFileDeleteItem
False
-
mnuFileSep3
True
Выход
mnuFileExitItem
True
mnuView
False
Форма
mnuViewFormItem
True
Таблица
mnuViewTableItem
True
mnuSort
False
По курсу
mnuSortKursItem
True
По группе
mnuSortGroupItem
True
По ФИО
mnuSortFIOItem
True
Исходный порядок
mnuSortUnsorted
True
&Поиск
mnuSearch
False
&Отчеты
mnuQuery
False
mnuQueryListItem
True
Все группы
mnuQueryListAllItem
True
Одна группа
mnuQueryListOneItem
True
Вычисление среднего балла
mnuQueryBallItem
True
Кол-во и средний балл в группе
mnuQueryKolItem
True
mnuHelp
True
Прос&мотр
&Сортировка
Список по группе
&?
18
Для продолжения работы с проектом необходимо из каталога, в котором
сохранен проект, запустить файл проекта – файл с расширением .sln. Он будет загружен в среду разработки Visual Basic. Попытаемся запустить проект в режиме
выполнения. Однако перед этим опишем процедуру обработки события выхода из
главной формы разрабатываемой информационной системы. Это команда «Выход» в меню «Файл». Будем обозначать такой выбор следующим образом
«Файл  Выход».
При выборе пункта меню «Файл  Выход» приложение должно завершить
свою работу, но по правилам хорошего тона приложение обязано сделать запрос
на подтверждение закрытия приложения. Для ввода кода необходимо на макете
формы в меню «Файл» выбрать команду «Выход» и дважды щелкнуть левой
кнопкой мыши, появится заготовка процедуры обработки события Click, состоящая из операторов заголовка и конца процедуры. Остается ввести операторы, являющиеся телом процедуры. Код процедуры, реализующий функцию выбора команды меню «Файл  Выход», приведен ниже.
Private Sub mnuFileExitItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles mnuFileExitItem.Click
If (vbYes =MsgBox("Действительно хотите выйти?",vbYesNo)) Then
End
End If
End Sub
Таким образом, при выборе команды меню «Файл  Выход» пользователю
будет предложено подтвердить выход из приложения и при утвердительном ответе приложение завершит свою работу.
Для запуска проекта на выполнение необходимо выбрать в строке меню
среды разработки пункт «Debug» и команду «Start Debugging» или нажать клавишу F5. В меню появившейся формы выбрать пункт «Файл», а затем команду «Выход».
19
На этом месте читателю следует на основе прочитанного материала, протестировать проект на работоспособность и корректность работы.
8. Пользовательские модули
В проекте используется два стандартных модуля, не связанных ни с какими
формами. Один из них, с именем Declar, используется для объявления пользовательских типов, констант и переменных. Другой, с именем Sorting, содержит
пользовательские процедуры сортировки данных различных типов.
Сначала в проект нужно добавить новый стандартный модуль командой
Project / Add Module и дать ему имя, затем ввести программный код.
Приведем программный код модуля Decl.
‘ Подключение библиотек ввода и вывода для работы с файлами
Imports System.IO
Imports System.Text
‘ создание нового пространства имен для
‘ возможности подключения модуля к формам проекта
Namespace Decl
Module Declar
‘ Объявление пользовательского типа,
‘ описывающего структуру записи для
‘ входных данных – информации о студенте
Public Class TStud
Public Kurs As Byte
' курс
Public Group As Byte
' номер группы
Public FIO As String
' фамилия, имя и отчество
Public Spec As Integer' учетный номер специальности
Public DataR As Date ' дата рождения
Public Pol As Byte ' пол
Public Kol As Byte
' количество экзаменов
Public M(4) As Byte ' полученные оценки
Public len As Integer = 1 + 1 + 40 + 4 + 20 + 1 + 1 + 5
' размер переменной
Public Sub writeToFile(ByVal ff As FileStream)
Dim writer As BinaryWriter = New BinaryWriter(ff)
Dim tempstr As String
If FIO.Length > 20 Then
20
FIO = Left(FIO, 20)
Else
tempstr = New String(" ", 20 - FIO.Length)
FIO = FIO + tempstr
End If
writer.Write(Kurs)
writer.Write(Group)
Dim temp() As Byte = _
UnicodeEncoding.Unicode.GetBytes(FIO)
writer.Write(temp)
writer.Write(Spec)
temp = _
UnicodeEncoding.Unicode.GetBytes(DataR.ToString("dd.MM.yyyy"))
writer.Write(temp)
writer.Write(Pol)
writer.Write(Kol)
writer.Write(M)
End Sub
Public Sub writeToFile(ByVal ff As FileStream, _
ByVal i As Integer)
ff.Seek((i - 1) * len, SeekOrigin.Begin)
writeToFile(ff)
End Sub
Public Sub ReadFromFile(ByVal ff As FileStream, _
ByVal i As Integer)
ff.Seek((i - 1) * len, SeekOrigin.Begin)
Dim reader As BinaryReader = New BinaryReader(ff)
Dim temp() As Byte
Kurs = reader.ReadByte()
Group = reader.ReadByte()
temp = reader.ReadBytes(40)
FIO = UnicodeEncoding.Unicode.GetString(temp, 0, 40)
Spec = reader.ReadInt32()
temp = reader.ReadBytes(20)
DataR = _
CType(UnicodeEncoding.Unicode.GetString(temp, 0, 20), Date)
Pol = reader.ReadByte()
Kol = reader.ReadByte()
21
M = reader.ReadBytes(5)
End Sub
End Class
' Объявление пользовательского типа,
' описывающего структуру записи для
' входных данных справочника – информации о специальности
Public Class TSpec
Public Code As Integer
' учетный номер специальности
Public Number As String = New String(" ", 6)
' шестизначный код специальности
Public Name As String = New String(" ", 100)
' наименование специальности
Public len As Integer = 4 + 7 + 200 ' размер переменной
Public Sub writeToFile(ByVal ff As FileStream)
Dim writer As BinaryWriter = New BinaryWriter(ff)
Dim tempstr As String
If Number.Length > 6 Then
Number = Left(Number, 6)
Else
tempstr = New String(" ", 6 - Number.Length)
Number = Number + tempstr
End If
If Name.Length > 100 Then
Name = Left(Name, 100)
Else
tempstr = New String(" ", 100 - Name.Length)
Name = Name + tempstr
End If
Dim temp() As Byte = _
UnicodeEncoding.Unicode.GetBytes(Number)
writer.Write(Code)
writer.Write(temp)
temp = UnicodeEncoding.Unicode.GetBytes(Name)
writer.Write(temp)
End Sub
Public Sub writeToFile(ByVal ff As FileStream, _
ByVal i As Integer)
ff.Seek((i - 1) * len, SeekOrigin.Begin)
writeToFile(ff)
End Sub
22
Public Sub ReadFromFile(ByVal ff As FileStream, _
ByVal i As Integer)
ff.Seek((i - 1) * len, SeekOrigin.Begin)
Dim reader As BinaryReader = New BinaryReader(ff)
Dim temp() As Byte
Code = reader.ReadInt32()
temp = reader.ReadBytes(12)
Number = UnicodeEncoding.Unicode.GetString(temp, 0, 12)
temp = reader.ReadBytes(200)
Name = UnicodeEncoding.Unicode.GetString(temp, 0, 200)
End Sub
End Class
' Объявление пользовательского типа,
' описывающего структуру записи
' для вычисления среднего балла студента
Public Class TBall
Public Kurs As Byte
' курс
Public Group As Byte
' номер группы
Public FIO As String = New String(" ", 20)
Public Sb As Single
' средний балл
Public len As Integer = 1 + 1 + 40 + 4 ' размер
‘ переменной
Public Sub writeToFile(ByVal ff As FileStream)
Dim writer As BinaryWriter = New BinaryWriter(ff)
Dim tempstr As String
If FIO.Length > 20 Then
FIO = Left(FIO, 20)
Else
tempstr = New String(" ", 20 - FIO.Length)
FIO = FIO + tempstr
End If
Dim temp() As Byte = _
UnicodeEncoding.Unicode.GetBytes(FIO)
writer.Write(Kurs)
writer.Write(Group)
writer.Write(temp)
writer.Write(Sb)
End Sub
Public Sub writeToFile(ByVal ff As FileStream, _
ByVal i As Integer)
ff.Seek((i - 1) * len, SeekOrigin.Begin)
23
writeToFile(ff)
End Sub
Public Sub ReadFromFile(ByVal ff As FileStream, _
ByVal i As Integer)
ff.Seek((i - 1) * len, SeekOrigin.Begin)
Dim reader As BinaryReader = New BinaryReader(ff)
Kurs = reader.ReadByte()
Group = reader.ReadByte()
Dim temp() As Byte = reader.ReadBytes(40)
FIO = UnicodeEncoding.Unicode.GetString(temp, 0, 40)
Sb = reader.ReadSingle()
End Sub
End Class
' Объявление констант и переменных,
' используемых в модулях форм,
' пользовательских процедурах и функциях
Public Const Nmax As Integer = 100
Public Const PathUntitled As String = "с:\untitled.dan"
Public Const PathTemp As String = "c:\$$$$.tmp"
Public
Public
Public
Public
Public
Public
Path As String
PathSpec As String
Path1 As String
Path2 As String
FName As String
richName As String
Public
Public
Public
Public
Public
f1 As
F2 As
F3 As
F4 As
F1_sp
FileStream
FileStream
FileStream
Integer
As FileStream
Public N As Integer
Public NSpec As Integer
Public Pos As Integer
Public Ind(Nmax) As Integer
Public Del(Nmax) As Integer
Public Button As MsgBoxResult
‘ функция, которая закрывает все открытые рабочие файлы
Public Sub CloseAllFiles()
If Not (f1 Is Nothing) Then f1.Close()
24
If Not (F1_sp Is Nothing) Then F1_sp.Close()
If Not (F2 Is Nothing) Then F2.Close()
If Not (F3 Is Nothing) Then F3.Close()
End Sub
End Module
End Namespace
После описания пользовательского модуля Declar необходимо изменить
функцию обработки события выбора пункта меню «Выход». Измененная функция
имеет вид:
Private Sub mnuFileExitItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles mnuFileExitItem.Click
If (vbYes =MsgBox("Действительно хотите выйти?",vbYesNo)) Then
Decl.CloseAllFiles()
End
End If
End Sub
9. Работа с файлами
9.1. Использование диалогового окна Windows
Для открытия и сохранения файлов в проекте используется стандартное
диалоговое окно Windows, которое создается с использованием элементов управления соответственно OpenFileDialog и SaveFileDialog. Нанесем на главную форму с меню (frmMenu) объекты для работы с диалоговыми окнами для открытия и
сохранения файлов, можно оставить им те имена, которые им присвоит система
(OpenFileDialog1 и SaveFileDialog1), а можем дать другие имена. Заметим, что во
время выполнения приложения данные элементы управления не видны.
Окна диалога имеют определенные свойства и методы. Используемые нами
в данной реализации свойства и методы для обоих типов объектов совершенно
одинаковы, поэтому остановимся на свойствах только одного элемента управления при пояснении кодов процедур обработки событий для открытия и сохране25
ния файлов. Что касается методов, то для обоих элементов будет использован метод ShowDialog() для получения имен диска, папки и файла соответственно для
существующего файла и нового, сохраняемого файла.
Приведем фрагмент кода для вызова диалогового окна Windows для открытия и сохранения файлов.
‘ запрос имени файла базы данных
With OpenFileDialog1
.filename = ""
.Filter = "Все файлы (*.*)|*.*|" + _
"текстовые файлы(*.txt)|*.txt|" + _
"файлы исх. данных(*.dan)|*.dan|" + _
"файлы результата (*.rez)|*.rez"
.FilterIndex = 3
‘ метод, используемый для открытия файла
.ShowDalog()
Decl.Path = .filename
End With
В приведенном выше коде используются следующие свойства окна диалога:
Filter – для списка возможных типов файлов, показываемых в поле ввода со списком для типа файла; FilterIndex – для вывода в окне для типа файла того типа, который в списке Filter имеет номер, задаваемый свойством FilterIndex. Имя выбранного файла помещается в окно для имени файла, а полное имя файла становится значением свойства FileName. Чтобы не использовать длинные имена, полное имя файла записывается в переменную Path модуля Declar.
При открытии файла появится диалоговое окно (рисунок 6), в котором
необходимо выбрать файл, который нужно открыть.
26
Рисунок 6. Диалоговое окно открытия файла
9.2. Создание файлов базы данных
Создание файлов базы данных выполняется при выборе команды меню
«Файл  Создать». Данной команде соответствует процедура обработки события
mnuFileNewItem_Click, которая с помощью метода Show должна выводить на
экран ту форму, при помощи которой будет производиться ввод новых и редактирование существующих записей данных.
Вначале, для простоты работы с загрузкой новых записей базы данных, основной рабочий файл с данными будем создавать в корневом каталоге какоголибо диска, например, диска «c:» с полным именем «c:\untitled.dan», а после выхода из формы для ввода и редактирования пользователю будет предложено сохранить данные в некотором файле. Для этих целей используем элемент управления «SaveFileDialog1» главной формы frmMenu. При этом фактически будет про-
27
исходить переименование файла «c:\untitled.dan» и присвоение ему имени, введенного пользователем в окне диалога.
Запишем процедуру обработки события выбора команды меню «Файл 
Создать».
Private Sub mnuFileNewItem_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles mnuFileNewItem.Click
Dim i As Integer
‘ закрываются все открытые до этого времени файлы
Decl.CloseAllFiles()
' открывается основной файл "c:\untitled.dan"
Decl.Path = PathUntitled
f1 = New FileStream(Decl.Path, FileMode.Create)
' и файл-справочник "c:\untitled.spe"
PathSpec = Mid(Decl.Path, 1, Len(Decl.Path) - 4) +".spe"
F1_sp = New FileStream(Decl.PathSpec, FileMode.Create)
' количество записей в основной таблице базы данных
' равно нулю
N = 0
' инициализация индексного массива Ind, который будет
' использоваться для сортировки данных, и массива Del
' для пометки удаляемых записей
For i = 1 To Nmax
Ind(i) = i
Del(i) = 0
Next i
' основная форма становится неактивной
Me.Enabled = False
' загрузка формы для ввода записей файла frmInputEdit
frmInputEdit.Text = "Файл: " + Decl.Path
frmInputEdit.Show()
frmInputEdit.ShowNewZap()
' пользовательская процедура
' ввода новой записи
End Sub
Поскольку, в данном коде программы участвует новая форма для ввода и
редактирования данных, то необходимо добавить ее в проект, выполнив команду
«Project/Add Windows Form», и дать новой форме имя frmInputEdit.
28
Теперь наш проект содержит две формы и нужно указать, какая из них является главной, т.е. запускается первой. Для этого нужно выполнить команду
«Project/*имя проекта* Properties…» и в открывшемся диалоговом окне в поле
ввода со списком StartUp Form выбрать в качестве стартового объекта форму
frmMenu.
Несмотря на то, что форма для ввода не содержит пока никаких элементов
управления, запустите проект для проверки процедуры создания файлов и
взаимодействия форм. Не забывайте регулярно сохранять проект.
10. Ввод и редактирование данных
10.1. Проектирование макета формы для ввода и редактирования данных
Для ввода и редактирования информации о студентах, сохраняемых в виде
записей в файле данных, используется форма, которой дано имя frmInputEdit, она
является подчиненной формой для главной формы с меню. Макет формы
frmInputEdit показан на рисунке 7. При помощи выносок указаны имена помещенных на форму элементов управления – компонентов (объектов) формы.
Остановимся на тех элементах управления, которые используются на макете данной формы.
Надписи (тип Label) – это объекты с именами, имеющими префикс lbl, используются как подписи элементов формы. Из этих подписей ясно, какие элементы для каких полей данных используются.
Текстовые поля (тип TextBox) – это объекты с именами, имеющими префикс txt: txtFIO – для поля «Фамилия И.О.»; txtM1, txtM2, txtM3, txtM4, txtM5 –
группа объектов, которая используется для ввода оценок.
Командные кнопки (тип Button) – это объекты с префиксами cmd, нажатие
на кнопку (событие Click), как правило, вызывает определенное действие, связанное с кнопкой.
29
Элементы управления DateTimePicker, позволяющие достаточно удобно
вводить даты: txtDR – для поля «Дата рождения».
Рисунок 7. Форма для ввода и редактирования записей файла данных
Комбинированные поля (тип ComboBox) – они сочетают возможности текстового поля и списка, который может быть раскрывающимся; этот тип элемента
управления используется для значения поля «Пол» (ComPol), список значений
этого поля задается свойством Items. Свойства элемента «ComPol» зададим следующим образом:
Items
= “мужской”
“женский”
Sorted = True
30
Для заполнения поля «Специальность» (ComSpec) используются данные из
файла-справочника, список значений для этого поля формируется во время выполнения программы (код будет приведен ниже).
Флажок (тип CheckBox) – используется для того, чтобы отметить записи,
которые будут удалены из файла: Check1.
Элемент управления NumericUpDown, который исполняет роль счетчика:
txtKurs – для поля «Курс»; txtGroup – для поля «Группа»; txtKol – для поля «Количество оценок».
Элемент «NumericUpDown» используется для изменения, как в сторону
увеличения, так и в сторону уменьшения с заданным шагом, в нашем случае равным 1 (свойство «increment») значений полей «Курс», «Группа» и «Количество
оценок». Свойства «minimum» и «maximum» задают нижнюю и верхнюю границы
изменения счетчика соответственно.
Для перемещения по записям файла кроме командных кнопок используется
также вертикальная полоса прокрутки, которая имеет имя «vscrZap», значения некоторых ее свойств определены следующим образом:
minimum = 1
maxmum = 100
SmallChange = 1
LargeChange = 2
Value = 1
В поле «специальность» при заполнении и просмотре записей основного
файла базы данных должны подставляться данные из файла-справочника, для чего были составлены процедуры и функции, приведенные в следующем разделе.
В этом месте необходимо нанести на форму все элементы управления, задать
из свойства и протестировать форму в автономном режиме, чтобы сравнить
результат проектирования с приведенным образцом. Для автономного тестирования сделайте стартовым объектом форму frmInputEdit.
31
10.2. Программное обеспечение формы для ввода и редактирования
Программное обеспечение формы – это процедуры обработки событий, связанные с элементами управления формы, и пользовательские процедуры и функции, которые непосредственно с элементами не связаны.
10.2.1. Пользовательские процедуры и функции
Сначала опишем пользовательские процедуры и функции для работы с файлом-справочником. С их помощью выполняется связывание основного файла базы данных с файлом-справочником для поля «специальность».
Пользовательская процедура LoadSprav формирует список, который будет
показан в поле ввода комбинированного списка ComSpec, т.е. во время выполнения программы формируется значение свойства Items элемента ComSpec, в список Items загружаются все записи файла-справочника.
Private Sub LoadSprav()
Dim Sp As TSpec = New TSpec()
Dim i As Integer
' очищаем список элемента ComSpec и добавляем в него
' пустую строку
ComSpec.Items.Clear()
ComSpec.Items.Add(" ")
' определяем количество записей в справочнике
Decl.NSpec = F1_sp.Length \ Sp.len
' если есть хотя бы одна запись,
If NSpec <> 0 Then
' то поочередно считываем их из файла и
' добавляем в список элемента ComSpec
For i = 1 To NSpec
Sp.ReadFromFile(F1_sp, i)
ComSpec.Items.Add(Trim(Sp.Number) + _
" - " + Trim(Sp.Name))
Next i
End If
End Sub
32
Пользовательская функция FindSpecCode, возвращает учетный номер специальности, находящейся в справочнике на указанной позиции, передаваемой в
качестве параметра.
Private Function FindSpecCode(ByVal number As Integer) As _
Integer
Dim Sp As TSpec = New TSpec()
Sp.ReadFromFile(F1_sp, number)
FindSpecCode = Sp.code
End Function
Пользовательская функция FindSpecIndex получает на вход учетный номер
специальности и возвращает номер записи в файле-справочнике, соответствующие этой специальности.
Public Function FindSpecIndex(ByVal code As Integer) _
As Integer
Dim Sp As TSpec = New TSpec()
Dim i As Integer
Dim temp As Integer
' определяется количество записей в справочнике
NSpec = F1_sp.Length \ Sp.len
temp = 0
For i = 1 To NSpec
' поочередно считываются записи из файла
Sp.ReadFromFile(F1_sp, i)
' и если учетный номер записи совпадает,
If (Sp.Code = code) Then
' то запоминается номер его позиции
temp = i
' и осуществляется выход из цикла проверки
Exit For
End If
Next
' возвращается запомненный номер позиции
FindSpecIndex = temp
End Function
Описав все эти процедуры и функции, мы обеспечили взаимодействие данных основного файла с данными в файле-справочнике, т.е. обеспечили связь между файлами.
33
Для ввода значений полей новой записи файла данных должна быть активизирована форма, подготовленная для ввода данных, т.е. в ней некоторые поля
должны быть очищены, а некоторые должны быть заполнены значениями по
умолчанию. Из кнопок, обеспечивающих перемещение, активной должна быть
только кнопка «Добавить». Все эти действия предусмотрены в пользовательской
процедуре ShowNewZap. Опишем код этой процедуры.
Public Sub ShowNewZap()
' загружаем Файл-справочник специальности, выполняя
' пользовательскую процедуру
Call LoadSprav()
' полоса прокрутки становится неактивной
vscrZap.Enabled = False
' кнопка «Добавить» становится активной
cmdAdd.Enabled = True
' кнопки «Вперед», «Конец», «Изменить» и «Обновить»
' становятся неактивными
cmdForward.Enabled = False
cmdBottom.Enabled = False
cmdPack.Enabled = False
cmdEdit.Enabled = False
' начальное заполнение элементов,
' соответствующих полям записей
txtFIO.Text = ""
txtKurs.Value = 1
txtGroup.Value = 1
txtKol.Value = 2
ComPol.Text = ComPol.Items(1)
ComSpec.SelectedIndex = 0
txtDR.Value = Now
' в начале предоставлена возможность ввода двух оценок
' пользователь может увеличить их количество до пяти
txtM1.Visible = True
txtM2.Visible = True
txtM3.Visible = False
txtM4.Visible = False
txtM5.Visible = False
' очистка значений элементов txtM,
' которые могли остаться после ввода предыдущей записи
txtM1.Text = ""
txtM2.Text = ""
34
txtM3.Text = ""
txtM4.Text = ""
txtM5.Text = ""
lblZap.Text = "Новая запись"
txtFIO.Focus()
Check1.Visible = False
End Sub
После ввода всех значений новой записи, для внесения ее в базу данных
нужно нажать на кнопку «Добавить».
После окончания ввода данных необходимо закрыть форму frmInputEdit.
При этом все введенные данные должны сохраниться, поэтому при закрытии
формы необходимо запросить у пользователя имя файла, в который должно производиться сохранение. Но поскольку эту форму можно закрыть несколькими
способами (например, нажав на кнопку «Выход» или кнопку
в правом верхнем
углу формы), поэтому необходимо обработать все события, обеспечивающие закрытие формы. А поскольку выходу из формы соответствует одна и та же последовательность действий, то оформим ее в виде пользовательской процедуры
ExitFromInputEdit.
Sub ExitFromInputEdit()
Dim PathOld As String
Dim PathOldSpec As String
' если путь к основному файлу равен "c:\untitled.dan", т.е.
' форма открыта в режиме создания,
frmMenu.Text = frmMenu.Text + " В.А."
If LCase(Decl.Path) = PathUntitled Then
' то выводится запрос пользователю о сохранении базы
Button = MsgBox("Сохранить файл?", vbQuestion +_
vbYesNoCancel, "Сохранение файла")
If Button = vbYes Then
' если пользователь подтверждает сохранение, то
' следует запрос имени файла, в который будет
' сохранена база данных
PathOld = Decl.Path
PathSpec = Mid(Decl.Path, 1, Len(Decl.Path) - 4) + _
".spe"
PathOldSpec = PathSpec
With frmMenu.SaveFileDialog1
.FileName = ""
35
.Filter = "Все файлы (*.*)|*.*|" + _
"текстовые файлы(*.txt)|*.txt|" + _
"файлы исх. данных(*.dan) |*.dan|" + _
"файлы результата (*.rez)|*.rez"
.FilterIndex = 3
.ShowDialog()
Decl.Path = .FileName
If Decl.Path <> "" Then
PathSpec = Mid(Decl.Path, 1, Len(Decl.Path) - 4) _
+ ".spe"
End If
End With
' если путь не пуст, т.е. пользователь указал
' имя нового файла,
If Decl.Path <> "" Then
' то файлы закрывается и переименовываются
CloseAllFiles()
If Not (Dir(Decl.Path) = "") Then
Kill(Decl.Path)
Kill(PathSpec)
End If
Rename(PathOld, Decl.Path)
Rename(PathOldSpec, Decl.PathSpec)
' затем открываются файлы с
' новыми именами
f1 = New FileStream(Decl.Path, FileMode.OpenOrCreate)
F1_sp = New FileStream(Decl.PathSpec, _
FileMode.OpenOrCreate)
' изменение заголовка формы
Me.Text = "Файл: " + Decl.Path
' все пункты меню становятся активными
frmMenu.mnuView.Enabled = True
frmMenu.mnuQuery.Enabled = True
frmMenu.mnuSort.Enabled = True
frmMenu.mnuFileSaveItem.Enabled = True
frmMenu.mnuFileSaveAsItem.Enabled = True
frmMenu.mnuFileCloseItem.Enabled = True
frmMenu.mnuFileDeleteItem.Enabled = True
frmMenu.mnuSearch.Enabled = True
' форма закрывается
Me.Hide()
' форма frmMenu становится активной
frmMenu.Show()
36
frmMenu.Enabled = True
frmMenu.Focus()
Else
' иначе считается, что нажата кнопка
' «Отмена»
Decl.Path = PathOld
PathSpec = PathOldSpec
Button = vbCancel
End If
Else
' если пользователь на вопрос о сохранении
' файла нажал кнопку «Нет»
If Button = vbNo Then
Pos = 0
N = 0
' файлы закрываются и удаляются
CloseAllFiles()
Kill(Decl.Path)
Kill(PathSpec)
' пункты меню, которые были неактивными в
' начале работы программы, снова
' становятся неактивными
frmMenu.mnuFileSaveItem.Enabled = False
frmMenu.mnuFileSaveAsItem.Enabled = False
frmMenu.mnuFileCloseItem.Enabled = False
frmMenu.mnuFileDeleteItem.Enabled = False
frmMenu.mnuView.Enabled = False
frmMenu.mnuSort.Enabled = False
frmMenu.mnuQuery.Enabled = False
frmMenu.mnuSearch.Enabled = False
' форма закрывается
Me.Hide()
' форма frmMenu становится активной
frmMenu.Show()
frmMenu.Enabled = True
frmMenu.Focus()
End If
End If
Else
' в случае если форма была открыта в режиме просмотра,
' она закрывается
Me.Hide()
' форма frmMenu становится активной
frmMenu.Show()
frmMenu.Enabled = True
frmMenu.Focus()
End If
37
End Sub
Теперь, опишем процедуры обработки событий нажатия на кнопку «Выход»
или кнопку в правом верхнем углу формы.
Обработка события закрытия формы по нажатию кнопки «Выход»:
Private Sub cmdExit_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdExit.Click
‘ вызов процедуры закрытия формы
ExitFromInputEdit()
End Sub
Обработка события закрытия формы по нажатию кнопки
:
Private Sub frmInputEdit_FormClosing(ByVal sender As _
System.Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles _
MyBase.FormClosing
Call ExitFromInputEdit()
‘ в том случае, если нажата кнопка «Отмена», то с формы
' выход не происходит
If Button = vbCancel Then e.Cancel = True
End Sub
Хотя подготовлено еще не все программное обеспечение формы, можно запустить проект, но пока не сохранять данные, так как наверняка будут сделаны ошибки, которые необходимо исправить.
Для работы с данными, а именно для вывода в форму полей очередной просматриваемой записи, предусмотрена процедура ShowZap. Она выполняет загрузку элементов формы значениями полей текущей записи (записи с номером i). Ниже приводится код этой процедуры, параметром ее является номер записи в файле.
Public Sub ShowZap(ByVal i As Integer)
Dim R As TStud = New TStud()
' номер записи не должен быть нулем!
If i <> 0 Then
' максимальное значение полосы прокрутки равно
' количеству записей
vscrZap.Maximum = N + 1
vscrZap.Enabled = True
Check1.Checked = False
38
txtM1.Text = ""
txtM1.Visible =
txtM2.Text = ""
txtM2.Visible =
txtM3.Text = ""
txtM3.Visible =
txtM4.Text = ""
txtM4.Visible =
txtM5.Text = ""
txtM5.Visible =
False
False
False
False
False
' производится чтение записи и заполнение элементов
' формы, соответствующих полям записи
R.ReadFromFile(f1, Ind(i))
txtFIO.Text = R.FIO
ComPol.SelectedIndex = R.Pol
txtKurs.Text = CStr(R.Kurs)
txtGroup.Text = CStr(R.Group)
txtKol.Text = CStr(R.Kol)
ComSpec.SelectedIndex = FindSpecIndex(R.Spec)
txtDR.Value = R.DataR
If R.Kol > 0 Then
txtM1.Visible = True
txtM1.Text = CStr(R.M(0))
End If
If R.Kol > 1 Then
txtM2.Visible = True
txtM2.Text = CStr(R.M(1))
End If
If R.Kol > 2 Then
txtM3.Visible = True
txtM3.Text = CStr(R.M(2))
End If
If R.Kol > 3 Then
txtM4.Visible = True
txtM4.Text = CStr(R.M(3))
End If
If R.Kol > 4 Then
txtM5.Visible = True
txtM5.Text = CStr(R.M(4))
End If
' вывод номера записи и отметки об ее удалении
lblZap.Text = CStr(i) + "из" + CStr(N)
Check1.Visible = True
Check1.Checked = Del(Ind(i))
' значение полосы прокрутки полагается равным
' номеру записи
39
vscrZap.Value = i
End If
End Sub
10.2.2. Процедуры обработки событий
Для работы пользователя с файлом справочником на форму были помещены кнопки cmdAddSpec, cmdEditSpec и cmdDelSpec, соответственно, для добавления, изменения и удаления записей в файле справочнике. Опишем процедуры обработки событий нажатия на эти кнопки.
Процедура обработки события для добавления записи в файл-справочник.
Private Sub cmdAddSpec_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles cmdAddSpec.Click
Dim TempStr As String
Dim Sp As TSpec = New TSpec()
Dim tempIndex As Integer
' текущая форма становится неактивной
Me.Enabled = False
' до тех пор пока пользователь не введет число, происходит
' запрос учетного номера новой специальности
TempStr = InputBox("Введите учетный номер специальности", _
"Ввод данных")
Do While Not (IsNumeric(TempStr))
If (TempStr = "") Then
Me.Enabled = True
Exit Sub
End If
MsgBox("Ошибка ввода", vbOKOnly + vbExclamation, _
"Ошибка")
TempStr = InputBox("Введите учетный номер" + _
" специальности", "Ввод данных")
Loop
' учетный номер записывается в структуру Sp
Sp.Code = CByte(TempStr)
' запрос кода специальности
TempStr = InputBox("Введите код сциальности (6 цифр)", _
"Ввод данных")
' код записывается в структуру Sp
Sp.Number = TempStr
' запрос названия новой специальности
TempStr = InputBox("Введите название специальности", _
"Ввод данных")
40
' название записывается в структуру Sp
Sp.Name = TempStr
' проверяется попытка повторного использования учетного
' номера специальности в файле справочнике
tempIndex = FindSpecIndex(Sp.Code)
' если такой номер уже есть,
If 0 <> tempIndex Then
' то выводится сообщение о возможности изменения данных
If (vbYes = MsgBox("Такой учетный номер уже есть! " _
+ " Перезаписать?", vbYesNo + vbExclamation, _
"Предупреждение")) Then
' изменение данных записи
Sp.writeToFile(F1_sp, tempIndex)
End If
Else
' добавление новой записи в справочник
Sp.writeToFile(F1_sp, NSpec + 1)
End If
' вызов пользовательской процедуры загрузки записей
' справочника в элемент ComSpec
Call LoadSprav()
' текущая форма становится активной
Me.Enabled = True
End Sub
Процедура обработки события изменения записи в файле-справочнике.
Private Sub cmdEditSpec_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdEditSpec.Click
Dim Sp As TSpec = New TSpec()
Dim i As Integer
' текущая форма становится неактивной
Me.Enabled = False
' чтение текущей записи из файла-справочника
i = ComSpec.SelectedIndex
Sp.ReadFromFile(F1_sp, i)
' запрос на изменение кода специальности
If (vbNo = MsgBox("Код специальности оставить без" + _
" изменения?", vbYesNo + vbExclamation, "Вопрос:")) Then
Sp.Number = InputBox("Введите новый код " + _
"специальности (6 цифр)", "Ввод данных")
End If
' запрос на изменение кода специальности
If (vbNo = MsgBox("Название специальности оставить " + _
41
"без изменения?", vbYesNo + vbExclamation, _
"Вопрос:")) Then
Sp.Name = InputBox("Введите новое название " + _
"специальности", "Ввод данных")
End If
' запись обновленных данных
Sp.writeToFile(F1_sp, i)
' вызов пользовательской процедуры загрузки записей
' справочника в элемент ComSpec
Call LoadSprav()
' текущая форма становится активной
Me.Enabled = True
End Sub
Процедура обработки события удаления записи из файла-справочника.
Private Sub cmdDelSpec_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdDelSpec.Click
Dim i As Integer
Dim j As Integer
Dim ListIndex As Integer
Dim Sp As TSpec = New TSpec()
Dim R As TStud = New TStud()
Dim TempFile As FileStream
' текущая форма становится неактивной
Me.Enabled = False
' сообщение о возможности удаления записей
' из основного файла
If (vbNo = MsgBox("Внимание!!! Все данные, " + _
"содержащие удаляемую информацию будут уничтожены!" + _
" Продолжить?", vbYesNo + vbExclamation, _
"Предупреждение:")) Then
' если была нажата кнопка «Нет», то выход из процедуры
' и текущая форма становится неактивной
Me.Enabled = True
Exit Sub
End If
' отметка на удаление всех записей основного файла базы,
' в которых содержится информация об удаляемой спец-ности
ListIndex = ComSpec.SelectedIndex
If ListIndex <> 0 Then
Sp.ReadFromFile(F1_sp, ListIndex)
42
For i = 1 To N
R.ReadFromFile(f1, i)
If R.Spec = Sp.Code Then
Del(i) = 1
End If
Next i
End If
' запись во временный файл всех данных, за исключением
' данных об удаляемой специальности
TempFile = New FileStream (PathTemp, FileMode.Create)
j = 1
For i = 1 To NSpec
Sp.ReadFromFile(F1_sp, i)
If i <> ListIndex Then
Sp.writeToFile(TempFile, j)
j = j + 1
End If
Next i
F1_sp.Close()
TempFile.Close()
' перезапись измененного файла-справочника
Kill(PathSpec)
Rename(PathTemp, PathSpec)
' загрузка обновленного файла-справочника
F1_sp = New FileStream(PathSpec, FileMode.Open)
' вызов пользовательской процедуры загрузки записей
' справочника в элемент ComSpec
Call LoadSprav()
' текущая форма становится активной
Me.Enabled = True
' вызов процедуры удаления отмеченных записей
' основного файла данных
cmdPack_Click(sender, e)
End Sub
В этом месте снова запустите проект для проверки взаимодействия основного
файла базы данных с файлом-справочником, но сохранять записи также пока
43
невозможно, так как не реализована кнопка «Добавить». Не забывайте регулярно сохранять проект.
Процедура обработки события нажатия на кнопку «Добавить» обеспечивает
добавление записи в файл базы данных и подготовку к вводу полей новой записи.
Private Sub cmdAdd_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdAdd.Click
Dim R As TStud = New TStud()
Dim Sp As TSpec = New TSpec()
' заполнение полей записи
R.FIO = txtFIO.Text
R.Kurs = CByte(txtKurs.Text)
R.Group = CByte(txtGroup.Text)
R.Kol = CByte(txtKol.Text)
R.Pol = CByte(ComPol.SelectedIndex)
R.Spec = FindSpecCode(ComSpec.SelectedIndex)
R.DataR = txtDR.Value
' проверка корректности введенных данных в поле
' специальности
If R.Spec = 0 Then
MsgBox("Неверное значение поля специальность!")
Exit Sub
End If
' проверка непустоты полей оценок
If (txtM1.Text = "") Or (txtM2.Text = "") Or _
(R.Kol > 2) And (txtM3.Text = "") Or _
(R.Kol > 3) And (txtM4.Text = "") Or _
(R.Kol > 4) And (txtM5.Text = "") Then
MsgBox("Введены не все оценки!")
Exit Sub
End If
R.M(0) = CByte(txtM1.Text)
R.M(1) = CByte(txtM2.Text)
If R.Kol > 2 Then R.M(2) = CByte(txtM3.Text)
If R.Kol > 3 Then R.M(3) = CByte(txtM4.Text)
If R.Kol > 4 Then R.M(4) = CByte(txtM5.Text)
' позиция передвигается,
Pos = N + 1
' количество записей увеличивается
N = N + 1
' запись вносится в файл
R.writeToFile(f1, Pos)
44
' кнопки «Начало» и «Назад» становятся активными
cmdTop.Enabled = True
cmdBackUp.Enabled = True
cmdExit.Focus()
' вызов процедуры для заполнения новой записи
Call ShowNewZap()
End Sub
А теперь попытайтесь заполнить файл данными (1–2 записи) и закрыть форму frmInputEdit с сохранением файлов.
Заметим, что количество видимых на форме элементов txtM«i», предназначенных для ввода оценок прямо зависит от содержимого элемента txtKol. Таким
образом, скрытие лишних видимых элементов и показ нужных невидимых элементов txtM«i» должны зависеть от изменения содержимого txtKol, т.е. далее
необходимо обработать событие изменения содержимого элемента txtKol. Приведем код процедуры обработки этого события.
Private Sub txtKol_ValueChanged(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles txtKol.ValueChanged
Dim i As Integer = txtKol.Value
' все элементы, соответствующие оценкам скрываются
txtM1.Visible = False
txtM2.Visible = False
txtM3.Visible = False
txtM4.Visible = False
txtM5.Visible = False
' открываются первые несколько элементов
' их количество зависит от значения элемента txtKol
If i > 0 Then txtM1.Visible = True
If i > 1 Then txtM2.Visible = True
If i > 2 Then txtM3.Visible = True
If i > 3 Then txtM4.Visible = True
If i > 4 Then txtM5.Visible = True
End Sub
Таким образом, при изменении содержимого элемента txtKol все элементы
txtM, соответствующие оценкам скрываются, затем открывается столько элементов, сколько указано в содержимом элемента txtKol.
45
Кроме этого необходимо предусмотреть проверку корректности вводимых
данных в поля, соответствующие оценкам. Это можно сделать с помощью следующей обработки события изменения содержимого элементов txtM.
Private Sub txtM_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles txtM5.TextChanged, _
txtM4.TextChanged, txtM3.TextChanged, txtM2.TextChanged, _
txtM1.TextChanged
Dim txtM As TextBox = sender
' если содержимое элемента txtM(Index) является числом
If IsNumeric(txtM.Text) = True Then
' и не находится в пределах от 2 до 5,
If CByte(txtM.Text) < 2 Or CByte(txtM.Text) > 5 Then
' пользователь получает предупреждение об ошибке
MsgBox("Неверная оценка", vbExclamation + vbOKOnly, _
"Ошибка")
End If
ElseIf txtM.Text <> "" Then
' если содержимое не является цифрой,
' пользователь получает предупреждение об ошибке
MsgBox("Оценка должна являться цифрой!", vbOKOnly + _
vbExclamation, "Ошибка")
End If
End Sub
В этом месте нужно выполнить полное тестирование формы frmInputEdit, для
этого необходимо заполнить файл данными (4–5 записей) и сохранить его.
Кроме ввода новых данных форма frmInputEdit должна позволять просматривать и редактировать существующие данные, для этого необходимо описать перемещение по записям нашей базы данных. Для перемещения по записям будем
использовать кнопки «Начало» (cmdTop), «Конец» (cmdBottom), «Назад»
(cmdBackUp) и «Вперед» (cmdForward). Опишем обработку событий нажатия для
каждой кнопки:
Private Sub cmdTop_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles cmdTop.Click
' вывод первой записи данных
Pos = 1
Call ShowZap(Pos)
' кнопки перемещения по записям становятся активными
frmMenu.Text = frmMenu.Text + " Авт"
46
cmdTop.Enabled = True
cmdBottom.Enabled = True
cmdForward.Enabled = True
cmdBackUp.Enabled = True
' кнопки «Изменить» и «Обновить» становятся активными
cmdEdit.Enabled = True
cmdPack.Enabled = True
' кнопка «Добавить» становится неактивной
frmMenu.Text = frmMenu.Text + "ор: "
cmdAdd.Enabled = False
' фокус передается на кнопку «Выход»
cmdExit.Focus()
End Sub
Private Sub cmdBottom_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdBottom.Click
' вывод последней записи данных
Pos = N
Call ShowZap(Pos)
' кнопки перемещения по записям становятся активными
frmMenu.Text = frmMenu.Text + "дов "
cmdTop.Enabled = True
cmdBottom.Enabled = True
cmdForward.Enabled = True
cmdBackUp.Enabled = True
' кнопки «Изменить» и «Обновить» становятся активными
cmdEdit.Enabled = True
cmdPack.Enabled = True
' кнопка «Добавить» становится неактивной
cmdAdd.Enabled = False
' фокус передается на кнопку «Выход»
cmdExit.Focus()
End Sub
Private Sub cmdBackUp_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdBackUp.Click
' переход на предыдущую позицию
Pos = Pos - 1
' все кнопки становятся активными
frmMenu.Text = frmMenu.Text + "рохо"
cmdTop.Enabled = True
cmdBottom.Enabled = True
47
cmdForward.Enabled = True
cmdEdit.Enabled = True
cmdPack.Enabled = True
' если запись первая, то кнопка «Назад»
' становится неактивной
If Pos <= 1 Then
cmdBackUp.Enabled = False
Pos = 1
End If
' вывод записи с номером Pos
Call ShowZap(Pos)
End Sub
Private Sub cmdForward_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdForward.Click
' переход на следующую позицию
frmMenu.Text = frmMenu.Text + "Ско"
Pos = Pos + 1
' если была не последняя запись,
If Pos <= N Then
' то переход на следующую запись
vscrZap.Value = Pos
Call ShowZap(Pos)
cmdBackUp.Enabled = True
cmdExit.Focus()
Else
' иначе вызов процедуры для заполнения новой записи
Call ShowNewZap()
End If
End Sub
Для перемещения по записям базы данных можно использовать полосу
прокрутки (элемент управления VscrZap). При помощи полосы прокрутки можно
перемещаться на одну или несколько записей в базе. Процедура обработки события изменения значения имеет вид:
Private Sub vscrZap_Scroll(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.ScrollEventArgs) _
Handles vscrZap.Scroll
‘ максимальное значение полосы прокрутки равно
‘ количеству записей
VScrZap.Maximum = N
‘ перемещение на запись по значению полосы прокрутки
48
Pos = VScrZap.Value
Call ShowZap(Pos)
End Sub
Заметим, что во всех этих процедурах обработки событий нажатия на кнопки вызывается процедура ShowZap. Эта процедура позволяет загрузить в элементы формы все поля указанной записи, т.е. именно она обеспечивает просмотр
определенной записи в данных.
Новый этап тестирования проекта для проверки возможности перемещения
по записям базы данных с использованием описанных возможностей.
Описав процедуры обработки событий и пользовательские процедуры, мы
подготовили инструменты для работы с отдельными записями файла базы данных, и теперь можно перейти к созданию «реальной» базы данных.
Для очередного этапа тестирования проекта необходимо подготовить тестовый файл, в котором должно быть 15–20 записей с разными значениями курсов
(2–3 курса), для каждого значения курса должно быть несколько групп (2–3 группы), в каждой группе должно быть несколько студентов (3–4 студента).
Создайте файл, удовлетворяющий описанным выше требованиям, и сохраните его в папке проекта. Этот файл будет использоваться для тестирования заявленных функций приложения.
11. Работа с существующим файлом
11.1. Открытие файла
Для открытия файла необходимо выполнить команду «Файл  Открыть».
Ей соответствует процедура обработки события, приведенная ниже.
Private Sub mnuFileOpenItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuFileOpenItem.Click
Dim R As TStud = New TStud()
49
Dim Sp As TSpec = New TSpec()
Dim i As Integer
Decl.Path = PathUntitled
' запрос имени файла базы данных
With OpenFileDialog1
.FileName = ""
.Filter = "Все файлы (*.*)|*.*|" + _
"текстовые файлы(*.txt)|*.txt|" + _
"файлы исх. данных(*.dan)|*.dan|" + _
"файлы результата (*.rez)|*.rez"
.FilterIndex = 3
.ShowDialog()
Decl.Path = .FileName
If Decl.Path <> "" Then
PathSpec = Mid(Decl.Path, 1, Len(Decl.Path) - 4) + _
".spe"
End If
End With
' если имя файла не пусто
If Decl.Path <> "" Then
' файл открывается
f1 = New FileStream(Decl.Path, FileMode.Open)
' определяется количество записей базы данных
N = f1.Length \ R.len
' аналогично открываем файл справочник для
' специальности
F1_sp = New FileStream(PathSpec, FileMode.Open)
NSpec = F1_sp.Length \ Sp.len
Pos = 1
frmInputEdit.Text = "Файл: " + Decl.Path
' все пункты меню становятся активными
mnuView.Enabled = True
mnuSort.Enabled = True
mnuSearch.Enabled = True
mnuQuery.Enabled = True
mnuFileSaveItem.Enabled = True
mnuFileSaveAsItem.Enabled = True
mnuFileCloseItem.Enabled = True
mnuFileDeleteItem.Enabled = True
End If
' инициализация индексного массива Ind, который будет
' использоваться для сортировки данных, и массива Del
' для пометки удаляемых записей
For i = 1 To Nmax
Ind(i) = i
50
Del(i) = 0
Next i
End Sub
При выборе пункта меню «Файл  Открыть» появится диалоговое окно, в
котором пользователь может выбрать файл, который нужно открыть. Полное имя
файла будет записано в переменную Path модуля Declar и в том случае, если путь
существует, производится чтение из выбранного файла. Файл-справочник для
специальности имеет то же самое имя, что и основной файл. Отличие состоит
только в расширениях этих файлов. Кроме этого, все пункты пользовательского
меню становятся доступными. Для того чтобы просмотреть содержимое файла базы данных, нужно в строке меню выбрать пункт меню «Просмотр» и в нем один
из возможных вариантов просмотра.
11.2. Просмотр файла базы данных
Файл базы данных можно просмотреть, используя форму frmInputEdit. Для
этого необходимо написать еще одну пользовательскую процедуру для данной
формы (не забудьте для этого перейти в окно кода формы frmInputEdit). Это процедура с именем View_Form, которая должна загрузить данные и вывести первую
запись в уже известном нам виде на форме frmInputEdit. Ниже приведен код этой
процедуры.
Public Sub view_form()
Dim R As TStud = New TStud()
' загрузка формы frmInputEdit
frmMenu.Enabled = False
Me.Enabled = True
Me.Show()
' загрузка Файла-справочника по специальности, выполнение
' пользовательской процедуры
Call LoadSprav()
' определение количества записей в основном файле базы
N = f1.Length \ R.len
51
' если записей нет, то вызов процедуры для заполнения
' новой записи
If N = 0 Then
Call ShowNewZap()
cmdAdd.Enabled = True
Else
' иначе производится загрузка и вывод первой записи
Pos = 1
vscrZap.Value = Pos
Call ShowZap(Pos)
' кнопки перемещения по записям становятся активными
cmdTop.Enabled = True
cmdBottom.Enabled = True
cmdForward.Enabled = True
cmdBackUp.Enabled = True
' кнопки «Изменить» и «Обновить» становятся активными
cmdEdit.Enabled = True
cmdPack.Enabled = True
' кнопка «Добавить» становится неактивной
cmdAdd.Enabled = False
' фокус передается на кнопку «Выход»
cmdExit.Focus()
End If
End Sub
В данной процедуре открытый файл проверяется на пустоту и если он пуст
(т.е. файл существует, но в нем нет ни одной записи данных), то вызывается процедура создания нового файла-базы данных (процедура ShowNewZap). Если файл
не является пустым, то вызывается процедура ShowZap для вывода в форму первой записи, а так же делаются активными кнопки, позволяющие перемещаться по
записям базы данных.
Для просмотра файла базы данных с использованием формы frmInputEdit
необходимо в форме frmMenu написать процедуру обработки события выбора
команды меню «Просмотр  Форма», которая содержит вызов пользовательской
процедуры View_Form, принадлежащей форме frmInputEdit:
Private Sub mnuViewFormItem_Click(ByVal sender As _
52
System.Object, ByVal e As System.EventArgs) _
Handles mnuViewFormItem.Click
‘ вызов процедуры загрузки формы
frmInputEdit.View_Form
End Sub
При просмотре данных в виде формы экранная форма содержит данные одной записи файла базы данных. Но иногда необходимо иметь возможность просмотреть данные файла в виде таблицы, в столбцах которой выводятся значения
полей записей файла.
Для вывода данных в виде таблицы добавим в проект еще одну форму, дадим этой форме имя frmTableReadOnly и поместим на нее элемент для отображения данных в виде таблицы (DataGridView), переименуем этот элемент, задав его
имя, GridView1.
Процедура обработки события выбора пункта меню «Просмотр  Таблица»
имеет вид:
Private Sub mnuViewTableItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuViewTableItem.Click
Dim i As Integer
Dim j As Integer
Dim R As TStud = New TStud()
Dim sp As TSpec = New TSpec()
With frmTableReadOnly.GridView1
' установка количества строк таблицы и ширины столбцов
.ColumnCount = 12
' запись названий столбцов в таблицу
.Columns(0).Name = "Номер"
.Columns(1).Name = "Курс"
.Columns(2).Name = "Группа"
.Columns(3).Name = "Специальность"
.Columns(4).Name = "ФИО"
.Columns(5).Name = "Пол"
.Columns(6).Name = "Кол-во оценок"
For j = 1 To 5
.Columns(j + 6).Name = "Оц.№ " + CStr(j)
Next j
53
' чтение очередной записи и загрузка ее полей
' в таблицу
For i = 1 To N
R.ReadFromFile(f1, Ind(i))
' чтение специальности по ее коду
j = frmInputEdit.FindSpecIndex(R.Spec)
sp.ReadFromFile(F1_sp, j)
' загрузка новой строки в таблицу
Dim row As String() = New String() _
{CStr(i), R.Kurs, R.Group, _
Trim(sp.Number) + " - " + Trim(sp.Name), Trim(R.FIO), _
R.Pol, R.Kol, R.M(0), R.M(1), R.M(2), R.M(3), R.M(4)}
.Rows.Add(row)
Next i
End With
' изменение заголовка формы
frmTableReadOnly.Text = "Просмотр файла: " + Decl.Path
' загрузка формы frmTableReadOnly
frmTableReadOnly.Show()
End Sub
На этом месте рекомендуется протестировать создаваемый проект. Особое
внимание следует уделить корректности чтения записей из файла и вывода их
в таблицу и элементы формы.
11.3. Изменение и удаление записей в файле базы данных
Эти действия предусмотрены в форме для ввода и редактирования (форма
frmInputEdit) и для их выполнения используются кнопки «Изменить» (cmdEdit) и
«Обновить» (cmdPack).
Для корректировки содержимого полей текущей записи используется кнопка «Изменить». Отредактировав нужные поля некоторой записи, нажимаем кнопку «Изменить» и все изменения для текущей записи вносятся в базу данных. Обработка события нажатия на кнопку «Изменить»:
Private Sub cmdEdit_Click(ByVal sender As System.Object, _
54
ByVal e As System.EventArgs) Handles cmdEdit.Click
Dim R As TStud = New TStud()
' производится заполнение всех полей записи,
' включая измененные
R.FIO = txtFIO.Text
R.Kurs = CByte(txtKurs.Text)
R.Group = CByte(txtGroup.Text)
R.Kol = CByte(txtKol.Text)
R.Pol = ComPol.SelectedIndex
R.Spec = FindSpecCode(ComSpec.SelectedIndex)
R.DataR = txtDR.Value
R.M(0) = CByte(txtM1.Text)
R.M(1) = CByte(txtM2.Text)
If R.Kol > 2 Then
If txtM3.Text <> "" Then
R.M(2) = CByte(txtM3.Text)
Else
MsgBox("Оценка №3 должна являться цифрой!", vbOKOnly + _
vbExclamation, "Ошибка")
Exit Sub
End If
End If
If R.Kol > 3 Then
If txtM4.Text <> "" Then
R.M(3) = CByte(txtM4.Text)
Else
MsgBox("Оценка №4 должна являться цифрой!", vbOKOnly + _
vbExclamation, "Ошибка")
Exit Sub
End If
End If
If R.Kol > 4 Then
If txtM5.Text <> "" Then
R.M(4) = CByte(txtM5.Text)
Else
MsgBox("Оценка №5 должна являться цифрой!", vbOKOnly + _
vbExclamation, "Ошибка")
Exit Sub
End If
End If
' запись вносится в файл на то место,
' на котором находилась старая запись
R.writeToFile(f1, Pos)
MsgBox("Изменение выполнено успешно!")
End Sub
55
С файлом исходных данных связан массив Del, который по умолчанию заполнен нулями. Удаляемым записям соответствует значение, равное единице. Для
того чтобы удалить некоторые записи, необходимо отметить их на форме
frmInputEdit, используя флажок-переключатель Check1, затем нажать на кнопку
«Обновить». Для элемента Check1 и кнопки «Обновить» процедуры обработки
события Click – щелчка левой кнопки мыши на этих объектах имеют вид:
Private Sub Check1_CheckedChanged(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles Check1.CheckedChanged
' отмечается на удаление запись с номером Pos
If Check1.Checked Then
Del(Ind(Pos)) = 1
Else
Del(Ind(Pos)) = 0
End If
End Sub
Private Sub cmdPack_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdPack.Click
Dim i As Integer
Dim j As Integer = 1
Dim R As TStud = New TStud()
' открывается вспомогательный файл
F2 = New FileStream(PathTemp, FileMode.Create)
' из основного файла во вспомогательный переписываются
' записи, которые не нужно удалять
For i = 1 To N
R.ReadFromFile(f1, i)
If Del(i) = 0 Then
R.writeToFile(F2, j)
j = j + 1
End If
Next i
' закрываются файлы, и происходит сохранение
' вспомогательного файла под именем основного
' файла базы данных
f1.Close()
F2.Close()
Kill(Decl.Path)
Rename(PathTemp, Decl.Path)
56
' открывается новый основной (рабочий файл) базы
f1 = New FileStream(Decl.Path, FileMode.Open)
N = f1.Length \ R.len
' возвращение исходных значений массивам Ind и Del
For i = 1 To Nmax
Ind(i) = i
Del(i) = 0
Next i
' вывод первой записи данных
Pos = 1
If N = 0 Then
Call ShowNewZap()
Else
Call ShowZap(Pos)
End If
MsgBox("Обновление выполнено успешно!")
End Sub
Таким образом, для удаления записей используется временный файл, куда
переносятся все те записи, которые не должны быть удалены (для них значение
Del(i) равно нулю), затем исходный файл удаляется, а временный файл переименовывается.
Новый этап тестирования проекта с целью проверки его работоспособности
при добавленных возможностях.
11.4. Сохранение и удаление файлов
Мы описали возможности ввода, просмотра и редактирования данных. Добавим несколько процедур, обрабатывающие события выбора следующих пунктов меню: «Файл  Сохранить как», «Файл  Закрыть» и «Файл  Удалить».
При выборе данного пункта меню «Файл  Сохранить как» основной файл
базы (файл с данными) должен быть сохранен под новым именем, а затем, должно
быть открыто это новое сохранение.
Private Sub mnuFileSaveAsItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
57
Dim
Dim
Dim
Dim
Handles mnuFileSaveAsItem.Click
R As TStud = New TStud()
Sp As TSpec = New TSpec()
PathOld As String
PathOldSpec As String
' запоминаются имена основного файла базы данных и
' Файла-справочника
PathOld = Decl.Path
PathSpec = Mid(Decl.Path, 1, Len(Decl.Path) - 4) + ".spe"
PathOldSpec = PathSpec
' запрос имени нового файла базы
With Me.SaveFileDialog1
.FileName = ""
.Filter = "Все файлы (*.*)|*.*|" + _
"Текстовые файлы. (*.txt)|*.txt|" + _
"Файлы исходных данных (*.dan)|*.dan|" + _
"Файлы результатов (*.rez)|*.rez"
.FilterIndex = 3
.ShowDialog()
Decl.Path = .FileName
If Decl.Path <> "" Then
PathSpec = Mid(Decl.Path, 1, Len(Decl.Path) - 4) + _
".spe"
End If
End With
' если имя нового основного файла пусто, то рабочие файлы
' остаются прежними и производится выход из процедуры
If Decl.Path = "" Then
Decl.Path = PathOld
PathSpec = PathOldSpec
Exit Sub
End If
' иначе файлы закрывается и производится копирование
' рабочих файлов
Close()
If Not (Dir(Decl.Path) = "") Then
Kill(Decl.Path)
Kill(PathSpec)
End If
FileCopy(PathOld, Decl.Path)
FileCopy(PathOldSpec, PathSpec)
' после копирования открываются новые файлы
f1 = New FileStream(Decl.Path, FileMode.Open)
F1_sp = New FileStream(PathSpec, FileMode.Open)
58
frmInputEdit.Text = "Файл: " + Decl.Path
End Sub
При выборе пункта меню «Файл  Закрыть» все открытые файлы должны
быть закрыты и все пункты меню, недоступные в начале работы снова должны
снова стать недоступными.
Private Sub mnuFileCloseItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuFileCloseItem.Click
' закрываются все файлы, открытые в процессе работы
CloseAllFiles()
' пункты меню, которые были неактивными в начале
' работы программы, снова становятся неактивными
mnuFileSaveItem.Enabled = False
mnuFileSaveAsItem.Enabled = False
mnuFileCloseItem.Enabled = False
mnuFileDeleteItem.Enabled = False
mnuView.Enabled = False
mnuSort.Enabled = False
mnuQuery.Enabled = False
mnuSearch.Enabled = False
End Sub
При выборе пункта меню «Файл  Удалить» основной файл базы (файл с
данными) должен быть удален, и все пункты меню, недоступные в начале работы
снова должны снова стать недоступными.
Private Sub mnuFileDeleteItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuFileDeleteItem.Click
Dim Button As Integer
' запрос подтверждения на удаление
Button = MsgBox("Действительно удалить?", vbYesNo + _
vbQuestion, "Удаление файла")
' в случае подтверждения вызывается процедура закрытия
' и удаляется основной файл базы данных
If Button = vbYes Then
Call mnuFileCloseItem_Click(sender, e)
Kill(Decl.Path)
Kill(PathSpec)
End If
End Sub
59
На этом месте снова необходимо протестировать проект на работоспособность и корректность работы. Особое внимание следует уделить взаимодействию различных компонентов приложения.
12. Сортировка данных
Сортировка данных в данной информационной системе производится при
помощи индексного массива Ind, описанного в модуле Declar. В этом случае результатом сортировки будет не отсортированный файл, а вспомогательный массив номеров (индексов) Ind, показывающий в каком порядке следует выбирать записи файла, чтобы они образовывали отсортированную последовательность.
Алгоритмы сортировки опишем в стандартном модуле, который необходимо добавить в проект под именем Sorting. Для сортировки данных будем использовать алгоритм сортировки обменом (метод «пузырьковой» сортировки).
Приведем код процедуры сортировки по числовым полям.
Public Sub Sort(Key() As Single, N As Integer, Ind() As Integer)
Dim i As Integer
Dim j As Integer
Dim k As Integer
For j = 1 To N - 1
For i = 1 To N - j
If Key(Ind(i)) > Key(Ind(i + 1)) Then
k = Ind(i)
Ind(i) = Ind(i + 1)
Ind(i + 1) = k
End If
Next i
Next j
End Sub
Перед обращением к этой процедуре необходимо инициализировать массив
Ind и занести элементы ключевого поля сортируемого файла во вспомогательный
массив Key. Благодаря описанию массива Key как вещественного в него можно
записывать числовые данные любого типа: как Single, так и Integer и Byte.
60
Кроме того, эта процедура пригодна и для сортировки по убыванию ключа;
для этого достаточно при инициализации массива Key умножить значения ключевых полей на минус единицу.
Для процедур сортировки по строковым полям и полям типа даты приведем только заголовки, так как код тела этих процедур полностью совпадает с кодом тела процедуры сортировки по числовым полям.
Заголовок процедуры сортировки по строковым полям имеет вид:
Public Sub SortStr(Key() As String , N As Integer, _
Ind() As Integer)
Заголовок процедуры сортировки по полям типа даты имеет вид:
Public Sub SortDate(Key() As Date, N As Integer, _
Ind() As Integer)
Опишем теперь работу с указанными процедурами сортировки. Т.е. опишем
процедуры обработки событий выбора пунктов меню «Сортировка  По курсу»,
«Сортировка  По группе», «Сортировка  По ФИО» и «Сортировка  Исходный порядок». При этом необходимо предусмотреть корректное выполнение вложенных сортировок.
Выбор пункта меню «Сортировка  По курсу»
Private Sub mnuSortKursItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuSortKursItem.Click
Dim i As Integer
Dim KeyK(Nmax) As Single
Dim R As TStud = New TStud()
' подготовка к сортировке
For i = 1 To N
R.ReadFromFile(f1, i)
KeyK(i) = R.Kurs
Next i
' вызов процедуры сортировки
Sort(KeyK, N, Ind)
End Sub
61
Выбор пункта меню «Сортировка  По группе»
Private Sub mnuSortGroupItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuSortGroupItem.Click
Dim i As Integer
Dim KeyK(Nmax) As Single
Dim R As TStud = New TStud()
' подготовка к сортировке
For i = 1 To N
R.ReadFromFile(f1, i)
KeyK(i) = R.Group
Next i
' вызов процедуры сортировки
Sort(KeyK, N, Ind)
End Sub
Выбор пункта меню «Сортировка  По ФИО»
Private Sub mnuSortFIOItem_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles mnuSortFIOItem.Click
Dim i As Integer
Dim KeyK(Nmax) As String
Dim R As TStud = New TStud()
' подготовка к сортировке
For i = 1 To N
R.ReadFromFile(f1, i)
KeyK(i) = Trim(R.FIO)
Next i
' вызов процедуры сортировки
SortStr(KeyK, N, Ind)
End Sub
Выбор пункта меню «Сортировка  Исходный порядок»
Private Sub mnuSortUnsorted_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuSortUnsorted.Click
Dim i As Integer
' возвращение исходных значений массивам Ind и Del
For i = 1 To Nmax
Ind(i) = i
Del(i) = 0
62
Next i
End Sub
Теперь, при выборе любого из этих пунктов меню, записи в исходном файле
будут выводиться в порядке, определяемом значениями индексного массива Ind,
как при просмотре в виде формы, так и при просмотре в виде таблицы.
В команды меню «Сортировка» вынесены сортировки по одному полю
(ключу) данных. А если необходимо выполнить сортировку по набору ключей,
т.е. представить данные о студентах так, что сначала идут записи по возрастанию
номера курса, записи в пределах одного курса – по возрастанию номера группы, а
записи в пределах одной группы – по фамилиям в алфавитном порядке. Здесь мы
встречаемся с сортировкой по набору ключей.
Для выполнения вложенной сортировки (сортировки по набору ключей)
можно воспользоваться описанными выше универсальными процедурами без каких-либо их модификаций. Это связано с тем, что используемый в процедурах алгоритм сортировки является устойчивым, т.е. в процессе сортировки относительное расположение элементов с одинаковыми ключами не изменяется.
Допустим, нужно выполнить сортировку по набору ключей: «Курс», «Группа», «Фамилия И.О.». Предположим, что исходный файл отсортирован по последнему ключу (в нашем случае по полю «Фамилия И.О.). Сортируя полученный
файл по предшествующему ключу (по полю «Группа»), мы можем быть уверены,
что в пределах одного значения данного ключа записи сохраняют упорядоченность по последнему ключу (это следует из свойства устойчивости алгоритма).
Т.е. данные будут отсортированы по полю «Группа», а внутри каждой группы –
по полю «Фамилия И.О.». Повторяя процесс сортировки по всем ключам от последнего к первому (т.е. в порядке, обратном требуемому), мы получим файл, отсортированный по набору ключей. Опять же напомним, что файл на самом деле
не сортируется, а сортируется индексный массив. Подчеркнем, что в описанном
63
процессе индексный массив, являющийся результатом сортировки по некоторому
ключу, является исходным для сортировки по очередному ключу.
Таким образом, процедуры модуля Sorting позволяют осуществлять сортировку записей файла по нескольким подчиненным ключам.
Если необходимо выполнить вложенную сортировку по другой совокупности полей (например, в других задачах), то нужно вернуться к исходному порядку, а затем выполнить последовательные сортировки в порядке, обратном порядку
рассматриваемой совокупности полей.
Заметим, однако, что при удалении записи в отсортированных данных (это
возможно только в режиме просмотра в виде формы) порядок следования записей
нарушается, возвращаясь к исходному виду.
На этом месте снова следует протестировать проект на работоспособность и
корректность работы. Проверка правильности работы сортировок может быть
осуществлена при помощи просмотра данных в виде таблицы. Особое внимание уделить корректности правки и удаления отсортированных записей.
13. Задачи, решаемые в информационной системе
В техническом задании запланировано решение следующих задач:
1. Вывод списков групп по запросам для одной группы и для всех групп.
2. Вычисление среднего балла для каждого студента.
3. Для каждой учебной группы вычисление количества студентов и среднего балла в группе.
Результаты решения задач оформляются в виде отчетов, вывод которых вызывается командами пункта меню «Отчеты» в строке меню главной формы.
Заметим, что первый пункт – это фактически два различных отчета: списки
всех групп и список одной, указанной группы. Из-за этого мы при создании пунктов меню поставили в соответствие этому отчету два пункта меню: «Отчеты 
Списки групп  Все группы» и «Отчеты  Списки групп  Одна группа».
64
Отчеты будем генерировать в виде текстовых файлов. Для их просмотра используем компонент RichTextBox.
Поместим этот элемент на форму frmMenu, задав ему следующие свойства:
Системное имя
Шрифт
Запрет редактирования
Вертикальная полоса прокрутки
Объект невидим
Name = RichTextBox1
Font = Courier New
ReadOnly = True
ScrollBars = Vertical
Visible = False
Кроме этого элемента поместим на форму еще и кнопку (Name = cmdSaveOtch, Visible = False), при нажатии которой будем сохранять просматривае-
мый отчет. Таким образом, макет формы frmMenu , доработанный для вывода результатов имеет вид, представленный на рисунке 8.
По нажатию кнопки «Сохранить отчет» текущий отчет (т.е. отчет, который
просматривается в данный момент) должен быть сохранен. Таким образом, поскольку мы генерируем отчеты в текстовый файл с заранее заданным именем, то
по нажатию кнопки должна быть сделана копия файла с отчетом.
Рисунок 8. Макет главной формы в режиме конструктора
Приведем код процедуры обработки события нажатия на кнопку «Сохранить отчет».
65
Private Sub cmdSaveOtch_Click(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles cmdSaveOtch.Click
' запрос имени файла для сохранения
With SaveFileDialog1
.FileName = ""
.Filter = "Все файлы (*.*)|*.*|" + _
"Текстовые файлы. (*.txt)|*.txt|" + _
"Файлы исходных данных (*.dan)|*.dan|" + _
"Файлы результатов (*.rez)|*.rez"
.FilterIndex = 2
.ShowDialog()
End With
' если имя файла не пусто и не равно имени
' просматриваемого файла,
If SaveFileDialog1.FileName <> "" And _
richName <> SaveFileDialog1.FileName Then
' то производится копирование просматриваемого файла,
FileCopy(richName, SaveFileDialog1.FileName)
' его удаление
Kill(richName)
' и вывод в RichTextBox1 нового файла
richName = SaveFileDialog1.FileName
RichTextBox1.LoadFile(richName, _
RichTextBoxStreamType.PlainText)
' сообщение об успешном завершении сохранения отчета
MsgBox("Отчет сохранен", vbOKOnly + vbInformation, _
"Сохранение")
End If
End Sub
13.1. Вывод списков групп
Вывод списков групп реализован в процедуре обработки события выбора
пункта меню «Отчеты  Списки групп  Все группы».
Прежде чем привести код этой процедуры, обсудим алгоритм, реализованный в ней. Идея алгоритма состоит в следующем: сначала файл с данными о студентах должен быть «отсортирован» по курсу, группе и фамилии; результатом чего станет индексный массив Ind, который позволит просматривать записи файла в
отсортированном виде именно таким образом. Такая упорядоченность записей
файла фактически представляет его разбитым на группы записей, самая внутрен66
няя группа имеет одинаковые значения для курса и группы и упорядочена в алфавитном порядке фамилий. Поэтому в самом внешнем цикле перебираются курсы,
во вложенном в него цикле перебираются номера групп, и в следующем по уровню вложенности цикле (для одинаковых значений курса и группы во всех записях) выбираются и выводятся в текстовый файл фамилии студентов. Код процедуры снабжен подробными комментариями.
Private Sub mnuQueryListAllItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuQueryListAllItem.Click
Dim i As Integer
Dim Ind(Nmax) As Integer
Dim NK As Byte
Dim NG As Byte
Dim NPP As Integer
Dim KeyK(Nmax) As Single
Dim KeyG(Nmax) As Single
Dim KeyFIO(Nmax) As String
Dim R As TStud = New TStud()
' открывается временный вспомогательный файл otch.ist,
' находящийся в той же папке, что и работающий проект
Path2 = CurDir() + "\otch.txt"
F4 = FreeFile()
FileOpen(F4, Path2, OpenMode.Output)
' подготовка данных для сортировки по курсу, группе и ФИО
For i = 1 To N
R.ReadFromFile(f1, i)
KeyK(i) = R.Kurs
KeyG(i) = R.Group
KeyFIO(i) = R.FIO
Ind(i) = i
Next i
' сортировка данных
Call SortStr(KeyFIO, N, Ind)
Call Sort(KeyG, N, Ind)
Call Sort(KeyK, N, Ind)
' чтение первой записи в отсортированном списке
i = 1
R.ReadFromFile(f1, Ind(i))
Do While i <= N
67
' фиксирование и запись в файл номера текущего курса
NK = R.Kurs
PrintLine(F4, "Курс " + CStr(NK))
Do While NK = R.Kurs And i <= N
' фиксирование и запись в файл номера
' текущей группы
NG = R.Group
PrintLine(F4, vbTab + "Группа " + CStr(NG))
' порядковый номер студентов в группе
' начинается с единицы
NPP = 1
Do While NK = R.Kurs And NG = R.Group
' запись в файл ФИО студента
PrintLine(F4, vbTab + vbTab + CStr(NPP) + "." + _
vbTab + R.FIO)
NPP = NPP + 1
i = i + 1
' если еще есть записи, то считываем
' следующую, иначе выходим из цикла
If i <= N Then
R.ReadFromFile(f1, Ind(i))
Else
Exit Do
End If
Loop
' пропуск строки между списками различных групп
PrintLine(F4, "")
Loop
Loop
' файла отчета закрывается
FileClose(F4)
' загрузка только что созданного файла в RichTextBox1
RichTextBox1.LoadFile(Path2, _
RichTextBoxStreamType.PlainText)
richName = Path2
' показ элемента RichTextBox1 и кнопки «Сохранить отчет»
RichTextBox1.Visible = True
cmdSaveOtch.Visible = True
68
End Sub
Вывод списка одной группы реализован в процедуре обработки события
выбора пункта меню «Отчеты  Списки групп  Одна группа»
В этой задаче у пользователя сначала запрашиваются значения для курса и
группы, и проверяется корректность введенных значений. Затем файл исходных
данных упорядочивается по полю «Фамилия» в алфавитном порядке; после чего
он просматривается, из него выбираются и выводятся в текстовый файл записи, в
которых значения курса и группы совпадают со значениями, введенными пользователем.
Private Sub mnuQueryListOneItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuQueryListOneItem.Click
Dim i As Integer
Dim Ind(Nmax) As Integer
Dim NK As Byte
Dim NG As Byte
Dim NPP As Integer
Dim TempStr As String
Dim KeyFIO(Nmax) As String
Dim R As TStud = New TStud()
' открывается файл otch.ist, находящийся в той же папке,
' что и работающий проект
Path2 = CurDir() + "\otch.ist"
F4 = FreeFile()
FileOpen(F4, Path2, OpenMode.Output)
' запрос у пользователя интересующего его курса
TempStr = InputBox("Введите курс", "Ввод курса")
Do While Not IsNumeric(TempStr)
'если введенный курс не является числом,
' но является пустым значением
If (TempStr = "") Then
' то файл закрывается и осуществляется выход
' из процедуры
FileClose(F4)
Exit Sub
End If
' если введенный курс не является числом,
' то еще раз производится запрос номера курса
MsgBox("Курс - число", vbOKOnly + vbExclamation, _
69
"Ошибка")
TempStr = InputBox("Введите курс", "Ввод курса")
Loop
' перевод введенного курса в числовое значение
NK = CByte(TempStr)
' запрос у пользователя интересующей его группы
TempStr = InputBox("Введите группу", "Ввод группы")
Do While Not IsNumeric(TempStr)
'если введенная группа не является числом,
' но является пустым значением
If (TempStr = "") Then
' то файл закрывается и осуществляется выход
' из процедуры
FileClose(F4)
Exit Sub
End If
' если введенная группа не является числом,
' то еще раз производится запрос номера группы
MsgBox("Группа-число", vbOKOnly + vbExclamation, _
"Ошибка")
TempStr = InputBox("Введите группу", "Ввод группы")
Loop
' перевод введенной группы в числовое значение
NG = CByte(TempStr)
' подготовка данных для сортировки по полю ФИО
For i = 1 To N
R.ReadFromFile(f1, i)
KeyFIO(i) = R.FIO
Ind(i) = i
Next i
' сортировка данных
Call SortStr(KeyFIO, N, Ind)
' запись в файл информации о курсе и группы
PrintLine(F4, "Курс " + CStr(NK) + ", Группа " + CStr(NG))
' порядковый номер студентов в группе
' начинается с единицы
NPP = 1
For i = 1 To N
' считывание следующей записи и если курс и группа
' соответствуют, то производится вывод в файл отчета
R.ReadFromFile(f1, Ind(i))
If R.Kurs = NK And R.Group = NG Then
70
PrintLine(F4, vbTab + CStr(NPP) + "." + vbTab + R.FIO)
NPP = NPP + 1
End If
Next i
' файл отчета закрывается
FileClose(F4)
' загрузка только что созданного файла в RichTextBox1
RichTextBox1.LoadFile(Path2, _
RichTextBoxStreamType.PlainText)
richName = Path2
' показ элемента RichTextBox1 и кнопки «Сохранить отчет»
RichTextBox1.Visible = True
cmdSaveOtch.Visible = True
End Sub
13.2. Количество студентов и средний балл в группах
Во второй и третьей задаче из числа запланированных задач необходимо
для каждого студента вычислить средний балл. Вынесем вычисление среднего
балла каждого студента в отдельную пользовательскую процедуру, которая будет
принадлежать форме frmMenu. В этой процедуре создается вспомогательный
файл прямого доступа с записями пользовательского типа Tball, содержащий
столько же записей, сколько находится в файле исходных данных. Пользовательский тип Tball содержит поле для вычисления среднего балла. Код процедуры
приведен ниже.
Private
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Dim
Sub AverageBallCreate()
i As Integer
j As Integer
KeyK(Nmax) As Single
KeyG(Nmax) As Single
KeyFIO(Nmax) As String
KeyB(Nmax) As Single
R As TStud = New TStud()
S As TBall = New TBall()
' открывается вспомогательный файл Ball.avg, находящийся в
' той же папке, что и работающий проект
Path1 = CurDir + "\Ball.avg"
F3 = New FileStream(Path1, FileMode.Create)
71
' читается следующая запись из основного файла базы данных
' вычисляется средний балл и созданная запись о среднем
' балле выводится во вспомогательный файл
For i = 1 To N
R.ReadFromFile(f1, i)
S.Sb = 0
For j = 1 To R.Kol
S.Sb = S.Sb + R.M(j - 1)
Next j
S.Sb = S.Sb / R.Kol
S.Kurs = R.Kurs
S.Group = R.Group
S.FIO = R.FIO
S.writeToFile(F3, i)
Next i
' вспомогательный файл закрывается
F3.Close()
End Sub
Вычисление количества студентов и среднего балла для каждой учебной
группы реализовано в процедуре обработки события выбора команды меню «Отчеты  Количество и средний балл».
В файле исходных данных содержатся только оценки, поэтому в этой процедуре, сначала формируется вспомогательный файл с данными о студентах
(курс, группа, ФИО, средний балл). Затем вспомогательный файл упорядочивается по курсу и группе. После этого вычисляется количество записей в группе с
одинаковыми значениями курса и группы, а также средний балл в этой же группе.
Алгоритм вычислений похож на алгоритм, используемый для вывода списков по группам. Во внешнем цикле перебираются курсы, во вложенном в него
цикле перебираются номера групп, и в следующем по уровню вложенности цикле
(для одинаковых значений курса и группы во всех записях) увеличиваются значения счетчика для количества студентов и суммы для накопления средних баллов.
Значения счетчика и суммы обнуляются перед входом во внутренний цикл, после
выхода из которого выводится количество студентов в группе и вычисляется и
72
выводится средний балл в группе. Код процедуры снабжен подробными комментариями.
Private Sub mnuQueryKolItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuQueryBallItem.Click
Dim Sum As Double
Dim k As Integer
Dim i As Integer
Dim Ind(Nmax) As Integer
Dim KeyK(Nmax) As Single
Dim KeyG(Nmax) As Single
Dim NK As Byte
Dim NG As Byte
Dim S As TBall = New TBall()
' вызов процедуры создания вспомогательного файла,
' содержащего информацию о среднем балле каждого студента
AverageBallCreate()
' открывается созданный вспомогательный файл
F3 = New FileStream(Path1, FileMode.Open)
' открывается вспомогательный файл kol.avg, находящийся в
' той же папке, что и работающий проект
Path2 = CurDir() + "\kol.avg"
F4 = FreeFile()
FileOpen(F4, Path2, OpenMode.Output)
' подготовка данных для сортировки по курсу и группе
For i = 1 To N
S.ReadFromFile(F3, i)
KeyK(i) = S.Kurs
KeyG(i) = S.Group
Ind(i) = i
Next i
' сортировка данных
Call Sort(KeyG, N, Ind)
Call Sort(KeyK, N, Ind)
' вывод заголовка таблицы отчета
PrintLine(F4, "Курс" + vbTab + "Группа" + vbTab + _
"Кол-во студ." + vbTab + "Сред-ний балл")
' чтение первой записи в отсортированном списке
i = 1
S.ReadFromFile(F3, Ind(i))
73
Do While i <= N
' фиксирование номера текущего курса
NK = S.Kurs
Do While NK = S.Kurs And i <= N
' фиксирование номера текущей группы
NG = S.Group
' начальные количество и сумма равны нулю
k = 0
Sum = 0
' вычисление количества студентов и суммы их
' средних баллов
Do While NK = S.Kurs And NG = S.Group
k = k + 1
Sum = Sum + S.Sb
i = i + 1
If i <= N Then
S.ReadFromFile(F3, Ind(i))
Else
Exit Do
End If
Loop
' вывод в файл номера курса, номера группы,
' количества студентов и среднего балла группы
PrintLine(F4, CStr(NK) + vbTab + CStr(NG) + vbTab _
+ vbTab + vbTab + CStr(k) + vbTab + vbTab _
+ vbTab + CStr(Format(Sum / k, "#0.00")))
Loop
Loop
' вспомогательные файлы закрываются
F3.Close()
FileClose(F4)
' загрузка только что созданного файла в RichTextBox1
RichTextBox1.LoadFile(Path2, _
RichTextBoxStreamType.PlainText)
richName = Path2
' показ элемента RichTextBox1 и кнопки «Сохранить отчет»
RichTextBox1.Visible = True
cmdSaveOtch.Visible = True
End Sub
74
13.3. Вычисление среднего балла для каждого студента
Вычисление среднего балла для каждого студента реализовано в процедуре
обработки события выбора команды меню «Отчеты  Вычисление среднего балла».
Собственно вычисление среднего балла алгоритмически не является трудной задачей, и она уже решена в пользовательской процедуре. В процедуре для
данной команды меню будет использована эта процедура. Для вывода результата
будем использовать таблицу (элемент DataGridView) , для этого добавим в проект
еще одну форму, на которую поместим элемент DataGridView и кнопку, для того
чтобы дать возможность пользователю не только просмотреть таблицу на экране,
но и сохранить результаты в текстовом файле для дальнейшего использования.
Добавим в проект форму, дадим форме имя frmTableRez и поместим на нее
элемент для отображения данных в виде таблицы (DataGridView), переименуем
этот элемент, задав его имя, GridView1.
Также поместим на форму кнопку с системным именем cmdSaveOtch для
сохранения отчета в виде текстового файла.
Процедура обработки события нажатия на кнопку «Сохранить отчет» имеет
вид:
Private Sub cmdSaveOtch_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdSaveOtch.Click
Dim i As Integer
Dim j As Integer
' запрос имени файла для сохранения отчета
With frmMenu.SaveFileDialog1
.FileName = ""
.Filter = "Все файлы (*.*)|*.*|" + _
"Текстовые файлы. (*.txt)|*.txt|" + _
"Файлы исходных данных (*.dan)|*.dan|" + _
"Файлы результатов (*.rez)|*.rez"
.FilterIndex = 2
.ShowDialog()
End With
' если имя файла не пусто,
If frmMenu.SaveFileDialog1.FileName <> "" Then
75
' то файл открывается
F4 = FreeFile()
FileOpen(f4, frmMenu.SaveFileDialog1.FileName, _
OpenMode.Output)
' и в него выводятся все ячейки таблицы
With GridView1
For i = 0 To .ColumnCount - 1
Print(F4, .Columns(i).Name + vbTab)
Next i
PrintLine(F4, "")
For j = 0 To .RowCount - 1
For i = 0 To .ColumnCount - 1
Print(F4, CStr(.Rows(j).Cells(i).Value) + vbTab)
Next i
PrintLine(F4, "")
Next j
End With
' файл отчета закрывается
FileClose(F4)
' сообщение об успешном завершении сохранения отчета
MsgBox("Отчет сохранен", vbOKOnly + vbInformation, _
"Сохранение")
End If
End Sub
А теперь приведем код процедуры обработки события, соответствующего
выбору пункта меню «Отчеты  Вычисление среднего балла». В этой процедуре
предусмотрены две возможности вывода результатов: в виде, упорядоченном по
курсу, группе и фамилиям студентов; или в виде, упорядоченном по курсу, группе
и убыванию среднего балла. Код процедуры снабжен подробными комментариями.
Private Sub mnuQueryBallItem_Click(ByVal sender As _
System.Object, ByVal e As System.EventArgs) _
Handles mnuQueryKolItem.Click
Dim i As Integer
Dim Ind(Nmax) As Integer
Dim KeyK(Nmax) As Single
Dim KeyG(Nmax) As Single
Dim KeyFIO(Nmax) As String
76
Dim KeyB(Nmax) As Single
Dim S As TBall = New TBall()
Dim Button As Integer
' вызов процедуры создания вспомогательного файла,
' содержащего информацию о среднем балле каждого студента
AverageBallCreate()
' открывается созданный вспомогательный файл
F3 = New FileStream(Path1, FileMode.Open)
' подготовка данных для сортировок
For i = 1 To N
S.ReadFromFile(F3, i)
KeyK(i) = S.Kurs
KeyG(i) = S.Group
KeyFIO(i) = S.FIO
KeyB(i) = -S.Sb ' для сортировки по убыванию
Ind(i) = i
Next i
' запрос о порядке вывода отчета
Button = MsgBox("Вывод по убыванию среднего балла?", _
vbQuestion + vbYesNo, "Вывод результата")
' сортировка данных производится по курсу, группе и либо по
' ФИО, либо по среднему баллу, в зависимости ответа
' пользователя на запрос
If Button = vbYes Then
Call Sort(KeyB, N, Ind)
Call Sort(KeyG, N, Ind)
Call Sort(KeyK, N, Ind)
Else
Call SortStr(KeyFIO, N, Ind)
Call Sort(KeyG, N, Ind)
Call Sort(KeyK, N, Ind)
End If
' заполнение заголовка формы frmTableRez
frmTableRez.Text = "Просмотр файла: " + Path1
With frmTableRez.GridView1
.ColumnCount = 5
' запись названий столбцов в таблицу
.Columns(0).Name = "№"
.Columns(1).Name = "Курс"
.Columns(2).Name = "Группа"
.Columns(3).Name = "Фамилия И.О."
77
.Columns(4).Name = "Средний балл"
' чтение очередной записи и загрузка ее полей
' в таблицу
For i = 1 To N
S.ReadFromFile(F3, Ind(i))
' загрузка новой строки в таблицу
Dim row As String() = New String() _
{CStr(i), S.Kurs, S.Group, S.FIO, _
CStr(Format(S.Sb, "#0.00"))}
.Rows.Add(row)
Next i
End With
' вспомогательный файл закрывается
F3.Close()
' загрузка формы frmTableRez
frmTableRez.Show()
End Sub
Таким образом, нами были предусмотрены все средства, запланированные в
техническом задании проекта, а значит, информационная система «Студенты» после прохождения комплекса разнообразных тестов на работоспособность и корректность обработки информации может быть внедрена на рабочем месте заказчика.
78
Часть III
Проекты для самостоятельной разработки
14. Общие требования
Техническое задание на каждый проект содержит постановку задачи, в которой определяется объект предметной области и функции информационной системы. Для объекта предметной области, задаваемого перечислением его свойств,
необходимо определить пользовательский тип данных для хранения экземпляров
объекта в виде записей файла прямого доступа.
Информационная система должна содержать средства: для ввода, редактирования и просмотра данных в удобной для пользователя форме; для организации
сортировки по отдельным полям и по совокупности полей данных; для организации поиска по одному или нескольким критериям; для составления отчетов на основе имеющихся в системе данных.
Каждое задание содержит:
– описание свойств объекта предметной области;
– перечисление полей данных, для которых необходимо создать файлысправочники, используемые при заполнении полей данных; при этом необходимо
предусмотреть возможность добавления, изменения и корректного удаления записей в справочниках;
– перечисление полей данных, по которым возможно упорядочение; при
этом сортировка по перечисленным полям данных должна обеспечить сортировку
по любой совокупности перечисленных полей (вложенную сортировку).
– перечисление полей данных, которые могут выступать в качестве параметров поиска;
– задачи обработки данных, решаемые информационной системой и вид
выходных документов, представляющих результаты обработки.
79
В каждом задании предполагается создание одного или нескольких файлов
прямого доступа для хранения исходных данных. Этот файл должен содержать
количество записей, необходимое для как можно более полного тестирования информационной системы. Рекомендуемое количество записей 15 – 20, в зависимости от задания.
Поиск необходимо организовать таким образом, чтобы в том случае, если
какой-то из параметров не задан, результат поиска должен содержать все записи,
соответствующие остальным параметрам поиска. Если ни один из параметров не
задан, то результат поиска должен содержать все записи.
В тех заданиях, в которых необходимо осуществить поиск по дате или времени с указанием начала и конца периода поиска, поскольку дата является одним
параметром и параметр время является одним параметром, поиск должен осуществляться:
а) в рамках периода, если заданы его начало и конец;
б) от начала периода до текущей даты, если задано только начало периода;
в) от минимальной даты до конца периода, если задан только конец периода.
Параметры даты и времени не заданы лишь только в том случае, если не заданы ни начало, ни конец периода поиска для соответствующего параметра.
Один из способов организации поиска по нескольким параметрам состоит в
следующем:
В файле исходных данных осуществляется поиск по первому параметру,
поиск по второму параметру осуществляется в файле данных – результате поиска
по первому параметру и т.д. Если какой-то параметр не задан, то результат
предыдущего поиска должен остаться без изменения. В результате такого последовательного поиска будет найдено множество записей, каждая из которых соответствует всем параметрам поиска.
80
В большинстве заданий целесообразно создать еще один файл прямого доступа с записями другого пользовательского типа, соответствующего структуре
создаваемых записей. Этот файл может служить для хранения результатов промежуточных вычислений – результатов обработки исходных данных.
В каждом задании определен вид выходных документов; все выходные документы, как правило, выводятся в текстовый файл, их содержимое можно просматривать как во время работы информационной системы, так и после выхода из
нее. В некоторых заданиях вид выходного документа для одной из задач может
быть не определен, в этом случае вид выходного документа студент определяет
самостоятельно.
Созданные текстовые файлы можно открыть и, при необходимости, вывести
на печать, пользуясь подходящим текстовым редактором.
По выполненному заданию студент должен представить отчет, в отчет
включаются: титульный лист, оглавление, основная часть, список использованных источников. Основная часть отчета содержит:
– постановку задачи;
– описание структуры проекта;
– описание интерфейса созданного приложения;
– описание форм, используемых для ввода, просмотра и корректировки
данных;
– тестовый пример, демонстрирующий работоспособность приложения;
– программную реализацию приложения – тексты всех процедур обработки
событий и пользовательских процедур, используемых в приложении.
К отчету должен быть приложен электронный носитель (дискета или диск),
содержащий отчет в электронном виде и набор файлов, входящих в состав проекта, реализующего информационную систему, а также файл (или файлы) исходных
данных, содержащий тестовые данные для проверки работоспособности созданной системы.
81
15. Технические задания к проектам
15.1. Задание 1. Кадровое агентство
Для кадрового агентства «Работа для всех» требуется разработать информационную систему, позволяющую обрабатывать представленные в определенном
формате данные о лицах, подавших заявки в данное кадровое агентство.
Информация о лицах, подавших заявки в данное кадровое агентство, представлена следующими данными:
 регистрационный номер;
 дата регистрации;
 фамилия, имя и отчество;
 дата рождения;
 пол;
 адрес;
 образование;
 специальность;
 иностранный язык;
 степень владения ПК;
 наличие автомобиля.
Для образования, специальности и иностранного языка создать отдельные
файлы-справочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
- по дате рождения;
- по полу;
- по специальности;
- по образованию;
82
- по ФИО.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной информационной системы являются: дата
рождения (указываются начало и конец периода поиска), пол, образование, специальность и степень владения ПК.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для всех специальностей по каждому из всех, представленных в заявках, месяцев для каждого иностранного языка определить количество лиц владеющих
данным иностранным языком. Данные должны быть упорядочены в алфавитном
порядке названий специальностей. Вид выходного документа:
<Специальность>
<Месяц>
№ п/п
Иностранный язык
…
…
Количество
…
2. Для всех специальностей и всех значений образования определить количество лиц каждого пола, имеющих данное образование. Выходной документ должен иметь вид:
<Специальность>
№ п/п
Образование
…
…
Количество
…
Мужчин
…
Женщин
…
3. Для каждой специальности найти количество лиц старше и моложе 35 лет
для каждого пола в отдельности. Найти процент от общего количества лиц, подавших заявки. Подвести итог процентного соотношения для каждой специальности в целом.
83
15.2. Задание 2. Отдел кадров предприятия
Для отдела кадров предприятия «ООО Работа» требуется разработать информационную систему, позволяющую обрабатывать данные о работающих на
этом предприятии.
Информация о работающих на предприятии сотрудниках представлена следующими данными:
 личный номер;
 фамилия, имя и отчество;
 дата рождения;
 пол;
 адрес;
 образование;
 отдел;
 дата приема на работу.
Для значений полей образования и отдела необходимо создать отдельные
файлы-справочники, используемые при заполнении полей данных. Необходимо
предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по отделу;
– по полу;
– по ФИО;
– по дате рождения;
– по дате приема на работу.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
84
Критериями поиска для данной информационной системы являются: отдел,
дата поступления на предприятие (указываются начало и конец периода поиска),
пол, фамилия (возможно без имени и отчества).
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для всех отделов определить количество работающих на предприятии, старше и моложе 35 лет, для каждого пола в отдельности; найти процент от общего
количества работников предприятия. Подвести итог процентного соотношения
для каждого отдела и в целом по предприятию. Выходной документ должен иметь
вид:
<Отдел>
Пол
…
Старше 35 лет
…

Процент
…
%
Моложе 35 лет
…

Процент
…
%
2. Для каждого из всех отделов предприятия определить список работающих, у
которых стаж работы на данном предприятии больше 10 лет; найти процент от
количества работающих в отделе. Подвести итог: количество работающих, у которых стаж работы на данном предприятии больше 10 лет и процент от общего
количества работающих на предприятии. Вид выходного документа:
<Отдел>
№ п/п
…
<Кол-во работающих в отделе>
ФИО
…
<% со стажем больше 10 лет>
Стаж
…
3. Для каждого отдела и каждого значения образования определить количество
работающих в этом отделе, имеющих определенное образование. Подвести итог –
суммарное количество работающих на предприятии, имеющих данное образование. Вид выходного документа:
Распределение работающих на предприятии по образованию
№ п/п Отдел Высшее
…
…
…
…
…
Итого:


85
Среднее
…

15.3. Задание 3. Магазин по продаже бытовой техники
Для магазина «Домашний труд», торгующего бытовой техникой требуется
разработать информационную систему, позволяющую обрабатывать данные о
проданных товарах, представленные в определенном формате. Информация о
проданных магазином товарах представлена следующими данными:
 учетный номер продажи;
 дата продажи;
 категория товара;
 наименование товара;
 цена товара;
 цена за установку (может отсутствовать);
 цена за гарантийное обслуживание (может отсутствовать);
 фамилия, имя и отчество покупателя;
 скидка.
Для значений категории и наименования товара создать отдельные файлысправочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по категории;
– по наименованию;
– по дате покупки.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной информационной системы являются: дата
продажи (указываются начало и конец периода поиска), ФИО покупателя, категория и наименование товара.
86
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для каждого покупателя найти общую стоимость каждого из всех приобретенных им товаров. Общая стоимость товара вычисляется с учетом цен на установку и гарантированное обслуживание и скидки (если они есть). Данные должны
быть упорядочены по дате продажи и ФИО покупателя. Выходной документ должен иметь вид:
Продажи
№ п/п
…
Дата
продажи
…
ФИО
покупателя
…
Категория
товара
…
Наименование
…
Общая
стоимость
…
2. Для каждого покупателя найти общую сумму и количество всех приобретенных им товаров (по всем хранимым данным). Данные должны быть упорядочены
по ФИО покупателя. Выходной документ должен иметь вид:
№ п/п
ФИО покупателя
…
…
Количество приобретенных товаров
…
Общая сумма
…
3. Для всех месяцев и всех категории товара найти общую сумму всех продаж
(за каждый месяц и в целом за весь период) по каждому наименованию. Подвести
итог – общую стоимость ВСЕХ продаж. Данные должны быть упорядочены по
месяцам, категории и наименованию товара. Вид выходного документа:
<Месяц>
<Категория товара>
№ п/п Наименование товара
…
…
Итого:
Кол-во единиц товара
…

87
Общая сумма
…

15.4. Задание 4. Компьютерная фирма
Для фирмы «Электронный товарищ», занимающейся продажей компьютеров и их комплектующих требуется разработать информационную систему, позволяющую обрабатывать данные о продажах, представленные в определенном
формате.
Информация о проданных фирмой компьютерах и их комплектующих представлена следующими данными:
 учетный номер продажи;
 дата продажи;
 тип приобретенного товара;
 наименование;
 количество;
 цена за одну единицу;
 скидка;
 фамилия, имя и отчество покупателя.
Для значений типов комплектующих и наименования товара создать отдельные файлы-справочники, используемые при заполнении полей данных.
Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по номеру продажи;
– по дате продажи;
– по типу товара;
– по ФИО покупателя.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
88
Критериями поиска для данной информационной системы являются: дата
продажи (указываются начало и конец периода поиска), ФИО покупателя, тип и
наименование товара.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для каждого покупателя найти общую стоимость каждого из всех приобретенных им наименований товаров. Общая стоимость одного наименования вычисляется с учетом количества единиц товара и скидки (если она есть). Данные
должны быть упорядочены по дате продажи и ФИО покупателя. Выходной документ должен иметь вид:
Продажи
№ п/п
…
Дата
продажи
…
ФИО
покупателя
…
Тип
…
Наименование
…
Кол-во
…
Общая
стоимость
…
2. Для каждого покупателя определить список всех его покупок (по всем хранимым данным). Выходной документ должен быть упорядочен по фамилии покупателя и типу товара и иметь вид:
<ФИО покупателя>
Общая
сумма
…
…
…
…
…
…
Итого:

3. Для всех месяцев и всех типов комплектующих найти общую сумму всех
№ п/п
Тип товара
Наименование
…
Кол-во
Цена
Скидка
продаж (за каждый месяц и в целом за весь период) по каждому наименованию.
Подвести итог – общую сумму ВСЕХ продаж. Данные должны быть упорядочены
по месяцам, типам комплектующих и их наименованиям. Вид выходного документа:
<Месяц>
<Тип комплектующих>
№ п/п
Наименование
…
…
Общая сумма
…

Итого:
89
15.5. Задание 5. Компания автосервиса
Для небольшой компании, предлагающей услуги автосервиса, требуется
разработать информационную систему, позволяющую обрабатывать данные об
услугах, оказанных данной компанией, представленные в определенном формате.
Информация об услугах, оказанных данной компанией своим клиентам,
представлена следующими данными:
 учетный номер оказанной услуги;
 фамилия, имя и отчество клиента;
 государственный номер транспортного средства;
 дата выполнения работы;
 фамилия, имя и отчество мастера, выполнявшего работу;
 вид услуги;
 стоимость работы;
 стоимость материалов.
Для значений видов услуги и фамилии мастера создать отдельные файлысправочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по дате выполнения работы;
– по виду услуги;
– по ФИО клиента;
– по ФИО мастера.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: дата выполнения работы
(указываются начало и конец периода поиска), ФИО клиента и вид услуги.
90
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для каждого клиента найти общую стоимость каждой оказанной ему услуги.
Общая стоимость услуги складывается из стоимости работы и стоимости материалов (если они используются). Данные должны быть упорядочены по дате выполнения работы и ФИО клиента. Выходной документ должен иметь следующий вид:
Услуги по датам
№п/п
Дата
ФИО клиента
Услуга
…
…
…
…
Общая
стоимость
…
ФИО мастера
…
2. Для каждого клиента компании выдать список всех оказанных ему услуг (по
всем хранимым данным). Выходной документ должен быть упорядочен по фамилии клиента и дате, и иметь вид:
<ФИО клиента> <Гос. номер трансп. средства>
Стоимость
Стоимость
№ п/п Дата
Услуга
материалов
работы
…
…
…
…
…
Итого:


Общая
стоимость
…

ФИО
мастера
…
3. Для каждого мастера посчитать общую стоимость всех выполненных им работ за каждый месяц. Выходной документ должен быть упорядочен по месяцу,
ФИО мастера, дате выполнения работы, виду услуги и иметь следующий вид:
<Месяц>
<ФИО мастера>
№ п/п Дата
Вид услуги
…
…
…
Итого:
Гос. номер
…
91
Стоимость работы
…

15.6. Задание 6. Авиакомпания
Для авиакомпании «Воздушный путь» требуется разработать информационную систему, позволяющую обрабатывать данные о доходности рейсов, выполняемых компанией, представленные в определенном формате.
Информация о доходности рейсов, выполняемых компанией, представлена
следующими данными:
 номер рейса;
 тип самолета;
 пункт назначения;
 дата рейса;
 количество пассажиров;
 цена билета;
 общие затраты на рейс.
Для значений типа самолета и пункта назначения создать отдельные файлысправочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по типу самолета;
– по пункту назначения;
– по номеру рейса;
– по дате рейса.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: дата рейса (указываются
начало и конец периода поиска), пункт назначения и тип самолета.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
92
1. Для каждого выполненного рейса определить его доходность. Доходность
вычислять как отношение дохода, полученного от продажи билетов к общим затратам на рейс. Данные должны быть упорядочены по датам и номеру рейса. Выходной документ должен иметь вид:
<Дата>
№п/п
…
Номер
рейса
…
Пункт
назначения
…
Итого
Доход от продажи билетов
…

Общие затраты на рейс
…

Доходность
рейса
…

2. Для каждого номера рейса выдать весь список выполненных им полетов (по
всем хранимым данным). Выходной документ должен быть упорядочен по номерам рейса и датам и иметь вид:
<Номер рейса> <Пункт назначения>
№
Кол-во пас- Доход от проДата
п/п
сажиров
дажи билетов
…
…
…
…
Итого: 

Общие затраты на рейс
…

Доходность
рейса
……

3. Для всех месяцев и всех пунктов назначения посчитать общее количество
всех перевезенных пассажиров (за каждый месяц и в целом за весь период). Подвести итог – общее количество всех перевезенных пассажиров. Данные должны
быть упорядочены по месяцам и пунктам назначения. Вид выходного документа:
<Месяц>
№ п/п Пункт назначения
…
…
Общее кол-во пассажиров
…
Итого: 
93
15.7. Задание 7. Скорая помощь
Для подстанции скорой помощи требуется разработать информационную
систему, позволяющую обрабатывать данные о вызовах бригад скорой помощи,
представленные в определенном формате.
Информация о вызовах бригад скорой помощи, представлена следующими
данными:
 номер бригады;
 специализация врачей бригады;
 дата вызова;
 время вызова;
 адрес;
 фамилия, имя и отчество пациента;
 дата рождения;
 пол;
 действия.
Для значений специализации и действий бригады скорой помощи создать
отдельные файлы-справочники, используемые при заполнении полей данных.
Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по специализации бригады;
– по адресу;
– по ФИО пациента;
– по полу;
– по возрасту.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
94
Критериями поиска для данной системы являются: специализация бригады
скорой помощи, номер бригады, дата и время вызова (указываются начало и конец периода поиска).
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для всех бригад по каждой дате определить количество вызовов данной бригады в данную дату. Выходной документ должен быть упорядочен по номеру
бригады и дате вызова и иметь следующий вид:
<Номер бригады> <Специализация>
№ п/п
Дата вызова
…
…
Итого:
Количество вызовов
…

2. Для каждой специализации определить количество вызовов, и для каждого
действия, проведенного бригадами данной специализации подсчитать их количество. Отчет составить для каждого месяца и в целом по всем данным. Выходной
документ должен быть упорядочен по месяцам и иметь вид:
<Месяц>
№ п/п
…
<Специализация>
Действие
…
Итого:
Кол-во
…

3. Для каждой специализации найти средний возраст пациентов каждого пола в
отдельности, найти процент от общего количества лиц, обслуженных бригадами
скорой помощи. Подвести итог процентного соотношения для каждой специализации в целом.
95
15.8. Задание 8. Автотранспортное предприятие
Для автотранспортного предприятия «Колесо фортуны» требуется разработать информационную систему, позволяющую обрабатывать данные о перевозках
пассажиров данным предприятием, представленные в определенном формате.
Информация о перевозках пассажиров данным предприятием представлена
следующими данными:
 бортовой номер автобуса;
 марка автобуса;
 номер маршрута;
 фамилия, имя и отчество водителя;
 дата работы;
 время начала работы;
 время окончания работы;
 выручка.
Для значений марки автобуса и фамилий водителей создать отдельные файлы-справочники, используемые при заполнении полей данных. Предусмотреть
возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по бортовому номеру;
– по марке автобуса;
– по номеру маршрута;
– по ФИО;
– по дате работы.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
96
Критериями поиска для данной системы являются: бортовой номер автобуса, марка автобуса, номер маршрута, дата работы (указываются начало и конец
периода поиска), время работы и ФИО водителя.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для всех номеров маршрутов определить общую выручку и выручку за каждый месяц. Выходной документ должен быть упорядочен по номеру маршрута и
иметь следующий вид:
<Номер маршрута>
№ п/п
…
Месяц
…
Итого:
Общая выручка
…

2. Для всех маршрутов определить среднее время работы и среднюю выручку
каждого автобуса. Подвести итог – среднюю выручку на всех маршрутах. Предусмотреть составление общего отчета и отчета, содержащего информацию за определенный месяц. Выходной документ должен быть упорядочен месяцу, номеру
маршрута, бортовому номеру автобуса и иметь следующий вид:
<Месяц>
№ п/п
…
<Номер маршрута>
Номер авФИО
тобуса
водителя
…
…
Кол-во рабочих дней
…
Среднее вре- Средняя вымя работы
ручка
…
…
Итого:

3. Для всех месяцев по каждому маршруту выдать список всех водителей в порядке убывания количества отработанных часов за месяц.
97
15.9. Задание 9. Личная библиотека
Требуется разработать информационную систему, позволяющую обрабатывать данные о книгах, находящихся в личной библиотеке пользователя, представленные в определенном формате.
Информация о книгах, находящихся в личной библиотеке, представлена
следующими данными:
 учетный номер книги;
 автор;
 название;
 жанр;
 издательство;
 год издания;
 количество томов;
 как приобретена;
 цена;
 фамилия, имя и отчество читателя, у которого на руках данная книга;
 примечания.
Для значений жанра, издательства и способа приобретения книги создать
отдельные файлы-справочники, используемые при заполнении полей данных.
Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по ФИО автора;
– по названию;
– по жанру;
– по издательству;
– по году издания;
98
– по цене;
– по ФИО читателя.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: ФИО автора, название,
жанр и ФИО читателя.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для всех жанров определить количество книг каждого жанра, выпущенных
определенным издательством. Подвести общий итог по всем жанрам. Выходной
документ должен быть упорядочен по названиям жанров и названиям издательств
и иметь вид:
<Жанр>
№ п/п
…
Издательство
…
Итого:
Количество книг
…

2. Выдать список лиц, у которых на руках находятся книги из личной библиотеки, для каждого из них перечислить все взятые им книги. Данные должны быть
упорядочены по фамилиям лиц, взявшим книги, и по фамилиям авторов. Выходной документ должен иметь вид:
<ФИО лица, взявшего книгу>
№ п/п
Автор
…
Название
…
…
3. Для всех жанров выдать список книг каждого жанра. Выходной документ
должен быть упорядочен по названиям жанров и авторам, и иметь вид:
<Жанр>
№ п/п
…
Автор
…
Название
…
99
Количество томов
…
15.10. Задание 10. Экспорт сырья
Для организации, контролирующей экспорт сырья, требуется разработать
информационную систему, позволяющую обрабатывать данные о договорах на
экспорт сырья, представленные в определенном формате.
Информация о договорах на экспорт сырья представлена следующими данными:
 номер договора;
 дата заключения договора;
 фирма-поставщик;
 вид сырья;
 страна;
 фирма-получатель;
 сумма.
Для значений вида сырья и страны-экспортера создать отдельные файлысправочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по дате заключения договора;
– по фирме-поставщику;
– по стране;
– по фирме-получателю;
– по виду сырья.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: дата заключения договора (указываются начало и конец периода поиска), фирма-поставщик, вид сырья и
страна-экспортер.
100
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для каждого вида сырья определить общую сумму, на которую были заключены договоры. Предусмотреть создание общего отчета и отчета, содержащего
требуемую информацию за каждый месяц. Вид выходного документа:
Итоги по видам сырья
№ п/п
Вид сырья
…
…
Итого:
Сумма
…

2. Для всех стран по каждому виду сырья определить общую сумму, на которую были заключены договоры. Данные должны быть упорядочены по названиям
стран и видам сырья. Предусмотреть создание общего отчета и отчета, содержащего требуемую информацию за каждый месяц. Выходной документ должен
иметь следующий вид:
<Страна>
№ п/п
…
Вид сырья
…
Итого:
Сумма
…

3. Для каждой фирмы-поставщика и каждой страны определить общую сумму,
на которую были заключены договоры. Вид выходного документа аналогичен виду выходного документа №2 данного задания.
4. Для каждого месяца выдать список всех фирм-поставщиков, заключивших
договоры, в порядке убывания суммы, на которую заключен договор.
101
15.11. Задание 11. Анализ успеваемости в ВУЗе
Для ректората ВУЗа требуется разработать информационную систему, позволяющую обрабатывать данные о студентах, обучающихся в данном ВУЗе, и их
успеваемости за текущий семестр, представленные в определенном формате.
Информация о студентах представлена следующими данными:
 номер студенческого билета;
 фамилия, имя и отчество;
 дата рождения;
 пол;
 факультет;
 специальность;
 курс;
 группа;
 количество экзаменов;
 оценки, полученные на экзамене.
Для значений факультетов и специальностей создать отдельные файлысправочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по номеру студенческого билета;
– по ФИО;
– по факультету;
– по специальности;
– по курсу;
– по группе.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
102
Критериями поиска для данной системы являются: ФИО студента, дата
рождения (указываются начало и конец периода поиска), факультет, специальность, курс и группа.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. По всем специальностям каждого факультета выдать список студентов, имеющих хотя бы одну двойку. Отчет составить с указанием количества двоек для
каждого студента. Результат отсортировать по курсу и группе и ФИО студента.
Вид выходного документа:
<Факультет>
<Специальность>
№ п/п
Курс
Группа
…
…
…
ФИО
…
Количество двоек
…
2. Для каждого факультета определить список студентов, представленных на
стипендию (студент представляется на стипендию в том случае, если у него нет
ни одной оценки меньше 4). Отдельно определить список студентов, представленных на повышенную стипендию. Вид выходного документа:
<Факультет>
№ п/п
Курс
…
Группа
ФИО
…
…
…
3. Определить количество студентов, количество студентов, имеющих хотя бы
одну двойку, и процент успеваемости в каждой группе. Подвести итоги для каждого факультета и в целом по ВУЗу. Вид выходного документа:
<Факультет>
№ п/п
Курс
Группа
Кол-во
студентов
Кол-во неуспев.
студентов
Процент успеваемости
…
…
…
…
…
…
Итого:


%
103
15.12. Задание 12. Салон красоты
Для салона красоты «Вероника» требуется разработать информационную
систему, позволяющую обрабатывать данные об услугах, предоставляемых данным салоном, представленные в определенном формате.
Информация об услугах, предоставляемых клиентам данного салона, представлена следующими данными:
 дата оказания услуги;
 фамилия, имя и отчество мастера;
 вид услуги;
 цена услуги;
 скидка;
 доля мастера.
Для значений ФИО мастера и вида услуги создать отдельные файлысправочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по дате;
– по ФИО мастера;
– по виду услуги.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: дата оказания услуги
(указываются начало и конец периода поиска), ФИО мастера и вид услуги.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
104
1.По всем рабочим дням каждого месяца определить выручку за этот день (с
учетом скидок и зарплат мастеров). Предусмотреть возможность составления отчета за каждый месяц и итогового отчета. Вид выходного документа:
<Месяц>
№ п/п
…
<Дата>
Вид
ФИО
услуги
мастера
…
…
Цена
Скидка
…
…
Итого:
Получает
мастер
…

Доход
салона
…

2. Для всех мастеров определить их зарплату (за каждый день текущего месяца
и за месяц). Результат отсортировать по ФИО мастеров и датам. Составить отчет о
средней зарплате каждого мастера за каждый месяц и в итоге. Вид выходного документа:
<ФИО мастера>
№ п/п
…
Кол-во оказанных
услуг
…
…
Итого:

В среднем:
<ср.знач.>
Дата
Зарплата
…

<ср.знач.>
3. По всем рабочим дням текущего месяца определить количество каждой из
оказанных услуг каждым мастером. Подвести итог по каждой дате и в целом за
месяц. Вид выходного документа:
<Дата>
№ п/п
…
<ФИО мастера>
Вид услуги
…
Итого:
Количество услуг
…

105
15.13. Задание 13. Бухгалтерия организации
Для бухгалтерии некоторой организации требуется разработать информационную систему, позволяющую рассчитывать и обрабатывать данные о заработной
плате сотрудников организации, представленные в определенном формате.
Информация о сотрудниках организации представлена следующими данными:
 табельный номер сотрудника;
 фамилия, имя и отчество;
 дата рождения;
 пол;
 адрес;
 название отдела;
 должность;
 оклад по штатному расписанию;
 дата приема на работу.
Для названий отделов и должностей создать отдельные файлы-справочники,
используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по ФИО сотрудника;
– по дате рождения;
– по названию отдела.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: ФИО сотрудника, название отдела, должность и дате приема на работу (указываются начало и конец периода поиска).
106
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Выполнить расчет зарплаты сотрудников организации. Сумма начисленной
зарплаты сотрудника складывается из его оклада по штатному расписанию плюс
премии, из этой суммы удерживается налог в размере 13%. При этом премия равна: 20% от оклада, если стаж работы в организации составляет от трех до пяти
лет; 40% от оклада для стажа работы от пяти до десяти лет; 50% от оклада, если
стаж работы более десяти лет. Результаты расчета представить в виде документа,
данные в котором упорядочены по ФИО сотрудника, документ должен иметь вид:
Расчет заработной платы
№
ФИО
Стаж Оклад
п/п
…
…
…
…
ПреНачислено
мия
…
…
Итого:

Удержано
…

К выдаче
…

2. Для каждого отдела составить ведомость на получение заработной платы.
Ведомость должна иметь вид:
<Отдел>
№ п/п
…
ФИО
…
Итого:
Сумма
…

Подпись
…
3. Для каждого отдела определить минимальную, максимальную и среднюю
зарплату.
107
15.14. Задание 14. Глазная клиника
Для глазной клиники «Зоркий глаз» требуется разработать информационную систему, позволяющую обрабатывать данные о пациентах, представленные в
определенном формате.
Информация о пациентах клиники представлена следующими данными:
 регистрационный номер;
 дата регистрации;
 фамилия, имя и отчество пациента;
 дата рождения;
 пол;
 адрес;
 диагноз;
 фамилия, имя и отчество лечащего врача;
 номер палаты.
Для ФИО врача и диагноза создать отдельные файлы-справочники, используемые при заполнении полей данных. Предусмотреть возможность добавления,
изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по ФИО пациента;
– по диагнозу;
– по номеру палаты;
– по ФИО врача.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: ФИО пациента, дата
рождения (указываются начало и конец периода поиска), ФИО врача, диагноз и
номер палаты.
108
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для каждого лечащего врача выдать в алфавитном порядке список его пациентов с указанием диагноза и номера палаты. Вид выходного документа:
<ФИО лечащего врача>
№ п/п
ФИО пациента
…
…
Диагноз
…
Номер палаты
…
2. По каждому из всех диагнозов определить общее количество пациентов и количество пациентов каждого пола, имеющих данный диагноз. Вид выходного документа:
№ п/п
…
Диагноз
…
Кол-во пациентов
…
Итого:

Мужчин
…

Женщин
…

3. Для каждого диагноза выдать список пациентов лечившихся в данной клинике в текущем году. Выходной документ должен быть упорядочен по диагнозам,
месяцам и ФИО пациентов и иметь вид:
<Диагноз>
№ п/п
…
<Месяц>
ФИО
пациента
…
Дата
рождения
…
Пол
ФИО врача
…
…
109
Номер
палаты
…
15.15. Задание 15. Туристическая фирма
Для туристической фирмы «Камчатка» требуется разработать информационную систему, позволяющую обрабатывать данные об ее клиентах, представленные в определенном формате.
Информация о клиентах данной туристической фирмы представлена следующими данными:
 название тура;
 страна назначения;
 город назначения;
 дата начала тура;
 дата окончания тура;
 вид транспорта;
 стоимость тура;
 фамилия, имя и отчество клиента;
 паспортные данные.
Для названий туров, стран назначения, городов и видов транспорта создать
отдельные файлы-справочники, используемые при заполнении полей данных.
Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по названию тура;
– по ФИО клиента;
– по стране;
– по городу;
– по началу тура;
– по виду транспорта.
110
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: название тура, ФИО
клиента, страна назначения, город, дата начала тура (указываются начало и конец
периода поиска) и вид транспорта.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Определить доход фирмы от каждого тура и по всем турам в целом. Вид выходного документа:
Доход фирмы
№ п/п
Название тура
…
…
Страна
…
Город
…
Дата начала
…
Итого:
Доход
…

2. Составить списки клиентов по одному туру и всем турам. Выходной документ должен иметь следующий вид:
Список клиентов тура
<Название тура> <Страна>
№ п/п
ФИО клиента
…
…
<Город>
<Дата начала тура>
Паспортные данные
…
3. Для каждого тура определить его продолжительность. Найти среднюю продолжительность тура.
4. Определить список туров за каждый месяц каждого года. Вид выходного документа:
<Год>
<Месяц>
№ п/п Название тура
Страна
Город
…
…
…
…
Общее количество туров за год:
<Количество>
111
Дата начала
…
15.16. Задание 16. Оптовая база
Для оптовой базы требуется разработать информационную систему, позволяющую обрабатывать данные о товарах на складе и продажах этих товаров,
представленные в определенном формате.
Информация о товарах, имеющихся на складе, представлена следующими
данными:
 идентификационный номер товара;
 категория товара;
 наименование товара;
 единица измерения (например, ящик, пачка, мешок и т.д.);
 количество единиц на складе;
 цена за единицу товара.
Информация о продажах товаров со склада представлена следующими данными:
 фамилия, имя и отчество покупателя (название фирмы-покупателя);
 дата продажи;
 наименование товара (выбирается из данных о товарах на складе);
 количество единиц;
 цена за единицу.
Для названий категорий товара, наименований и единиц измерения создать
отдельные файлы-справочники, используемые при заполнении полей данных.
Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Кроме этого, предусмотреть корректный перенос данных о номере товара в
данные о продажах товаров. Файл с данными о товаре должен выступать в роли
справочника по полю «наименование товара» в данных о продажах. Корректный
перенос означает следующее: если количество единиц товара на складе равно нулю, то данного номера товара не должно быть в списке номеров предлагаемых то112
варов. При этом, при внесении записи о продаже некоторого товара в список продаж необходимо предусмотреть уменьшение количества данного товара на складе, на величину, указанную в записи о продаже.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
в данных о товарах на складе –
– по категории;
– по наименованию;
– по единицам измерения;
в данных о продажах товаров со склада –
– по ФИО;
– по дате продажи;
– по номеру товара.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: категория и наименование товара в данных о товарах на складе, ФИО заказчика и номер товара в данных
о продажах.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. По всем датам продажи для каждого заказчика определить список товаров и
их сумму. Подвести итог для каждого заказчика и общий итог для даты.
2. Для каждой категории товара по каждому наименованию определить стоимость оставшихся товаров. Подвести итог – суммарную стоимость всех товаров
на складе.
113
15.17. Задание 17. Продажа автомобилей
Для фирмы, занимающейся комиссионной продажей автомобилей, требуется разработать информационную систему, позволяющую обрабатывать данные о
договорах на продажу, представленные в определенном формате.
Информация о договорах на продажу представлена следующими данными:
 номер договора;
 дата заключения договора;
 фамилия, имя и отчество дилера;
 фамилия, имя и отчество клиента;
 телефон клиента;
 марка автомобиля;
 страна изготовитель;
 год выпуска;
 цена;
 продажа (да/нет).
Для названий марки автомобиля и страны-изготовителя создать отдельные
файлы-справочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по номеру договора;
– по ФИО дилера;
– по ФИО клиента;
– по марке автомобиля.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
114
Критериями поиска для данной системы являются: ФИО дилера, дата заключения договора (указываются начало и конец периода поиска), ФИО клиента,
марка автомобиля и страна-изготовитель.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. По всем месяцам для каждой марки автомобиля определить количество продаж и общую выручку фирмы, с учетом того, что выручка от продажи составляет
10%, а комиссионные дилера – 20% от выручки. Выходной документ должен содержать данные по продажам за каждый месяц и в целом за текущий год и иметь
вид:
<Месяц>
№ п/п Марка автомобиля
…
…
Итого:
Кол-во продаж
Общая выручка
…
…


2. Определить количество проданных и оставшихся автомобилей. Вычислить
процент продаж для каждой марки автомобиля. Выходной документ должен содержать данные по продажам за каждый месяц и в целом за текущий год и иметь
вид:
<Месяц>
№ п/п Марка автомобиля
…
…
Кол-во продаж
…
Процент от общего количества
…
3. Для каждого дилера определить его заработную плату за каждый месяц и
среднемесячную зарплату.
4. Для каждого месяца выдать список дилеров в порядке убывания их месячной
зарплаты, определить ежемесячную среднюю зарплату дилеров.
115
15.18. Задание 18. Учет личных автомобилей
Для отдела ДПС ГИБДД города требуется разработать информационную
систему, позволяющую обрабатывать данные о личных автомобилях, представленные в определенном формате.
Информация об автомобилях представлена следующими данными:
 регистрационный номер;
 фамилия, имя и отчество владельца;
 паспортные данные владельца;
 государственный номер автомобиля;
 год выпуска;
 цвет;
 марка автомобиля;
 иномарка (да/нет).
Для названий марки автомобиля и цвета создать отдельные файлысправочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по ФИО владельца;
– по государственному номеру;
– по марке автомобиля;
– по году выпуска;
– по цвету.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: ФИО владельца, гос. номер, цвет, марка автомобиля и параметр, определяющий является ли данный автомобиль иномаркой или нет. Поиск по государственному номеру автомобиля
116
должен осуществляться даже в том случае, если известна только часть этого номера. Например, для части «н0***к61rus», результат поиска должен содержать все
записи содержащие эту часть государственного номера. Данному значению параметра поиска соответствуют, например, номера «н001ак61rus», «н012ак61rus» и
«н099як61rus».
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для каждого владельца, имеющего более одного автомобиля, выдать список
его автомобилей. Подсчитать среди них количество иномарок. Выходной документ должен быть упорядочен по ФИО владельца, марке автомобиля и иметь вид:
<ФИО владельца>
<Количество иномарок>
№ п/п
Марка автомобиля Гос. номер
…
…
…
Цвет
…
Иномарка
…
2. Определить количество иномарок и количество отечественных автомобилей
старше 10 лет. Вычислить процент от общего количества каждого типа автомобилей.
3. Для каждой марки автомобиля и каждого цвета определить список владельцев, имеющих автомобиль данной марки и данного цвета. Вид выходного документа:
<Марка>
№ п/п
…
<Цвет>
Гос. номер
…
ФИО владельца
…
117
паспортные данные
…
15.19. Задание 19. Видеотека
Требуется разработать информационную систему, позволяющую обрабатывать данные о видеокассетах, CD и DVD дисках, находящихся в личной видеотеке
пользователя, представленные в определенном формате.
Информация о носителях представлена следующими данными:
 учетный номер носителя;
 тип носителя;
 название;
 страна;
 жанр;
 количество фильмов;
 общая длительность;
 как приобретена;
 дата записи;
 ФИО человека, у которого на руках находится данная кассета или диск;
 примечания.
Для названий страны, жанра и типа носителей создать отдельные файлысправочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по названию;
– по стране;
– по жанру;
– по количеству фильмов;
– по дате записи.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
118
Критериями поиска для данной системы являются: тип носителя, название,
жанр и ФИО человека, взявшего кассету или диск.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для каждого жанра выдать список всех фильмов этого жанра, упорядоченный по названию. Вид выходного документа:
<Жанр>
№ п/п
…
Название
…
Страна
…
Тип носителя
…
2. Для каждого типа носителя и каждого жанра определить количество фильмов
этого жанра, записанных на носителе данного типа. Выходной документ должен
иметь вид:
<Тип носителя>
№ п/п
…
Жанр
…
Итого:
Количество фильмов
…

3. Для всех лиц, пользующихся данной видеотекой, выдать список всех кассет и
дисков, находящихся у них на руках. Выходной документ должен быть упорядочен по ФИО и типу носителя и иметь вид:
<ФИО>
№ п/п
…
Название
…
Страна
…
Тип носителя
…
4. Выдать список всех носителей, на которых записано более одного фильма.
Данные должны быть упорядочены по типу носителя и названиям и иметь вид:
<Тип носителя>
№ п/п
…
Название
…
Страна
…
119
Кол-во фильмов
…
15.20. Задание 20. Телефонный справочник
Для одной из АТС города требуется разработать информационную систему,
позволяющую обрабатывать данные об абонентах, подключенных к данной АТС,
представленные в определенном формате.
Информация об абонентах представлена следующими данными:
 номер телефона;
 дата подключения;
 фамилия, имя и отчество абонента;
 адрес;
 район;
 категория телефона;
 льготная категория.
Для района, категории телефона и льготной категории создать отдельные
файлы-справочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по дате подключения;
– по району;
– по категории телефона;
– по льготной категории;
– по номеру телефона;
– по ФИО абонента.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: номер телефона, ФИО
абонента, дата подключения (указываются начало и конец периода поиска), категория телефона и льготная категория.
120
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. По всем месяцам для каждой даты определить количество подключенных
абонентов, имеющих льготы по оплате. Предусмотреть составление отчета по
подключениям, произведенным за каждый месяц и по всем подключениям. Выходной документ должен быть упорядочен по месяцам и датам и иметь вид:
<Месяц>
<Дата подключения>
№ п/п Категория телефона
…
…
Льготная категория
…
Итого:
Кол-во абонентов
…

2. Для каждого района определить процент абонентов каждой льготной категории. Вид выходного документа:
<Район>
Общее количество абонентов <Кол-во абонентов>
№ п/п Льготная категория
Кол-во абонентов
Процент
…
…
Итого:
…
…

%
3. Для всех районов по каждой льготной категории выдать списки абонентов.
Вид выходного документа:
<Район>
№ п/п
…
<Льготная категория>
ФИО абонента
Номер телефона
…
…
121
Категория телефона
…
15.21. Задание 21. Стоматологическая клиника
Для стоматологической клиники «Здоровые зубы» требуется разработать
информационную систему, позволяющую обрабатывать данные о пациентах, проходивших курс лечения в данной клинике, представленные в определенном формате.
Информация о пациентах клиники представлена следующими данными:
 номер карточки (истории болезни);
 дата визита;
 фамилия, имя и отчество пациента;
 дата рождения;
 пол;
 фамилия, имя и отчество специалиста;
 вид услуги;
 стоимость работы;
 стоимость материалов.
Для вида услуги и данных о специалистах создать отдельные файлысправочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по дате визита;
– по ФИО пациента;
– по дате рождения;
– по ФИО специалиста;
– по виду услуги.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
122
Критериями поиска для данной системы являются: дата визита, дата рождения (для обеих дат указываются начало и конец периода поиска), ФИО пациента,
пол, ФИО специалиста и вид услуги.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для каждого пациента определить стоимость каждого его визита. Данные
должны быть упорядочены по фамилиям пациентов и дате посещения. Подвести
общий итог по всем посещениям. Выходной документ должен иметь вид:
<ФИО пациента> <Номер карточки>
<Дата>
Вид услуФИО
Стоимость
№ п/п
ги
специалиста
работы
…
…
…
…
Итого:

Стоимость Общая стоматериалов
имость
…
…


2. Для каждого специалиста определить количество пациентов, принятых им, и
суммарную стоимость работ и материалов по дням и месяцам текущего года. Выходной документ должен быть упорядочен по месяцам, фамилиям специалистов и
дате и иметь вид:
<Месяц>
<ФИО специалиста>
№ п/п
…
Дата
…
Итого:
Кол-во пациентов
…

Стоимость
работы
…

Стоимость
материалов
…

3. По каждой дате текущего месяца для каждого вида услуг, оказанных клиникой определить общую стоимость работ и материалов. Подвести общий итог за
указанный период. Вид выходного документа:
<Дата>
№ п/п Вид услуги
…
…
Итого:
Кол-во пациентов
…

123
Стоимость
работы
…

Стоимость
материалов
…

15.22. Задание 22. Издательство
Для издательства научного журнала «Экономический вестник» требуется
разработать информационную систему, позволяющую обрабатывать данные о
выпущенных публикациях и публикациях, готовившихся к выпуску, представленные в определенном формате.
Информация о публикациях в данном издательстве представлена следующими данными:
 регистрационный номер;
 дата регистрации;
 тип публикации;
 УДК (специальность);
 фамилия, имя и отчество автора (первого, если имеются соавторы);
 название;
 фамилия, имя и отчество рецензента;
 номер журнала;
 дата выпуска журнала.
Для типа публикации, УДК и ФИО рецензента создать отдельные файлысправочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по дате регистрации;
– по типу публикации;
– по УДК;
– по ФИО автора;
– по названию;
– по номеру журнала.
124
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: дата регистрации (указываются начало и конец периода поиска), тип публикации, УДК, ФИО автора,
название и номер журнала.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. По всем номерам журнала выдать состав публикаций каждого номера, упорядоченный по УДК, типу публикации и ФИО автора. Вид выходного документа:
<Номер журнала>
<УДК>
<Тип публикации>
№ п/п
ФИО автора
…
…
название
…
2. Для каждого автора определить список его публикаций (по всем хранимым
данным), упорядоченный по номеру журнала. Вид выходного документа:
<ФИО автора>
№ п/п
УДК
…
…
Тип публикации
…
Название
…
Номер журнала
…
3. Для каждого рецензента определить количество публикаций, которые он рецензировал для каждого номера. Выходной документ должен быть упорядочен по
ФИО рецензента и номеру журнала и иметь вид:
<ФИО рецензента>
№ п/п
номер журнала
…
…
Итого:
125
количество
…

15.23. Задание 23. Видео-аудио салон
Для видео-аудио салона «Любопытное око», занимающегося продажей и
прокатом дисков и кассет, требуется разработать информационную систему, позволяющую обрабатывать данные о продажах и прокате дисков данным салоном,
представленные в определенном формате.
Информация о продажах и прокате представлена следующими данными:
 регистрационный номер;
 тип носителя;
 тип продукции;
 название;
 дата продажи или проката;
 фамилия, имя и отчество клиента;
 количество;
 цена за единицу;
 скидка по карте;
 скидка за опт.
Для типа носителя и типа продукции создать отдельные файлысправочники, используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по типу носителя;
– по типу продукции;
– по названию;
– по дате продажи или проката;
– по ФИО клиента.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
126
Критериями поиска для данной системы являются: тип носителя, тип продукции, дата продажи или проката (указываются начало и конец периода поиска)
и ФИО клиента.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для каждого клиента салона найти общую сумму, которую он потратил на
покупку или прокат записей в данном салоне. Общая стоимость вычисляется при
учете всех скидок на каждую покупку или прокат. Вид выходного документа:
Выручка салона
№ п/п
…
ФИО покупателя
…
Итого:
Стоимость
…

2. Для каждого клиента салона выдать список всех его операций (по всем хранимым данным), упорядоченный по типу продукции, типу носителя и названию.
Подвести общий итог для каждого клиента салона. Вид выходного документа:
<ФИО покупателя>
<Тип продукции>
№ п/п Тип носителя
…
…
Название
…
Кол-во Общая скидка Сумма
…
…
…
Итого:

3. По всем месяцам текущего года для каждого типа носителя найти стоимость
всех их продаж (за каждый месяц и общую) по каждому названию. Данные должны быть упорядочены по месяцу, типу носителя и названию. Подвести итог – вычислить общую стоимость всех продаж. Вид выходного документа:
<Месяц>
№ п/п
…
<Тип носителя>
Название
…
Итого:
127
Выручка
…

15.24. Задание 24. Салон мебели
Для салона мебели, занимающегося продажей мебели, требуется разработать информационную систему, позволяющую обрабатывать данные о продажах
мебели данным салоном, представленные в определенном формате.
Информация о продажах салона представлена следующими данными:
 учетный номер продажи;
 дата продажи;
 тип мебели;
 наименование;
 фамилия, имя и отчество покупателя;
 количество единиц;
 цена за единицу;
 стоимость доставки;
 стоимость сборки и установки;
 скидка.
Для типа мебели и наименования создать отдельные файлы-справочники,
используемые при заполнении полей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по типу мебели;
– по наименованию;
– по дате покупки;
– по ФИО покупателя.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
128
Критериями поиска для данной системы являются: тип мебели, наименованию, дата продажи (указываются начало и конец периода поиска) и ФИО покупателя.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для всех дат текущего месяца вычислить стоимость каждой продажи (стоимость равна цене изделия плюс стоимость сборки минус скидка плюс стоимость
доставки; любая из составляющих, кроме цены, может отсутствовать). Данные
должны быть упорядочены по дате, типу мебели и названию. Вид выходного документа:
<Дата>
№ п/п
…
Учетный
номер
…
Тип
мебели
…
Цена с учеОбщая
Доставка
том скидки
стоимость
…
…
…
…
Итого:



Название
2. Для каждого покупателя найти общую стоимость всех его покупок (по всем
хранимым данным). Вид выходного документа:
Расходы покупателей
№ п/п
ФИО покупателя
…
…
Итого:
Стоимость
…

3. Для каждого типа мебели найти стоимость всех продаж (за каждый месяц и
общую) по каждому наименованию. Подвести итог – общую стоимость всех продаж. Вид выходного документа:
<Тип мебели>
<Месяц>
№ п/п
Наименование
…
…
Итого:
129
Общая стоимость
…

15.25. Задание 25. Компания мобильной связи
Для компании «Связь без границ», занимающейся продажей телефонных
аппаратов и предоставлением услуг связи требуется разработать информационную систему, позволяющую обрабатывать данные о продажах аппаратов и договорах о предоставлении услуг связи, представленные в определенном формате.
Информация о договорах, заключенных с компанией, представлена следующими данными:
 регистрационный номер;
 фамилия, имя и отчество абонента, заключившего договор;
 район проживания;
 вид услуги;
 тариф;
 марка аппарата;
 дата заключения договора;
 стоимость услуги;
 скидка;
 фамилия имя и отчество оператора, заключившего договор.
Для вида услуги, тарифа, района проживания, марки аппарата и ФИО оператора создать отдельные файлы-справочники, используемые при заполнении полей
данных. Предусмотреть возможность добавления, изменения и удаления записей
в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по виду услуги;
– по тарифу;
– по марке аппарата;
– по ФИО абонента;
– по ФИО оператора.
130
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: вид услуги, тариф, район
проживания, марка аппарата, дата заключения договора (указываются начало и
конец периода поиска) и ФИО оператора (с использованием файла-справочника).
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. По всем районам проживания для каждой марки аппарата определить количество лиц, заключивших договор, и общую стоимость договоров. Отчет составить по всем договорам и по договорам, заключенным за каждый месяц. Вид выходного документа:
<Месяц>
№ п/п
…
<Район проживания>
Марка аппарата
Кол-во договоров
…
Итого:
Общая стоимость
…
…


2. Для каждого района проживания и каждого вида услуги определить общую
сумму заключения договоров для каждого абонента с учетом скидки и без ее учета. Выходной документ должен иметь вид:
<Район проживания>
<Вид услуги>
№ п/п
ФИО абонента
…
…
Итого:
Оплата
(номинал)
…

Скидка
…

Оплата
(с учетом скидки)
…

3. Для каждого оператора найти количество и сумму по всем заключенным договорам (по всем хранимым данным). Вид выходного документа:
Договоры, заключенные операторами
№ п/п
ФИО оператора
Кол-во договоров
…
…
…
Итого:

131
Сумма
…

15.26. Задание 26. Кинотеатр
Для кинотеатра «Темный зал» требуется разработать информационную систему, позволяющую обрабатывать данные о фильмах и их показах, представленные в определенном формате.
Информация о фильмах представлена следующими данными:
 код фильма;
 название;
 жанр;
 дата начала проката;
 дата конца проката;
 стоимость проката (аренда фильма);
 выручка от продажи билетов на показ фильма (вычисляется автоматически при редактировании данных о показах фильма).
Информация о показах фильмов содержат следующие данные:
 название фильма (выбирается из данных о фильмах);
 дата показа;
 время начала сеанса;
 количество занятых мест;
 стоимость проданных билетов.
Для жанра фильма и времени начала сеанса создать отдельные файлысправочники, используемые при заполнении записей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Кроме этого, необходимо предусмотреть корректный перенос данных о коде
фильма в данные о показах. Файл с данными о фильме должен выступать в роли
справочника по полю «название фильма» в данных о показах. Корректный перенос означает следующее: если по каким-то причинам информация о некотором
фильме была удалена, то все записи в данных о показах, соответствующие этому
фильму так же должны быть удалены. Кроме этого, при внесении записи о показе
132
некоторого фильма необходимо предусмотреть увеличение стоимости проданных
билетов в записи о фильме, на величину, указанную в записи о показе.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
в данных о фильмах –
– по названию;
– по жанру;
– по стоимости проката;
в данных о показах –
– по дате показа;
– по времени начала сеанса;
– по количеству занятых мест.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
Критериями поиска для данной системы являются: жанр и название фильма
в данных о фильмах; по дате показа и времени начала сеанса в данных о показах.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для всех жанров и каждого фильма определить количество человек, пришедших на показ и общую выручку для каждой даты показа фильма. Подвести
итог для каждого жанра и общий итог. Данные должны быть упорядочены по
жанру, фильму и дате. Выходной документ должен иметь вид:
<Жанр>
№ п/п
…
<Название фильма> <Код фильма>
Кол-во проданных
Дата
билетов
…
…
Итого:

Стоимость проданных
билетов
…

2. Для каждого фильма определить доход кинотеатра от проката.
3. Для каждой даты и каждого фильма определить оставшееся количество дней
проката, количество человек, посетивших показ данного фильма и общую выручку с начала проката.
133
15.27. Задание 27. Обувная фирма
Для небольшой фирмы, специализирующейся на изготовлении обуви из полуфабрикатных материалов требуется разработать информационную систему,
позволяющую обрабатывать данные о продажах продукции фирмы, представленные в определенном формате.
Информация о продажах фирмы, представлена следующими данными:
 учетный номер продажи;
 дата продажи;
 модель;
 страна-производитель материалов;
 размер;
 цена за единицу товара (пару);
 количество пар в партии;
 скидка;
 выручка (вычисляется автоматически!!!);
 фамилия имя и отчество покупателя.
Для модели, страны-производителя и размера создать отдельные файлысправочники, используемые при заполнении записей данных. Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по модели;
– по стране-производителю материалов;
– по размеру;
– по дате продажи;
– по ФИО покупателя.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
134
Критериями поиска для данной системы являются: модель, страна-производитель, дата покупки (указываются начало и конец периода поиска) и ФИО покупателя.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для каждой страны и каждой модели определить количество проданных пар
каждого размера, а также общую сумму выручки. Подвести итог по модели и общий итог. Структура выходного документа:
<Страна-производитель>
<Модель>
№ п/п
Размер
Количество пар
…
…
…
Итого:

Выручка
…

2. Для каждого покупателя выдать весь список его закупок на фирме с начала
их сотрудничества. Подвести итог по каждой дате, каждому месяцу и общий итог.
Выходной документ должен иметь вид:
<Покупатель>
№ п/п
…
<Дата>
Модель
…
Страна
…
Размер
…
Итого:
Кол-во пар
…

Сумма
…

3. Выдать список из десяти моделей обуви, пользующихся наибольшим спросом, то есть количество проданных пар по ним является максимальным, данные
расположить в порядке убывания. Вид выходного документа:
Самые популярные модели
№ п/п
Модель
Страна-производитель
…
…
…
135
Количество пар
…
15.28. Задание 28. Магазин стройматериалов
Для магазина-склада «Все для стройки», торгующего строительными материалами, требуется разработать информационную систему, позволяющую обрабатывать данные о проданных стройматериалах, представленные в определенном
формате. Информация о проданных магазином материалах представлена следующими данными:
 учетный номер продажи;
 дата продажи;
 категория стройматериалов;
 наименование;
 единицы измерения;
 цена за единицу;
 стоимость доставки;
 скидка;
 фамилия, имя и отчество покупателя.
Для значений категории стройматериалов и их наименований создать отдельные файлы-справочники, используемые при заполнении полей данных.
Предусмотреть возможность добавления, изменения и удаления записей в справочниках.
Необходимо предусмотреть возможность упорядочения данных (сортировку) по следующим полям:
– по категории стройматериалов;
– по наименованию;
– по дате покупки;
– по ФИО покупателя.
Сортировка по перечисленным полям данных обеспечит сортировку по любой совокупности перечисленных полей (вложенную сортировку).
136
Критериями поиска для данной информационной системы являются: дата
продажи (указываются начало и конец периода поиска), ФИО покупателя, категория и наименование стройматериалов.
На основании представленных в системе данных необходимо подготовить
документы определенного вида и сохранить их в текстовых файлах.
1. Для каждого покупателя найти общую стоимость каждого из всех приобретенных им материалов. Общая стоимость продажи вычисляется с учетом скидки
(если она есть) на приобретенные материалы и доставку. Данные должны быть
упорядочены по дате продажи и ФИО покупателя. Выходной документ должен
иметь следующий вид:
Продажи
Дата
№ п/п
продажи
…
…
ФИО
Категория
Наименование
…
…
Цена с
учетом
скидки
…
Доставка
Общая
стоимость
…
2. Для каждого покупателя найти общую сумму и количество сделанных им покупок (по всем хранимым данным). Данные должны быть упорядочены по ФИО
покупателя. Выходной документ должен иметь следующий вид:
№ п/п
ФИО покупателя
…
…
Количество
покупок
…
Общая сумма
…
3. Для всех месяцев и всех категории материалов найти общую сумму всех продаж (за каждый месяц и в целом за весь период) по каждому наименованию. Подвести итог – общую стоимость всех продаж. Данные должны быть упорядочены
по месяцам, категории материала и наименованию. Вид выходного документа:
<Месяц>
<Категория материала>
№ п/п
Наименование
…
…
Итого:
Кол-во единиц
…

137
Общая сумма
…

Литература
1. Абрамян М.Э., Мачулина Л.А. Программирование. Методические указания для студентов экономического и механико-математического факультетов.
Выпуск 1: Методы сортировки. Работа с файлами, клавиатурой и дисплеем в турбо-паскале. – Ростов-на-Дону: УПЛ РГУ, 1994.
2. Абрамян М.Э., Мачулина Л.А. Программирование. Методические указания для студентов экономического и механико-математического факультетов.
Выпуск 4: Варианты индивидуальных заданий. – Ростов-на-Дону: УПЛ РГУ,
1994.
3. Амелина Н.И., Мачулина Л.А Методические указания по курсовому проектированию по курсу «Базы данных» для студентов механико-математического
факультета вечернего и дневного отделения. – Ростов-на-Дону, УПЛ РГУ, 1999.
4. Ананьев А.И., Федоров А.Ф. Самоучитель Visual Basic 6.0. – СПб.: БХВПетербург, 2002. – 624 с.: ил. ISBN 5-8206-0060-6
5. Браун С. Visual Basic 6: учебный курс. – СПб.: Питер, 2002. – 576 с.: ил.
ISBN 5-8246-0054-0
6. Вендров А. М. Проектирование программного обеспечения экономических информационных систем: Учебник. — М.: Финансы и статистика, 2002. –
352 с.: ил. ISBN 5-279-02144-Х
7. Невская Е.С., Амелина Н.И., Мачулина Л.А. Введение в системы баз данных. Методические указания для студентов вечернего и дневного отделения механико-математического факультета. – Ростов-на-Дону, УПЛ РГУ, 2003.
138
Содержание
Предисловие ..................................................................................................................... 3
Часть I. Проектирование информационной системы .................................................. 4
1. Описание предметной области ................................................................................. 4
2. Моделирование данных .............................................................................................. 6
3. Представление данных ............................................................................................ 11
Часть II. Реализация информационной системы «Студенты» .................................. 13
4. Предварительные замечания .................................................................................... 13
5. Постановка задачи .................................................................................................... 13
6. Структура проекта .................................................................................................... 15
7. Создание меню .......................................................................................................... 16
8. Пользовательские модули ....................................................................................... 21
9. Работа с файлами ...................................................................................................... 26
9.1. Использование диалогового окна Windows ................................................. 26
9.2. Создание файлов базы данных ...................................................................... 28
10. Ввод и редактирование данных ............................................................................ 30
10.1. Проектирование макета формы для ввода и редактирования данных ..... 30
10.2. Программное обеспечение формы для ввода и редактирования ............. 33
10.2.1. Пользовательские процедуры и функции ...................................... 33
10.2.2. Процедуры обработки событий ....................................................... 41
11. Работа с существующим файлом данных ............................................................ 50
11.1. Открытие файла ............................................................................................ 50
11.2. Просмотр файла базы данных ..................................................................... 52
11.3. Изменение и удаление записей в файле базы данных .............................. 55
11.4. Сохранение и удаление файлов ................................................................... 58
12. Сортировка данных ................................................................................................ 61
139
13. Задачи, решаемые в информационной системе .................................................. 65
13.1. Вывод списков групп .................................................................................... 67
13.2. Количество студентов и средний балл в группах ...................................... 72
13.3. Вычисление среднего балла для каждого студента .................................. 76
Часть III. Проекты для самостоятельной разработки ............................................... 80
14. Общие требования .................................................................................................. 80
15. Технические задания к проектам .......................................................................... 83
15.1. Задание 1. Кадровое агентство ................................................................... 83
15.2. Задание 2. Отдел кадров предприятия ....................................................... 85
15.3. Задание 3. Магазин по продаже бытовой техники ................................... 87
15.4. Задание 4. Компьютерная фирма ............................................................... 89
15.5. Задание 5. Компания автосервиса .............................................................. 91
15.6. Задание 6. Авиакомпания ........................................................................... 93
15.7. Задание 7. Скорая помощь .......................................................................... 95
15.8. Задание 8. Автотранспортное предприятие .............................................. 97
15.9. Задание 9. Личная библиотека ................................................................... 99
15.10. Задание 10. Экспорт сырья ..................................................................... 101
15.11. Задание 11. Анализ успеваемости в ВУЗе ............................................ 103
15.12. Задание 12. Салон красоты ..................................................................... 105
15.13. Задание 13. Бухгалтерия организации ................................................... 107
15.14. Задание 14. Глазная клиника .................................................................. 109
15.15. Задание 15. Туристическая фирма ......................................................... 111
15.16. Задание 16. Оптовая база ........................................................................ 113
15.17. Задание 17. Продажа автомобилей ........................................................ 115
15.18. Задание 18. Учет личных автомобилей ................................................. 117
15.19. Задание 19. Видеотека ............................................................................. 119
15.20. Задание 20. Телефонный справочник .................................................... 121
15.21. Задание 21. Стоматологическая клиника .............................................. 123
140
15.22. Задание 22. Издательство ....................................................................... 125
15.23. Задание 23. Видео-аудио салон .............................................................. 127
15.24. Задание 24. Салон мебели ....................................................................... 129
15.25. Задание 25. Компания мобильной связи ............................................... 131
15.26. Задание 26. Кинотеатр ............................................................................. 133
15.27. Задание 27. Обувная фирма .................................................................... 135
15.28. Задание 28. Магазин стройматериалов ................................................. 137
Литература .................................................................................................................. 139
Содержание ................................................................................................................. 140
141
Скачать