Содержание
Цель работы
Научится организовывать взаимодействие программы с файловой системой. Получить практические навыки в алгоритмизации и программировании задач с организацией ввода записей в типизированный файл, выборки записей из типизированного файла в соответствии с заданным критерием и записью информации в текстовый файл.
Варианты заданий
№ | Условие задачи |
1 | Создать типизированный файл, содержащий данные о студентах группы: фамилия и инициалы (одно поле записи), год рождения, адрес (улица, дом, квартира), средний балл при поступлении. Переписать в текстовый файл и вывести в ячейки электронной таблицы данные о студентах со средним проходным баллом, большим $3.8$. |
2 | Создать типизированный файл, содержащий данные о редких книгах, хранящихся с библиотеке: название, автор (фамилия и инициалы), год издания, место издания, инвентарный номер. Переписать в текстовый файл и вывести в ячейки электронной таблицы данные о книгах, изданных в Санкт-Петербурге. |
3 | Создать типизированный файл, содержащий данные о рейсах самолетов: номер рейса, пункт назначения, время в пути (дробное число), тип самолета, время отправления (два поля записи: часы и минуты). Переписать в текстовый файл и вывести в ячейки электронной таблицы данные о рейсах, вылетающих после десяти вечера, но до полуночи. |
4 | Создать типизированный файл, содержащий данные о автобусных маршрутах: пункт отправления, пункт назначения, время в пути (дробное число), время отправления (два поля записи: часы и минуты), количество остановок в пути. Переписать в текстовый файл и вывести в ячейки электронной таблицы данные о рейсах, делающих более трех остановок в пути. |
5 | Создать типизированный файл, содержащий данные о наименованиях продукции молокозавода, поступивших в продажу: название продукта, дата изготовления (три поля записи: год, месяц и число), срок хранения в днях, закупочная цена (дробное число). Переписать в текстовый файл и вывести в ячейки электронной таблицы данные о продуктах, выпущенный в июле $2004$ года. |
6 | Создать типизированный файл, содержащий данные о фирмах: название фирмы, фамилия и инициалы владельца (одно поле), адрес (три поля: город, улица, дом), телефон. Переписать в текстовый файл и вывести в ячейки электронной таблицы данные о владельцах фирм, фамилия которых начинается с буквы $М$. |
7 | Создать типизированный файл, содержащий данные о автомашинах, находящихся в розыске: марка, цвет, год выпуска, номер, дата угона (три поля: число, месяц, год). Переписать в текстовый файл и вывести в ячейки электронной таблицы данные о машинах, угнанных в июле $2002$ года. |
8 | Создать типизированный файл, содержащий данные о сотрудниках фирмы: фамилия, имя, отчество, год рождения, должность, год поступления на работу. Переписать в текстовый файл и вывести в ячейки электронной таблицы данные о сотрудниках фирмы, устроившихся на работу в период с $1999$ по $2002$ год включительно. |
9 | Создать типизированный файл, содержащий данные о спортсменах-пловцах: фамилия и инициалы, пол, год рождения, рост, вес, лучшее время, за которое спортсмен проплывает $50$ метров. Переписать в текстовый файл и вывести в ячейки электронной таблицы данные о спортсменах, рост которых больше $175$ см. |
10 | Создать типизированный файл, содержащий данные о клиентах ателье: фамилия и инициалы, адрес (три поля: улица, дом, квартира), вид заказа, стоимость заказа. Переписать в текстовый файл и вывести в ячейки электронной таблицы данные о клиентах, проживающих на улице Международная. |
Лабораторная работа №8 предполагает написание программы на VBA in Excel. При заказе работы своего варианта вы получите качественно написанную и хорошо прокомментированную программу.
Если дополнительно закажите алгоритм решения вашей задачи (мы крайне рекомендуем это сделать), то получите аккуратно оформленный отчет-алгоритм, поясняющий все тонкости решения поставленной задачи.
Образец выполнения (вариант №8)
Условие задания
Создать типизированный файл, содержащий данные о сотрудниках фирмы: фамилия, имя, отчество, год рождения, должность, год поступления на работу. Переписать в текстовый файл и вывести в ячейки электронной таблицы данные о сотрудниках фирмы, устроившихся на работу в период с $1999$ по $2002$ год включительно. |
Краткий анализ входных данных
№ | Поле | Тип данных | Название в программе |
1 | Фамилия | строковый | surname |
2 | Имя | строковый | name |
3 | Отчество | строковый | fatherName |
4 | Год рождения | целочисленный | yearOfBirth |
5 | Должность | строковый | post |
6 | Год поступления | целочисленный | inputYear |
Для удобства работы с информацией о сотруднике фирмы объявим в программе наш собственный тип данных:
1 2 3 4 5 6 7 8 9 | ' структура, описывающая информацию о сотруднике фирмы Type TEmployee surname As String * 30 ' фамилия сотрудника (строка длиной 30 символов) name As String * 20 ' имя сотрудника (строка длиной 20 символов) fatherName As String * 30 ' отчество сотрудника (строка длиной 30 символов) yearOfBirth As Integer ' год рождения сотрудника post As String * 30 ' должность, занимаемая сотрудником в фирме (строка длиной 30 символов) inputYear As Integer ' год принятия сотрудника на работу End Type |
Также в постановке задачи есть такая фраза:
Создать типизированный файл, содержащий данные о сотрудниках фирмы
➡ Типизированный файл можно создать исключительно программным способом! Следовательно, чтобы протестировать работу программы и получить какие-то результаты, нам придется вводить входные данные с клавиатуры.
Для этих целей мы заранее подготовили данные о $10$ выдуманных сотрудниках фирмы:
💡 Наша конечная цель — получить список сотрудников, устроившихся в фирму на работу в период с $199$ по $2002$ год включительно. Следовательно, результат должен содержать информацию о следующих $5$ сотрудниках:
Интерфейс программы
Интерфейс программы предельно прост и состоит буквально из одного листа «ЛР8» со всей необходимой информацией:
➡ При клике по кнопке с надписью «Создать типизированный файл с данными о сотрудниках» пользователю будет предложено ввести количество сотрудников выдуманной фирмы, а затем последовательно ввести информацию по каждому сотруднику. Вся введенная информация будет сохранена в типизированном файле «workers».
➡ При клике по кнопке с надписью «Получить список сотрудников, принятых на работу с 1999 по 2002 год включительно» будет автоматически запущена процедура на VBA, которая отберет сотрудников с заданным годом принятия на работу. Отфильтрованная информация будет записана в текстовый файл «workers.txt» и выгружена в ячейки электронной таблицы.
➡ При клике по кнопке с надписью «Очистить ячейки таблицы от прошлых результатов» будет запущена процедура на VBA, которая удалить всю информацию из ячеек электронной таблицы. Реализовано исключительно для удобства работы пользователя с программой.
Пример ввода информации о сотруднике №1:
№ | Название поля ввода | Результат |
1 | Фамилия | |
2 | Имя | |
3 | Отчество | |
4 | Год рождения | |
5 | Должность | |
6 | Год поступления |
А всего для тестирования программы предстоит ввести информацию о $10$ сотрудниках фирмы.
Результаты работы программы
Когда ввод входной информации закончен, нажимаем по кнопке с надписью «Получить список сотрудников, принятых на работу с 1999 по 2002 год включительно»:
При клике по кнопке с надписью «Очистить ячейки таблицы от прошлых результатов» получаем первозданный вид интерфейса:
Решение задачи с использованием VBA in Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | ' структура, описывающая информацию о сотруднике фирмы Type TEmployee surname As String * 30 ' фамилия сотрудника (строка длиной 30 символов) name As String * 20 ' имя сотрудника (строка длиной 20 символов) fatherName As String * 30 ' отчество сотрудника (строка длиной 30 символов) yearOfBirth As Integer ' год рождения сотрудника post As String * 30 ' должность, занимаемая сотрудником в фирме (строка длиной 30 символов) inputYear As Integer ' год принятия сотрудника на работу End Type ' создание входного типизированного файла, содержащего информацию о заданном кол-ве сотрудников фирмы Sub Input_Data() Dim count As Integer ' кол-во сотрудников фирмы, хранящихся в типизированном файле Dim i As Integer ' счетчик цикла Dim employee As TEmployee ' хранит информацию о текущем сотруднике фирмы ' запрашиваем от пользователя кол-во сотрудников, информацию по которым он планирует вводить с клавиатуры count = InputBox("Введите количество сотрудников фирмы: ", "Сообщение для пользователя") ' создаем типизированный файл; файл создается в той же папке, где лежит рабочая книга Excel Open ActiveWorkbook.Path & "\workers" For Random As #1 Len = Len(employee) ' начинается циклически процесс ввода информации о сотрудниках фирмы For i = 1 To count employee.surname = InputBox("Введите фамилию сотрудника (№" & i & "): ", "Сообщение для пользователя") employee.name = InputBox("Введите имя сотрудника (№" & i & "): ", "Сообщение для пользователя") employee.fatherName = InputBox("Введите отчество сотрудника (№" & i & "): ", "Сообщение для пользователя") employee.yearOfBirth = InputBox("Введите год рождения сотрудника (№" & i & "): ", "Сообщение для пользователя") employee.post = InputBox("Введите должность сотрудника (№" & i & "): ", "Сообщение для пользователя") employee.inputYear = InputBox("Введите год поступления сотрудника на работу (№" & i & "): ", "Сообщение для пользователя") ' записываем в типизированный файл информацию о только что введенном сотруднике Put #1, i, employee Next i ' все открытые ранее файлы после обработки необходимо закрывать Close #1 End Sub ' происходит чтение типизированного файла, содержащего информацию о сотрудниках фирмы ' если год поступления сотрудника попадает на отрезок [1999 ... 2002], то ' копируем информацию о нем в текстовый файл, а также выгружаем в ячейки таблицы Excel Sub Filter_Data() Dim employee As TEmployee ' хранит информацию о текущем сотруднике фирмы Dim position As Integer ' позиция сотрудника в типизированном файле Dim indexForExcel As Integer ' номер строки таблицы Excel при выгрузке информации о сотруднике ' создаем выходной текстовый файл Open ActiveWorkbook.Path & "\workers.txt" For Output As #2 ' открываем типизированный файл, содержащий информацию о сотрудниках фирмы Open ActiveWorkbook.Path & "\workers" For Random As #1 Len = Len(employee) ' предварительная инициализация счетчиков position = 1 indexForExcel = 1 ' считываем информацию о сотрудниках фирмы из типизированного файла "workers" Do ' читаем из типизированного файла информацию об очередном сотруднике Get #1, position, employee ' если год поступления сотрудника попадает на отрезок [1999 ... 2002], то If ((employee.inputYear >= 1999) And (employee.inputYear <= 2002)) Then ' переносим информацию о сотруднике в текстовый файл (запись происходит построчно) Print #2, employee.surname & " " & employee.name & " " & employee.fatherName _ & " " & employee.yearOfBirth & " " & employee.post & " " & employee.inputYear ' выгружаем информацию о текущем сотруднике в ячейки электронной таблицы indexForExcel = indexForExcel + 1 Worksheets("ЛР8").Cells(indexForExcel, "A").Value = position Worksheets("ЛР8").Cells(indexForExcel, "B").Value = employee.surname Worksheets("ЛР8").Cells(indexForExcel, "C").Value = employee.name Worksheets("ЛР8").Cells(indexForExcel, "D").Value = employee.fatherName Worksheets("ЛР8").Cells(indexForExcel, "E").Value = employee.yearOfBirth Worksheets("ЛР8").Cells(indexForExcel, "F").Value = employee.post Worksheets("ЛР8").Cells(indexForExcel, "G").Value = employee.inputYear End If position = position + 1 ' в типизированном файле переходим на следующего сотрудника Loop Until (EOF(1)) ' после файловой обработки необходимо не забыть закрыть все ранее открытые файлы Close #1 Close #2 End Sub ' очистка данных от прошлых выводов Sub Clear_Data() Worksheets("ЛР8").Range("A2:G13").ClearContents End Sub |
Стоимость заказа работы
➡ Стоимость решения задания из любого варианта составляет $300$ рублей.
Также дополнительно мы вам можем предложить:
- Создание аккуратной блок-схемы ($400$ рублей).
- Детальное описание алгоритма решения задачи ($300$ рублей).
Для оформления заказа пишите на почту: proglabs@mail.ru.
Время нашего ответа обычно составляет не более $10$ минут.
Добавить комментарий