2 svar
409 visningar
PotatisTyra 11
Postad: 30 maj 2021 11:45

Hur man sätter värde på variabler i metoder som används i fler metoder

Uppgiften är att vi ska göra en slags bankomat. Jag är rätt nöjd med programmet och tror det var såhär min lärare menade. Metoden Uttag och samt BytaPinkod fungerar inte som jag vill. Jag tror det kan ha att göra med att variabeln saldo och pinkod inte sparar ner det värdet som sätts tidigare i en annan metod. Hur kan jag lösa det? 

Om det finns något annat ställe där ni ser att jag kan förbättra tar jag gärna feedback.

 

Programmet:

 

using System;

namespace Bankomat
{
class Variabler
{
public double saldo { get; set; } //variabel för saldo
public int pin { get; set; } //variabel för pin
public int val { get; set; } //variabel för val
public double uttag { get; set; } //variabel för uttag
public int gammalPin { get; set; } //variabel för gammalt pin

static void Start() //metod vid namn Start
{
Variabler variabel = new Variabler(); //kallar klassen Variabler
Console.Write("Vänligen ange användare : Användare A (xxxx), Användare B (yyyy), Användare C (zzzz)"); //Låter användare välja användare (för att få mer likt en riktig bankomat)
Console.ReadLine(); //användaren får svara
Console.WriteLine("Vänligen ange pinkod"); //ber användaren ange sin pinkod
variabel.pin = Convert.ToInt32(Console.ReadLine()); //omvanldar och sparar ner koden i variabel
Console.WriteLine("**********Välkommen till TKB service**********"); //Välkommnar användaren
Console.WriteLine("Du är nu inloggad"); //berättar att inloggningen medges
}
static void VisaSaldo() //metod vid namn VisaSaldo
{
Variabler variabel = new Variabler(); //kallar klassen Variabler
Console.WriteLine("Saldo : " + variabel.saldo); //skriver ut saldo
}
static void Insättning() //metod vid namn Insättning
{
Variabler variabel = new Variabler(); //kallar klassen Variabler
Console.Write("Insättning : "); //frågar användaren vilken summa den vill sätta in
variabel.saldo += Convert.ToDouble(Console.ReadLine()); //sparar ner svaret i en double
Console.WriteLine("Saldo : " + variabel.saldo); //skriver ut saldo
}
static void Uttag() //metod vid namn Uttag
{

Variabler variabel = new Variabler(); //kallar klassen Variabler
Console.Write("Uttag : "); //frågar användaren efter summar att ta ut
variabel.uttag = Convert.ToDouble(Console.ReadLine()); //sparar svaret i variabel.uttag

if (variabel.uttag < variabel.saldo)
{
Console.WriteLine("Medges ej. Försök igen");
}
else if (variabel.uttag == variabel.saldo)
{
Console.WriteLine("Varning! Saldo : 0kr");
}
else
{
variabel.saldo = variabel.saldo - variabel.uttag;
Console.WriteLine("saldo : " + variabel.saldo);
}
}
static void Omvandla() //metod vid namn Omvanlda
{
Variabler variabel = new Variabler(); //kallar klassen Variabler
string[] valutaMeny = new string[] { "Dollar (D)", "Euro (E)", "Pund (P)" }; //meny för vaultorna man kan omvandla till
for (int i = 0; i < valutaMeny.Length; i++) //for-loop från 0 till längden av valutaMenu.length
{
Console.WriteLine(valutaMeny[i]); //skriver ut menyn
}
Console.Write("Ange valuta du vill omvanlda från : "); //frågar användare om vilken valuta den vill omvanlda från
string val2 = Console.ReadLine(); //sparar ner svar i variabeln val2

if (val2 == "D") //om användaren skriver "D"
{
Console.Write("Mata in summa (US dollar) : "); //ber användaren mata in summan att omvanlda
double omvanlingSumma = Convert.ToDouble(Console.ReadLine()); //sparar ner svaret i en double
omvanlingSumma = omvanlingSumma * 8.32; //räknar ut summan i kronor
variabel.saldo = (double)(variabel.saldo + omvanlingSumma); //lägger ihop gammalt saldo med det nya
Console.WriteLine("Saldo : " + variabel.saldo + "kr"); //skriver ut nytt saldo
}
else if (val2== "E") //om användare skriver "E"
{
Console.Write("Mata in summa (Euro) : "); //ber användaren mata in summan att omvanlda
double omvanlingSumma = Convert.ToDouble(Console.ReadLine()); //sparar ner svaret i en double
omvanlingSumma = omvanlingSumma * 10.12;//räknar ut summan i kronor
variabel.saldo = (double)(variabel.saldo + omvanlingSumma); //lägger ihop gammalt saldo med det nya
Console.WriteLine("Saldo : " + variabel.saldo + "kr"); //skriver ut nytt saldo
}
else if (val2=="P") //om användare skriver "P"
{
Console.Write("Mata in summa (Pund) : "); //ber användaren mata in summan att omvanlda
double omvanlingSumma = Convert.ToDouble(Console.ReadLine()); //sparar ner svaret i en double
omvanlingSumma = omvanlingSumma * 11.72;//räknar ut summan i kronor
variabel.saldo = (double)(variabel.saldo + omvanlingSumma); //lägger ihop gammalt saldo med det nya
Console.WriteLine("Saldo : " + variabel.saldo + "kr"); //skriver ut nytt saldo
}
else //om inget av ovanstående stämmer
{
Console.WriteLine("Något gick fel, försök igen"); //skriver ut att något gick fel
}
}
static void BytaPinkod() //metod vid namn BytaPinkod
{
fortsätt:;
Variabler variabel = new Variabler(); //kallar klassen Variabler
Console.Write("Ange gammal pinkod : "); //ber användaren ange sin gamla pinkod
variabel.gammalPin = Convert.ToInt32(Console.ReadLine());
if (variabel.gammalPin == variabel.pin)
{
Console.Write("Ange ny pinkod : ");
variabel.pin = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Ny pinkod : " + variabel.pin);
}
else if (variabel.gammalPin != variabel.pin)
{
Console.WriteLine("Medges ej. Försök igen");
goto fortsätt;
}
}
static void Nodnummer() //metod vid namn Nodnummer
{
Console.WriteLine("Avlutar. Ringer 112..."); //skriver ut "Avslutar. Ringer 112..."
}
static void Main(string[] args) //main
{
Start(); //kallar metoden Start
bool Upprepa = true; //skapar bool vid namn Upprepa
while (Upprepa) //whileloop med vilkor Upprepa
{
Variabler variabel = new Variabler(); //kallar klassen Variabler
string[] alt = new string[] { "1. Se saldo", "2. Insättning", "3. Uttag", "4. Omvandla valuta", "5. Byt pinkod", "6. Nödnummer", "7. Avsluta" }; //meny för alla alternativ
for (int i = 0; i < alt.Length; i++) //for-loop från 0 till längden på menyn
{
Console.WriteLine(alt[i]); //skriver ut menyn
}
Console.Write("Ditt val : "); //
variabel.val = Convert.ToInt32(Console.ReadLine());

switch (variabel.val)
{
case 1:
VisaSaldo();
break;
case 2:
Insättning();
break;
case 3:
Uttag();
break;
case 4:
Omvandla();
break;
case 5:
BytaPinkod();
break;
case 6:
Console.ForegroundColor = ConsoleColor.Red;
Nodnummer();
Console.ResetColor(); //återställer färg
Upprepa = false;
break;
case 7:
Upprepa = false;
break;
}
}
}
}
}

Mega7853 211
Postad: 31 maj 2021 11:21

Din kod ser lite underlig ut. Inuti klassen Variabler har du metoder som skapar ett objekt av klassen Variabler. Detta objekt sparas ingenstans utan försvinner i slutet av metoden. Det är anledningen till att senare metoder inte ser de uppdaterade värdena.

 

Jag tror att det du egentligen vill göra är att använda this för att komma åt dina medlems-variabler (member variables) inuti metoderna. Då kommer deras värde att sparas i objektet och kunna användas av senare metoder.

 

Om du kallar klassen för Bankomat istället så blir det tydligare att klassen innehåller en bankomat, dess variabler och metoder och att du inte ska skapa en ny bankomat i varje metod.

Lindehaven 820 – Lärare
Postad: 31 maj 2021 23:31
PotatisTyra skrev:

Uppgiften är att vi ska göra en slags bankomat. Jag är rätt nöjd med programmet och tror det var såhär min lärare menade.

Lägg gärna med beskrivningen på den uppgift du fick av din lärare så att vi här på PA har en möjlighet att leda dig fram.

Mega7853 gav bra råd, följ dem.

Beroende på uppgiften så kan du behöva skapa flera klasser, t ex för Bank, Bankomat, Kund, Konto.

Skapa även en klass som innehåller metoden main() i vilken du kan skapa de objekt som behövs (banker, bankomater, kunder, konton).

Använd inte goto, det behövs aldrig och det förvånar mig att den instruktionen finns i C#.

Svara
Close