Суббота, 2025-12-06

Professor VB - примеры на VB.net и C#
Меню сайта
Вход на сайт
Категории раздела
Уроки VB.net [25]
VB.net и математика [13]
Random VB [4]
VB.net - разное [7]
VB.net - Примеры программ [2]
Главная » Статьи » VB.net » Уроки VB.net

Создаем базу анекдотов (часть 2)

Создаем базу анекдотов



(Vb.net + XML)

1 - 2

 

Программа 18 кб

База (2500+) 310 кб

База (39000+) 4700 кб

 
 

    '================МЕНЮ===============

    '-меню-Случайный----------------

    Private Sub СлучайныйToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles СлучайныйToolStripMenuItem.Click

        maxIDxml(fileName)

        Dim r As New Random

        Dim max = Val(Me.Text)

        Randomize()

        Dim randoms

        randoms = r.Next(1, max)

        NumericUpDown1.Value = randoms

        element1()

    End Sub

 

    '-меню-+1 (-->)

    Private Sub ToolStripMenuItem3_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem3.Click

        If NumericUpDown1.Value < Val(Me.Text) Then

            NumericUpDown1.Value += 1

        End If

    End Sub

 

    '-меню--1 (<--)

    Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click

        If NumericUpDown1.Value > 1 Then

            NumericUpDown1.Value -= 1

        End If

    End Sub

 

    '-меню-из ТХТ в ANK (***) Конвертирование из ТХТ в АНК

    Private Sub Txt2AnkToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles Txt2AnkToolStripMenuItem1.Click

        ' Указываем начальную папку

        OFD1.InitialDirectory = Application.StartupPath

        ' Указываем заголовок

        OFD1.Title = "Откр файл ТХТ "

        ' При помощи фильтра можно отбросить ненужные типы файлов

        OFD1.Filter = "TXT|*.txt"

        If OFD1.ShowDialog = DialogResult.OK Then

            Dim filestxt = OFD1.FileName

            Dim fileAnk = FileIO.FileSystem.GetFileInfo(filestxt).Name + ".ank"

            importFromTXT(filestxt, fileAnk)

        End If

    End Sub

 

    '-меню-ФАЙЛ-Новая база--------------------

    Private Sub НоваяБазаToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles НоваяБазаToolStripMenuItem.Click

        newFile()

        element1()

    End Sub


 

Для загрузки любой базы запускается ОпенФайлДиалог, где мы выбираем файлы следующих расширений - ank, bu или любой другой файл, например ХМЛ. 

 


    '-меню-ФАЙЛ-загрузка базы

    Private Sub ЗагрузитьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ЗагрузитьToolStripMenuItem.Click

        ' Указываем начальную папку

        OFD1.InitialDirectory = Application.StartupPath

        ' Указываем заголовок

        OFD1.Title = "Откр Базу "

        ' При помощи фильтра можно отбросить ненужные типы файлов

        OFD1.Filter = "Анекдоты|*.ank|РезКоп|*.bu|Все|*.*"

        ' Если есть список выбора типов, то можно указать какой тип будет выбран при загрузке диалога

        OFD1.FilterIndex = 1

        If OFD1.ShowDialog = DialogResult.OK Then

            fileName = OFD1.FileName

            NumericUpDown1.Value = 1

            element1()

        End If

    End Sub

 

 

    '-меню-ФАЙЛ-сохранить копию базы

    Private Sub СохранитьКопиюToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles СохранитьКопиюToolStripMenuItem.Click

        ' Указываем начальную папку

        SFD1.InitialDirectory = Application.StartupPath

        ' Указываем заголовок

        SFD1.Title = "Сохранить Базу "

        ' При помощи фильтра можно отбросить ненужные типы файлов

        SFD1.Filter = "Анекдоты|*.ank|РезКоп|*.bu"

        ' Если есть список выбора типов, то можно указать какой тип будет выбран при загрузке диалога

        SFD1.FilterIndex = 1

        If SFD1.ShowDialog = DialogResult.OK Then

            Dim fileSave = SFD1.FileName

            IO.File.Copy(fileName, fileSave)

        End If

    End Sub

 

    '-меню-ФАЙЛ-Выход--------------------

    Private Sub ВыходToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ВыходToolStripMenuItem.Click

        Close()

    End Sub


 

Самая сложная операция - это удаление записи. Тк нам необходимо сохранить структуру файлов, а так же порядок записей.

 

Удалять мы можем, если у нас больше 1 записи.

 


 

    '-меню-НАСТРОЙКА-Удалить запись---------------

    Private Sub УдалитьЗаписьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles УдалитьЗаписьToolStripMenuItem.Click

        maxIDxml(fileName)

        If Me.Text > 1 Then

            del1()

            delOstatok()

            delTempFile()

            element1()

            maxIDxml(fileName)

        End If

    End Sub


 

Для добавления новой записи открывается новое окно (2 форма) - ее код ниже.

 


 

    '-меню-НАСТРОЙКА-Добавить запись---------------

    Private Sub ДобавитьЗаписьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ДобавитьЗаписьToolStripMenuItem.Click

        frmDobavka.Show()

        Me.Enabled = False

    End Sub


 

За включение - отключение этой функции отвечает параметр TopMost - в свойствах формы.

 


 

    '-меню-НАСТРОЙКА-Поверх всех окон

    Private Sub ПоверхВсехToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ПоверхВсехToolStripMenuItem.Click

        If ПоверхВсехToolStripMenuItem.Checked = True Then

            ПоверхВсехToolStripMenuItem.Checked = False

            Me.TopMost = False

        Else

            ПоверхВсехToolStripMenuItem.Checked = True

            Me.TopMost = True

        End If

    End Sub


 

Включение-отключение часов происходит по такому алгоритму, если галочка в меню есть - часы ходят и их видно, иначе их нет.

 


 

    '-меню-НАСТРОЙКА-часы

    Private Sub ЧасыToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ЧасыToolStripMenuItem.Click

        If ЧасыToolStripMenuItem.Checked = True Then

            ЧасыToolStripMenuItem.Checked = False

            lblChas.Visible = False

            Shape1.Visible = False

            Timer1.Enabled = False

        Else

            ЧасыToolStripMenuItem.Checked = True

            lblChas.Visible = True

            Shape1.Visible = True

            Timer1.Enabled = True

        End If

    End Sub

    '========END========МЕНЮ===============

 

 

    '==========Элементы=Управление======================

'в зависимости от числа в нумераторе открывается запись с выбранным номером.

'переключение нумератора (переключение между зап)

    Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged

        element1()

    End Sub

 

'изменение ранга по выбору в комбобоксе. (его мы заполняем при добавлении на форму)

'изменение ранга на вариант из комбобокса

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

        RANG(Val(ComboBox1.Text))

    End Sub

 

    'Таймер для времени

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

        lblChas.Text = TimeOfDay

    End Sub

    '=====END=====Элементы=Управление======================

 

'Копирование в буфер обмена содержимого RTB

    '=========контекстное меню==

    'скопировать в буф обм

    Private Sub ToolStripMenuItem6_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem6.Click

        My.Computer.Clipboard.SetText(rtxOtvet.Text)

    End Sub

End Class


 

 

Вторая форма - добавление записи


Imports System.Xml

Public Class frmDobavka

    'закрытие формы

    Private Sub frmDobavka_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed

        Form1.Enabled = True

    End Sub

 

    'добавляем текст

    Private Sub cmdOk_Click(sender As Object, e As EventArgs) Handles cmdOk.Click

        'добавление в конец файла

        'загружаем xml файл

        Dim reader = New XmlTextReader(Form1.fileName)

        Dim readElement = XElement.Load(reader)

        reader.Close()

        Form1.maxIDxml(Form1.fileName)

        Dim maxi = Val(Form1.Text)

        Dim nextID = Str(maxi + 1)

        Dim newText = " *** " + vbCrLf + vbCrLf + rtx1.Text + vbCrLf + vbCrLf

        Dim xml_value = <anek>

                            <id><%= nextID %></id>

                            <text><%= newText %></text>

                            <rang>0</rang>

                        </anek>

 

        readElement.Add(xml_value)

        'сохраняем

        readElement.Save(Form1.fileName)

        Form1.maxIDxml(Form1.fileName)

        Me.Close()

    End Sub

End Class


 

Таким образом у нас получается простая база анекдотов(стихов, афоризмов).

Если использовать данную структуру, то

~2500 записей займут 1,5 мб - работает мгновенно.

~40 000 записей займут 22 мб. - любое изменение базы подвешивает программу на 1-3 сек.

 

Конечно, это условное разделение, все зависит от длины записей.

Но все же, я не рекомендовал бы файлы больше 10 мб.

 

1 - 2

Смотреть видео

В начало

 

 



 

Категория: Уроки VB.net | Добавил: ProfessorVB (2016-01-05)
Просмотров: 2620 | Теги: создать XML, Vb.net, Open, save, XML, удалить из xml, анекдот, TopMost | Рейтинг: 5.0/1
Всего комментариев: 0
avatar
Облако тегов
Поиск
Друзья сайта
  • www.youtube.com

  • vk.com/professorvb

  • Партнерка AIR

  • Партнерка VSP Group
  • Поделись с друзьям
    Теги
    урок C# си шарп видео hello world MenuStrip Генератор имен Switch дроби решебник Алгебра системы уравнения геометрия Vb.net генератор уроки математика программа условия Math массив элементов видеоуроки добавление записи в xml анекдот поиск создать XML удалить из xml калькулятор НОД нок время дата Деструкторы конструкторы тест сокращение дробей десятичные дроби тренажер английский развитие мнемоника иностранные слова random рандом professorvb OpenFileDialog Timer mindgames цикл словарь база пароль слова cos sin комплексные числа вирус массив классы массивы многомерные Break Continue do for forEach While Обработка событий rgb задать цвет XML база данных xml количество элементов xml поиск значений xml редактирование xml создание soft AntiCenz fri-gate google pirat proxy tor запрещенные сайты Open save RichTextBox TopMost DateTimePicker календарь количество дней между датами перемешивание массива Анаграммы Меморина Ребусы Рифмоплет скорочтение Сравнение дробей использование
    Copyright ProfessorVB © 2025