VB.net - Генератор случайных имен
Иногда нам приходиться регистрироваться на левых форумах, давая вымышленные имена, и как по волшебству, все имена вылетают из головы.
Есть огромные базы имён, но выбирать в ручную и долго и нудно. И для этих целей мы и создадим программу, которая будет генерировать новые личности. Из баз имен-фамилий-отчеств случайным образом выбирается ФИО, а так же создается случайная дата рождения.
Так же мы расширим возможности программы таким образом, что бы нам выдавался список людей.
На форму мы помещаем следующие элементы:
MenuStrip1 - для быстрого доступа и настроек
в него мы запишем такие элементы:
- Файл - выход (для выход из программы)
- создать ФИО (копия кнопки на форме для создания нового ФИО)
- Цикл - создать список (создаем список имен с необходимыми параметрами)
- - остановить (досрочная остановка цикла)
- Настройки - Муж\Жен\Случ - работают как радиобуттон, те выбирается только 1 вариант - только М имена, только Ж или случайный пол
- -Очистка результатов - работает как чекбокс - если выбираем - тогда, новое имя стирает предыдущее, иначе - добавляет новое имя в список.
- -Дата рождения - еще один чекбокс- если выбираем его, тогда к ФИО добавляется дата рождения.
timer1 - для генерации большего разнообразия имен
кнопки - 3 шт - создать имя, создать список, стоп - соответственно для создания 1 имени, списка имен и для досрочной остановки цикла для создания списка имен
1 текстовое поле - для создания списка имен нужного количества.
и расширенное текстовое поле - в него будем записывать ФИО и даты
Так же нам понадобятся базы мужских и женских ФИО, их вы можете скачать по ссылке в описании. После скачивания их необходимо поместить рядом с программой (ссылка на базы ФИО)
|
откроется страница
для скачивания
|
А теперь переходим к коду
В начале проводим подготовительные работы, такие как подключение библиотек и объявление переменных:
Imports System.IO 'подключаем библиотеку Ввода-Вывода
Public Class Form1
'0 Загоняем текст (Base....txt) построчно в массив - создаем массивы ФИО для М и Ж
Dim menName() = IO.File.ReadAllLines("baseMenName.txt", System.Text.Encoding.Default)
Dim menFam() = IO.File.ReadAllLines("baseMenFam.txt", System.Text.Encoding.Default)
Dim menOtec() = IO.File.ReadAllLines("baseMenOtec.txt", System.Text.Encoding.Default)
Dim womenName() = IO.File.ReadAllLines("baseWomenName.txt", System.Text.Encoding.Default)
Dim womenFam() = IO.File.ReadAllLines("baseWomenFam.txt", System.Text.Encoding.Default)
Dim womenOtec() = IO.File.ReadAllLines("baseWomenOtec.txt", System.Text.Encoding.Default)
'0-1 задаем количество строк в массивах
Dim razmMN = menName.Length 'колво Муж Имен
Dim razmMF = menFam.Length 'колво Муж Фамилий
Dim razmMO = menOtec.Length 'колво Муж Отчеств
Dim razmWN = womenName.Length 'колво Жен Имен
Dim razmWF = womenFam.Length 'колво Жен Фамилий
Dim razmWO = womenOtec.Length 'колво Жен Отчеств
'0-2 случайные переменные для выбора случайного имя из каждого массива
Dim r As New Random 'переменная как новое случайное число
Dim nMName As Integer ' случайный номер
Dim nMFam As Integer ' случайный номер
Dim nMOtec As Integer ' случайный номер
Dim nWName As Integer ' случайный номер
Dim nWFam As Integer ' случайный номер
Dim nWOtec As Integer ' случайный номер
'0-3 текстовая переменная для ФИО
Dim pers As String
'0-4 переенные для выбора даты рождения
Dim day_ As String
Dim dk As Byte
Dim mes_ As Byte
Dim god_ As String
Dim data_ As String
'0-5 счетчик для списка
Dim namb_ = 0
Dim s4et As Byte
'0-6 переменная для выбора М или Ж имен
Dim xz As Byte
'---0-end
'1-1 КНОПКА на форме получаем 1 имя, с выбранными параметрами
Private Sub cmdName1_Click(sender As Object, e As EventArgs) Handles cmdName1.Click
rndText()
End Sub
'1-2 КНОПКА в Меню - получаем 1 имя, с выбранными параметрами
Private Sub СоздатьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles СоздатьToolStripMenuItem.Click
rndText()
End Sub
'2 подпрограмма для получения случайного имени
Sub rndText()
Randomize() 'функция генерации случайных чисел
'2-1 При выборе ( в меню стрип) записывается только новое имя (иначе создается список)
If ОчисткаРезультатовToolStripMenuItem.Checked = True Then
namb_ = 1
txtRez.Text = ""
Else
namb_ += 1
End If
'2-2 генерация даты рождения - независимо от того понадобится она нам или нет
mes_ = r.Next(1, 13) 'месяца от 1 до 12
'выбор макс количества дней, в зависимости от месяца
Select Case mes_
Case 1, 3, 5, 7, 8, 10, 12
dk = 32
Case 2
dk = 29
Case 4, 6, 9, 11
dk = 31
End Select
'выбор случайного дня рождения из заданного интервала
day_ = Str(r.Next(1, dk))
'выбор года - от 15 до 70 вполне удовл(если это не так, то можно создать дополн выбор года)
god_ = Str(r.Next(1945, 2000))
'2-3 генерация номера случайного слова для каждого массива
'генерация случайного числа от 1 до номера последней строки без 1
'(колво строк начинаем с 1, а массив с 0)
nMName = Str(r.Next(0, (razmMN - 1)))
nMFam = Str(r.Next(0, (razmMF - 1)))
nMOtec = Str(r.Next(0, (razmMO - 1)))
nWName = Str(r.Next(0, (razmWN - 1)))
nWFam = Str(r.Next(0, (razmWF - 1)))
nWOtec = Str(r.Next(0, (razmWO - 1)))
'переменная xz - определяет пол - 0 М, 1 Ж таким образом, если мы выбираем в меню М - она равна 0
'2-4 получения муж ФИО
If МужскоеToolStripMenuItem.Checked = True Then
xz = 0
End If
'2-5 получения жен ФИО
If ЖенскоеToolStripMenuItem.Checked = True Then
xz = 1
End If
'случайный порядок - создает случ значение ( не всегда это 50 на 50, разброс доходит до 80 на 20)
'2-6 получения муж или жен ФИО
If СлучайныйПорядокToolStripMenuItem.Checked = True Then
xz = r.Next(0, 2)
End If
'2-6-1 вывод имени в зависимости от выбранного пола
If xz = 0 Then
pers = " (М) " + vbTab + menFam(nMFam) + " " + menName(nMName) + " " + menOtec(nMOtec) + " "
Else
pers = " (Ж) " + vbTab + womenFam(nWFam) + " " + womenName(nWName) + " " + womenOtec(nWOtec) + " "
End If
'2-7 если необходима дата рождения, выбираем ДАТА РОЖДЕНИЯ
If ДатаРожденияToolStripMenuItem.Checked = True Then
data_ = " " + vbTab + day_ + "." + Str(mes_) + god_ + " "
Else
data_ = ""
End If
'2-8 вывод результата - порядковый номер - дата - фио - перевод на нов строку
txtRez.Text += Str(namb_) + ") " + data_ + pers + vbCrLf
End Sub
Для создания списка нам понадобится записать подпрограмму в цикл, но так как случайное число зависит от времени, а такой цикл пройдет очень быстро, мы добавим небольшую задержку, и для этого используем таймер
'3 ТАЙМЕР получение нового имени через интервал (для создания списка)
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
rndText() '1 имя будет выведено по любому
s4et = Val(txtLoop.Text) 'количество имен берем из тект поля
If s4et > 1 Then 'если число больше 1
txtLoop.Text = s4et - 1 'уменьшаем на 1 и продолжаем цикл
Else
TimOff() 'иначе отключ цикла
End If
End Sub
'4 подпрограмма для остановки таймера
Sub TimOff()
Timer1.Enabled = False
cmdStop.Enabled = False
cmdNameLoop.Enabled = True
txtLoop.Enabled = True
End Sub
'5-1 Кнопка на форме получаем список имен
Private Sub cmdNameLoop_Click(sender As Object, e As EventArgs) Handles cmdNameLoop.Click
ОчисткаРезультатовToolStripMenuItem.Checked = False
Timer1.Enabled = True
cmdStop.Enabled = True
cmdNameLoop.Enabled = False
txtLoop.Enabled = False
namb_ = 0
txtRez.Text = ""
End Sub
'кнопка в меню дублирует кнопку на форме, но для того что бы код был наглядней и содержал меньше ошибок мы не будем копировать код целиком, а програмно нажмем на кнопку ( таким образом если нам необходимо изменить код - меняем его только в 1 месте)
'5-2 кнопка в Меню получаем список имен (программно нажимаем кнопку на форме)
Private Sub СоздатьСписокToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles СоздатьСписокToolStripMenuItem.Click
cmdNameLoop_Click(sender, e) 'програмное нажатие на кнопку
End Sub
'для отключения цикла необходимо использовать подпрограмму TimOff()
ее мы и записываем в обе кнопки
'6-1 кнопка на форме отключения цикла получения списка имен
Private Sub cmdStop_Click(sender As Object, e As EventArgs) Handles cmdStop.Click
TimOff()
End Sub
'6-2 кнопка в Меню отключения цикла получения списка имен
Private Sub ОстановитьToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ОстановитьToolStripMenuItem.Click
TimOff()
End Sub
'Дополнительные настройки элементов
'7 ввод в текст поле только цифр (можно использовать нумератор NumericUpDown)
Private Sub txtLoop_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtLoop.KeyPress
'только цифры и удаление
If Not IsNumeric(e.KeyChar) AndAlso Asc(e.KeyChar) <> 8 Then e.Handled = True
End Sub
'8 разметка галочек в меню
'8-1 мужские имена (вариант radioButton1)
Private Sub МужскоеToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles МужскоеToolStripMenuItem.Click
МужскоеToolStripMenuItem.Checked = True
ЖенскоеToolStripMenuItem.Checked = False
СлучайныйПорядокToolStripMenuItem.Checked = False
End Sub
'8-2 женские имена (вариант radioButton2)
Private Sub ЖенскоеToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ЖенскоеToolStripMenuItem.Click
МужскоеToolStripMenuItem.Checked = False
ЖенскоеToolStripMenuItem.Checked = True
СлучайныйПорядокToolStripMenuItem.Checked = False
End Sub
'8-3 случайное имя (вариант radioButton3)
Private Sub СлучайныйПорядокToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles СлучайныйПорядокToolStripMenuItem.Click
МужскоеToolStripMenuItem.Checked = False
ЖенскоеToolStripMenuItem.Checked = False
СлучайныйПорядокToolStripMenuItem.Checked = True
End Sub
'8-4 - очистка результатов (вариант checkBox1)
Private Sub ОчисткаРезультатовToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ОчисткаРезультатовToolStripMenuItem.Click
If ОчисткаРезультатовToolStripMenuItem.Checked = True Then
ОчисткаРезультатовToolStripMenuItem.Checked = False
Else
ОчисткаРезультатовToolStripMenuItem.Checked = True
End If
End Sub
'8-5 дата рождения (вариант checkBox2)
Private Sub ДатаРожденияToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ДатаРожденияToolStripMenuItem.Click
If ДатаРожденияToolStripMenuItem.Checked = True Then
ДатаРожденияToolStripMenuItem.Checked = False
Else
ДатаРожденияToolStripMenuItem.Checked = True
End If
End Sub
'9 Меню О ПРОГЕ - открывает окно о ПРОГЕ
Private Sub ToolStripMenuItem3_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem3.Click
AboutBox1.Show()
End Sub
'10 Меню ВЫХОД - закрывает программу
Private Sub ВыходToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ВыходToolStripMenuItem.Click
Close()
End Sub
End Class
Если вам понадобится случайное имя или целый список имен, с датам рождения вам достаточно будет нажать всего 1 кнопку.
Смотреть видео
END
|