Permalänk
Medlem

C# Hjälp mig!!

Hej alla! Jag är väldigt ny på det här med programmering över huvud taget och går nu en C# grundkurs. Vi har fått i uppgift att slänga ihop ett program som sorterar säljare efter säljnivå. Inga problem så långt.

Nu är det så att när jag satt ihop den här uppgiften och skickat in så berättade läraren till min stora fasa att utdatan kommer i fel ordning.
Det som skrivs ut nu ser ut såhär:

Namn: Persnr: Distrikt: Antal:

Elin 8805137 Partille 95
Simon 8602257 V.Frölunda 99
Kalle 8601027 Mora 121
Berg 8405227 Göteborg 151
Natta 8905187 N.Hisingen 171
Anna 8902207 Mölndal 201

2 säljare har nått nivå 2: 50-99 artiklar.
3 säljare har nått nivå 3: 100-199 artiklar.
1 säljare har nått nivå 4: > 200 artiklar.

Och det är meningen att det ska se ut såhär:

Ex.
Namn Persnr Distrikt Antal
simon 450303899 Piteå 173
1 säljare har nått nivå 3: 100-199 artiklar

Musse Pigg 3502038964 Boden 202
Snobben 7805055673 Luleå 203
2 säljare har nått nivå 4: över 199 artiklar

Osv…

Jag är så sjukt trött på den här uppgiften och vill bara få klart skiten, men nu har jag mer eller mindre stirrat mig blind på koden så jag kommer ingenstans.
Skulle ni kunna hjälpa mig att sätta ihop skiten på rätt sätt lite fort, så jag kan lämna in!

Här är koden!

using System;
using System.IO;

namespace SorteringAvSäljare
{
public struct Saljare
{
public string namn;
public string persnr;
public string distrikt;
public int antal;
public string niva;
}

public class forsaljning
{
static Saljare[] saljare = new Saljare[6];
static void Main(string[] args)
{
for (int i = 0; i <= 5; i++) //Anger värde på i för varje sålänge i är lika med eller under 5+1
{
if (i == 0)
{
}
else //Om i är högre än 0, gäller nedanstående
{
Console.WriteLine();
}
Console.WriteLine("Säljare {0}:", ++i);
--i;
saljare[i] = ReadSaljare();
}
SortSaljare();
PrintSaljare();

Console.WriteLine();
Console.ReadLine();
}

static void SortSaljare() //Bubblesort för säljare
{
bool icke_sorterad = true;
int end = saljare.Length - 1;

while (icke_sorterad)
{
icke_sorterad = false;
for (int s = 0; s < end; s++)
{
if (saljare[s].antal > saljare[s + 1].antal)
{
Swap(saljare, s, s + 1);
icke_sorterad = true;
}
}
end--; //Slut på bubblesort
}
}

static void Swap(Saljare[] array, int a, int b)
{
Saljare q = array[a];
array[a] = array[b];
array[b] = q;
}

static void PrintSaljare()
{
StreamWriter forsaljning = new StreamWriter("Försäljning.txt", true); //Lagrar resultat i textfil genom streamwriter
Console.WriteLine("\nNamn:\tPersonnummer:\tDistrikt:\tAntal:");
forsaljning.WriteLine("\nNamn:\tPersonnummer:\tDistrikt:\tAntal:");

for (int i = 0; i <= 5; i++)
{
Console.WriteLine("\n" + saljare[i].namn + "\t" + saljare[i].persnr + "\t" + saljare[i].distrikt + "\t" + saljare[i].antal);
forsaljning.WriteLine("\n" + saljare[i].namn + "\t" + saljare[i].persnr + "\t" + saljare[i].distrikt + "\t" + saljare[i].antal);
}
string niva = "";
int nummer = 0;
foreach (Saljare u in saljare) //Anger tilldelning av u till säljare
{
if (niva != u.niva)
{
Console.WriteLine("\n{0}{1}\n", nummer, niva);
forsaljning.WriteLine("\n{0}{1}\n", nummer, niva);
nummer = 0;
niva = u.niva;
}
nummer++;

}
Console.WriteLine("\n{0}{1}\n", nummer, niva);
forsaljning.WriteLine("\n{0}{1}\n", nummer, niva);

forsaljning.Close(); //Avslut på lagring
}

static Saljare ReadSaljare()
{
Saljare u = new Saljare(); //Läser in info om säljare

Console.Write("Namn: ");
u.namn = Console.ReadLine();
Console.Write("Personnummer: ");
u.persnr = Console.ReadLine();
Console.Write("Distrikt: ");
u.distrikt = Console.ReadLine();
Console.Write("Antal sålda artiklar: ");
u.antal = int.Parse(Console.ReadLine());
u.niva = GetNiva(u);
return u;

}

static string GetNiva(Saljare u) //Hämtar nivå för säljare
{
if (u.antal < 50)
return " säljare har nått nivå 1: < 50 artiklar.";

if (u.antal >= 50 && u.antal < 100)
return " säljare har nått nivå 2: 50-99 artiklar.";

if (u.antal >= 100 && u.antal < 200)
return " säljare har nått nivå 3: 100-199 artiklar.";

return " säljare har nått nivå 4: > 200 artiklar.";
}
}
}

Dold text
Permalänk
Medlem
Skrivet av lodisch:

Hej alla! Jag är väldigt ny på det här med programmering över huvud taget och går nu en C# grundkurs. Vi har fått i uppgift att slänga ihop ett program som sorterar säljare efter säljnivå. Inga problem så långt.

Nu är det så att när jag satt ihop den här uppgiften och skickat in så berättade läraren till min stora fasa att utdatan kommer i fel ordning.
Det som skrivs ut nu ser ut såhär:

Namn: Persnr: Distrikt: Antal:

Elin 8805137 Partille 95
Simon 8602257 V.Frölunda 99
Kalle 8601027 Mora 121
Berg 8405227 Göteborg 151
Natta 8905187 N.Hisingen 171
Anna 8902207 Mölndal 201

2 säljare har nått nivå 2: 50-99 artiklar.
3 säljare har nått nivå 3: 100-199 artiklar.
1 säljare har nått nivå 4: > 200 artiklar.

Och det är meningen att det ska se ut såhär:

Ex.
Namn Persnr Distrikt Antal
simon 450303899 Piteå 173
1 säljare har nått nivå 3: 100-199 artiklar

Musse Pigg 3502038964 Boden 202
Snobben 7805055673 Luleå 203
2 säljare har nått nivå 4: över 199 artiklar

Osv…

Jag är så sjukt trött på den här uppgiften och vill bara få klart skiten, men nu har jag mer eller mindre stirrat mig blind på koden så jag kommer ingenstans.
Skulle ni kunna hjälpa mig att sätta ihop skiten på rätt sätt lite fort, så jag kan lämna in!

Här är koden!

using System;
using System.IO;

namespace SorteringAvSäljare
{
public struct Saljare
{
public string namn;
public string persnr;
public string distrikt;
public int antal;
public string niva;
}

public class forsaljning
{
static Saljare[] saljare = new Saljare[6];
static void Main(string[] args)
{
for (int i = 0; i <= 5; i++) //Anger värde på i för varje sålänge i är lika med eller under 5+1
{
if (i == 0)
{
}
else //Om i är högre än 0, gäller nedanstående
{
Console.WriteLine();
}
Console.WriteLine("Säljare {0}:", ++i);
--i;
saljare[i] = ReadSaljare();
}
SortSaljare();
PrintSaljare();

Console.WriteLine();
Console.ReadLine();
}

static void SortSaljare() //Bubblesort för säljare
{
bool icke_sorterad = true;
int end = saljare.Length - 1;

while (icke_sorterad)
{
icke_sorterad = false;
for (int s = 0; s < end; s++)
{
if (saljare[s].antal > saljare[s + 1].antal)
{
Swap(saljare, s, s + 1);
icke_sorterad = true;
}
}
end--; //Slut på bubblesort
}
}

static void Swap(Saljare[] array, int a, int b)
{
Saljare q = array[a];
array[a] = array[b];
array[b] = q;
}

static void PrintSaljare()
{
StreamWriter forsaljning = new StreamWriter("Försäljning.txt", true); //Lagrar resultat i textfil genom streamwriter
Console.WriteLine("\nNamn:\tPersonnummer:\tDistrikt:\tAntal:");
forsaljning.WriteLine("\nNamn:\tPersonnummer:\tDistrikt:\tAntal:");

for (int i = 0; i <= 5; i++)
{
Console.WriteLine("\n" + saljare[i].namn + "\t" + saljare[i].persnr + "\t" + saljare[i].distrikt + "\t" + saljare[i].antal);
forsaljning.WriteLine("\n" + saljare[i].namn + "\t" + saljare[i].persnr + "\t" + saljare[i].distrikt + "\t" + saljare[i].antal);
}
string niva = "";
int nummer = 0;
foreach (Saljare u in saljare) //Anger tilldelning av u till säljare
{
if (niva != u.niva)
{
Console.WriteLine("\n{0}{1}\n", nummer, niva);
forsaljning.WriteLine("\n{0}{1}\n", nummer, niva);
nummer = 0;
niva = u.niva;
}
nummer++;

}
Console.WriteLine("\n{0}{1}\n", nummer, niva);
forsaljning.WriteLine("\n{0}{1}\n", nummer, niva);

forsaljning.Close(); //Avslut på lagring
}

static Saljare ReadSaljare()
{
Saljare u = new Saljare(); //Läser in info om säljare

Console.Write("Namn: ");
u.namn = Console.ReadLine();
Console.Write("Personnummer: ");
u.persnr = Console.ReadLine();
Console.Write("Distrikt: ");
u.distrikt = Console.ReadLine();
Console.Write("Antal sålda artiklar: ");
u.antal = int.Parse(Console.ReadLine());
u.niva = GetNiva(u);
return u;

}

static string GetNiva(Saljare u) //Hämtar nivå för säljare
{
if (u.antal < 50)
return " säljare har nått nivå 1: < 50 artiklar.";

if (u.antal >= 50 && u.antal < 100)
return " säljare har nått nivå 2: 50-99 artiklar.";

if (u.antal >= 100 && u.antal < 200)
return " säljare har nått nivå 3: 100-199 artiklar.";

return " säljare har nått nivå 4: > 200 artiklar.";
}
}
}

Dold text

1. Gör så att egenskapen "nivå" på Säljare-objektet är ett heltal istället, inte en textsträng, som beskriver nivån.
2. Loopa alla nivåer
3. För varje nivå, loopa alla Säljare och skriv ut alla som har den nivån
4. När alla säljare för den nivån är utskriven kan du skriva ut nivåinformationen "x säljare har nått nivå y"
5. Klar.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Ok, jo det låter ju rimligt. Lite drygt att ändra på allt bara:P Haha.. Jag är så slut i huvut^^

Permalänk
Medlem

Du skulle inte kunna skriva ut hur jag ska ändra allt, med tanke på att det blir massor som jag måste göra om då det är mycket som går på just nivå som sträng??^^ Är som sagt totalt nybörjare, och har kämpat rätt länge för att få till den här koden^^

Permalänk
Medlem
Skrivet av lodisch:

Du skulle inte kunna skriva ut hur jag ska ändra allt, med tanke på att det blir massor som jag måste göra om då det är mycket som går på just nivå som sträng??^^ Är som sagt totalt nybörjare, och har kämpat rätt länge för att få till den här koden^^

Den här uppgiften har varit uppe en gång tidigare. Använd sökfunktionen

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Har kollat på det och nån annans kod hjälper inte mig just nu. Är på tok för less för att lyckas hitta exakt vad det är jag ska ändra:/

Vill mest bara få uppgiften överstökad så jag kan fortsätta med nästa kurs.

Permalänk
Medlem

Så du vill att vi ska hjälpa dig att fuska?

Permalänk
Skrivet av lodisch:

Har kollat på det och nån annans kod hjälper inte mig just nu. Är på tok för less för att lyckas hitta exakt vad det är jag ska ändra:/

Vill mest bara få uppgiften överstökad så jag kan fortsätta med nästa kurs.

om detta är din inställning så borde du inte programmera överhuvudtaget...

Visa signatur

Stationär: i7 4930k @4.4ghz, GTX 780ti @1219mhz boost, 64GB DDR3 1687mhz, P9X79 Pro
Lan: Asus M VI Impact, i7 4770k, Msi R9 290x gaming, 16GB DDR3 1600mhz, 512gb Crucial m550 m.2
Utrustning:Steelseries Rival 700, Corsair K65 RGB, Sennheiser RS175, Qpad QC-90

Permalänk
Medlem

Nej sorry, är så mycket nu bara. Jag kämpar på! Blir så irriterad av att stå och stampa på samma ställe bara^^

Men antar att det är tålamod som gäller!..

Here we go!

Permalänk
Avstängd

Kolla in Linq

Gruppera din lista på nivå

Visa signatur
Permalänk
Moderator
Skrivet av lodisch:

Du skulle inte kunna skriva ut hur jag ska ändra allt, med tanke på att det blir massor som jag måste göra om då det är mycket som går på just nivå som sträng??^^ Är som sagt totalt nybörjare, och har kämpat rätt länge för att få till den här koden^^

*avstår från att låsa tråden*

Vi gör inte uppgifter åt dig, vi kan ge dig kunskap att lösa dem men inte mer. SweClockers är till för kunskapsökning, inte sådana genvägar som drabbar dig i slutändan. Man måste harva med tråkiga uppgifter för att komma runt dem. Det gäller allt och alla.

Nu är du varnad så vi säger inget mer om det, gör bara inte om det.

Visa signatur

Forumregler | Synpunkter på moderering i forumet? Kontakta via PM, Email eller kontaktformuläret.
Huvudadmin för Geeks Discord - Mötesplatsen för gamers

Permalänk
Hedersmedlem

I korthet. När du loopar igenom och listar de olika nivåerna ska du för varje nivå lägga till en ny loop eller liknande som letar upp de individuella säljare som passar. Det ser ut som att du redan har det mesta av koden, du måste bara strukturera den rätt.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av lodisch:

Ok, jo det låter ju rimligt. Lite drygt att ändra på allt bara:P Haha.. Jag är så slut i huvut^^

Om du inte vill ändra utan endast lägga till kod så kan du skippa att göra om "niva" från en string till en int. Lägg in en till variabel som heter exempelvis "nivanr" (nivånummer). Loopen är också extra kod. Allt som allt är det ca 10 rader kod som ska till.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem
Skrivet av Leedow:

Om du inte vill ändra utan endast lägga till kod så kan du skippa att göra om "niva" från en string till en int. Lägg in en till variabel som heter exempelvis "nivanr" (nivånummer). Loopen är också extra kod. Allt som allt är det ca 10 rader kod som ska till.

Ok försöker med det. Bör jag lägga den utanför struct eller ska den också vara där i?

Permalänk

Linq magi :)

Om du får kan du använda lite LINQ-magi

Ger dig inte hela lösningen, men ett exempel:

using System.Linq; //Viktigt!! Du kan behöva referera till andra saker också, men lite google kan säkert hjälpa :) public struct Seller { public int Level; } public class YourClass { public static void Main(string[] args) { var sellers = GetSellers(); //Returna en array, lista eller dictionary t.ex var orderedArray = sellers.OrderBy(seller => seller.Level); //Sortera listan enligt värdena du tar ut, här seller.Level foreach(var seller in orderedArray) //Foreach loop { Console.WriteLine(seller.Level); //Eller något... } } }

Kan ju bara tipsa om MSDN också:
http://msdn.microsoft.com/en-US/library/618ayhy6(v=vs.80).asp...

Permalänk
Medlem
Skrivet av lodisch:

Ok försöker med det. Bör jag lägga den utanför struct eller ska den också vara där i?

Den bör ju rimligtvis vara med i "Säljare", ja.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?