РефератыИнформатика, программированиеАдАдресная книга на языка Visual Basic

Адресная книга на языка Visual Basic

1. Анализ исходных данных


1.1 Основание и назначение разработки


Программа адресная книга ZiBook написана на языка Visual Basic, целью написания данной программы, было создание многофункциональной адресной книги с возможностью добавления, изменения, редактирования и поиска информации, так же в программе имеется возможность дозвона модемом по номеру абонента.


1.2 Минимальные требования к составу и параметрам технических средств: ЭВМ, внешние устройства


Для того, чтобы использовать ZiBook, Вам нужен компьютер со следующим аппаратным и программным обеспечением:


· Процессор Pentium (или аналогичный) *


· Звуковая карта **


· Микрофон и динамики (лучше наушники - для устранения эха)


· Модем


· Microsoft Windows 95-98


*Может быть использован также быстрый процессор i486, однако успешный результат в этом случае не гарантирован.


** Для наилучшего результата, звуковая карта должна поддерживать звуковой формат 8000 Гц (8 кГц) / 16 бит и работать в режиме полного дуплекса (то есть позволять одновременные запись и воспроизведение звука).


1.3 Требования к информационной и программной совместимости


· Операционная система MS Windows 95-98-Me


· Поддержка операционной системой кириллицы


· Для работы программы на компьютере должны быть установлен Scripting Host (Сервер сценариев) (WSCRIPT.SHELL)


· 16Мб оперативной памяти


· 10 Мб на жестком диске


· Видеоадаптер SVGA


· SVGA монитор


1.4 Требования к функциональным характеристикам


Постановка задачи. Программа должна выполнять следующие функции:


· Вывод формы, содержащей всю адресную книгу


· Вывод формы, для внесения и редактирования адресной книги


· Вывод формы, для настройки параметров модема (тоновыйимпульсный, номер СОМ порта)


· Вывод формы поиска.


1.5 Выбор и обоснование системы программирования и используемых программных средств


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


1.6 Разработка математической модели задачи, выбор алгоритма реализации и его обоснование


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


2. Внешняя спецификация


2.1 Входные данные


Входными данными являются:


- Имя


- Отчество


- Фамилия


- Адрес


- Дом


- Квартира


- Телефон


- Комментарии


2.2 Выходные данные


Выходными данными для данной программы является список адресатов.


2.3 Общее описание алгоритмов и внутренних данных


Внутренние данные хранятся в локальных и в глобальных переменных, а также в свойствах элементов управления.


Общее описание алгоритмов. Программа основана на событийной модели. Когда происходит какое-либо событие (нажатие клавиши на клавиатуре или кнопке мыши), программа его обрабатывает (выполняет определённый код).


2.4 Основной алгоритм программы


Основной алгоритм программы заключается в организации работы пользователя с БД адресной книги. Внесение данных происходит в файл data.dat, после того, как все данные введены, и номер телефона проверен на корректность, данные записываются в него.


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


3.1
Назначение программы


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


3.2 Описание интерфейса. Требования к входным данным


После запуска программы на экране появляется главное окно. Как видно, программа имеет очень приятный и интуитивно понятный интерфейс.



Нажимая на соответствующие кнопки пользователь может:


Добавлятьизменять элементы.



Поиск по БД. Заполняем нужные поля и нажимаем Ok.



Никаких особых требования программа не предъявляет пользователю. В поле «телефон» поставлена проверка на вводимые символы – программа просто не даст Вам ввести туда ничего кроме цифр. В остальные поля, можете вводить что угодно, использовать любые символы, но учтите что при поиске слова «Иванов» и «иванов» будут учитываться как разные, т.к. программа чувствительна в регистру букв.


Результаты поиска выводятся в том же окне, где и основная БД. Но в этот момент основная БД адресной книги будет невидима для удобства пользователя.


Чтобы просмотреть, найденные элементы, нажимаем кнопку «Изменить»


Чтобы, загрузить всю базу, нажимаем на кнопку «Вся книга»



Выбор параметров дозвона – тоновый или импульсный, номер порта «Параметры»



По всем возникающим вопросам, пользователь всегда может обратиться в службу поддержки по электронной почте: admin@zigmynd.tk или ICQ UIN 907700


4. Руководство программиста


4.1 Описание типов пользовательских данных


В программе пользовательские типы данных не используется, применяются стандартные типы данных: Single, Long, Integer, String, Boolean. Для хранения БД используется файл data.dat
. Результаты поиска временно хранятся в файле search.dat


4.2 Организация ввода данных в программу и вывода результатов


Данные в программу вводятся при помощи клавиатуры, все данные хранятся в файле data.dat


4.3 Блок схема











Инициализация


нет да











Обработка данных







4.4 Структура программы. Описание процедур и их параметров


В программе использовалась четыре формы:


FrmMain


Эта форма содержит основную форму программы.


- SaveData() процедура сохраняющая данные в файл data.dat


- butAbout_Click() процедура вызывающая меню About


- butAdd_Click() процедура инициализирующая добавление элементов в адресную книгу.


- butDelete_Click() процедура удаляющая выбранные элементы из адресной книги.


- butDial_Click() процедура инициализирующая дозвон


- butEdit_Click() процедура инициализирующая редактирование элементов


- butOptions_Click() процедура, инициализирующая запуск меню настроек модема


- Command1_Click() процедура, инициализирующая поиск


- Command2_Click() процедура, загружающая всю адресную книгу в окно


FrmEdit


Эта форма содержит меня для редактирования БД. Эта же форма выводится при введении параметров поиска.


- txtPhone_KeyPress(KeyAscii As Integer) – процедура проверяющая правильность ввода номера телефона. Даёт вводить только цифры.


FrmAbout


Эта форма выводит окно «About» c кратким описанием программы.


FrmOptions


Эта форма используется для настройки параметров модема.


- butOk_Click() – процедура сохраняющая параметры дозвона, которые выбирает пользователь.


- txtPort_KeyPress(KeyAscii As Integer) - процедура проверяющая правильность ввода номера порта. Даёт вводить только цифры.


Все процедуры можно формы можно разделить на следующие группы:


1. процедуры загрузки


2. процедуры, обрабатывающие данные на конкретных шагах


3. процедуры обработки и ввода данных.


4.5 Настройка программы


Данная программа не содержит сложных настроек. Всё что пользователь может настроить – это параметры модемы – порт соединения и тип звонка (тоновый или импульсный в зависимости от тока какой звонок поддерживает АТС) Подробное описание программы находится в файле readme.txt


5. Контрольный пример


В качестве примера рассмотрим вопрос о внесении нового пользователя в БД.


1. Для добавления элемента заполним следующие поля:


- Имя


- Отчество


- Фамилия


- Адрес


- Дом


- Квартира


- Телефон


Далее называем кнопку «Добавить» и если всё было верно сделано, в БД занесётся новый элемент.


2. Для того чтобы проверить, выделяем интересующий нас элемент и жмем кнопку «Изменить»


Приложение


FrmMain


Rem Автор программы ZIGMyND <admin@zigmynd.tk>


Option Explicit


Public Sub SaveData()


Dim Index As Long


Dim strText As String


SetAttr Path & "data.dat", vbNormal


On Error Resume Next


Open Path & "data.dat" For Output As #1


For Index = 0 To UBound(User)


If Not (User(Index).strKvartira = vbNullString Or User(Index).strDoma = vbNullString Or User(Index).strFamilia = vbNullString Or User(Index).strOtchectvo = vbNullString Or User(Index).strAdress = vbNullString Or User(Index).strComment = vbNullString Or User(Index).strName = vbNullString Or User(Index).strPhone = vbNullString) Then


Print #1, User(Index).strName


Print #1, User(Index).strOtchectvo


Print #1, User(Index).strFamilia


Print #1, User(Index).strAdress


Print #1, User(Index).strDoma


Print #1, User(Index).strKvartira


Print #1, User(Index).strPhone


Print #1, User(Index).strComment


End If


Next


Close


End Sub


Private Sub butAbout_Click()


Load frmAbout


frmAbout.Show vbModal


End Sub


Private Sub butAdd_Click()


ReDim Preserve User(UBound(User) + 1)


lngIndex = UBound(User)


Load frmEdit


frmEdit.Show vbModal


End Sub


Private Sub butDelete_Click()


On Error Resume Next


If lstMain.GetSelected > lstMain.GetAll Then Exit Sub


With User(lstMain.GetSelected)


.strName = vbNullString


.strOtchectvo = vbNullString


.strFamilia = vbNullString


.strAdress = vbNullString


.strKvartira = vbNullString


.strDoma = vbNullString


.strComment = vbNullString


.strPhone = vbNullString


End With


SaveData


GetData


End Sub


Private Sub butDial_Click()


If User(lstMain.GetSelected).strPhone = vbNullString Then Exit Sub


If blnDial = False Then


Open "COM" & Reg.RegRead("HKCUBookPort") For Output As #1


If Reg.RegRead("HKCUBookDialMode") = 0 Then


Print #1, "ATDT" & User(lstMain.GetSelected).strPhone


Else


Print #1, "ATDP" & User(lstMain.GetSelected).strPhone


End If


Close


blnDial = True


Else


Open "COM" & Reg.RegRead("HKCUBookPort") For Output As #1


Print #1, "CLOSE"


Close


blnDial = False


End If


End Sub


Private Sub butEdit_Click()


lngIndex = lstMain.GetSelected


Load frmEdit


frmEdit.txtName = User(lstMain.GetSelected).strName


frmEdit.txtOtchectvo = User(lstMain.GetSelected).strOtchectvo


frmEdit.txtFamilia = User(lstMain.GetSelected).strFamilia


frmEdit.txtAdress = User(lstMain.GetSelected).strAdress


frmEdit.txtdoma = User(lstMain.GetSelected).strDoma


frmEdit.txtkvartira = User(lstMain.GetSelected).strKvartira


frmEdit.txtPhone = User(lstMain.GetSelected).strPhone


frmEdit.txtComment = User(lstMain.GetSelected).strComment


frmEdit.Show vbModal


End Sub


Private Sub butExit_Click()


Unload Me


End Sub


Private Sub butOptions_Click()


Load frmOptions


frmOptions.Show vbModal


End Sub


Private Sub Command1_Click()


bPoisk = True


If Dir(Path & "search.dat") <> "" Then Kill (Path & "search.dat")


butAdd.Visible = False


butEdit.Visible = True


butDelete.Visible = False


butAbout.Visible = False


butDial.Visible = False


butOptions.Visible = False


frmEdit.Show


End Sub


Private Sub Command2_Click()


bPoisk = False


butAdd.Visible = True


butEdit.Visible = True


butDelete.Visible = True


butAbout.Visible = True


' butDial.Visible = True


butOptions.Visible = True


GetData


End Sub


Private Sub Form_DblClick()


WindowState = vbMinimized


End Sub


Private Sub Form_Load()


On Error Resume Next


GetData


SetWindowText hWnd, App.ProductName


Dim lngTop As Long, lngLeft As Long, lngWidth As

Long, lngHeight As Long


lngTop = Reg.RegRead("HKCUBookTop")


lngLeft = Reg.RegRead("HKCUBookLeft")


lngHeight = Reg.RegRead("HKCUBookHeight")


lngWidth = Reg.RegRead("HKCUBookWidth")


If lngHeight < 3510 Then lngHeight = 3510


If lngWidth < 6630 Then lngWidth = 6630


Move lngLeft, lngTop, lngWidth, lngHeight


If Reg.RegRead("HKCUBookOnTop") = True Then SetTop hWnd, True


End Sub


Public Sub GetData()


On Error Resume Next


Dim Cnt As Long


lstMain.ItemClear


If bPoisk Then


If Not Exist(Path & "search.dat") Then Exit Sub


Open Path & "search.dat" For Input As #1


Else


If Not Exist(Path & "data.dat") Then Exit Sub


Open Path & "data.dat" For Input As #1


End If


Open Path & "data.dat" For Input As #1


While Not EOF(1)


ReDim Preserve User(Cnt)


Line Input #1, User(Cnt).strName


Line Input #1, User(Cnt).strOtchectvo


Line Input #1, User(Cnt).strFamilia


Line Input #1, User(Cnt).strAdress


Line Input #1, User(Cnt).strDoma


Line Input #1, User(Cnt).strKvartira


Line Input #1, User(Cnt).strPhone


Line Input #1, User(Cnt).strComment


lstMain.ItemAdd User(Cnt).strPhone & String(6, " ") & User(Cnt).strName


Cnt = Cnt + 1


Wend


Close


Slider.SetMax lstMain.GetMax


End Sub


Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)


If Not Button = vbLeftButton Then Exit Sub


Dim lngY As Long


Dim lngX As Long


Dim lngHeight As Long


Dim lngWidth As Long


lngY = (Y 13) + 1


lngX = (X 13) + 1


lngHeight = (lngY * 13) * Screen.TwipsPerPixelY


lngWidth = (lngX * 13) * Screen.TwipsPerPixelX


If lngHeight <= 3510 Then


lngHeight = 3510


End If


If lngWidth <= 6630 Then


lngWidth = 6630


End If


Height = lngHeight


Width = lngWidth


End Sub


Private Sub Form_Resize()


PosControls


lstMain.SetValue Slider.Value


Cls


Line (ScaleWidth - 14, ScaleHeight)-(ScaleWidth, ScaleHeight - 14), vbWhite


Line (ScaleWidth - 13, ScaleHeight)-(ScaleWidth, ScaleHeight - 13), vb3DShadow


Line (ScaleWidth - 12, ScaleHeight)-(ScaleWidth, ScaleHeight - 12), vb3DShadow


Line (ScaleWidth - 10, ScaleHeight)-(ScaleWidth, ScaleHeight - 10), vbWhite


Line (ScaleWidth - 9, ScaleHeight)-(ScaleWidth, ScaleHeight - 9), vb3DShadow


Line (ScaleWidth - 8, ScaleHeight)-(ScaleWidth, ScaleHeight - 8), vb3DShadow


Line (ScaleWidth - 6, ScaleHeight)-(ScaleWidth, ScaleHeight - 6), vbWhite


Line (ScaleWidth - 5, ScaleHeight)-(ScaleWidth, ScaleHeight - 5), vb3DShadow


Line (ScaleWidth - 4, ScaleHeight)-(ScaleWidth, ScaleHeight - 4), vb3DShadow


Line (lstMain.Left - 1, lstMain.Top - 1)-(lstMain.Left + lstMain.Width + 1, lstMain.Top - 1), vb3DShadow


Line -(lstMain.Left + lstMain.Width + 1, lstMain.Top + lstMain.Height + 1), vb3DLight


Line -(lstMain.Left - 1, lstMain.Top + lstMain.Height + 1), vb3DLight


Line -(lstMain.Left - 1, lstMain.Top - 1), vb3DShadow


End Sub


Private Sub Form_Unload(Cancel As Integer)


' SaveData


If blnDial Then butDial_Click


On Error Resume Next


Reg.RegWrite "HKCUBookTop", Top


Reg.RegWrite "HKCUBookLeft", Left


Reg.RegWrite "HKCUBookHeight", Height


Reg.RegWrite "HKCUBookWidth", Width


Set Reg = Nothing


End Sub


Private Sub lstMain_Click(Button As Integer)


If Not Button = vbRightButton Then Exit Sub


PopupMenu mnuMain


End Sub


Private Sub mnuAdd_Click()


butAdd_Click


End Sub


Private Sub mnuDelete_Click()


butDelete_Click


End Sub


Private Sub mnuDial_Click()


butDial_Click


End Sub


Private Sub mnuEdit_Click()


butEdit_Click


End Sub


Private Sub mnuMain_Click()


If bPoisk Then


mnuAdd.Enabled = False


mnuDelete.Enabled = False


mnuEdit.Enabled = False


Else


mnuAdd.Enabled = True


mnuDelete.Enabled = True


mnuEdit.Enabled = True


End If


End Sub


Private Sub Slider_Change()


lstMain.SetValue Slider.Value


End Sub


Private Sub PosControls()


lstMain.Height = ScaleHeight - lstMain.Top


Slider.Height = lstMain.Height


Slider.SetMax lstMain.GetMax


Panel.Left = ScaleWidth - Panel.Width - 11


butExit.Left = Panel.Left


Slider.Left = Panel.Left - Slider.Width - 8


lstMain.Width = Slider.Left - lstMain.Left - 8


butExit.Top = lstMain.Height


End Sub


FrmEdit


Option Explicit


Private Sub butCancel_Click()


Unload Me


End Sub


Private Sub butOk_Click()


Dim sLine As String, sInfo As String, bInform As Boolean, arrRecord(7) As String


Dim iCount As Integer, iCountLine As Integer, iFileNum As Integer


If bPoisk Then


If Dir(Path & "data.dat") <> "" Then


iCount = 1: iCountLine = 0: bInform = False


Open Path & "data.dat" For Input As #1


'Считываем иформацию из файла и проверяем ее на совпадение


Do While Not EOF(1)


Line Input #1, sInfo


Select Case iCount


'Имя


Case 1


If InStr(Trim(txtName.Text), sInfo) <> 0 Then


bInform = True


iCount = 0


Else


iCount = iCount + 1


End If


'Очество


Case 2


If InStr(Trim(txtOtchectvo.Text), sInfo) <> 0 Then


bInform = True


iCount = 0


Else


iCount = iCount + 1


End If


'Фамилия


Case 3


If InStr(Trim(txtFamilia.Text), sInfo) <> 0 Then


bInform = True


iCount = 0


Else


iCount = iCount + 1


End If


'Адрес


Case 4


If InStr(Trim(txtAdress.Text), sInfo) <> 0 Then


bInform = True


iCount = 0


Else


iCount = iCount + 1


End If


'Дом


Case 5


If InStr(Trim(txtdoma.Text), sInfo) <> 0 Then


bInform = True


iCount = 0


Else


iCount = iCount + 1


End If


'Квартира


Case 6


If InStr(Trim(txtkvartira.Text), sInfo) <> 0 Then


bInform = True


iCount = 0


Else


iCount = iCount + 1


End If


'Телефон


Case 7


If InStr(Trim(txtPhone.Text), sInfo) <> 0 Then


bInform = True


iCount = 0


Else


iCount = iCount + 1


End If


'Комментарий


Case 8


If InStr(Trim(txtComment.Text), sInfo) <> 0 Then


bInform = True


iCount = 0


Else


iCount = iCount + 1


End If


End Select


'Если есть хоть одно совпадение, то записываем всю инфу в файл "search.dat"


arrRecord(iCountLine) = sInfo


iCountLine = iCountLine + 1


If iCountLine = 8 Then


If bInform Then


iFileNum = FreeFile


Open Path & "search.dat" For Append As #iFileNum


For iCountLine = 0 To UBound(arrRecord)


Print #iFileNum, arrRecord(iCountLine)


Next


Close #iFileNum


End If


Erase arrRecord


bInform = False


iCountLine = 0


iCount = 1


End If


Loop


Close


'Показываем результат поиска


frmMain.GetData


' bPoisk = False


Else


MsgBox "Данные не найдены.", vbExclamation


Unload Me


Exit Sub


End If


Else


With User(lngIndex)


.strName = txtName


.strOtchectvo = txtOtchectvo


.strFamilia = txtFamilia


.strAdress = txtAdress


.strDoma = txtdoma


.strKvartira = txtkvartira


.strPhone = txtPhone


.strComment = txtComment


End With


frmMain.SaveData


frmMain.GetData


End If


Unload Me


End Sub


Private Sub txtPhone_KeyPress(KeyAscii As Integer)


If Not IsNumeric(Chr(KeyAscii)) And Not KeyAscii = 8 Then KeyAscii = 0


End Sub


Private Sub Form_Load()


If Reg.RegRead("HKCUBookOnTop") = True Then SetTop hWnd, True


End Sub


FrmOptions


Option Explicit


Private Sub butCancel_Click()


Unload Me


End Sub


Private Sub butOk_Click()


Reg.RegWrite "HKCUBookPort", txtPort


Reg.RegWrite "HKCUBookOnTop", chkOnTop.Value


If optDialMode(0).Value = True Then


Reg.RegWrite "HKCUBookDialMode", 0


Else


Reg.RegWrite "HKCUBookDialMode", 1


End If


If chkOnTop.Value = 1 Then


SetTop frmMain.hWnd, True


Else


SetTop frmMain.hWnd, False


End If


Unload Me


End Sub


Private Sub Form_Load()


On Error Resume Next


txtPort = Reg.RegRead("HKCUBookPort")


chkOnTop.Value = Reg.RegRead("HKCUBookOnTop")


optDialMode(Reg.RegRead("HKCUBookDialMode")).Value = True


If Reg.RegRead("HKCUBookOnTop") = True Then SetTop hWnd, True


End Sub


Private Sub Form_Unload(Cancel As Integer)


If Not IsNumeric(txtPort) Then


MsgBox "Поле номера порта модема должно быть цифровым"


Cancel = True


End If


End Sub


Private Sub txtPort_KeyPress(KeyAscii As Integer)


If Not IsNumeric(Chr(KeyAscii)) And Not KeyAscii = 8 Then KeyAscii = 0


End Sub


FrmAbout


Option Explicit


Private Sub butOk_Click()


Unload Me


End Sub


ModMain


Option Explicit


Public Declare Function DrawEdge Lib "user32" (ByVal hdc As Long, qrc As Rect, ByVal edge As Long, ByVal grfFlags As Long) As Long


Public Declare Function SystemParametersInfoA Lib "user32" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long


Public Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As Rect) As Long


Public Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String) As Long


Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long


Public Type Rect


Left As Long


Top As Long


Right As Long


Bottom As Long


End Type


Public Type UserInfo


strName As String


strOtchectvo As String


strFamilia As String


strAdress As String


strDoma As String


strKvartira As String


strPhone As String


strComment As String


End Type


Public User() As UserInfo


Public lngIndex As Long


Public Reg As Object


Public blnDial As Boolean


Public Const Square As Long = &H1 Or &H2 Or &H4 Or &H8


'Для поиска


Public bPoisk As Boolean


Sub Main()


Set Reg = CreateObject("WSCRIPT.SHELL")


If App.PrevInstance = True Then


MsgBox "Программа уже запущенна..."


Else


Load frmMain


frmMain.Show


End If


End Sub


Public Sub SetTop(hWnd As Long, Top As Boolean)


Select Case Top


Case True


SetWindowPos hWnd, -1, 0, 0, 0, 0, 1 Or 2 Or 16


Case False


SetWindowPos hWnd, -2, 0, 0, 0, 0, 1 Or 2 Or 16


End Select


End Sub


Public Function Path() As String


If Right(App.Path, 1) = "" Then Path = App.Path Else Path = App.Path & ""


End Function


Public Function Exist(strFileName As String) As Boolean


If Dir(strFileName) = vbNullString Then Exist = False Else Exist = True


End Function


Использованные источники и литература


1. Программа помощи VB


2. Материалы сайта http://azbukavb.narod.ru/


3. Материалы сайта http://void.ru


4. Материалы сайта www.FileArea.co.il

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

Название реферата: Адресная книга на языка Visual Basic

Слов:2867
Символов:29228
Размер:57.09 Кб.