Permalänk
Medlem

Skapa en butik shop

Hej,har fått i uppgift att skapa en simpel butik shop där användaren ska kunna skapa en användare,logga in med förbestämda user och password,lägga till produkter och se kundvagnen.Jag har kunnat få till det mesta men kan inte köra programmet då jag inte har kunnat listat ut denna kod delen.Jag behöver lite tips kring hur jag ska skapa en en kund klass som innehåller namn och lösenord för användaren,en lista av alla produkter som finns och i en separat klass vill jag få till en lista för alla produkter som kunden har valt. Tack i förhand.

Här är github länken till det jag har gjort än så länge: https://github.com/SwiftBinaryCode/Labb-2-del-2

/*
public class Customer
{
public string Name { get; private set; }

private string Password { get; set }

private List<Product> _cart;
public List<Product> Cart { get { return _cart; } }

public Kund(string name, string password)
{
this.Name = name;
this.Password = password;
this._cart = new List<Product>();
}
}
*/

Permalänk
Medlem
Skrivet av Will Sheza C:

Hej,har fått i uppgift att skapa en simpel butik shop där användaren ska kunna skapa en användare,logga in med förbestämda user och password,lägga till produkter och se kundvagnen.Jag har kunnat få till det mesta men kan inte köra programmet då jag inte har kunnat listat ut denna kod delen.Jag behöver lite tips kring hur jag ska skapa en en kund klass som innehåller namn och lösenord för användaren,en lista av alla produkter som finns och i en separat klass vill jag få till en lista för alla produkter som kunden har valt. Tack i förhand.

Här är github länken till det jag har gjort än så länge: https://github.com/SwiftBinaryCode/Labb-2-del-2

/*
public class Customer
{
public string Name { get; private set; }

private string Password { get; set }

private List<Product> _cart;
public List<Product> Cart { get { return _cart; } }

public Kund(string name, string password)
{
this.Name = name;
this.Password = password;
this._cart = new List<Product>();
}
}
*/

Snälla börja använd [code][/code]-taggar runt koden när du postar här.

I övrigt så saknar du ett ; i din Password property, vilket Visual Studio garanterat berättar för dig.

Permalänk
Medlem
Skrivet av Will Sheza C:

Hej,har fått i uppgift att skapa en simpel butik shop där användaren ska kunna skapa en användare,logga in med förbestämda user och password,lägga till produkter och se kundvagnen.Jag har kunnat få till det mesta men kan inte köra programmet då jag inte har kunnat listat ut denna kod delen.Jag behöver lite tips kring hur jag ska skapa en en kund klass som innehåller namn och lösenord för användaren,en lista av alla produkter som finns och i en separat klass vill jag få till en lista för alla produkter som kunden har valt. Tack i förhand.

Här är github länken till det jag har gjort än så länge: https://github.com/SwiftBinaryCode/Labb-2-del-2

Om jag bara börjar någonstans.

Du har metoden RegisterCustomer() där man kan registrera en användare. Användaren lagrar du däremot i en lokalt skapad lista vilket betyder att användaren försvinner så fort metoden har körts klart. Du måste lagra användare i en instansvariabel. Någonstans måste du ha en lista med registrerade användare, tillgängliga produkter, etc.

Permalänk
Medlem

public void Add_Product() { int choice = 0; choice = int.Parse(Console.ReadLine()); do { Console.WriteLine("Please choose one of the following products"); Console.WriteLine("1.Apple", 15); Console.WriteLine("2.Banana", 25); Console.WriteLine("3.Egg", 30); var customersProducts = new List<Products>();//detta är kundvagnen switch (choice) { case 1: Console.WriteLine("An Apple has been added"); customersProducts.Add(new Products("Apple", 15)); break; case 2: Console.WriteLine("A banana has been added"); customersProducts.Add(new Products("Banana", 25)); break; case 3: Console.WriteLine("An Egg has been added"); customersProducts.Add(new Products("Egg", 30)); break; default: Console.WriteLine("Sorry invalid choice please choice another product"); break; } } while (choice != 0); }

Eftersom koden som hanterar användarinput ligger utanför loopen så kommer användaren bara kunna välja en gång, efter det så fastnar den i en oändlig loop ifall input inte är 0. Sedan kommer även kundvagnen tömmas vid varje iteration, då du skapar en ny lista varje gång användaren gör ett val.

Permalänk
Medlem

Hej har kommit en bit längre men det jag inte får till är följande:
-Kunden informeras inte om användaren redan finns i metoden RegisterNewCustomer,det vill säga om man har skapat en ny kund.Loggar in med den kunden-loggar ut och sedan vill logga in igen.
-Kan inte heller få till att calctotal metoden från customer klass anropas för att kunna skriva ut det som ska skrivas ut i print customer crate finns kommentarer som exempel hur den ska skrivas ut.

tack för hjälpen

Ny github länk:https://github.com/SwiftBinaryCode/Labb-2-FInal

Permalänk
Medlem
Skrivet av Will Sheza C:

Hej har kommit en bit längre men det jag inte får till är följande:
-Kunden informeras inte om användaren redan finns i metoden RegisterNewCustomer,det vill säga om man har skapat en ny kund.Loggar in med den kunden-loggar ut och sedan vill logga in igen.

Sätt en breakpoint och använd debuggern och stega igenom metoden så kommer du nog se vad som är fel.

Hint: Vad gör den efter att den hittat en användare med samma namn?

Citat:

-Kan inte heller få till att calctotal metoden från customer klass anropas för att kunna skriva ut det som ska skrivas ut i print customer crate finns kommentarer som exempel hur den ska skrivas ut.

tack för hjälpen

Ny github länk:https://github.com/SwiftBinaryCode/Labb-2-FInal

public double CalcTotal(List<Product> _cart) tar en lista som argument och returnerar en summa, och kunden har en kundkorg som är en lista som property (Cart). Vad händer om du skickar in den listan?

Permalänk
Medlem
Skrivet av BrutalSwede:

Sätt en breakpoint och använd debuggern och stega igenom metoden så kommer du nog se vad som är fel.

Hint: Vad gör den efter att den hittat en användare med samma namn?

public double CalcTotal(List<Product> _cart) tar en lista som argument och returnerar en summa, och kunden har en kundkorg som är en lista som property (Cart). Vad händer om du skickar in den listan?

Okey tack stega igenom och såg att den jämförde name med knatte i registernewcustomer inte det skapade användarnamnet som var inloggat innan.Hur ska jag tänka så att det blir rätt i if satsen för att ActiveCustomer blir nullad när man loggar ut.
Förstår inte riktigt vart du vill att jag ska skicka in listan?

Permalänk
Medlem
Skrivet av Will Sheza C:

Okey tack stega igenom och såg att den jämförde name med knatte i registernewcustomer inte det skapade användarnamnet som var inloggat innan.Förstår inte riktigt vart du vill att jag ska skicka in listan?

I PrintCustomerCrate() så loopar du igenom den nuvarande kundens kundvagn (Cart).

Vad händer ifall du skickar in denna listan till CalcTotal()?

Permalänk
Medlem
Skrivet av BrutalSwede:

I PrintCustomerCrate() så loopar du igenom den nuvarande kundens kundvagn (Cart).

Vad händer ifall du skickar in denna listan till CalcTotal()?

Det går inte att skicka i den listan till calctotal metoden vad jag har testat.ser inte hur det skulle fungera

Permalänk
Medlem
Skrivet av Will Sheza C:

Det går inte att skicka i den listan till calctotal metoden vad jag har testat.ser inte hur det skulle fungera

Vad har du testat?

Permalänk
Medlem
Skrivet av Will Sheza C:

Det går inte att skicka i den listan till calctotal metoden vad jag har testat.ser inte hur det skulle fungera

Om du fokuserar på Customer-klassen och tar en liten funderare på hur metoden CalcTotal() kan komma åt en kunds Cart så tror jag nog att du kan lösa det.

Permalänk
Medlem
Skrivet av Will Sheza C:

Har testat detta i min print customer crate metoden men kommer då inte åt total price eller priset per produkt
foreach (var product in ActiveCustomer.Cart)
{
if (ActiveCustomer.Cart != null)
{

Console.WriteLine($"{ActiveCustomer.Cart.Count}, {product},{Customer.CalcTotal(product.Price)}");
Console.WriteLine($"the sum of all your products is: {total_price} ");
}
}

total_price existerar inte utanför metoden CalcTotal. CalcTotal tar dessutom en lista, och product.Price är en double.

Som 0wing skrev ovan, fundera på om du ens behöver skicka någonting till CalcTotal, då både metoden och kundvagnen finns på samma Customer-objekt, så borde du kunna komma åt listan och räkna ut totalen.

Permalänk
Medlem

Hej har kommit lite längre men har fastnat nu när jag inte kan skriva ut hur många av just den produkten har blivit tillagda i kundkorgen och summan av dem. jag vill at det ska se ut så här om man trycker på skriv ut kundvagn.

:Product name: Banana,Price per Banana 25kr , 4 bananas in cart and the sum of the bananas is 100kr

denna metoden finns i klassen produkt:
public string ToString()
{

//"banana", 25,4 bananas in total ,100kr,
//Product name: Banana,Price per Banana 25kr , 4 bananas in cart and the sum of the bananas is 100kr
return $"Product Name: {Name} Price per product: {Price} Amount of {Name}/s : SumOftheseproducts: ";

}

foreach (var item in ActiveCustomer.Cart)

{

Console.WriteLine($"{item.ToString()}");
}

var total = ActiveCustomer.CalcTotal();
Console.WriteLine($"the sum of all your products is: {total} ");

Permalänk
Medlem

Hej,har nu problem ToString(), den ska skriva ut Namn, lösenord och kundvagnen på ett snyggt sätt.

får ut namn och lösenord men inte kundvagnen,detta är koden.
return (this.Name.ToString() + this.Password.ToString() + this._cart.ToString());

Nya github länk:https:https://github.com/SwiftBinaryCode/Labb-2-FInal/tree/master/Labb%202%20FInal

Permalänk
Medlem
Skrivet av Will Sheza C:

Hej,har nu problem ToString(), den ska skriva ut Namn, lösenord och kundvagnen på ett snyggt sätt.

får ut namn och lösenord men inte kundvagnen,detta är koden.
return (this.Name.ToString() + this.Password.ToString() + this._cart.ToString());

Nya github länk:https:https://github.com/SwiftBinaryCode/Labb-2-FInal/tree/master/Labb%202%20FInal

Password och Name är redan strängar, så det är bara överflödigt att anropa deras toString().

För listan måste du iterera över den och konkatenera varje element.

Permalänk
Medlem
Skrivet av noMad17:

Password och Name är redan strängar, så det är bara överflödigt att anropa deras toString().

För listan måste du iterera över den och konkatenera varje element.

Okey har testat detta men det fungerar inte heller:
return Name + Password + string.Join(Environment.NewLine, _cart);

ska jag skapa någon form av loop eller

Permalänk
Medlem
Skrivet av Will Sheza C:

Okey har testat detta men det fungerar inte heller:
return Name + Password + string.Join(Environment.NewLine, _cart);

Tips: Ta för vana att alltid säga exakt vad som händer istället för ”det fungerar inte”. Får du felmeddelanden, posta dem så kan folk hjälpa dig med hur du ska läsa dem.

Permalänk
Medlem
Skrivet av lydell:

Tips: Ta för vana att alltid säga exakt vad som händer istället för ”det fungerar inte”. Får du felmeddelanden, posta dem så kan folk hjälpa dig med hur du ska läsa dem.

Hej ,bra tips
får ut detta i terminalen Knatte, 123 ,Labb_2_FInal.Product.Efter 123 ska kundvagnen skrivas ut.

Detta finns i uppgifts beskrivningen.
I klassen Kund skall det finnas en ToString() som skriver ut Namn, lösenord och kundvagnen på ett snyggt sätt.

Permalänk
Medlem

Nästa tips: Använd [code][/code]-taggar även för utskrift i terminalen. Jag behövde läsa din kommentar många gånger innan jag fattade vad som var utskrift och vad som var ditt meddelande. Det här hade varit bättre:

Skrivet av Will Sheza C:

får ut detta i terminalen:

Knatte, 123 ,Labb_2_FInal.Product

Efter 123 ska kundvagnen skrivas ut.

Blir mycket tydligare då exakt hur din text formateras och radbryts också.

Nu är jag inte någon mästare på C#, men såvitt jag förstår så om man ger en lista med objekt till string.Join så kommer .ToString() att anropas på varje objekt. Vilket är typ det enda rimliga som skulle hända. Hur skulle string.Join annars veta hur objektet ska göras till en sträng?

Nu kan vi ju inte se exakt vilken kod du körde när du fick utskriften som du postade. Men i ditt GitHub-repo verkar ToString vara utkommenterat: https://github.com/SwiftBinaryCode/Labb-2-FInal/blob/3bbfcc435c5cf57916f7361cb1c7468d532d3ad3/Labb%202%20FInal/Product.cs#L21-L24

Default-ToString printar bara klassens namn tror jag. Så det kan vara vad som hände när du fick utskriften du postade.

Här är ett bra tips för att debugga när du inte får något felmeddelande men fel output: Ifrågasätt alla antaganden du gör.

Till exempel: ”Jag läser i dokumentationen att string.Join anropar .ToString() på objekt. Min lista innehåller Product och min Product-klass har en ToString-metod, så det borde ha funkat!” Nej! ”min Product-klass har en ToString-metod” är ett antagande som behöver kontrolleras. Gå till Product-klassen och kolla. Finns en ToString-metod? (I det här fallet: Nej, den är utkommenterad). Är ToString rättstavat? Kommer man någonsin in i ToString (testa med debuggern)?

Ett annat tips är att göra en ny minimal klass med ToString och anropa string.Join med en hårdkodad lista direkt när programmet startas och printa resultatet direkt. Då slipper du trycka dig igenom hela ditt program bara för att komma till string.Join och se om det funkar. När du fått ordning på den hårdkodade listan har du förmodligen förstått hur det fungerar och kan fixa den riktiga koden.

Permalänk
Medlem

Har fixat min to string,och håller på med streamreader.Vill att när användaren registrerar en ny användare ska det sparas i en textfil så att på datorn.Sen när dem loggar ut och vill logga in igen ska användaren finnas sparad i listan av kunder.Har kommit en bit på vägen men vet inte riktigt hur jag ska ta mig vidare.

tack william

Github länk:https://github.com/SwiftBinaryCode/Labb-2-FInal

Permalänk
Medlem
Skrivet av Will Sheza C:

Har fixat min to string,och håller på med streamreader.Vill att när användaren registrerar en ny användare ska det sparas i en textfil så att på datorn.Sen när dem loggar ut och vill logga in igen ska användaren finnas sparad i listan av kunder.Har kommit en bit på vägen men vet inte riktigt hur jag ska ta mig vidare.

tack william

Github länk:https://github.com/SwiftBinaryCode/Labb-2-FInal

I vanlig ordning är det bra att berätta mer specifikt vad du har problem med.

Permalänk
Medlem
Skrivet av noMad17:

I vanlig ordning är det bra att berätta mer specifikt vad du har problem med.

Har problem med att få in den den registrerade kunden som en del av streamreadern så att den kunden s användarnamn och lösenord sparas i textfilen.