Главная Учебники - Разные Лекции (разные) - часть 32
Нижегородский Государственный Технический Университет База данных видеокарт Нижний Новгород 2003 г. Цель работы: Создание каталога видеокарт. Программа должна уметь: заносить, изменять и удалять видеокарту. Выдавать максимальную и минимальную стоимость видеокарты, в порядке увеличения стоимости. Программа "База данных видеокарт" (DataBasev.1.02 beta.exe) должна быть написана на языке Visual Basic 6.3. Составляющие программы: На рисунке: -слева – 4 файла программы: - data.dat – информация о видеокартах (файл Excel (.xls) переименованный в .dat) - DataBasev.1.02 beta.exe – исполняющий файл программы - log.dat – история базы данных (файл с произвольным доступом) - set.ini – файл (с произвольным доступом) для хранения настроек программы - справа - рабочая папка проекта Работа с программой: При первой загрузке сразу создаются файл настроек и истории. Загружается сплэшскрин: ‘создание новых типов данных PrivateTypetune chekv As String * 1 chekn As String * 16 End Type Private Type log vlog As String * 23 vname As String * 17 vdate As String * 12 vtime As String * 10 End Type ‘загрузкаформы Private Sub Form_Load() Dim chk1 As tune Dim log1 As log Open CurDir$ + "\set.ini" For Random As #1 Len = Len(chk1) Get #1, 1, chk1 If chk1.chekv = "0" Then Unload Me Form1.Show Else Form1.Check1.Value = 1 End If Open CurDir$ + "\log.dat" For Random As #2 Len = Len(log1) End Sub При нажатии курсором в любую область сплэшскрин выгружается и появляется окно основного меню: При наведении курсора на любую область в рамке помощь появляется подсказка. Public excelist As New Excel.Application ‘чек Private Sub Check1_Click() Dim chk1 As tune chk1.chekn = " = Check1.value " chk1.chekv = Check1.Value Put #1, 1, chk1.chekv End Sub 'помощьчек Private Sub Check1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1.Caption = "Показывать/нет сплэшскрин (информацию о программе) при загрузке базы данных" End Sub ‘загрузкаформы Private Sub Form_Load() Static w As Byte If w = 0 Then Set excelist = New Excel.Application With excelist Workbooks.Open CurDir$ + "\data.dat" Visible = False End With w = 1 End If Dim chk1 As tune chk1.chekn = " = Check1.value " Get #1, 1, chk1 If chk1.chekv = "0" Then Check1.Value = 0 Else Check1.Value = 1 End If End Sub ‘выход Private Sub Command6_Click() Dim chk1 As tune If MsgBox("Выдействительножелаетевыйти ?", vbYesNo, "Базаданныхвидеокарт") = vbYes Then With excelist.ActiveWorkbook Save Close End With chk1.chekn = " = Check1.value " If Check1.Value = 1 Then chk1.chekv = "1" Put #1, 1, chk1 Else chk1.chekv = "0" Put #1, 1, chk1 End If Close #1 Close #2 End End If End Sub Окно базы данных: Здесь также имеется область с подсказками. На рисунке, например, при наведении на область об’екта MSFlexgrid появляется информация о кол-ве видеокарт в базе данных. ‘загрузкаформы Private Sub Form_Load() With MSFlexGrid1 TextMatrix(0, 0) = "Модель" TextMatrix(0, 1) = "Шина AGP" TextMatrix(0, 2) = "Частотаядра/памяти" TextMatrix(0, 3) = "Об'ёмпамяти" TextMatrix(0, 4) = "Типпамяти" TextMatrix(0, 5) = "Цена" End With MSFlexGrid1.ColWidth(0) = 3100 MSFlexGrid1.ColWidth(1) = 990 MSFlexGrid1.ColWidth(2) = 1900 MSFlexGrid1.ColWidth(3) = 1300 MSFlexGrid1.ColWidth(4) = 1100 MSFlexGrid1.ColWidth(5) = 1360 Dim i As Integer Dim zpust As Integer Dim k As Integer k = 1 zpust = Form1.zerocell For i = 1 To zpust With Form1.excelist.ActiveWorkbook.ActiveSheet MSFlexGrid1.TextMatrix(k, 0) = .Cells(i, 1) MSFlexGrid1.TextMatrix(k, 1) = .Cells(i, 2) MSFlexGrid1.TextMatrix(k, 2) = .Cells(i, 3) MSFlexGrid1.TextMatrix(k, 3) = .Cells(i, 4) MSFlexGrid1.TextMatrix(k, 4) = .Cells(i, 5) MSFlexGrid1.TextMatrix(k, 5) = .Cells(i, 6) k = k + 1 End With Next i With MSFlexGrid1 Rows = zpust + 1 Col = 0 Sort = 1 Rows = 70 End With End Sub ‘кол-вовидеокарт Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim zpust As Integer zpust = Form1.zerocell Label1.Caption = "Всего в базе данных - " & zpust & " видеокарт" End Sub Как уже говорилось ранее в программе предусмотрено ведение истории: При нажатии на клавишу очистки содержимое файла истории обнуляется. ‘загрузкаформы Private Sub Form_Load() With MSFlexGrid1 TextMatrix(0, 0) = "Действие" TextMatrix(0, 1) = "Модельвидеокарты" TextMatrix(0, 2) = "Дата" TextMatrix(0, 3) = "Время" End With MSFlexGrid1.ColWidth(0) = 3500 MSFlexGrid1.ColWidth(1) = 3500 MSFlexGrid1.ColWidth(2) = 1385 MSFlexGrid1.ColWidth(3) = 1390 Dim chk1 As tune Dim log1 As log Dim X As Integer Dim Y As Integer Get #1, 3, chk1.chekv X = Val(chk1.chekv) For Y = 1 To X Get #2, Y, log1 MSFlexGrid1.TextMatrix(Y, 0) = log1.vlog MSFlexGrid1.TextMatrix(Y, 1) = log1.vname MSFlexGrid1.TextMatrix(Y, 2) = log1.vdate MSFlexGrid1.TextMatrix(Y, 3) = log1.vtime Next Y End Sub 'очисткалога Private Sub Command1_Click() Dim chk1 As tune Dim log1 As log Dim s As Integer Dim r As Integer Get #1, 3, chk1.chekn s = Val(chk1.chekn) For r = 1 To s Put #2, r, log1 Next r chk1.chekn = 0 Put #1, 3, chk1.chekn With MSFlexGrid1 Clear TextMatrix(0, 0) = "Действие" TextMatrix(0, 1) = "Модельвидеокарты" TextMatrix(0, 2) = "Дата" TextMatrix(0, 3) = "Время" End With End Sub Добавление в базу данных: Добавление происходит с помощью 4 – х элементов combobox и одного textbox. Если в форму ничего не введено то появляется окно "Введите модель видеокарты". ‘добавление PrivateSubCommand1_Click() IfCombo1.Text <> Empty Then Dim zpust As Byte zpust = Form1.zerocell With Form1.excelist.ActiveWorkbook.ActiveSheet Cells(zpust + 1, 1) = Combo1.Text Cells(zpust + 1, 2) = Combo2.Text Cells(zpust + 1, 3) = Combo3.Text Cells(zpust + 1, 4) = Combo4.Text Cells(zpust + 1, 5) = Combo5.Text Cells(zpust + 1, 6) = Text1.Text End With Beep Dim log1 As log Dim u As Integer Dim chk1 As tune log1.vlog = "Добавленавидеокарта " log1.vdate = Date$ log1.vname = Combo1.Text log1.vtime = Time$ Get #1, 3, chk1.chekn u = Val(chk1.chekn) + 1 chk1.chekn = u Put #1, 3, chk1.chekn Put #2, u, log1 Combo1.Text = "" Combo2.Text = "" Combo3.Text = "" Combo4.Text = "" Combo5.Text = "" Text1.Text = "" Else MsgBox "Введитемодельвидеокарты" End If End Sub Удаление видеокарты из базы данных: Форма снабжена элементом checkbox. При установленном флажке, при нажатии на клавишу Удалить появляется окно "Вы действительно желаете удалить данную видеокарту?". ‘удаление Private Sub Command1_Click() Dim lab1 As Label Dim lab2 As Label If Check1.Value = 1 Then If MsgBox("Вы действительно желаете удалить данную видеокарту ?", vbYesNo, "База данных видеокарт") = vbYes Then GoTo lab1 Else: GoTo lab2 End If Else GoTo lab1 End If lab1: Dim i As Byte Dim zpust As Byte zpust = Form1.zerocell For i = 1 To zpust If Form1.excelist.ActiveWorkbook.ActiveSheet.Cells(i, 1) = Combo1.Text Then Form1.excelist.ActiveWorkbook.ActiveSheet.Rows(i).Delete Beep Dim log1 As log Dim u As Integer Dim chk1 As tune log1.vlog = "Удаленавидеокарта " log1.vdate = Date$ log1.vname = Combo1.Text log1.vtime = Time$ Get #1, 3, chk1.chekn u = Val(chk1.chekn) + 1 chk1.chekn = u Put #1, 3, chk1.chekn Put #2, u, log1 GoTo lab2 End If Next i MsgBox "Модель не найдена" lab2: Combo1.Text = "" End Sub Изменение видеокарты происходит с помощью поиска модели видеокарты, если видеокарта не найдена появляется окно "Модель не найдена". Как и в форме добавления есть защита от пустого ввода. ‘изменение PrivateSubCommand1_Click() IfCombo1.Text <> EmptyThen Dim o As Byte Dim f As Label Dim zpust As Byte zpust = Form1.zerocell For o = 1 To zpust If Form1.excelist.ActiveWorkbook.ActiveSheet.Cells(o, 1) = Combo1.Text Then Form1.excelist.ActiveWorkbook.ActiveSheet.Rows(o).Delete With Form1.excelist.ActiveWorkbook.ActiveSheet Cells(o, 1) = Combo1.Text Cells(o, 2) = Combo2.Text Cells(o, 3) = Combo3.Text Cells(o, 4) = Combo4.Text Cells(o, 5) = Combo5.Text Cells(o, 6) = Text1.Text End With Dim log1 As log Dim u As Integer Dim chk1 As tune log1.vlog = "Измененавидеокарта " log1.vdate = Date$ log1.vname = Combo1.Text log1.vtime = Time$ Get #1, 3, chk1.chekn u = Val(chk1.chekn) + 1 chk1.chekn = u Put #1, 3, chk1.chekn Put #2, u, log1 Beep GoTo f End If Next o Else MsgBox "Введите модель" GoTof EndIf MsgBox "Модель не найдена" f: Combo1.Text = "" Combo2.Text = "" Combo3.Text = "" Combo4.Text = "" Combo5.Text = "" Text1.Text = "" End Sub Поиск и сортировка: Осуществляются в одном окне, с помощью элементов optionbutton. Поиск: Поиск происходит по модели и по цене, в т.ч. в диапазоне цен "от … до", "от … ", "до …". Автоматически происходит сортировка найденных элементов по цене в сторону увеличения. Сортировка: Можно выбрать любой параметр сортировки. Она будет произведена в сторону увеличения. ‘загрузкаформы Private Sub Form_Load() With MSFlexGrid1 TextMatrix(0, 0) = "Модель" TextMatrix(0, 1) = "Шина AGP" TextMatrix(0, 2) = "Частотаядра/памяти" TextMatrix(0, 3) = "Об'ёмпамяти" TextMatrix(0, 4) = "Типпамяти" TextMatrix(0, 5) = "Цена" End With MSFlexGrid1.ColWidth(0) = 3100 MSFlexGrid1.ColWidth(1) = 990 MSFlexGrid1.ColWidth(2) = 1900 MSFlexGrid1.ColWidth(3) = 1300 MSFlexGrid1.ColWidth(4) = 1100 MSFlexGrid1.ColWidth(5) = 1360 Dim i As Integer Dim zpust As Integer k = 1 zpust = Form1.zerocell For i = 1 To zpust With Form1.excelist.ActiveWorkbook.ActiveSheet MSFlexGrid1.TextMatrix(k, 0) = .Cells(i, 1) MSFlexGrid1.TextMatrix(k, 1) = .Cells(i, 2) MSFlexGrid1.TextMatrix(k, 2) = .Cells(i, 3) MSFlexGrid1.TextMatrix(k, 3) = .Cells(i, 4) MSFlexGrid1.TextMatrix(k, 4) = .Cells(i, 5) MSFlexGrid1.TextMatrix(k, 5) = .Cells(i, 6) k = k + 1 End With Next i MSFlexGrid1.Rows = zpust + 1 MSFlexGrid1.Sort = 1 MSFlexGrid1.Rows = 70 End Sub ‘поиск / сортировка Private Sub Command3_Click() If e = True Then Dim zpust As Integer zpust = Form1.zerocell Select Case r Case Is < 6 Dim i As Integer k = 1 For i = 1 To zpust With Form1.excelist.ActiveWorkbook.ActiveSheet MSFlexGrid1.TextMatrix(k, 0) = .Cells(i, 1) MSFlexGrid1.TextMatrix(k, 1) = .Cells(i, 2) MSFlexGrid1.TextMatrix(k, 2) = .Cells(i, 3) MSFlexGrid1.TextMatrix(k, 3) = .Cells(i, 4) MSFlexGrid1.TextMatrix(k, 4) = .Cells(i, 5) MSFlexGrid1.TextMatrix(k, 5) = .Cells(i, 6) k = k + 1 MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 End With Next i With MSFlexGrid1 Rows = zpust + 1 Col = r Sort = 1 Rows = 70 End With Case 6 If Combo1.Text <> Empty Then Dim u As Byte zpust = Form1.zerocell k = 1 MSFlexGrid1.Clear With MSFlexGrid1 TextMatrix(0, 0) = "Модель" TextMatrix(0, 1) = "Шина AGP" TextMatrix(0, 2) = "Частотаядра/памяти" TextMatrix(0, 3) = "Об'ёмпамяти" TextMatrix(0, 4) = "Типпамяти" TextMatrix(0, 5) = "Цена" End With For u = 1 To zpust If Form1.excelist.ActiveWorkbook.ActiveSheet.Cells(u, 1) = Combo1.Text Then With Form1.excelist.ActiveWorkbook.ActiveSheet MSFlexGrid1.TextMatrix(k, 0) = .Cells(u, 1) MSFlexGrid1.TextMatrix(k, 1) = .Cells(u, 2) MSFlexGrid1.TextMatrix(k, 2) = .Cells(u, 3) MSFlexGrid1.TextMatrix(k, 3) = .Cells(u, 4) MSFlexGrid1.TextMatrix(k, 4) = .Cells(u, 5) MSFlexGrid1.TextMatrix(k, 5) = .Cells(u, 6) k = k + 1 MSFlexGrid1.Rows = MSFlexGrid1.Rows + 1 End With End If Next u If k = 1 Then MsgBox "Модель не найдена" Else MsgBox "Введитемодель" End If Case 7 If Val(Combo2.Text) < Val(Combo3.Text) Then MSFlexGrid1.Clear With MSFlexGrid1 TextMatrix(0, 0) = "Модель" TextMatrix(0, 1) = "Шина AGP" TextMatrix(0, 2) = "Частотаядра/памяти" TextMatrix(0, 3) = "Об'ёмпамяти" TextMatrix(0, 4) = "Типпамяти" TextMatrix(0, 5) = "Цена" End With Dim j As Integer k = 1 For j = 1 To zpust If Val(Form1.excelist.ActiveWorkbook.ActiveSheet.Cells(j, 6)) >= Val(Combo2.Text) And Val(Form1.excelist.ActiveWorkbook.ActiveSheet.Cells(j, 6)) <= Val(Combo3.Text) Then With Form1.excelist.ActiveWorkbook.ActiveSheet MSFlexGrid1.TextMatrix(k, 0) = .Cells(j, 1) MSFlexGrid1.TextMatrix(k, 1) = .Cells(j, 2) MSFlexGrid1.TextMatrix(k, 2) = .Cells(j, 3) MSFlexGrid1.TextMatrix(k, 3) = .Cells(j, 4) MSFlexGrid1.TextMatrix(k, 4) = .Cells(j, 5) MSFlexGrid1.TextMatrix(k, 5) = .Cells(j, 6) k = k + 1 End With End If Next j With MSFlexGrid1 Rows = k Col = 5 Sort = 1 Rows = 70 End With Else MsgBox "Неверно задан диапазон" End If Case Else MsgBox "Неудача" End Select Option1.Enabled = True Option2.Enabled = True Option3.Enabled = True Option4.Enabled = True Option5.Enabled = True Option6.Enabled = True Option7.Enabled = True Option8.Enabled = True Combo1.Enabled = True Combo2.Enabled = True Combo3.Enabled = True Option1.Value = False Option2.Value = False Option3.Value = False Option4.Value = False Option5.Value = False Option6.Value = False Option7.Value = False Option8.Value = False Combo1.Text = "" Combo2.Text = "" Combo3.Text = "" Else MsgBox "Выберитедействие" End If e = False End Sub В любой момент можно просмотреть информацию о программе: При нажатии клавиши выход появляется окно "Вы действительно желаете выйти?", при утвердительном ответе программа сохраняет все изменения и закрывается. Заключение: Использованные ресурсы: Программа использует следующее компоненты: - Microsoft Flex Grid Control 6.0 (SP3) - Microsoft Windows Common Controls 6.0 (SP4) ибиблиотеки: - Visual Basic for Applications - Visual Basic runtime objects and procedures - Visual Basic objects and procedures - Microsoft Excel 10.0 Object Library Отличительные особенности программы: - Практически все формы программы снабжены помощью, т.е. областями в которых появляется информация об объекте, на который наведен курсор. Например в форме поиска при движении курсора по объекту MSFlexGrid появляется информация о количестве найденных видеокарт. - База данных имеет кроме файла с информацией о видеокартах (.dat) файлы с произвольным доступом. Файл настроек хранит информацию о положении флажков и количестве действий в истории. Файл истории хранит все сведения истории. - В программе ведется история добавления, удаления, изменения видеокарт (а также очистки) с точностью до секунд. Её можно просмотреть в любой момент и очистить, если возникнет необходимость. - Поиск по базе данных ведется по количеству введенных символов. Например если вы ввели "GeF" результатом будут все видеокарты GeForce … - Существует функция поиска в диапазоне цен: от … до … и от … до … - Использованы защиты от неверных действий. При выходе, удалении, очистки истории появляется окно подтверждения. - При оформлении программы использованы изображения реальных видеокарт.
|