Pincode en klassen

Status
Niet open voor verdere reacties.

rambomambo

Gebruiker
Lid geworden
9 dec 2012
Berichten
163
Ik zou graag een simulatie willen doen van een bankautomaat.
Nu moet ik een pincode bijhouden maar als ik die 3x verkeerd ingevuld heb moet hij geblokkeerd zijn. Heb al vanalles geprobeerd maar dit lukt echt niet.

Ik heb ook klassen geprobeerd eerst met 2textboxen en dan wou ik in de klasse de formule plaatsen om 2getallen op te tellen. Maar ik weet echt niet hoe ik aan klassen moet beginnen
weet er iemand hoe ik deze 2programma's zou kunnen maken ?
 
Ik heb even snel een voorbeeldje in elkaar gezet voordat ik moet gaan, je kunt een console app maken en dit daar in plakken om te testen. Het is snel in elkaar gezet dus kan beter, maar voor basis zou het wel moeten werken ;)


Code:
class Program
{
	static void Main(string[] args)
	{
		var atm = new AtmMachine();
		var companyCard = new Card("Company Account", "1234");

		try
		{
			atm.InsertCard(companyCard);
			Console.WriteLine("Card '{0}' has been inserted, please enter PIN", atm.CurrentCardAccountName);

			while (true)
			{
				var input = Console.ReadLine(); //validate input etc...

				var validPin = atm.EnterPin(input);

				if (validPin)
				{
					Console.WriteLine("Pin correct, start withdraw sequence");
					//rest of the withdraw code here
					break;
				}

				if (atm.MaxAttemptsReached)
				{
					Console.WriteLine("Max attempts reached, card blocked. Contact bank.");
					atm.EjectCurrentCard();
					break;
				}

				Console.WriteLine("PIN invalid, please try again");
			}

			atm.EjectCurrentCard();
		}
		catch (CardBlockedException ex)
		{
			Console.WriteLine(ex.Message);
			atm.EjectCurrentCard();
		}

		Console.ReadLine();
	}
}


public class AtmMachine
{
	private const int MaxAttempts = 3;

	private Card _currentCard;
	private int _attempts;

	public bool EnterPin(string pinCode)
	{
		if (pinCode == _currentCard.Pin)
			return true;

		_attempts++;

		if (MaxAttemptsReached)
			BlockCurrentCard();

		return false;
	}

	public bool MaxAttemptsReached
	{
		get { return _attempts >= MaxAttempts; }
	}

	public string CurrentCardAccountName
	{
		get { return _currentCard.Account; }
	}

	public void InsertCard(Card card)
	{
		if (card.IsBlocked)
			throw new CardBlockedException();

		_currentCard = card;
		_attempts = 0;
	}

	public void EjectCurrentCard()
	{
		_currentCard = null;
	}

	public void BlockCurrentCard()
	{
		_currentCard.Block();
	}
}

public class CardBlockedException : Exception
{
	public CardBlockedException()
		: this("The card has been blocked")
	{
	}

	public CardBlockedException(string message)
		: base(message)
	{

	}
}

public class Card
{
	private readonly string _account;
	private readonly string _pin;
	private bool _isBlocked;

	public Card(string account, string pin)
	{
		_account = account;
		_pin = pin;
	}

	public bool IsBlocked
	{
		get { return _isBlocked; }
	}

	public string Pin
	{
		get { return _pin; }
	}

	public string Account
	{
		get { return _account; }
	}

	public void Block()
	{
		_isBlocked = true;
	}
}

(later zou ik dit nog wel in een WinForms kunnen maken als je er niet uit komt, of in de tussentijd iemand anders misschien :P)
 
Als je deze nog in Forms of wpf maakt zou het echt geweldig zijn.
Ik ben nu bezig om hem te vertalen van console naar WPF
bepaalde delen lukken en bepaalde delen niet.
 
Laatst bewerkt door een moderator:
Maar wat lukt er dan niet?
Ik dacht dat de klassen maken het probleem was?
 
ja ik zou 2 aparte klassen willen bij maken om zo in me mainwindow een betere structuur te hebben.
Het enige dat nog niet lukt in wpf of forms is als ik 3x een foute code ingeef dat hij de juiste pincode ook weigert.

dus 1 klasse voor mijn pincode gegevens
en 1 klasse voor geld te storten en af te halen.
Maar ja als ik weet hoe ik de 1ste klasse moet toepassen zal de 2de ook wel geen probleem zijn denk ik
 
Laatst bewerkt door een moderator:
Hiervoor kun je (zoals in het voorbeeld) na x.EnterPin indien deze 'false' is kijken of er 3 pogingen zijn gedaan. Zo ja, block/eject/swallow card/activate & record atm camera ;) etc.
Doet hij het in het voorbeeld niet goed? (heb het maar 2x snel getest vanmorgen)

Kan eventueel later een forms/wpf maken, of als je geluk hebt heeft JoZ1 tijd en zin om wat in elkaar te zetten :P
 
@rambomambo Onnodige quotes verwijderd. Wanneer je direct reageert op een reactie is het niet nodig om dat bericht te quoten. Onnodig quoten heet dat, hetgeen niet gewenst is.
 
of als je geluk hebt heeft JoZ1 tijd en zin om wat in elkaar te zetten :P
Je hebt geluk :P


TZpRe8M.png

Download.



Ik heb gebruik gemaakt van Bloodshed's klassen (waarvoor complimenten), waaraan ik een paar dingen heb toegevoegd.
Succes ermee. :)
 
Ah, mooi. Wou net iets in elkaar zetten :P

Het was ook maar in nog geen half uurtje in elkaar is gezet, dus als ik het nu zou bekijken zou ik ook een aantal aanpassingen maken :P (werkend voorbeeld stond even voorop)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan