Вторая контрольная работа
по дисциплине ПСПЭВМ включает один теоретический вопрос по курсу дисциплины и
две задачи. Первая задача – по теме “Символьная информация”, вторая –
охватывает несколько тем: создание и заполнение базы данных в EXCEL через пользовательскую форму, разработанную в VBA, использование элементов управления и работа с
файлами .
Номера теоретических
вопросов и задач выбираются в
соответствии с номером по списку группы, который приведен ниже. На
теоретический вопрос следует дать развернутый ответ, подкрепленный одним или
несколькими примерами.
Выполнение задач следует
начинать с разработки алгоритмов решения. Блок-схемы алгоритмов могут быть
укрупненными, но должны отражать ход решения задачи. К задаче №2 нужно
разработать как общую схему алгоритма, так и блок-схемы по отдельным элементам
задачи, например – поиску информации или сохранению данных в файл. Блок-схемы
алгоритмов задач и соответствующие им программные коды являются основной частью
контрольной работы.
Контрольную работу следует
оформлять на листах формата А4. На обложке должны быть указаны: название
дисциплины, номер группы, шифр (номер зачетной книжки), фамилия и инициалы
студента. Тексты программ должны быть приведены в виде распечаток, остальную
часть работы можно выполнять от руки. Также нужно сделать распечатку копии
экрана с пользовательской формой и (или) рабочего листа с исходными данными
и результатами.
1. Дан текст; найти наибольшее количество цифр, идущих в
нем подряд.
2. Дан текст; определить, содержит ли он
символы, отличные от букв и пробела.
3. Дан текст. Если в тексте нет символа *, то оставить этот текст
без изменения, иначе каждую из малых латинских букв, предшествующих первому
вхождению символа *, заменить на цифру 3.
4. Дан текст. Если в тексте нет символа +, то
оставить текст без изменений, иначе каждую из цифр, предшествующую первому
вхождению символа +, заменить символом -.
5. Дан текст; если в нем нет малых
латинских букв, то оставить его без изменения, иначе каждый из символов,
следующих за первой группой малых латинских букв, заменить точкой.
6. Дан текст; выяснить, является ли этот
текст десятичной записью целого числа.
7. Дана символьная матрица размера n на т. Получить последовательно все строки
матрицы, исключая те, для которых есть равные среди строк с меньшими номерами.
8. Дан текст. Группы символов,
разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри
себя, будем называть словами. Для каждого из слов указать, сколько раз оно
встречается среди всех слов, образованных символами данного текста.
9. Дан текст. Группы символов,
разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри
себя, будем называть словами. Найти все слова, содержащие наибольшее количество
гласных латинских букв (а, е, i, о, и).
10. Дан текст. Группы символов, разделенные пробелами (одним
или несколькими) и не содержащие пробелов внутри себя, будем называть словами.
Найти все слова, в которых доля букв a, b максимальна.
11. Дан текст. Группы символов,
разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри
себя, будем называть словами. В тех словах, которые оканчиваются сочетанием
букв ing, заменить
это окончание на ed.
12. Дано натуральное число п. Получить
символьное представление п в виде последовательности цифр и пробелов,
отделяющих группы по три цифры, начиная справа.
13. Дано натуральное число п (n≤1000). Записать это число
русскими словами (семнадцать, двести пятьдесят три, тысяча и т. д.).
14. Дано натуральное число п, равное
выраженной в копейках цене некоторого товара, например 317, 5005, 100 и т. д.
Выразить цену в рублях и копейках, например 3 руб. 17 коп., 50 руб. 05 коп., 1
руб. 00 коп. и т. д. (число копеек записывается всегда двумя цифрами).
15. Дан текст, каждый символ которого
может быть малой буквой, цифрой или одним из знаков +, —, *. Группой букв будем
называть такую совокупность последовательно расположенных букв, которой
непосредственно не предшествует и за которой непосредственно не следует буква.
Аналогично определим группу цифр и группу знаков. Выяснить, встречается ли в
данном тексте группа букв one.
16. Дан текст, каждый символ которого может быть малой буквой,
цифрой или одним из знаков +, —, *. Группой букв будем называть такую
совокупность последовательно расположенных букв, которой непосредственно не
предшествует и за которой непосредственно не следует буква. Аналогично
определим группу цифр и группу знаков. Выяснить, верно ли, что в данном тексте
больше групп букв, чем групп знаков.
17. Дан текст, каждый символ которого
может быть малой буквой, цифрой или одним из знаков +, —, *. Группой букв будем
называть такую совокупность последовательно расположенных букв, которой
непосредственно не предшествует и за которой непосредственно не следует буква.
Аналогично определим группу цифр и группу знаков. Найти число таких групп букв,
которые начинаются и кончаются одной и той же буквой.
18. Дан текст, каждый символ которого
может быть малой буквой, цифрой или одним из знаков +, —, *. Группой букв будем
называть такую совокупность последовательно расположенных букв, которой
непосредственно не предшествует и за которой непосредственно не следует буква.
Аналогично определим группу цифр и группу знаков. Найти все такие группы букв,
в которые буква а входит не менее двух раз.
19. Дан текст, каждый символ которого
может быть малой буквой, цифрой или одним из знаков +, —, *. Группой букв будем
называть такую совокупность последовательно расположенных букв, которой
непосредственно не предшествует и за которой непосредственно не следует буква.
Аналогично определим группу цифр и группу знаков. Найти самую длинную группу
цифр. Если эту наибольшую длину имеет несколько групп, то взять первую по
порядку.
20. Дан текст. Если первый символ текста
не является малой латинской буквой, то оставить его без изменения. Если же это
малая латинская буква, но за начальной группой малых латинских букв не следует
цифра, то также оставить текст без изменения. Иначе каждую цифру, принадлежащую
группе цифр, следующей за начальной группой малых латинских букв, заменить
символом *.
21. Дан текст. Найти номер первой по
порядку группы цифр, начинающейся цифрой 2.
22. Дан текст. Найти число тех групп букв,
которые заканчиваются той же буквой, что и первая группа букв.
23. В заданном тексте найти самое длинное
слово.
24. Проверить, является ли данное слово словом-палиндромом,
одинаково читающееся как слева направо, так и справа налево (например, шалаш,
Анна).
25. Во введенном слове подсчитать
количество различных букв и вывести сами буквы.
Создать на VBA в EXCEL приложение для заполнения базы данных
(списка) согласно указанной в варианте теме. Реализовать средства работы с
данными. Сохранить данные в файл последовательного доступа.
Требования к
программам. Независимо от конкретности проблемы, можно выделить некоторые
формальные требования, на которых защищается квалификация разработчика.
1. Устойчивость
программы. Программа не должна терять работоспособности ни при каких, даже
некорректных, действиях пользователя. Всякие действия, грозящие потерей информации,
выполняются только после повторного подтверждения. Вводимая информация там,
где возможно,
подвергается логическому контролю.
2.
Обеспечение целостности баз данных. При любых действиях
пользователя базы не должны терять целостности (некорректность индексов, потеря ссылок
в связях
после удаления-добавления записей и т. д.).
3. Функциональная
полнота. В рамках согласованного с преподавателем или заказчиком подмножества
функ ций
все они должны быть реализованы.
4.
Терминологическая среда и интерфейс. В диалоговых средствах
используются только термины, понятные пользователю, и не используются термины
разработчика («запись», «индексация» и т. д.). Появление служебных
англоязычных сообщений СУБД недопустимо. Язык диалога — с соблюдением норм
вежливости, цветовая гамма — по общепринятым рекомендациям.
5.
Использование клавиатуры. На любом этапе
нажатии любой клавиши (особенно функциональных) должно игнорироваться или
вызывать предусмотренные действия (описанные в средствах помощи). Привязка
действий к клавишам должна быть общепринятой: F1 — помошь; Enter — согласие,
завершение ввода; Esc — отказ, возврат
к
предыдущему узлу ветви алгоритма (с восстановлением экранной формы); Tab — переход к следующему полю, окну и т. д.; Shift-Tab — возврат к
предыдущему полю и т. д.
6.
Порядок движения. Движение по дереву
алгоритма «сверху вниз» сопровождается заголовками всех пройденных вершин;
возврат возможен только на предыдущий уровень с сохранением введенной
информации,
выбранных
пунктов меню и указателей записей.
7.
* (не обязательное требование!) Средства
помощи и реклама. При запуске программы появляется рекламная заставка, отражающая
суть и
возможности программного средства, а также сведения об авторе. В
любой точке алгоритма в строке подсказки должны высвечиваться все активные в данный
момент горячие клавиши; в любой момент при нажатии клавиши F1 должен выдаваться контекстно-зависимый (зависящий от ситуации)
текст помощи.
8.
Входные и выходные документы. Экранные формы для ввода и
корректировки должны быть максимально «похожими» на привычные для пользователя
документы;
результаты работы не только отображаются на эк
ране,
но и выводятся в текстовый файл в привычной для пользователя форме с возможностью
корректировки и распечатки.
Задания
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)
Ломбард. База хранимых товаров и недвижимости: анкетные
данные клиента, наименование товара, оценочная стоимость; сумма, выданная под
залог, дата сдачи, срок хранения. Операции приема товара, возврата, продажи по истечении срока
хранения.
Примеры решения задач.
Задача 1.
Вводится исходная строка,
из нее необходимо получить реверсированную (перевернутую) строку.

Private
Sub btnStart_Click()
Dim
S1, S As String
Dim
i As Byte
If
TextBox1.Text = "" Then
MsgBox ("Введите исходную
строку")
Else
S = TextBox1.Text
For i = 0
To Len(S) - 1
S1 = S1 + Mid(S, Len(S) - i, 1)
Next i
TextBox2.Text = S1
End If
End Sub
Задача
2.
Туристическое
агенство. Регистрация туристов. База данных туристов содержит анкетные данные,
отметки об оплате и документах,
выбранном туре (выбор из имеющихся), продолжительности тура. Поиск
туриста по фамилии (допускается несколько первых символов).
Блок-схемы алгоритмов – в приложении.

Рис.1,2

Рис.3
Программные
коды модулей форм приведены ниже.
Код для UserForm1
Private
Type Турист
Фамилия As String * 20
Имя
As String * 20
Пол
As String * 3
ВыбранныйТур As String * 20
Оплачено As String * 3
Фото
As String * 3
Паспорт As String * 3
Срок
As String * 3
End
Type
Dim
person As Турист
Private Sub UserForm_Initialize()
' Процедура вызова диалогового окна
' и задание элементов раскрывающегося списка
ЗаголовокРабочегоЛиста
' Задание пользовательского заголовка окна приложения
Application.Caption =
"Регистрация. База данных туристов"
' Закрытие строки формул окна Excel
Application.DisplayFormulaBar = False
' Задание элементов раскрывающегося списка
With
CommandButton1
.Default
= True
.ControlTipText
= "Ввод данных в базу данных"
End
With
With
CommandButton2
.Cancel
= True
.ControlTipText
= "Кнопка отмены"
End
With
OptionButton1.Value
= True
With
ToggleButton1
.Value
= False
.ControlTipText
= "Создать текстовый файл"
End With
With ComboBox1
.List = Array("Лондон",
"Париж", "Берлин")
.ListIndex = 0
End With
End Sub
Private Sub CommandButton1_Click ()
‘Кнопка Ok
' Процедура считывания информации из диалогового окна
' и записи ее в базу данных на рабочем листе
' Смысл переменных однозначно определен их названиями
Dim НомерСтроки As Integer
' Номер Строки - номер первой пустой строки рабочего листа
НомерСтроки = Application.CountA(ActiveSheet.Columns(1)) + 1
' Считывание информации из диалогового окна в переменные
With
person
.Фамилия = TextBox1.Text
.Имя = TextBox2.Text
.Срок = TextBox3.Text
If
OptionButton1.Value = True Then
.Пол = "Муж"
Else
.Пол = "Жен"
End
If
If
CheckBox1.Value = True Then
.Оплачено = "Да"
Else
.Оплачено = "Нет"
End
If
If
CheckBox2.Value = True Then
.Фото = "Да"
Else
.Фото = "Нет"
End
If
If
CheckBox3.Value = True Then
.Паспорт = "Да"
Else
Паспорт = "Нет"
End
If
.ВыбранныйТур = ComboBox1.List(ComboBox1.ListIndex, 0)
End
With
' Ввод данных в строку с номером Номер Строки рабочего листа
With
ActiveSheet
.Cells(НомерСтроки, 1).Value = person.Фамилия
.Cells(НомерСтроки, 2).Value = person.Имя
.Cells(НомерСтроки, 3).Value = person.Пол
.Cells(НомерСтроки, 4).Value = person.ВыбранныйТур
.Cells(НомерСтроки, 5).Value = person.Оплачено
.Cells(НомерСтроки, 6).Value = person.Фото
.Cells(НомерСтроки, 7).Value = person.Паспорт
.Cells(НомерСтроки, 8).Value =
person.Срок
End
With
End Sub
Private Sub CommandButton2_Click ()
‘Кнопка Отмена
' Процедура закрытия диалогового окна
' Установка заголовка окна приложения по умолчанию
UserForm1.Hide
Application.Caption
= Empty
ActiveSheet.DrawingObjects.Delete
End Sub
Private Sub CommandButton3_Click ()
‘Кнопка Поиск
UserForm2.Show
End Sub
Private Sub SpinButton1_Change()
' Процедура ввода значения счетчика в поле ввода
With
UserForm1
.TextBox3.Text
= CStr(.SpinButton1.Value)
End
With
End Sub
Private Sub TextBox3_Change()
' Процедура установки значения счетчика из поля ввода
With
UserForm1
.SpinButton1.Value
= CInt(.TextBox3.Text)
End
With
End Sub
Sub ЗаголовокРабочегоЛиста()
' Процедура создания заголовков полей базы данных
' Если заголовки существуют, то досрочный выход из процедуры
If
Range("A1").Value = "Фамилия" Then
Range
("A2").Select
Exit
Sub
End
If
' Если заголовки не существуют, то создаются заголовки полей
ActiveSheet.Cells.Clear
Range("A1:H1").Value
= Array("Фамилия",
"Имя", "Пол", _
"Выбранный Тур",
"Оплачено", "Фото", "Паспорт", "Срок")
Range("А:А").ColumnWidth
= 12
Range("D:D").ColumnWidth
= 14
' Закрепляется первая строка с тем, чтобы она всегда
' отображалась на экране
Range("2:2").Select
ActiveWindow.FreezePanes
= True
Range("A2").Select
End Sub
Private Sub ToggleButton1_Click()
‘Переключатель Сохранить в файл,‘выглядит как кнопка
Dim
ЧислоСтрок As
Integer
Номер =
FreeFile
ИмяФайла = InputBox("Введите имя файла", "Создание файла")
ЧислоСтрок = Application.CountA(Sheets(1).Columns(1))
' Открывается файл последовательного доступа для записи информации
Open
ИмяФайла For Output As Номер
With Worksheets(1)
'Печать заголовков в файл
Print #Номер, "Фамилия";
Spc(15); "Имя"; Spc(19); "Пол"; Spc(2); "Выбранный Тур
"; Spc(6); "Оплачено"; Spc(2); "Фото "; "Паспорт
"; " Срок"
'Печать в файл пустой строки
Print #Номер,
For i = 2 To ЧислоСтрок
' Содержание строки рабочего листа EXCEL выводится в файл
Print
#Номер, .Cells(i,
1).Text; Spc(2); .Cells(i, 2).Text; Spc(2); .Cells(i, 3).Text; Spc(2);
.Cells(i, 4).Text; Spc(2); .Cells(i, 5).Text; Spc(6); .Cells(i, 6).Text;
Spc(3); .Cells(i, 7).Text; Spc(4); .Cells(i, 8)
Next
i
End
With
' Закрытие файла
Close
Номер
End Sub
Код для UserForm2
Private Sub CommandButton1_Click()
'Процедура поиска клиента по фамилии
Dim
i As Integer, j As Integer, n As Integer, Строка As Integer
Dim
СписокНайденных () As String
Dim
test As String, poisk As String
Строка
= Application.CountA(Sheets(1).Columns(1))
UserForm2.ComboBox1.Clear
poisk
= Trim(UserForm2.TextBox1.Text)
i
= 2
j
= 0
Do
While i <= Строка
test = Application.Sheets(1).Cells(i, 1).Text
If test Like poisk + "*" Then
j = j + 1
End If
i = i + 1
Loop
If
j = 0 Then
MsgBox
"Клиента такого нет", vbExclamation,
"Поиск"
Exit Sub
End
If
n
= j
ReDim
СписокНайденных (1 To n, 0 To 2) As String
i
= 2
j
= 0
Do
While i <= Строка
test = Application.Sheets(1).Cells(i, 1).Text
If InStr(1, test, poisk) > 0 Then
j = j + 1
СписокНайденных (j, 0) =
Application.Sheets(1).Cells(i, 1).Text
СписокНайденных (j, 1) =
Application.Sheets(1).Cells(i, 2).Text
СписокНайденных (j, 2) =
CStr(i)
End If
i = i + 1
sLoop
With
UserForm2.ComboBox1
.Clear
.ColumnCount = 3
.ColumnWidths = "50;60;20"
.List = СписокНайденных
.ListIndex = 0
End
With
End Sub
Private Sub CommandButton2_Click()
‘Процедура закрывает форму Поиска
UserForm2.Hide
End Sub
5. Результаты заполнения
базы данных на рабочем листе EXCEL
приведены на рис.3