
Министерство образования и науки Российской Федерации
(МИНОБРНАУКИ)
Федеральное государственное бюджетное образовательное учреждение
Высшего профессионального образования
«ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ УПРАВЛЕНИЯ»
Институт информационных систем управления
Кафедра компьютерных технологий
Специальность:
Специализация:
Форма обучения:
КУРСОВОЙ ПРОЕКТ
по дисциплине «Компьютерная подготовка»
на тему:
«Проектирование приложений в среде Visual Basic 6.0 и СУБД MS Access»
Исполнитель:
студент__курса, __ группы __________ _____________________
(подпись) (инициалы и фамилия)
Руководитель проекта:
___________________________ __________ _____________________
(учёная степень, учёное звание) (подпись) (инициалы и фамилия)
Москва - 2011 г.
Общие требования к курсовому проекту.
Тема проекта: «Обработка данных средствами Visual Basic»
1). Исходные данные проекта должны соответствовать индивидуальному заданию.
2). Должно быть учтено, что данные могут вводиться с клавиатуры.
3). Проект должен состоять из 2-х форм и одного модуля.
Форма 1. Первая форма должна содержать название проекта, условие задачи и сведения о студенте, выполнившем работу. Текст условия задачи должен быть полным и по нажатию кнопки “Условие задачи” должен появляться в текстовом поле (элемент TextBox), которое должно быть снабжено полосами прокрутки (установить свойство ScrollBar). По кнопке “Решение” должен происходить переход на 2-ю форму проекта. Остальные требования к кнопкам такие же, как в ЛР1.
Форма 2. Вторая форма должна содержать набор средств (набор кнопок) по работе с исходными данными: «Ввод данных», «Обработка данных», «Включение в список», «Сортировка списка», «Удаление из списка», «Изменение данных». Требования к этим кнопкам такие же, как в ЛР6 – ЛР8, но работать они должны только с исходными данными. Также на форме должны быть кнопки “Условие задачи”, “Обработка списка” и “Выход”. По кнопке “Условие задачи” должен происходить переход на 1-ю форму проекта.
Модуль. Выполнение задания в описанном выше виде возможно лишь при создании модуля, в который следует записать все подпрограммы общего назначения, которые используются в форме 2, и все переменные, предназначенные для обработки данных, которые ранее были описаны в разделе General. При описании переменных вместо ключевого слова Dim следует использовать слово Public, что делает эти переменные доступными во всех формах проекта.
Рекомендуется записать в модуль следующие подпрограммы: поиск суммы элементов массива, поиск номера максимального элемента, сдвиг элементов массива, сортировку массива, а также выделение из строки заданного слова (в соответствии с индивидуальным заданием возможны свои подпрограммы общего назначения).
Индивидуальное задание студента.
Имеются сведения о туристических поездках: название страны, количество дней проживания, общая плата за проживание и стоимость авиаперелета.
Определить: а) для каждой страны общую стоимость поездки, стоимость одного дня проживания.
б) для каждой страны процент стоимости авиаперелета от платы за проживание, а также процентное отношение стоимости одного дня проживания от средней стоимости по всем странам.
Список переменных описанных в Модуле.
Public strana() 'переменная обозначающая страну путешествия.
Public vir() 'переменная обозначающая стоимость одного дня проживания.
Public ob() 'переменная обозначающая общую стоимость поездки.
Public kol() 'переменная обозначающая количество дней проживания.
Public cena() 'переменная обозначающая общую плату за проживание.
Public avia() 'переменная обозначающая стоимость авиаперелета.
Форма №1
'Командная кнопка «Условие задачи» после щелчка мыши в текстовом поле должно появиться условие задачи, индивидуальное для каждого студента, причем текст в нем должен быть недоступен для изменения:
Private Sub Command1_Click()
ENDLN = Chr(13) = Chr(10)
Text1.Visible = True
Text1 = "Имеются сведения о туристических поездках: название страны,"
Text1 = Text1 + "количество дней проживания, общая плата за проживание и стоимость авиаперелета."
Text1 = Text1 + "Определить: для каждой страны общую стоимость поездки, "
Text1 = Text1 + "стоимость одного дня проживания. "
Text1 = Text1 + "для каждой страны процент стоимости авиаперелета от платы за проживание, "
Text1 = Text1 + "а также процентное отношение стоимости одного дня проживания от средней стоимости по всем странам. "
Command3.Enabled = True
End Sub
'Командная кнопка «Выход» обеспечивает выход из программы в любой момент работы проекта по желанию пользователя:
Private Sub Command2_Click()
End
End Sub
'После появления на экране условия задачи становится доступна командная кнопка “Решение”, и после ее выбора должен произойти переход на 2-ю форму проекта.
Private Sub Command3_Click()
Form2.Show
End Sub
Форма №2
Option Explicit 'используется на уровне модуля для установки/проверки наличия объявлений для всех переменных в данном модуле
Dim nom As Integer 'переменная обозначающая номер слова в строке
Dim L As Integer 'локальная переменная процедур
Dim sum As Currency 'переменная обозначающая
Dim k As Integer 'переменная обозначающая номер записи в файле
Dim max As Currency 'переменная обозначающая
Dim sc1 As Currency 'переменная обозначающая это поле, средний результат которого мы ищем
Dim sc2 As Currency 'переменная обозначающая
Dim sc3 As Currency 'переменная обозначающая
Dim sc4 As Currency 'переменная обозначающая
Dim sc5 As Currency 'переменная обозначающая
Dim rez1 As String 'переменная обозначающая
Dim s As String 'локальная переменная процедур
Dim sl As String 'переменная обозначающая пустую строку
Dim MS As String 'переменная обозначающая
Dim ENDLN As String 'переменная обозначающая
Dim c As String 'переменная обозначающая
Dim Ind As Integer 'переменная обозначающая
Dim i As Integer 'переменная обозначающая
Dim n As Integer 'переменная обозначающая количество введенных записей
Dim MI As Integer 'переменная обозначающая номер страны ?
'Командная кнопка “Изменение данных” удаляет запись из списка, а поля выбранной записи появляются в полях Text1, Text2, Text3, …, причем объекты TextBox становятся доступными для изменения данных.
Private Sub cmdIzm_Click()
Cls
Ind = List1.ListIndex
List1.RemoveItem Ind
cmdresh.Enabled = True
cmdIzm.Enabled = False
cmdUdal.Enabled = False
Txtob = ""
Txtvir = ""
lblSR.Caption = " Ср.знач. = "
cmdvkl.Enabled = False
Txtstrana.Enabled = True
Txtkol.Enabled = True
Txtcena.Enabled = True
Txtavia.Enabled = True
cmdok.Enabled = True
Txtstrana.SetFocus
End Sub
'Командная кнопка «Обработка данных», после щелчка мыши на которой должны выполниться простейшие арифметические действия по обработке данных.
Private Sub cmdobr_Click()
ob(0) = avia(0) + cena(0)
vir(0) = cena(0) / kol(0)
Txtob = Str(ob(0))
Txtvir = Str(vir(0)) + " РУБ"
cmdobr.Enabled = False
cmdvkl.Enabled = True
End Sub
'Конец ввода подтверждается щелчком мыши на кнопке «ОК», которая закрывает доступ к текстовым полям и открывает доступ к кнопкам «Обработка данных» и «Включение в список».
Private Sub cmdok_Click()
Txtstrana.Enabled = False
Txtkol.Enabled = False
Txtcena.Enabled = False
Txtavia.Enabled = False
cmdok.Enabled = False
cmdobr.Enabled = True
End Sub
'Кнопка “Решение”, после щелчка мыши на кнопку следует ввести одну запись с исходными данными в соответствии с индивидуальным заданием, используя при этом функцию InputBox.
Private Sub cmdresh_click()
frmSort.Visible = False
frmopt.Visible = False
Cls
rez1 = ""
lblSR.Caption = "Ср.знач.= "
ENDLN = Chr(13) + Chr(10)
Txtstrana.Enabled = True
Txtstrana.SetFocus
Txtkol.Enabled = True
Txtcena.Enabled = True
Txtavia.Enabled = True
Txtstrana = ""
Txtkol = ""
Txtcena = ""
Txtavia = ""
Txtob = ""
Txtvir = ""
cmdok.Enabled = True
End Sub
'Командная кнопка «Выход»:
Private Sub cmdexit_Click()
End
End Sub
'Кнопка “Сортировка списка”. Сортировка списка производиться по щелчку мыши на выбранном поле через сортировку массива, соответствующему данному полю, где сам массив оформлен, как параметр. В цикле сортировки в зависимости от значения опции optUb происходит перестановка элементов всех массивов данных, логически связанных с выбранным полем. После сортировки массива идет перезапись элементов списка.
Private Sub CmdSort_Click()
frmSort.Visible = True
frmopt.Visible = True
End Sub
'Командная кнопка “Удаление данных” при нажатии на кнопку запись должна удаляться из списка, а все кнопки (кроме “Ввод данных” и “Выход”) должны стать недоступными.
Private Sub cmdUdal_Click()
Cls
Ind = List1.ListIndex
List1.RemoveItem Ind
cmdresh.Enabled = True
cmdIzm.Enabled = False
cmdUdal.Enabled = False
lblSR.Caption = " Ср.знач. = "
cmdvkl.Enabled = False
End Sub
'Кнопка “Просмотр условия” позволяет перейти на первую форму проекта, для повторного просмотра условия.
Private Sub cmdUsl_Click()
Form1.Show
End Sub
'По нажатию кнопки «Включение в список» производится включение полей записи в массивы (напр., Firma(N) = Firma(0), Kol(N) = Kol(0), Cena(N) = Cena(0)), а сама запись появиляется в поле ListBox. При этом производятся простейшие арифметические действия, результат которых выводится в метку. Кнопки «Обработка списка» и «Сортировка списка» становятся доступными.
Private Sub cmdvkl_Click()
n = n + 1
ReDim Preserve strana(n)
ReDim Preserve vir(n)
ReDim Preserve ob(n)
ReDim Preserve kol(n)
ReDim Preserve cena(n)
ReDim Preserve avia(n)
strana(n) = strana(0)
kol(n) = kol(0)
cena(n) = cena(0)
avia(n) = avia(0)
ob(n) = ob(0)
vir(n) = vir(0)
ob(n) = cena(n) + avia(n)
vir(n) = cena(n) / kol(n)
s = StrElem(n)
List1.AddItem s
cmdvkl.Enabled = False
End Sub
'По щелчку мыши на кнопке «Обработка списка» вычисляется средние арифметические значения числовых полей всех записей в списке и производится поиск записи с максимальным значением вычисляемого поля. Поля найденной записи появляются в Text1, Text2, Text3, …, причем объекты TextBox будут недоступными для изменения данных. В левом верхнем углу формы появится надпись «Данные о фирме с максимальной выручкой» и все кнопки (кроме “Ввод данных” и “Выход”) должны стать недоступными.
Private Sub Comobrab_Click()
n = List1.ListCount
sc1 = 0: sc2 = 0: sc3 = 0: sc4 = 0: sc5 = 0: max = 0: MI = 0
sc1 = Summa(kol, n)
sc2 = Summa(cena, n)
sc3 = Summa(avia, n)
sc4 = Summa(ob, n)
sc5 = Summa(vir, n)
Ind = IndMax(ob, n)
If n > 0 Then
sc1 = sc1 / n: sc2 = sc2 / n: sc3 = sc3 / n: sc4 = sc4 / n: sc5 = sc5 / n
lblSR.Caption = " Ср.знач. = " + Space(15) + Str(sc1) + Space(25) + Str(sc2) + Space(25) + Str(sc3) + Space(25) + Str(sc4) + Space(25) + Str(sc5)
End If
End Sub
Private Sub Form_Load()
ReDim strana(1)
ReDim vir(1)
ReDim ob(1)
ReDim kol(1)
ReDim cena(1)
ReDim avia(1)
max = 0
k = 0
n = 0
End Sub
'Создание списка из первых к - элементов массивов:
Sub SozdList(k As Integer)
Dim i As Integer
For i = 1 To k
List1.List(i - 1) = StrElem(i)
Next i
End Sub
'Сортировка первых к - элементов массива:
Sub SortMas(Mas(), k As Integer)
Dim i As Integer, j As Integer, F As Integer
For i = 1 To k - 1
For j = i + 1 To k
F = 0
Select Case OptUb
Case True: If Mas(i) < Mas(j) Then F = 1
Case False: If Mas(i) > Mas(j) Then F = 1
End Select
If F = 1 Then
strana(0) = strana(i): strana(i) = strana(j): strana(j) = strana(0)
kol(0) = kol(i): kol(i) = kol(j): kol(j) = kol(0)
cena(0) = cena(i): cena(i) = cena(j): cena(j) = cena(0)
avia(0) = avia(i): avia(i) = avia(j): avia(j) = avia(0)
ob(0) = ob(i): ob(i) = ob(j): ob(j) = ob(0)
vir(0) = vir(i): vir(i) = vir(j): vir(j) = vir(0)
End If
Next j, i
End Sub
Private Sub List1_Click()
k = List1.ListIndex
s = List1.List(k)
s = s + " "
L = Len(s): sl = "": nom = 0
For i = 1 To L
c = Mid(s, i, 1)
If c <> " " Then sl = sl + c
If c = " " And sl <> "" Then
nom = nom + 1
Select Case nom
Case 1: Txtstrana = sl
Case 2: Txtkol = sl
Case 3: Txtcena = sl
Case 4: Txtavia = sl
Case 5: Txtob = sl
Case 6: Txtvir = sl
End Select
End If
If c = " " Then sl = ""
Next i
cmdUdal.Enabled = True
cmdIzm.Enabled = True
End Sub
Private Sub Option1_Click()
End Sub
Private Sub Optavia_Click()
SortMas avia, n
SozdList n
End Sub
Private Sub Optcena_Click()
SortMas cena, n
SozdList n
End Sub
Private Sub Optkol_Click()
SortMas kol, n
SozdList n
End Sub
Private Sub Optob_Click()
SortMas ob, n
SozdList n
End Sub
Private Sub optstr_Click()
SortMas strana, n
SozdList n
End Sub
Private Sub Optvir_Click()
SortMas vir, n
SozdList n
End Sub
Private Sub Txtstrana_Change()
strana(0) = Txtstrana
End Sub
Private Sub Txtkol_Change()
kol(0) = Val(Txtkol)
End Sub
Private Sub Txtcena_Change()
cena(0) = Val(Txtcena)
End Sub
Private Sub Txtavia_Change()
avia(0) = Val(Txtavia)
End Sub
Private Sub Txtob_Change()
ob(0) = Val(Txtob)
End Sub
Private Sub Txtvir_Change()
vir(0) = Val(Txtvir)
End Sub
Модуль
Public strana()
Public vir()
Public ob()
Public kol()
Public cena()
Public avia()
' Подсчет суммы элементов в массиве:
Function Summa(Mas(), k As Integer) As Currency
Dim i As Integer, s As Variant
s = 0
For i = 1 To k
s = s + Mas(i)
Next i
Summa = s
End Function
' Нахождение номера первого максимального элемента в массиве:
Function IndMax(Mas(), k As Integer) As Integer
Dim i As Integer, s As Integer
s = 1
For i = 2 To k
If Mas(i) > Mas(s) Then s = i
Next i
IndMax = s
End Function
' Удаление j - ого элемента из массива:
Sub SdvigElem(Mas(), j As Integer)
Dim i As Integer
For i = j To n - 1
Mas(i) = Mas(i + 1)
Next i
End Sub
' Выделение из строки к - ого слова:
Function Slovo(st As String, k As Integer) As String
Dim s As String, c As String
Dim i As Integer, nom As Integer
Dim L As Integer
st = st + " "
L = Len(st) ' кол-во символов в строке
s = "": nom = 0
For i = 1 To L
c = Mid(st, i, 1) ' i - й символ строки
If c <> " " Then s = s + c
If c = " " And s <> "" Then
nom = nom + 1 ' номер текущего слова в строке
If nom = k Then Exit For
s = ""
End If
Next i
Slovo = s
End Function
' Создание массивов из полей первых к - элементов списка:
Sub SozdMas(k As Integer)
Dim i As Integer
n = k
ReDim strana(n), kol(n), cena(n), VR(n)
For i = 1 To n
s = List1.List(i - 1)
strana(i) = Slovo(s, 1)
cena(i) = Val(Slovo(s, 2))
kol(i) = Val(Slovo(s, 3))
avia = (i) = Val(Slovo(s, 4))
ob(i) = cena(i) + avia(i)
vir(i) = cena(i) / kol(i)
Next i
End Sub
' Создание строки из i - х элементов массивов:
Function StrElem(n As Integer) As String
Dim s As String, L As Integer
Dim x As Currency
L = Len(strana(n))
s = " " + strana(n) + Space(16 - L)
L = Len(Str(kol(n)))
s = s + Str(kol(n)) + Space(15 - L)
x = cena(n)
L = Len(Str(x))
s = s + Str(x) + Space(15 - L)
x = avia(n)
L = Len(Str(x))
s = s + Str(x) + Space(15 - L)
x = ob(n)
L = Len(Str(x))
s = s + Str(x) + Space(15 - L)
x = vir(n)
L = Len(Str(x))
s = s + Str(x)
StrElem = s
End Function
' Создание списка из элементов массива после его сортировки:
Sub SortList(Mas(), k As Integer)
Dim i As Integer
SortMas Mas, k
If OptUb Then
lblSort.Caption = " Сортировка списка по убыванию"
Else
lblSort.Caption = " Сортировка списка по возрастанию"
End If
SozdList k
End Sub