Member 13791516 Ответов: 4

Нужна помощь в создании идентификатора пользователя на основе имени и фамилии пользователя.


I have to create a program for school that allows the user to type their full name and age and when they click the add button the full name will be separated into first and last name listboxes. The age will also go into its own listbox but what i need help with is that when the add button is clicked a user ID, ex. Sally West's ID would be swest001, needs to be created using a function procedure and every time the same user ID appears the number at the end of the username has to be increased by one using a sub procedure. also, the program has remove button that clears the selected user's info, first/last name and age and user ID, but i can't get the age to be removed together with the other info. Btw, just to make it clear, i just need help with the user ID and completing the remove button. If anyone can help me with this, i would greatly appreciate it.

Что я уже пробовал:

Public Class LA55Form
    Private NumberOfUsers As Integer
    Private AgeInteger As Integer
    Private TotalAge As Integer


    Private Sub AddButton_Click(sender As Object, e As EventArgs) Handles AddButton.Click
        Dim FullNameString As String
        Dim UserIDNameString As String
        Dim FirstNameString As String
        Dim LastNameString As String
        Dim AgeString As String

        Dim CommaPositionInteger As Integer



        'Read fullname
        FullNameString = FullNameTextBox.Text

        'Read age
        AgeString = AgeTextBox.Text

        If Integer.TryParse(AgeTextBox.Text, AgeInteger) Then
            If AgeInteger < 15 Or AgeInteger > 90 Then
                MessageBox.Show("Age must be greater than 15 or less than 90.", "Data Entry Error",
                 MessageBoxButtons.OK, MessageBoxIcon.Information)
                With AgeTextBox
                    .Focus()
                    .SelectAll()
                End With
                Exit Sub
            End If
        Else
            MessageBox.Show("Quantity must be numeric.", "Data Entry Error",
             MessageBoxButtons.OK, MessageBoxIcon.Information)
            With AgeTextBox
                .Focus()
                .SelectAll()
            End With
            Exit Sub
        End If

        'Trim fullname
        FullNameString = FullNameString.Trim()

        'Check for no input
        If FullNameString = String.Empty Then
            '   Display error message
            MessageBox.Show("No name entered - retry", "input error", MessageBoxButtons.OK, MessageBoxIcon.Error)


            Exit Sub
        End If

        'Search for ", "
        CommaPositionInteger = FullNameString.IndexOf(", ")

        'Check for missing comma and space
        If CommaPositionInteger = -1 Then
            '   Display error message
            MessageBox.Show("Missing comma and space in name", "input error", MessageBoxButtons.OK, MessageBoxIcon.Error)


            Exit Sub

        End If

        'Extract LastName
        LastNameString = FullNameString.Substring(0, CommaPositionInteger)

        'Extract Firstname
        FirstNameString = FullNameString.Substring(CommaPositionInteger + 2)


        'place names in list boxes
        LastNameListBox.Items.Add(LastNameString)
        FirstNameListBox.Items.Add(FirstNameString)

        'place Age in list box
        AgeListBox.Items.Add(AgeString)

        

        NumberOfUsers += 1
        TotalAge += AgeInteger



    End Sub

    Private Sub ExitButton_Click(sender As Object, e As EventArgs) Handles ExitButton.Click
        Dim averageDecimal As Decimal
        Dim output As String = ""

        averageDecimal = TotalAge / NumberOfUsers

        output = "Total Number of Users: " & NumberOfUsers.ToString() & vbCrLf &
            "Average Age of Users: " & averageDecimal.ToString()


        MessageBox.Show(output, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Close()
    End Sub

    Private Sub FirstNameListBox_Click(sender As Object, e As EventArgs) Handles FirstNameListBox.Click
        'activate remove button
        RemoveButton.Enabled = True

    End Sub


    Private Sub RemoveButton_Click(sender As Object, e As EventArgs) Handles RemoveButton.Click
        'check for item selected
        If FirstNameListBox.SelectedIndex <> -1 Then
            LastNameListBox.Items.RemoveAt(FirstNameListBox.SelectedIndex)
            FirstNameListBox.Items.RemoveAt(FirstNameListBox.SelectedIndex)
            AgeListBox.Items.RemoveAt(FirstNameListBox.SelectedIndex)
        End If



        RemoveButton.Enabled = False
    End Sub
End Class

4 Ответов

Рейтинг:
2

Wendelius

Не уверен, правильно ли я понял ваш вопрос, но ... ..

Почему бы не создать класс, который содержит все свойства для данного пользователя. Эти свойства будут включать в себя
- имя
- возраст
- идентификатор пользователя ...

Это, вероятно, упростило бы ситуацию, поскольку вам не нужно обрабатывать отдельные элементы данных для разных пользователей отдельно.

Другое дело, что идентификатор инкрементный. Опять же, имя пользователя будет одним из свойств, и когда вы добавляете нового пользователя, вы можете использовать простой цикл, чтобы найти максимальный идентификатор для тех же имен пользователей. На основе этой информации вы можете назначить следующий идентификатор новому пользователю.

Для получения дополнительной информации о пользовательских классах см. Как создавать классы и объекты в Visual Basic .NET или в Visual Basic 2005[^]


Рейтинг:
2

Maciej Los

В дополнение к решению №1 по Венделиус[^]... вы должны использовать Список(Из Т)[^] для управления пользователями. Например:

Прежде всего, объявление класса MyUser:

Public Class MyUser
	Private sfullName As String = String.Empty
	Private sfirstName As String = String.Empty
	Private slastName As String = String.Empty
	Private slogin As String = String.Empty
	Private iage As Byte = 0

	Public Sub New(_fullName As String, _age As Integer)
		sfullName = _fullName
		iage = _age
		FullNameToParts()
	End Sub
	
	Public Property FullName As String
		Get
			Return sfullName
			FullNameToParts()
		End Get
		Set (value As String)
			sfullname = value
		End Set
	End Property

	Private Sub FullNameToParts()
		Dim sParts As String() = sfullName.Split(New String(){", "}, StringSplitOptions.RemoveEmptyEntries) 
		If sParts.Length < 2 Then
			Throw New Exception("A user's full name have to contain ', ' (comma and space)!")
		Else
			sfirstName = sParts(1)
			slastName = sParts(0)
			slogin = String.Concat(sfirstName.ToLower().Substring(0,1), slastName.ToLower())
		End If
	End Sub

	Public Property Age As Byte
		Get
			Return iage
		End Get
		Set (value As Byte)
			iage = value
		End Set
	End Property
	
	Public ReadOnly Property Login As String
		Get
			Return slogin
		End Get
	End Property
End Class


Использование:

Sub Main
	
	Dim users As List(Of MyUser)  = New List(Of MyUser)
	users.Add(New MyUser("Doe, John", 22))
	users.Add(New MyUser("Doe, Joe", 19))
	
	Console.WriteLine("Count of users: {0}", users.Count)
	For Each mu As MyUser In users
		Console.WriteLine("{0} (login: {1})", mu.FullName , mu.Login)
	Next
	Console.WriteLine("Average age: {0}", users.Count)
	Console.WriteLine("Total age: {0}", users.Sum(Function(x) x.Age))
	
End Sub


Выход:
Count of users: 2
Doe, John (login: jdoe)
Doe, Joe (login: jdoe)
Average age: 2
Total age: 41


Это для начала.


Рейтинг:
2

Richard Deeming

Удаление элемента из списка FirstNameListBox изменит его SelectedIndex Вы должны сохранить выбранный индекс в переменной и использовать его для удаления элементов:

Dim index As Integer = FirstNameListBox.SelectedIndex
If index <> -1 Then
    LastNameListBox.Items.RemoveAt(index)
    FirstNameListBox.Items.RemoveAt(index)
    AgeListBox.Items.RemoveAt(index)
End If


Рейтинг:
2

Member 13791516

Спасибо за идеи, я определенно могу работать с этим.


Maciej Los

Это не ответ. Пожалуйста, удалите его, чтобы избежать голосования вниз.
Чтобы оставить комментарий, используйте виджет "есть вопрос или комментарий" под решением.