Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB-2012 / 2-cеместр / Дневники / Методика / Лаб2-Типизированные файлы.doc
Скачиваний:
21
Добавлен:
26.03.2015
Размер:
783 Кб
Скачать
☆

Пример решения задачи Постановка задачи

Предприятие выпускает несколько видов продукции, на изготовление которых используется сталь. Определить вид продукции, на который тратят стали больше всего, если известно:

  • норма затрат стали на единицу продукции i-го вида (в килограммах);

  • плановое задание на выпуск i-го вида продукции (в штуках).

Экономико-математическая модель

Потребность в стали на производство і-го вида определяется по формуле

Потребностьі = Нормаі * Количествоі

где Нормаі - затраты стали на изготовление одного продукта і-го вида;

Количествоі –план выпуска продуктов і-го вида;

n –количество видов продукции.

Необходимо определить максимальное значение величин Потребностьі , если і=1,2,…, n.

Алгоритм решения задачи

Решение задачи имеет три основных этапа:

  1. Создание файла данных.

  2. Отображение содержимого файла.

  3. Вычисление максимальной потребности.

Упрощённая схема алгоритма представлена на рис. 1.1.

На этапе «Создания файла данных» вводят данные по каждому виду продукции и сохраняют на диске.

На этапе «Отображение содержимого файла» осуществляется чтение из файла данных по каждому виду продукции и вывод их на форму

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

Структура данных

Для хранения данных о видах продукции в приложении используют дисковый файл. Каждый вид продукции имеет следующие характеристики (реквизиты):

  • Наименование – строка символов (не более 7 символов, имя Name);

  • Норма – дробное число (тип Single, имя Norma);

  • Количество – целое число (имя Kol).

Эти простые переменные касаются одного вида продукции, поэтому объединяются в тип данных пользователя Zap. Для выполнения действий с данными типа Zap в программе используется переменная типа данных пользователя Sved, которая состоит из перечисленных выше полей. Эта переменная употребляется для записи данных в файл и чтения из него.

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

Переменная Sved используются в разных частях приложения. Поэтому она, а также тип Zap, на основе которого определяется эта переменная, описываются в отдельном модуле общих описаний с атрибутами Public (общедоступный). Здесь же, описывают переменную і целого типа, она является номером выбора и будет использоваться в кодах разных форм.

Рис. 1.1. Упрощенная система алгоритма

Имя файла - последовательность символов вводится в текстовое поле с именем Тext1.text.

Для определения количества записей в файле перед началом чтения из него используется переменная Kol_zap типа Integer.

При поиске вида продукции с максимальной затратой стали используется переменная типа Single MaxPotr и переменная типа Integer іMax, в которой сохраняется номер записи с соответствующими данными. Используемые переменные представлены в табл. 9.1.

Таблица 9.1. Используемые переменные

Реквизиты

Имя

Назначение

Имя файла

Text1.text

Имя файла на диске для хранения данных по всем видам продукции

Запись

Zap

Тип данных, которые сохраняются в файле

Сведения

Sved

Переменная типа Zap

Наименование

Name

Наименование вида продукции, поле в типе данных пользователя Zap

Норма

Norma

Норма затрат стали на выбор одного вида, поле в типе данных пользователя Zap

Количество

Kol

План выпуска продуктов одного вида, поле в типе данных пользователя Zap

Потребность

Potr

Потребность стали на один вид продукции

Мах Потребность

МахPotr

Максимальная потребность стали на один вид продукции

іМах

iМах

Номер записи, в которой сохраняются данные по виду продукции с максимальной затратой стали

Количество записей

Kol_zap

Количество записей в файле

Интерфейс с пользователем.

Общая величина, для всех трёх этапов решения задачи - имя файла. Его вводят в текстовое поле на главной форме «Потребность в стали» (рис. 1.2.)

Рис. 1.2. Главная форма приложения

В ыполнение каждого этапа начинается после нажатия соответствующей кнопки на главной форме. Этап создания файла реализуется путём нажатия на кнопку «Создание», при этом появляется форма «Вид продукции» (рис. 1.3.)

Рис. 1.3. Форма «Вид продукции»

С самого начала форму «Вид продукции» можно закрыть, нажав на кнопку закрытия формы. В этом случае в файл не будет записано ни одной записи. Если же ввести на форме данные по виду продукции, а затем нажать на кнопку «Записать», то эти данные будут сохранены в файле. После этого можно или закрыть форму «Вид продукции» (приостановив заполнение файла), или ввести данные по новому виду продукции и нажать на кнопку «Записать». Этот процесс можно повторять столько раз, сколько видов продукции выпускает предприятие.

Второй этап решения задачи реализуется путём нажатия на кнопку «Вывод содержимого» и отображением всех записей файла на форму «Содержимое файла» (рис. 1.4.) при этом каждая запись занимает отдельную строку.

Рис. 1.4. Форма «Содержимое файла»

Третий этап выполняется нажатием кнопки «Максимальная потребность» при этом на соответствующую форму будет выведена информация о виде продукции с максимальной затратой стали (рис. 1.5.) данные об изделии выводятся в столбик.

Рис. 1.5. Форма «Максимальная потребность»

Код проекта

Общие для всего приложения величины описывают в отдельном модуле «Общие описания». Он содержит следующие операторы:

'Общие описания

Option Explicit

'Тип данных пользователя

Public Type zap

Name As String * 7

Norma As Single

Kol As Integer

End Type

'Переменная типа данных пользователя

Public sved As zap

'Счетчик записей

Public i As Integer

Форма «Потребность в стали» имеет три кнопки. Нажатие на каждую из них обрабатывается соответствующей процедурой. Коды процедур представлены ниже:

Private Sub Command1_Click() ‘Создание файла

'Открытие файла

Open Text1 For Random As #1 Len = Len(sved)

'ввод данных по одному виду продукции и запись на диск

'повторяется многократно

i = LOF(1) / Len(sved) + 1 ‘ номер первой свободной записи в файле

Form2.Show

End Sub

Private Sub Command3_Click() ‘Вывод содержимого файла

Dim kol_zap As Integer

'Открытие файла для чтения

Open Text1 For Random Access Read As #1 Len = Len(sved)

'Вывод простой формы для отображения содержимого файла

Form3.Show

'Определение количества записей файла

kol_zap = LOF(1) / Len(sved)

' Чтение из файла, отображение записей на форму

For i = 1 To kol_zap

Get #1, i, sved

'Печать записи на форму

Form3.Print sved.Name, sved.Norma, sved.Kol

Next i

'Закрытие файла

Close #1

End Sub

Private Sub Command2_Click() ‘Вычисление максимальной потребности

Dim Potr, MaxPotr As Single

Dim imax As Integer

Dim kol_zap As Integer

'Открытие файла для чтения

Open Form1.Text1 For Random Access Read As #1 Len = Len(sved)

i = 1

Get #1, i, sved

'Вычисление потребности в стали для первого изделия

Potr = sved.Norma * sved.Kol

MaxPotr = Potr

imax = i

'Вычисление максимума путем сравнения

' потребностей по другим изделиям

kol_zap = LOF(1) / Len(sved)

For i = 2 To kol_zap

Get #1, i, sved

Potr = sved.Norma * sved.Kol

If Potr > MaxPotr Then

MaxPotr = Potr

imax = i

End If

Next i

'Чтение записи с максимальной потребностью

Get #1, imax, sved

'Отображение информационной формы

Form4.Show

'Отображение результирующей информации

Form4.Print

Form4.Print Tab(3), "Наименование"; Tab(33); sved.Name

Form4.Print Tab(3), "Норма"; Tab(33); sved.Norma

Form4.Print Tab(3), "Количество"; Tab(33); sved.Kol

Form4.Print Tab(3), "Потребность"; Tab(33); MaxPotr

Close #1

End Sub

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

Private Sub Command1_Click() ‘ Занесение данных в файл

'Ввод данных по виду продукции

sved.Name = Text1.Text

sved.Norma = CSng(Text2.Text)

sved.Kol = CInt(Text3.Text)

'Запись в файл

Put #1, i, sved

'Очистка полей от предыдущих данных

i = i + 1

Text1.Text = ""

Text2.Text = "0"

Text3.Text = "0"

End Sub

Private Sub Form_Unload(Cancel As Integer) ‘ Закрытие формы

Close #1

End Sub

Формы «Содержимое файла» и «Максимальная необходимость» процедур не имеют.

Реализация проекта

  1. Запустить на выполнение VB для создания нового проекта.

  2. Создать модуль «Общие описания».

    1. На стандартной панели инструментов нажать стрелку правее от кнопки добавление нового объекта (вторая левее) и выбрать команду Add Module.

    2. В диалоговом окне, что появилось, вкладыше New выбрать значение Module и нажать кнопку «Открыть».

    3. В окно кода, что появилось, ввести необходимые описания (код модуля «Общие описания»).

    4. На стандартной панели инструментов нажать на кнопку «Сохранить». В диалоговом окне Save File As, которое появилось, в поле Папка указать необходимую папку, а в поле Имя файла ввести название модуля ob-opis-1, после чего нажать на кнопку «Сохранить».

    5. В окне свойств модуля к свойству Name ввести имя Общие_описания.

  3. Создать форму «Потребность в стали».

    1. перейти в окно формы, которое появилось при открытии нового проекта.

    2. Задать заголовок и имя формы.

    3. Создать текстовое поле с соответствующей надписей для ввода имени файла.

    4. Создать три командные кнопки «Создание», «Вывод содержимого» и «Максимальная потребность».

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

    6. Сохранить форму в папке на диске.

  4. Создать форму «Вид продукции».

    1. На стандартной панели инструментов нажать на стрелку правее от кнопки добавление нового объекта и выбрать команду Add Form.

    2. В диалоговом окне AddForm, которое появилось, выбрать значок «Form» и нажать кнопку «Открыть».

    3. Задать заголовок форме «Вид продукции» и её имя.

    4. Создать три текстовых поля Наименование, Норма, Количество и соответствующие надписи для них.

    5. Создать командную кнопку «Записать» и ввести код процедуры, которая обрабатывает событие нажатия мышкой на неё.

    6. Сохранить форму в папке на диске.

  5. Создать форму «Содержимое файла».

    1. Повторить п. 4.1. и 4.2.

    2. Задать заголовок формы «Содержимое файла» и её имя.

    3. Сохранить форму в папке на диске.

  6. Создать форму «Максимальная потребность». Выполняется аналогично п. 5.

  7. Сохранить весь проект в папке на диске.

Анализ проекта.

Проект состоит из четырёх форм и одного модуля общих описаний. Главной является форма «Потребность в стали». Она управляет работой других форм с помощью соответствующих процедур.

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

Для вывода пустой формы в коде используется метод Show соответствующей формы, например: Form3.Show

Для вывода данных на форму используется метод Print этой формы.

Обратим внимание, что при чтении/записи в файл используется сложная переменная типа данных пользователя Sved. Одновременно передаются значения всех её трёх полей (Name, Norma, Kol). В методе Print необходимо указать либо каждое поле отдельно в полной форме, указывая имя переменной-записи Sved, или в сокращенной, используя оператор With.

Отдельные элементы вывода в методе Print разделяются запятой или точкой с запятой. Если разделитель запятая, то значение будет представлено в 14-символьной зоне вывода, а если точкой с запятой – значения выводятся подряд, без разрыва. Кроме того, в элементах вывода могут использоваться функции Spc(n) (для вставки n пробелов между значениями в текстовой строке) и Tab(n) (для указания номера позиции n для начала вывода следующего элемента). Если в текущей строке позиция n уже занята и используется функция Tab(n), то вывод будет совершаться в следующей строке с n-й позиции. В примере функция Tab(n) использована для вывода в один столбец данных по виду продукции с максимальной затратой стали. При этом, название реквизита выводится, начиная с первой позиции каждой строки, а его значение – с 33 позиции этой же строки.

Используя функции Spc(n) и Tab(n) можно выводить данные в виде табличного документа.

Выполнение программы и получение результатов.

Цех по изготовлению крепёжных изделий получил заказ, данные о котором даны в табл. 1.2. Необходимо найти вид изделий с наибольшей материалоёмкостью.

Таблица 9.2. Данные о заказе на крепежные изделия

Наименование

Норма расхода стали

на одно изделие, кг

Количество, шт.

Болт

0,05

1 000

Гайка

0,025

1 000

Шуруп

0,03

5 000

гвинт

0,02

2 000