Учебно-методический комплекс Для специальности: 080503 «Антикризисное управление» Москва, 2008
Вид материала | Учебно-методический комплекс |
- Учебно-методический комплекс Для специальности 080503 Антикризисное управление Москва, 1025.09kb.
- Учебно-методический комплекс Специальность: 080503 Антикризисное управление Москва, 554.54kb.
- Учебно-методический комплекс для студентов специальности 080503 Антикризисное управление, 1092.55kb.
- Учебно-методический комплекс (для студентов, обучающихся по специальности 080503., 650.22kb.
- Учебно-методический комплекс Для специальности 080503 Антикризисное управление Москва, 620.29kb.
- Учебно методический комплекс Для специальности: 080503 «Антикризисное управление» Москва, 1163.89kb.
- Одобрено учебно-методическим советом экономического факультета экономика учебно-методический, 2833.93kb.
- Учебно-методический комплекс по циклу дисциплин дс. 15 Для студентов очной и заочной, 492.98kb.
- Учебно-методический комплекс Для специальности 080503 Антикризисное управление Москва, 442.42kb.
- Учебно-методический комплекс по дисциплине цикла гсэ. Ф. 06 Для студентов очной формы, 809.49kb.
Соответствующие темы учебника
Козырев А.А. Информационные технологии в экономике и управлении: Учебник. Второе издание. – СПб.: Изд-во Михайлова В.А., 2001. – с.179-195
Общая постановка задачи
Разработать форму ввода данных, написать программу обработки событий элементов этой формы и накопления массива данных для пачки документов на языке VBA.
Список индивидуальных данных
Исходными данными для практического занятия являются данные на разработку шаблона документа из предыдущих практических занятий. Заполнить тестовыми данными и накопить их в массиве для 5-ти экземпляров входных документов.
ЭУК-03-02-02-м01-07 Пример выполнения работы
txtNumMilitary
cmbSpec
txtName
txtAdress
lbMilitary
chkMilitary
optM
lbAdress
optW
optSingle
optMaried
txtNumMilitary
1. Добавить следующие элементы:
2. В Module1 (см .рис.) записать следующий программный код (если Module1 отсутствует в проекте, то добавить его командой Insert -> Module):
'Программа для работы с базой данных карточек студентов
Option Explicit 'Заставляет объявлять все переменные
Option Base 1 'Устанавливает начальный индекс массива в 1
Type DBEntry 'Определяет структуру записи базы данных
Spec As String
Name As String
Pol As Boolean
Semja As Boolean
Adress As String
Military As Boolean
NumMilitary As String
RecNo As Integer
End Type
Public theDB() As DBEntry 'Массив базы данных
Public numEntries As Integer 'Общее количество записей
Public theEntryNum As Integer 'Текущая отображаемая запись
'Инициализация базы данных
Public Sub Init()
numEntries = 0
theEntryNum = 0
fmStudent.sbNum.Min = 1
fmStudent.sbNum.Max = 1
fmStudent.Show
End Sub
'Процедура AutoOpen вызывается при каждом открытии документа
Public Sub AutoOpen()
Init
End Sub
'Пересылка записи в базу данных
Public Sub EntryToDB(anEntry As Integer)
With fmStudent
theDB(anEntry).Spec = .cmbSpec.Value
theDB(anEntry).Name = .txtName.Value
theDB(anEntry).Pol = .optM.Value
theDB(anEntry).Semja = .optMaried.Value
theDB(anEntry).Adress = .txtAdress.Value
theDB(anEntry).Military = .chkMilitary.Value
theDB(anEntry).NumMilitary = .txtNumMilitary.Value
theDB(anEntry).RecNo = anEntry
End With
End Sub
'Пересылка записи в бланк
Public Sub DBToEntry(anEntry As Integer)
With fmStudent
.cmbSpec.Value = theDB(anEntry).Spec
.txtName.Value = theDB(anEntry).Name
.optM.Value = theDB(anEntry).Pol
.optW.Value = Not theDB(anEntry).Pol
.optMaried.Value = theDB(anEntry).Semja
.optSingle.Value = Not theDB(anEntry).Semja
.txtAdress.Value = theDB(anEntry).Adress
.chkMilitary.Value = theDB(anEntry).Military
.txtNumMilitary.Value = theDB(anEntry).NumMilitary
.lbNumEntry.Caption = "Запись №" & _ Str(theDB(anEntry).RecNo) & " из " & Str(numEntries)
.sbNum.Value = anEntry
End With
End Sub
3. В код формы fmStudent добавить процедуры для новых элементов (для вставки процедуры-обработчика элемента надо дважды щёлкнуть на элементе в редакторе формы):
'Добавление новой записи
Private Sub btnNewEntry_Click()
numEntries = numEntries + 1
theEntryNum = numEntries
ReDim Preserve theDB(numEntries) 'Увеличение массива
fmStudent.sbNum.Max = numEntries
EntryToDB numEntries 'Пересылка записи в массив
DBToEntry numEntries 'Чтение и отображение theEntryNum
End Sub
'Сохранение измененной записи
Private Sub btnUpdateEntry_Click()
'Если ещё нет записей, то выход
If theEntryNum = 0 Then Exit Sub
EntryToDB theEntryNum
End Sub
'Удаление записи
Private Sub btnDeleteEntry_Click()
Dim I As Integer, buttons As Integer
Dim theMsg As String
If numEntries = 0 Then Exit Sub 'Ещё нет записей
'Убедимся, что пользователь действительно хочет удалить
запись
buttons = vbYesNo + vbDefaultButton2 + vbQuestion + vbApplicationModal
theMsg = "Вы действительно хотите удалить текущую запись?"
If MsgBox(theMsg, buttons, "Удаление записи") = vbNo Then
Exit Sub
End If
'Проверка: это последняя запись?
If theEntryNum = numEntries Then
numEntries = numEntries - 1
ReDim Preserve theDB(numEntries)
theEntryNum = numEntries
ElseIf theEntryNum = 0 Then 'Проверка на наличие записей
Exit Sub
Else 'Перемещение оставшихся записей
For I = theEntryNum + 1 To numEntries
theDB(I - 1) = theDB(I)
theDB(I - 1).RecNo = I - 1
Next I
numEntries = numEntries - 1
ReDim Preserve theDB(numEntries)
End If
DBToEntry theEntryNum
fmStudent.sbNum.Value = theEntryNum
fmStudent.sbNum.Max = numEntries
End Sub
'Поиск записи по фамилии
Private Sub btnFindName_Click()
Static theName As String
Dim I As Integer
If numEntries = 0 Then Exit Sub 'Ещё нет записей
theName = InputBox("Введите имя для поиска", "Поиск имени", theName)
For I = 1 To numEntries
If InStr(1,theDB(I).Name,theName,vbTextCompare)<>0 Then
theEntryNum = I
DBToEntry theEntryNum
Exit Sub
End If
Next I
'Запись не найдена
MsgBox "Имя: " & theName & " не найдено.", , "Поиск имени"
End Sub
'Закрытие формы
Private Sub btnClose_Click()
fmStudent.Hide
End Sub
'Прокрутка записей
Private Sub sbNum_Change()
If numEntries = 0 Then Exit Sub 'Ещё нет записей
theEntryNum = fmStudent.sbNum.Value
DBToEntry theEntryNum
End Sub
'Процедура, вызываемая при установке/снятии флажка «Военнообязанный»
Private Sub chkMilitary_Click()
With fmStudent
If .chkMilitary.Value = True Then
.lbMilitary.Visible = True
.txtNumMilitary.Visible = True
Else
.lbMilitary.Visible = False
.txtNumMilitary.Visible = False
End If
End With
End Sub
'Процедура, вызываемая при установке переключателя «мужской»
Private Sub optM_Click()
With fmStudent
.optSingle.Caption = "холост"
.optMaried.Caption = "женат"
.lbMilitary.Visible = True
.txtNumMilitary.Visible = True
If .optMaried.Value = True Then
.lbAdress.Caption = "Адрес жены:"
Else
.lbAdress.Visible = False
.txtAdress.Visible = False
End If
.chkMilitary.Value = True
.chkMilitary.Visible = True
End With
End Sub
'Процедура, вызываемая при установке переключателя «женат»
Private Sub optMaried_Click()
With fmStudent
If .optM.Value = True Then
.lbAdress.Caption = "Адрес жены:"
Else
.lbAdress.Caption = "Адрес мужа:"
End If
.lbAdress.Visible = True
.txtAdress.Visible = True
End With
End Sub
'Процедура, вызываемая при установке переключателя «холост»
Private Sub optSingle_Click()
With fmStudent
.lbAdress.Visible = False
.txtAdress.Visible = False
End With
End Sub
'Процедура, вызываемая при установке переключателя «женский»
Private Sub optW_Click()
With fmStudent
.optSingle.Caption = "не замужем"
.optMaried.Caption = "замужем"
If .optMaried.Value = True Then
.lbAdress.Caption = "Адрес мужа:"
Else
.lbAdress.Visible = False
.txtAdress.Visible = False
End If
.chkMilitary.Value = False
.chkMilitary.Visible = False
.lbMilitary.Visible = False
.txtNumMilitary.Visible = False
End With
End Sub
'-----------------------------
'Процедура, вызываемая перед отображением формы на экране (инициализация формы)
Private Sub UserForm_Initialize()
With fmStudent
With .cmbSpec
.AddItem "Прикладная информатика в экономике"
.AddItem "Прикладная информатика в юриспруденции"
.AddItem "Менеджмент"
.AddItem "Бухучет"
.AddItem "Финансы и кредит"
End With
.optSingle.Value = True
.optM.Value = True
.optSingle.Caption = "холост"
.optMaried.Caption = "женат"
.lbAdress.Visible = False
.txtAdress.Visible = False
.lbMilitary.Visible = True
.txtNumMilitary.Visible = True
.chkMilitary.Value = True
End With
End Sub
'-----------------------------
'Макрос, запускающийся после открытия документа (автооткрытие)
Public Sub AutoOpen()
fmStudent.Show
End Sub