c# StreamWriter skriver inte allt till fil (Solved)
Hej! Har en uppgift: Skriv ett litet program som en Console Application eller en Windows Forms Application som
läser in uppgifter för ett antal säljare i en säljkår. Om du skriver en Console Application, så
kan du låta användaren mata in hur många säljare han vill registrera.
Indata till programmet är de uppgifter om säljare som matas in. När man läst in alla säljare ska resultatet sorteras innan det skrivs ut. Sorteringen sker på antal sålda artiklar.
Jag ska även skriva resultatet till en fil. Jag har valt att använda mig av StreamWriter. Jag har börjat på detta. Problemet är att det är bara en säljare som skrivs ut till filen. Dvs. matar jag in flera säljare så är det bara den sista säljaren som skrivs till filen. Hur löser man detta?
EDIT (Solved):
Har nu löst så att den skriver in alla säljare jag har matat in och skriver inte bara över. Ändrat till append: true.
using StreamWriter sw = new StreamWriter("Saljkar.txt", true);
Kod nedan:
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
// Variablerna för klassen "saljare"
public class Saljare
{
public string namn;
public string personnummer;
public string distrikt;
public int antalartiklar;
public Saljare(string namn, string personnummer, string distrikt, int antalartiklar)
{
this.namn = namn;
this.personnummer = personnummer;
this.distrikt = distrikt;
this.antalartiklar = antalartiklar;
}
}
public class Program
{
// Detta printas i slutet av programmet när den visar hur många säljare som ligger på de olika nivåerna.
static void PrintSalesSorted(int level, IEnumerable<Saljare> salespersons)
{
if (!salespersons.Any())
{
return;
}
Console.WriteLine("-----------------------------");
Console.WriteLine($"Antal Säljare på nivå {level}: {salespersons.Count()}");
Console.WriteLine("");
// Detta printas också i slutet när man lagt in alla säljarna. Det sorteras och skrivs i console baserat på antalet sälj.
foreach (var p in salespersons.OrderBy(n => n.antalartiklar))
{
Console.WriteLine("Namn: " + p.namn);
Console.WriteLine("Personnummer: " + p.personnummer);
Console.WriteLine("Distrikt: " + p.distrikt);
Console.WriteLine("Antal sälj: " + p.antalartiklar);
Console.WriteLine("Sälj nivå: " + level);
Console.WriteLine("-----------------------------");
}
// Reslutat skrivs till fil "Saljkar.txt".
using StreamWriter sw = new StreamWriter(@Saljkar.txt);
sw.WriteLine("-----------------------------");
sw.WriteLine($"Antal Säljare på nivå {level}: {salespersons.Count()}");
sw.WriteLine("");
foreach (var p in salespersons.OrderBy(n => n.antalartiklar))
{
sw.WriteLine("Namn: " + p.namn);
sw.WriteLine("Personnummer: " + p.personnummer);
sw.WriteLine("Distrikt: " + p.distrikt);
sw.WriteLine("Antal sälj: " + p.antalartiklar);
sw.WriteLine("Sälj nivå: " + level);
sw.WriteLine("-----------------------------");
}
sw.Flush();
sw.Close();
}
// Början av koden som visas i console.
static void Main(string[] args)
{
Console.WriteLine("Klass för säljare och resultat: ");
Console.WriteLine("-------------------------------------");
Console.Write("Ange antal säljare som ska registreras: ");
int num = int.Parse(Console.ReadLine() ?? "0");
List<Saljare> salesmen = new List<Saljare>();
// En for loop som loopas antalet gånger som man valt att registrera säljare. Här skriver man in infon om säljarna lägger in.
for (int i = 0; i < num; i++)
{
Console.WriteLine();
Console.Write("Ange information för säljare " + (i + 1));
Console.WriteLine();
Console.WriteLine();
Console.Write("Ange Namn: ");
var name = Console.ReadLine() ?? "";
Console.Write("Ange Personnummer: ");
var pnr = Console.ReadLine() ?? "";
Console.Write("Ange Distrikt: ");
var district = Console.ReadLine() ?? "";
Console.Write("Ange antal Artiklar: ");
var antalArtiklar = int.Parse(Console.ReadLine() ?? "0");
Console.WriteLine();
var saljare = new Saljare(name, pnr, district, antalArtiklar);
salesmen.Add(saljare);
}
// De olika nivåerna för säljarna baserat på antalet artiklar. Här sorteras det också efter antalet sälj.
var level1 = salesmen.Where(n => n.antalartiklar < 50);
PrintSalesSorted(1, level1);
var level2 = salesmen.Where(n => n.antalartiklar >= 50 && n.antalartiklar < 100);
PrintSalesSorted(2, level2);
var level3 = salesmen.Where(n => n.antalartiklar >= 100 && n.antalartiklar < 200);
PrintSalesSorted(3, level3);
var level4 = salesmen.Where(n => n.antalartiklar > 200);
PrintSalesSorted(4, level4);
Console.ReadLine();
}
}