Here's my problem...
I was given an assignment to write a very simple ATM interface that will check for a user's PIN entry against an XML file.
I am having a lot of difficulty with using the collection (retrieved from XML and put into a: List(Of )) to get the user's PIN from a text box and compare it to 1 of 5 accounts found within my xml file.
Here's what I have so far:
An account class
Public Class Account
Private m_AccountNumber As String
Private m_AccountFirstName As String
Private m_AccountLastName As String
Private m_PIN As String
Private m_AccountBalance As Decimal
Public Sub New()
End Sub
Public Property AccountNumber() As String
Get
Return m_AccountNumber
End Get
Set(ByVal value As String)
m_AccountNumber = value
End Set
End Property
Public Property AccountFirstName() As String
Get
Return m_AccountFirstName
End Get
Set(ByVal value As String)
m_AccountFirstName = value
End Set
End Property
Public Property AccountLastName() As String
Get
Return m_AccountLastName
End Get
Set(ByVal value As String)
m_AccountLastName = value
End Set
End Property
Public Property PIN() As String
Get
Return m_PIN
End Get
Set(ByVal value As String)
m_PIN = value
End Set
End Property
Public Property AccountBalance() As Decimal
Get
Return m_AccountBalance
End Get
Set(ByVal value As Decimal)
m_AccountBalance = value
End Set
End Property
'I just included this to see if the XML data was being read correctly and it's posted to a listbox
Public Function DisplayText(ByVal sep As String) As String
Dim text As String = AccountFirstName & " " & PIN & " " & AccountNumber & " " & AccountBalance
Return text
End Function
End Class
>>then I have my login form code:
Public Class frmLogin
'not sure if all this is needed
Public Account As Account
Dim accounts As New List(Of Account)
Dim cardNumber As String
Private Sub frmLogin_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
accounts = AccountDB.ReadAccountData()
Me.FillListBoxWithAccountData()
End Sub
'procedure just used to see if the XML data is being read correctly
Private Sub FillListBoxWithAccountData()
For Each a As Account In accounts
ListBox1.Items.Add(a.DisplayText(" "))
Next
End Sub
Private Sub selectCard_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnFrank.Click, btnJoe.Click, btnLasky.Click, btnGiada.Click, btnSuzie.Click
Dim cardNumber As String
'here the user clicks on a button to get account data -this simulates the user
'sliding an atm card in the machine. The account number is automatically populated for them.
Select Case True
Case sender Is btnSuzie
txtAccountNumber.Text = "0987"
Case sender Is btnBob
txtAccountNumber.Text = "1234"
Case sender Is btnJoe
txtAccountNumber.Text = "1323"
Case sender Is btnRich
txtAccountNumber.Text = "2222"
Case sender Is btnEllen
txtAccountNumber.Text = "5432"
End Select
cardNumber = txtAccountNumber.Text
CardsNotVisible() 'prohibits user from selecting another atm card
txtPIN.Select()
End Sub
Private Function IsValidLogin() As Boolean
Return Validation.IsPresentMasked(txtPIN) AndAlso _
Validation.IsCorrectLengthMasked(txtPIN, 4)
End Function
Private Sub CardsNotVisible()
btnSuzie.Visible = False
btnLasky.Visible = False
btnJoe.Visible = False
btnFrank.Visible = False
btnGiada.Visible = False
End Sub
Private Sub CardsVisible()
btnSuzie.Visible = True
btnLasky.Visible = True
btnJoe.Visible = True
btnFrank.Visible = True
btnGiada.Visible = True
End Sub
'I have tried everything I can think of here -this is my latest mess
Private Sub btnEnter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnter.Click
If Account.PIN = txtPIN.Text Then
MessageBox.Show("Login Successful!", "Login Attempt")
'launch banking option menu
Else
MessageBox.Show("Login Incorrect" & vbCrLf & "Please enter your correct PIN", "Login Attempt")
End If
End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
End Class
>>here's my XML IO class, which seems to be working just fine:
Imports System.Xml
Public Class AccountDB
Private Const Path As String = "..\..\Accounts.xml"
Public Shared Function ReadAccountData() As List(Of Account)
Dim accounts As New List(Of Account)
Dim settings As New XmlReaderSettings
settings.IgnoreWhitespace = True
settings.IgnoreComments = True
Dim xmlIn As XmlReader = XmlReader.Create(Path, settings)
If xmlIn.ReadToDescendant("Account") Then
Do
Dim account As New Account
account.AccountNumber = xmlIn("AccountNumber")
xmlIn.ReadStartElement("Account")
account.PIN = xmlIn.ReadElementContentAsString
account.AccountFirstName = xmlIn.ReadElementContentAsString
account.AccountLastName = xmlIn.ReadElementContentAsString
account.AccountBalance = xmlIn.ReadElementContentAsDecimal
accounts.Add(account) 'populate the accounts array
Loop While xmlIn.ReadToNextSibling("Account")
End If
xmlIn.Close()
Return accounts
End Function
Public Shared Sub SaveAccountData(ByVal accounts As List(Of Account))
Dim settings As New XmlWriterSettings
settings.Indent = True
settings.IndentChars = " "
Dim xmlOut As XmlWriter = XmlWriter.Create(Path, settings)
xmlOut.WriteStartDocument()
xmlOut.WriteStartElement("Accounts")
For Each account As Account In accounts
xmlOut.WriteStartElement("Account")
xmlOut.WriteAttributeString("AccountNumber", account.AccountNumber.ToString)
xmlOut.WriteElementString("PIN", account.PIN.ToString)
xmlOut.WriteElementString("AccountFirstName", account.AccountFirstName)
xmlOut.WriteElementString("AccountLastName", account.AccountLastName)
xmlOut.WriteElementString("AccountBalance", account.AccountBalance.ToString)
xmlOut.WriteEndElement()
Next
xmlOut.WriteEndElement()
xmlOut.Close()
End Sub
>>and finally, here's my XML file:
<?xml version="1.0" encoding="utf-8" ?>
<Accounts>
<Account AccountNumber ="0987">
<PIN>1111</PIN>
<AccountFirstName>Suzie</AccountFirstName>
<AccountLastName>Smith</AccountLastName>
<AccountBalance>10001.17</AccountBalance>
</Account>
<Account AccountNumber ="1234">
<PIN>2222</PIN>
<AccountFirstName>Bob</AccountFirstName>
<AccountLastName>Smith</AccountLastName>
<AccountBalance>8000</AccountBalance>
</Account>
<Account AccountNumber ="1323">
<PIN>1111</PIN>
<AccountFirstName>Joe</AccountFirstName>
<AccountLastName>Smith</AccountLastName>
<AccountBalance>4876.94</AccountBalance>
</Account>
<Account AccountNumber ="2222">
<PIN>1111</PIN>
<AccountFirstName>Rich</AccountFirstName>
<AccountLastName>Smith</AccountLastName>
<AccountBalance>600</AccountBalance>
</Account>
<Account AccountNumber ="5432">
<PIN>1111</PIN>
<AccountFirstName>Ellen</AccountFirstName>
<AccountLastName>Smith</AccountLastName>
<AccountBalance>5581.23</AccountBalance>
</Account>
</Accounts>
I guess my major problem is finding out how to use the collection to find the correct account, compare the PINs to validate a login and from there I can go about launching another form...I need some serious help here...it may be something simple -but I'm a newbie and the books I've referenced are just not helping me with this little problem.
Thanks in advance!
Admin Edit: Please use code tags when posting your code. Code tags are used like so =>
Thanks,
PsychoCoder

New Topic/Question
Reply




MultiQuote



|