РефератыИнформатика, программированиеКоКомпьютерная подготовка

Компьютерная подготовка

Курсовая работа.


Выполнил студент ТМЦДО гр.: з-472-27б специальности 061000 Маркелова А.А.


Томский государственный университет систем управления и радиоэлектроники (ТУСУР)


Кафедра автоматизации обработки информации.


г. Абакан.


2005 г.


Написать программу, которая формирует базу «Телефонный справочник», содержащую следующие сведения: ФИО, адрес, телефон. Просмотр базы и обработка должна выполняться в программе Excel.


Программа должна удовлетворять следующим требованиям:


Приложение выполнить с использованием языка программирования VBA для MSExcel.


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


Проект должен обеспечивать следующие режимы работы:


ввод исходных данных и формирование базы;


корректировка данных (исправление, добавление, удаление);


работа с данными (поиск, сортировка, просмотр);


формирование статистики:


общее количество абонентов телефонной сети;


количество телефонов на указанной улице;


количество телефонов в указанном доме.


Для каждого режима работы определить кнопку запуска и пользовательскую форму.


На экране разместить одну панель инструментов, обеспечивающую работу проекта. Остальные панели скрыть.


Данные проекта сохранять в файле.


При вводе числовых данных обеспечить обработку ошибок некорректного ввода.


Введение


Цель работы: закрепление знаний, полученных при изучении курса «Компьютерная подготовка», а также приобретение новых навыков создания завершенных программных приложений для MSExcel.


В дополнение к огромным возможностям MSExcel, входящего в состав MicrosoftOffice квалифицированному пользователю доступен полноценный язык программирования VisualBasicforApplications (VBA), позволяющий оживить страницы электронных таблиц, превратив их в сложное Windows – приложение, осуществляющее многогранную обработку данных под управлением оператора. При этом, большинство часто используемых операций программируется заранее, что упрощает работу конечного пользователя и значительно снижает вероятность возникновения ошибки как на этапе ввода исходных данных, так и при их последующей обработке.


В настоящей работе используются наиболее часто употребляемые элементы проектирования приложений для MSExcel. В том числе: процедуры (подпрограммы и функции), модули и формы. В коде VBA применялись различные типы данных (включая определенные пользователям описания типов), многоуровневые условные операторы и операторы циклов. Для реализации хранения информации во внешнем файле использованы встроенные функции работы с файлами (последовательный доступ).


Диалог с пользователем реализован при помощи функций ввода/вывода информации InputBox и MsgBox, а также ряда специально созданных форм. В указанных формах применены элементы управления типа: надпись, поле, рамка, переключатель, кнопка.


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


MSExcel имеет богатую объектную модель. При решении поставленной задачи использовались объекты следующих типов: Application, Workbook, Worksheet, Range, CommandBar, а также коллекции Workbooks и Worksheets.


Работа выполнена в среде MicrosoftExcel 2002.


Структура программного комплекса


Состав программного комплекса


Программный комплекс «Телефонный справочник» состоит из двух файлов, располагаемых в каталоге “c:tmp”:


"Телефонный справочник.xls" – основной файл, содержащий таблицу просмотра базы данных и инструменты, необходимые для работы с ней.


"phones.db" – вспомогательный текстовый файл, используемый для хранения базы данных.


Работа программы осуществляется под управлением MicrosoftExcel, входящего в состав пакета MicrosoftOffice, поэтому для ее использования необходимо наличие указанного пакета на клиентском компьютере.


Иерархия объектов


Описываемое Excel-приложение в своем составе содержит:


Рабочую книгу Workbook «Телефонный справочник» + программный код VBA, состоящую из двух листов:


Worksheet Лист1 (Старт) + программный код VBA


Worksheet Лист2 (База данных) + программный код VBA


Пять форм + программный код VBA:


addRowForm – для режима добавления новой записи


delRowForm – для режима удаления записи


editRowForm – для режима редактирования записи


reportForm – для режима формирования статистики


sortForm – для режима сортировки базы данных


Модуль Module1, содержащий описание типа данных Record для одной записи об абоненте, а также функции работы (чтения/записи) с такими данными и внешним файлом.


Панель инструментов “Phones”, обеспечивающую работу программы и состоящую из девяти кнопок:


чтение базы данных;


запись базы данных;


добавление записи;


корректировка записи;


удаление записи;


поиск;


сортировка;


отчет (статистика);


выход из программы.


Руководство пользователя


Запуск программы


Для запуска программы необходимо в MSExcel открыть книгу:


“Телефонный справочник.xls”


Вы увидите один лист с рекламной надписью и двумя кнопками. Для отображения листа с базой данных нажмите на кнопку «Начать работу».



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



Чтение / запись базы данных


Поскольку вся информация хранится во внешнем файле, то для загрузки базы данных на лист Excel таблицы необходимо на панели инструментов нажать кнопку «Открыть базу данных». При этом существующие на листе данные будут заменены информацией из внешнего файла “phones.db”.



Для сохранения результатов работы с базой данных нажмите кнопку «Сохранить базу данных» на панели инструментов. Вся текущая информация, отображаемая на листе, будет записана во внешний файл “phones.db”.


Режимы корректировки данных


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


При нажатии на любую из них, будет предложено диалоговое окно, в котором в соответствующие поля нужно занести новую (откорректировать существующую) информацию и нажать кнопку подтверждения операции.



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



Внимание. В режиме добавления/корректировки записи обязательны для заполнения поля: Фамилия, Имя, Отчество, Улица, Дом, Телефон. Кроме того, в поле Телефон допускается ввод только числовых данных (не более 10 цифр).


Поиск информации


Для поиска нужной информации нажмите кнопку «Найти» на панели инструментов. Будет запущен стандартный механизм поиска информации по листу MSExcel.



Режимы сортировки


В программе предусмотрено три режима сортировки данных:


По абоненту (фамилия + имя + отчество);


По адресу (улица + дом + квартира);


По телефону.


Для выполнения сортировки достаточно нажать соответствующую кнопку на панели инструментов и выбрать один из трех предложенных режимов.



Формирование статистики


Согласно заданию программа позволяет рассчитать следующую статистику:


Общее количество абонентов телефонной сети;


Количество телефонов на указанной улице;


Количество телефонов в указанном доме.



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




Завершение работы с программой


Для завершения работы с программой нажмите кнопку «Выход» на панели инструментов. Лист с базой данной будет скрыт, а появится лист с рекламной заставкой. Для подтверждения выхода повторно выберите кнопку «Выход». Если «Телефонный справочник» был единственной открытой книгой, приложение MSExcel будет полностью закрыто, в противном случае – закроется только книга с описываемой программой.


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


Дополнение


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


При возникновении любой нестандартной ситуации следует закрыть книгу «Телефонный справочник» и выставить нужные панели через меню «Вид».


Заключение


В ходе выполнения работы были закреплены знания по работе в MSExcel и основам программирования на VBA, а также приобретены практические навыки создания завершенных программных приложений для MSExcel.


Результатом проделанной работы является приложение «Телефонный справочник», функционально выполняющее основные задачи, стоящие перед приложением такого уровня и назначения.


Разумеется, выполненный проект не является завершенным в полной мере. В качестве направлений для развития проекта можно упомянуть, например, более конкретизированный механизм поиска информации или реализация оптимальных методов сортировки (что может быть более эффективным на больших объемах информации).


Список литературы


Потахова И.В. Компьютерная подготовка. Офисное программирование: Учебное пособие. – Томск: Томский межвузовский центр дистанционного образования, 2004. – 181с.


Справочноеруководствопо MS Excel и Visual Basic for Applications: Microsoft Corp., 2001.


Демидова Л.А., Пылькин А.Н. Программирование в среде VisualBasicforApplications: Практикум – М.: Горячая линия – Телеком, 2004. – 175с.


Приложение. Листинг программ
VBA


Рабочая книга


Dim oldBars(20) As Long, kol As Integer


PrivateSub Workbook_Activate()


kol = 0


Dim bar As CommandBar


ForEach bar In Application.CommandBars


If bar.Visible AndNot (bar.Protection = msoBarNoChangeVisible) _


And (bar.Type = msoBarTypeNormal) AndNot (bar.Name = "Phones") Then


kol = kol + 1


oldBars(kol) = bar.index


EndIf


Next bar


For i = 1To kol


Application.CommandBars(oldBars(i)).Visible = False


Next


If ThisWorkbook.ActiveSheet.Name = "Базаданных"Then


showTools


EndIf


EndSub


PrivateSub Workbook_Deactivate()


Dim i As Integer


For i = kol To1Step -1


Application.CommandBars(oldBars(i)).Visible = True


Next


hideTools


EndSub


PrivateSub Workbook_Open()


ThisWorkbook.Worksheets("Старт").Visible = True' спрятатьстартовыйлист


ThisWorkbook.Worksheets("Старт").Activate ' сделатьактивнымлистсБД


ThisWorkbook.Worksheets("Базаданных").Visible = False' показатьбазуданных


EndSub


Лист
1 (Старт)


PrivateSub ExitButton_Click()


ExitProject


EndSub


PrivateSub StartButton_Click()


'Commandbars


ThisWorkbook.Worksheets("Базаданных").Visible = True' показатьбазуданных


ThisWorkbook.Worksheets("База данных").Activate' сделать активным лист с БД


ThisWorkbook.Worksheets("Старт").Visible = False' спрятать стартовый лист


EndSub


Лист2 (База данных)


PrivateSub Worksheet_Activate()


showTools


EndSub


PrivateSub Worksheet_Deactivate()


hideTools


EndSub


Sub addRecord()


If (ActiveCell.row < 5) Or (Len(ActiveCell.EntireRow.Cells(, 1).Value) = 0) Then


Range("A5").Activate


EndIf


ThisWorkbook.ActiveSheet.Unprotect


addRowForm.Show vbModal


ThisWorkbook.ActiveSheet.Protect


EndSub


Sub delRecord()


If (ActiveCell.row < 5) Or (Len(ActiveCell.EntireRow.Cells(, 1).Value) = 0) Then


ExitSub


EndIf


ThisWorkbook.ActiveSheet.Unprotect


If Selection.Rows.count = 1Then


delRowForm.Show vbMod

al


Else


Dim response


response = MsgBox("Отмеченозаписей: " + Str(Selection.Rows.count) + Chr(13) + "Удалитьвсе?", vbYesNoCancel, "Внимание!")


If response = vbYes Then


Selection.EntireRow.Delete


EndIf


EndIf


ThisWorkbook.ActiveSheet.Protect


EndSub


Sub editRecord()


If (ActiveCell.row < 5) Or (Len(ActiveCell.EntireRow.Cells(, 1).Value) = 0) Then


ExitSub


EndIf


ThisWorkbook.ActiveSheet.Unprotect


editRowForm.Show vbModal


ThisWorkbook.ActiveSheet.Protect


EndSub


Sub sort()


ThisWorkbook.ActiveSheet.Unprotect


sortForm.Show vbModal


ThisWorkbook.ActiveSheet.Protect


EndSub


Sub report()


Dim oldCell As Range


ThisWorkbook.ActiveSheet.Unprotect


Set oldCell = ActiveCell


reportForm.Show vbModal


oldCell.Activate


ThisWorkbook.ActiveSheet.Protect


EndSub


addRowForm


PrivateSub UserForm_Activate()


FamBox.Value = ""


ImBox.Value = ""


OtBox.Value = ""


StreetBox.Value = ""


NoBox.Value = ""


FlatBox.Value = ""


PhoneBox.Value = ""


FamBox.SetFocus


EndSub


PrivateSub CancelButton_Click()


addRowForm.Hide


EndSub


PrivateSub OKButton_Click()


' проверкаинформации


Dim box As Variant, boxes As Variant


boxes = Array(FamBox, ImBox, OtBox, StreetBox, NoBox, PhoneBox)


ForEach box In boxes


IfLen(Trim(box.Value)) = 0Then


box.SetFocus


ExitSub


EndIf


Next box


IfLen(Trim(PhoneBox.Value)) > 10Then


MsgBox"Более 10 цифр в номере телефона"


PhoneBox.SetFocus


Else


' заполнение записи из формы


Dim myRecord As Record


myRecord.Fam = FamBox.Value


myRecord.Im = ImBox.Value


myRecord.Ot = OtBox.Value


myRecord.street = StreetBox.Value


myRecord.no = NoBox.Value


myRecord.Flat = FlatBox.Value


myRecord.Phone = Val(PhoneBox.Value)


' добавление строки на лист и ее заполнение


ActiveCell.EntireRow.Insert


putRecord ActiveCell.EntireRow, myRecord


' скрытиеформы


addRowForm.Hide


EndIf


EndSub


PrivateSub PhoneBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)


If (KeyAscii < Asc("0")) Or (KeyAscii > Asc("9")) Then


MsgBox"Допускается ввод только цифр!"


KeyAscii.Value = 0


EndIf


EndSub


delRowForm


PrivateSub CancelButton_Click()


delRowForm.Hide


EndSub


PrivateSub OKButton_Click()


' удалениетекущейстроки


ActiveCell.EntireRow.Delete


' скрытиеформы


delRowForm.Hide


EndSub


PrivateSub UserForm_Activate()


Dim myRecord As Record


myRecord = getRecord(ActiveCell.EntireRow)


FamBox.Value = myRecord.Fam


ImBox.Value = myRecord.Im


OtBox.Value = myRecord.Ot


StreetBox.Value = myRecord.street


NoBox.Value = myRecord.no


FlatBox.Value = myRecord.Flat


PhoneBox.Value = myRecord.Phone


OKButton.SetFocus


EndSub


editRowForm


PrivateSub UserForm_Activate()


Dim myRecord As Record


myRecord = getRecord(ActiveCell.EntireRow)


FamBox.Value = myRecord.Fam


ImBox.Value = myRecord.Im


OtBox.Value = myRecord.Ot


StreetBox.Value = myRecord.street


NoBox.Value = myRecord.no


FlatBox.Value = myRecord.Flat


PhoneBox.Value = myRecord.Phone


FamBox.SetFocus


EndSub


PrivateSub CancelButton_Click()


editRowForm.Hide


EndSub


PrivateSub OKButton_Click()


' проверкаинформации


Dim box As Variant, boxes As Variant


boxes = Array(FamBox, ImBox, OtBox, StreetBox, NoBox, PhoneBox)


ForEach box In boxes


IfLen(Trim(box.Value)) = 0Then


box.SetFocus


ExitSub


EndIf


Next box


IfLen(Trim(PhoneBox.Value)) > 10Then


MsgBox"Более 10 цифр в номере телефона"


PhoneBox.SetFocus


Else


' заполнение записи из формы


Dim myRecord As Record


myRecord.Fam = FamBox.Value


myRecord.Im = ImBox.Value


myRecord.Ot = OtBox.Value


myRecord.street = StreetBox.Value


myRecord.no = NoBox.Value


myRecord.Flat = FlatBox.Value


myRecord.Phone = Val(PhoneBox.Value)


' добавление строки на лист и ее заполнение


putRecord ActiveCell.EntireRow, myRecord


' скрытиеформы


editRowForm.Hide


EndIf


EndSub


PrivateSub PhoneBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)


If (KeyAscii < Asc("0")) Or (KeyAscii > Asc("9")) Then


MsgBox"Допускается ввод только цифр!"


KeyAscii.Value = 0


EndIf


EndSub


reportForm


PrivateSub UserForm_Activate()


AllOption.Value = True


OKButton.Caption = "Расчет"


OKButton.SetFocus


EndSub


PrivateSub AllOption_Click()


OKButton.Caption = "Расчет"


EndSub


PrivateSub StreetOption_Click()


OKButton.Caption = "Параметры..."


EndSub


PrivateSub HouseOption_Click()


OKButton.Caption = "Параметры..."


EndSub


PrivateSub CancelButton_Click()


reportForm.Hide


EndSub


PrivateSub OKButton_Click()


Dim myRecord As Record


Dim counter As Long


Dim street AsString, no AsString, title AsString


If AllOption.Value Then


counter = count()


MsgBox"Общее количество абонентов: " + Str(counter)


Else


myRecord = getRecord(ActiveCell.EntireRow)


If StreetOption.Value Then


title = "Отчетпоулице"


street = InputBox("Задайтенаименованиеулицы:", title, myRecord.street)


IfLen(street) > 0Then


street = Trim(street)


counter = count(street)


MsgBox "Количествотелефоновнаулице '" + street + "': " + Str(counter)


EndIf


Else


title = "Отчетподому"


street = InputBox("Задайтенаименованиеулицы:", title, myRecord.street)


IfLen(street) > 0Then


street = Trim(street)


no = InputBox("Улица '" + street + "'" + Chr(10) + "Задайтеномердома:", title, myRecord.no)


IfLen(no) > 0Then


no = Trim(no)


counter = count(street, no)


MsgBox"Количество телефонов в доме '" + street + " " + no + "': " + Str(counter)


EndIf


EndIf


EndIf


EndIf


reportForm.Hide


EndSub


PrivateFunction count(Optional street, Optional no) As Long


Dim myRecord As Record


Dim data As Range, curRow As Range


Dim doCalc As Boolean, counter As Long


counter = 0


Range("A5").Activate


Set data = ActiveCell.CurrentRegion


ForEach curRow In data.Rows


myRecord = getRecord(curRow)


doCalc = False


If IsMissing(street) Then


' всеабоненты


doCalc = True


Else


If IsMissing(no) Then


' поулице


doCalc = (Trim(myRecord.street) = street)


Else


' подому


doCalc = (Trim(myRecord.street) = street) And (Trim(myRecord.no) = no)


EndIf


EndIf


If doCalc Then counter = counter + 1


Next curRow


count = counter


EndFunction


sortForm


PrivateSub UserForm_Activate()


OKButton.SetFocus


EndSub


PrivateSub CancelButton_Click()


sortForm.Hide


EndSub


PrivateSub OKButton_Click()


Dim sht As Worksheet


Dim rng As Range


Set sht = ThisWorkbook.ActiveSheet


Set rng = sht.Range(sht.Cells(5, 1), sht.Cells(65536, 1).End(xlUp).Offset(, 7))


If NameOption.Value Then


' сортироватьпоФИО


rng.sort Key1:=sht.Columns("A"), Order1:=xlAscending, Key2:=sht.Columns("B"), Order2:=xlAscending, Key3:=sht.Columns("C"), Order3:=xlAscending, Header:=xlNo


Else


If AddressOption.Value Then


' сортироватьпоадресу


rng.sort Key1:=sht.Columns("D"), Order1:=xlAscending, Key2:=sht.Columns("E"), Order2:=xlAscending, Key3:=sht.Columns("F"), Order3:=xlAscending, Header:=xlNo


Else


' сортироватьпотелефону


rng.sort Key1:=sht.Columns("G"), Order1:=xlAscending, Header:=xlNo


EndIf


EndIf


sortForm.Hide


EndSub


Module1


PublicType Record


Fam AsString


Im AsString


Ot AsString


street AsString


no AsString


Flat AsString


Phone As Long


EndType


PublicFunction dbFileName() AsString


dbFileName = ThisWorkbook.Path + "phones.db"


EndFunction


Sub ToolbarExitButton()


If ThisWorkbook.ActiveSheet.Name = "Старт"Then


ExitProject


Else


ThisWorkbook.Worksheets("Старт").Visible = True' спрятатьстартовыйлист


ThisWorkbook.Worksheets("Старт").Activate ' сделатьактивнымлистсБД


ThisWorkbook.Worksheets("Базаданных").Visible = False' показатьбазуданных


EndIf


EndSub


Sub ExitProject()


ThisWorkbook.Saved = True


If Application.Workbooks.count = 1Then


Application.Quit 'завершитьработу Excel


Else


ThisWorkbook.Close'завершить работу проекта


EndIf


EndSub


Sub dbRead()


ThisWorkbook.ActiveSheet.Unprotect


Dim myRecord As Record


Dim data As Range, curRow As Range


Dim row As Integer


Range("A5").Activate


Set data = ActiveCell.CurrentRegion


data.ClearContents


Open dbFileName ForInputAs #1


row = 1


DoWhileNot EOF(1)


Input #1, myRecord.Fam, myRecord.Im, myRecord.Ot, myRecord.street, myRecord.no, myRecord.Flat, myRecord.Phone


putRecord ActiveCell.Cells(row), myRecord


row = row + 1


Loop


Close #1


ThisWorkbook.ActiveSheet.Protect


EndSub


Sub dbWrite()


ThisWorkbook.ActiveSheet.Unprotect


Dim myRecord As Record


Dim data As Range, curRow As Range


Range("A5").Activate


Set data = ActiveCell.CurrentRegion


Open dbFileName For Output As #1


ForEach curRow In data.Rows


myRecord = getRecord(curRow)


Write #1, myRecord.Fam, myRecord.Im, myRecord.Ot, myRecord.street, myRecord.no, myRecord.Flat, myRecord.Phone


Next curRow


Close #1


ThisWorkbook.ActiveSheet.Protect


EndSub


Function getRecord(row As Range) As Record


Dim myRecord As Record


myRecord.Fam = row.Cells(, 1).Value


myRecord.Im = row.Cells(, 2).Value


myRecord.Ot = row.Cells(, 3).Value


myRecord.street = row.Cells(, 4).Value


myRecord.no = row.Cells(, 5).Value


myRecord.Flat = row.Cells(, 6).Value


myRecord.Phone = row.Cells(, 7).Value


getRecord = myRecord


EndFunction


Sub putRecord(row As Range, myRecord As Record)


row.Cells(, 1).Value = myRecord.Fam


row.Cells(, 2).Value = myRecord.Im


row.Cells(, 3).Value = myRecord.Ot


row.Cells(, 4).Value = myRecord.street


row.Cells(, 5).Value = myRecord.no


row.Cells(, 6).Value = myRecord.Flat


row.Cells(, 7).Value = myRecord.Phone


EndSub


Sub showTools()


Application.CommandBars("Phones").Enabled = True


Application.CommandBars("Phones").Visible = True


EndSub


Sub hideTools()


Application.CommandBars("Phones").Visible = False


Application.CommandBars("Phones").Enabled = False


EndSub

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Компьютерная подготовка

Слов:2588
Символов:28659
Размер:55.97 Кб.