Permalänk
Medlem

Hjälp med C#

Hej, jag håller på med en C3 uppgift där man ska samla in info om 6st försäljare och sedan skriva ut denna info i rätt ordning.
Jag har gjort klart nästan hela nu men enda problemet är att i mitt program så skrivs nivån ut för varje person även om 3 person har nått samma nivå.
Detta är koden så som den är just nu

using System;
using System.Collections.Generic;

// L0002B Inlämning 2

namespace Inlämning2
{
class Program
{
// Huvudklass
class Forsaljare
{
private string namn;
private string personnr;
private string distrikt;
private int artiklar;

// Array med ovanstående variabler som enheter
public Forsaljare(string namn, string personnr, string distrikt, int artiklar)
{
this.namn = namn;
this.personnr = personnr;
this.distrikt = distrikt;
this.artiklar = artiklar;
}

public string hnamn()
{
return namn;
}
public string hpersonnr()
{
return personnr;
}
public string hdistrikt()
{
return distrikt;
}
public int hartiklar()
{
return artiklar;
}
}

// Klass däri sortering med avseende på antalet artiklar sker
class Berakning
{

public static void bruteSortera(List<Forsaljare> items)
{
items.Sort((a, b) => a.hartiklar().CompareTo(b.hartiklar()));
}
static void Main(string[] args)
{
List<Forsaljare> forsaljareList = new List<Forsaljare>();

// While-loop med syfte att låta nedanstående upprepas sex gånger
int i = 1;
while (i < 7)
{

Console.WriteLine("---------------------");
Console.WriteLine("Namn:");
string namn = Console.ReadLine();

Console.WriteLine("---------------------");
Console.WriteLine("Personnummer:");
string personnr = Console.ReadLine();

Console.WriteLine("---------------------");
Console.WriteLine("Ange Diskrikt:");
string distrikt = Console.ReadLine();

Console.WriteLine("---------------------");
Console.WriteLine("Antal artiklar:");
Console.WriteLine("---------------------");
string artiklar = Console.ReadLine();
int varde;
int.TryParse(artiklar, out varde);

Forsaljare forsaljning = new Forsaljare(namn, personnr, distrikt, varde);
forsaljareList.Add(forsaljning);

++i;

}

// Skickar inhämtade data för sortering
bruteSortera(forsaljareList);

int niva1 = 0;
int niva2 = 0;
int niva3 = 0;
int niva4 = 0;

// Ändrar nivåer beroende på antalet artiklar per försäljare
foreach (Forsaljare fors in forsaljareList)
{
if (fors.hartiklar() < 50)
{
++niva1;
}
else if (fors.hartiklar() > 50 && fors.hartiklar() < 99)
{
++niva2;
}
else if (fors.hartiklar() > 99 && fors.hartiklar() < 199)
{
++niva3;
}
else if (fors.hartiklar() > 199)
{
++niva4;
}
}

// Nedanstående ger utskrifter till fil och i konsolen för respektive försäljare
Console.WriteLine("---------------------");
Console.WriteLine("Namn Persnr Distrikt Antal");
Console.WriteLine("---------------------");

using (System.IO.StreamWriter file = new System.IO.StreamWriter(@C:\Desktop\FT\L2BA\Inlämning2\Inl2.txt))
{
foreach (Forsaljare fors in forsaljareList)
{

file.WriteLine("---------------------");
file.WriteLine("Namn Persnr Distrikt Antal");
file.WriteLine("---------------------");

if (fors.hartiklar() < 50)
{
Console.WriteLine(niva1 + " säljare har nått nivå 1 0-50 artiklar");
file.WriteLine(niva1 + " säljare har nått nivå 1 0-50 artiklar");

}
else if (fors.hartiklar() > 50 && fors.hartiklar() < 99)
{
Console.WriteLine(niva2 + " säljare har nått nivå 2 50-100 artiklar");
file.WriteLine(niva2 + " säljare har nått nivå 2 50-100 artiklar");
}
else if (fors.hartiklar() > 99 && fors.hartiklar() < 199)
{
Console.WriteLine(niva3 + " säljare har nått nivå 3 100-199 artiklar");
file.WriteLine(niva3 + " säljare har nått nivå 3 100-199 artiklar");
}
else if (fors.hartiklar() > 199)
{
Console.WriteLine(niva4 + " säljare har nått nivå 4 över 199 artiklar");
file.WriteLine(niva4 + " säljare har nått nivå 4 över 199 artiklar");
}
file.WriteLine(fors.hnamn().PadRight(13) + " " + fors.hpersonnr().PadRight(16) + " " + fors.hdistrikt().PadRight(14) + " " + fors.hartiklar().ToString().PadRight(11));
Console.WriteLine(fors.hnamn().PadRight(13) + " " + fors.hpersonnr().PadRight(16) + " " + fors.hdistrikt().PadRight(14) + " " + fors.hartiklar().ToString().PadRight(11));
}

}
while (true)
{
}

}

}

}

}

och resultatet blir såhär

---------------------
Namn Persnr Distrikt Antal
---------------------
3 säljare har nått nivå 1 0-50 artiklar
a 11 a 11
---------------------
Namn Persnr Distrikt Antal
---------------------
3 säljare har nått nivå 1 0-50 artiklar
b 33 b 33
---------------------
Namn Persnr Distrikt Antal
---------------------
3 säljare har nått nivå 1 0-50 artiklar
d 44 d 44
---------------------
Namn Persnr Distrikt Antal
---------------------
1 säljare har nått nivå 2 50-100 artiklar
e 78 e 78
---------------------
Namn Persnr Distrikt Antal
---------------------
g 99 g 99
---------------------
Namn Persnr Distrikt Antal
---------------------
1 säljare har nått nivå 4 över 199 artiklar
f 250 f 250

Jag vill att t.ex nivå 1 där det är 3 personer så ska det bara stå en gång.
Jag måste ta ut nivå utskriften ur foreach satsen men jag vet ej hur jag ska lösa det...

All hjälp är uppskattas.

Visa signatur

Core i5 750, Xfx radeon 5850 black edition, 8gb corsair dominator 1600 mhz, Asus p7p55d PRO, Velociraptor 150GB, Samsug 1TB, Antec 902, Zalman cnps10X extreme, corsair 650W.

Permalänk
Medlem

Du ska inte ta ut utskriften från foreach satsen, däremot ska du göra en kontroll om den ska skrivas ut eller ej.

T.ex.

int latestLevel = 0; foreach (Forsaljare fors in forsaljareList) { if(latestLevel != fors.level) { file.WriteLine("---------------------"); file.WriteLine("Namn Persnr Distrikt Antal"); file.WriteLine("---------------------"); } //massa if else latestLevel = fors.level; }

På något ovanstående sätt hade jag löst det.