C# sumowanie kwot z List<>

Wątek przeniesiony 2022-02-21 10:41 z C/C++ przez Riddle.

1

Hej,
szukam pomocy/podpowiedzi.

Mam do napisania kod, który podlicza artykuły. Po wpisaniu kodu zaczynającego się na A, nie liczmy podatku, dla B liczy 8%, dla pozostałych kodów 23% podatku (to już mam), ale problem mam sumowanie tych kwot, a aplikacja powinna pytać o wiele kodów (to również mam) do czasu aż wpiszemy "suma" i dopiero podlicza kody dzieląc na netto i brutto. Zacząłem już pisać List<>, ale czy to jest odpowiedni kierunek?

Będę wdzięczny za podpowiedź, a nie rozwiazanie zadania za mnie.

Dzięki :)

using System;
using System.Collections.Generic;
using System.Linq;

namespace KasaTest
{
    class Kasa
    {

        public static void Main(string[] args)
        {
            
            

            while (true)
            {
                Console.WriteLine("Hej, podaj kod produktu");
                try
                {
                    
                    string productcode = Console.ReadLine();
            string code = productcode.Substring(0, 1);
                    if (code == "exit")
                    {
                        return;
                    }
            double number = Convert.ToInt64(productcode.Substring(1));
                    var sumowanie = new List<double> { number };


                    //var list = new List<double>
                    //{
                    //    number,
                    //};

                    //Console.WriteLine(code);
                    //Console.WriteLine(number);
                    //Console.WriteLine(productcode);
                    //Console.WriteLine(list);



                    if (code == "a" || code == "A")
                    {
                        Console.WriteLine("do zapłaty " + number / 100 + ",00 zł");
                      
                        continue;
                        
                    }

                    if (code == "b" || code == "B")
                    {
                        
                        Console.WriteLine("do zapłaty " + (number * 0.0108) + " zł");
                    
                        continue;
                    }
                    //if (productcode == "suma")
                    //{
                    //    Console.WriteLine(list.Sum());
                    //    continue;
                    //}
                    else
                    {
                        
                        Console.WriteLine("do zapłaty " + (number * 0.0123) + " zł");
                        
                        continue;
                    }
                   
                }
                catch (FormatException)
                {
                    Console.WriteLine("UWAGA! Podaj właściwy kod");
                    continue; 
                }

               
            }
        }
    }
}
0

Nie prościej byłoby stworzyć sobie dodatkową zmienną i powiększać ją za każdym razem?
Co chcesz osiągnąć listą?

Czytając to co chcesz osiągnąć zrobiłabym coś takiego :

tworzymy funkcję liczącą podatek zależnie od przychodzącego kodu.
Funkcja zwraca wartość końcową.
Powiększamy naszą finalną wartość o zwrotkę z funkcji.

Może warto też użyć IgnoreCase zamiast || :) bedzie czytelniej

0

Klasy, klasy, klasy.
klasa Item, która ma kod podatku i kod produktu, cena netto i brutto, stawka VAT.
Do listy dodajesz obiekty tej klasy z policzonymi watami
Po dodaniu przeliczasz listę w jednej linii linq.

0
public class Element
{
     public double value;
	 public char code;
	 public double PayValue
	 {
		get
		{
			switch(code)
			{
			    case 'a':
					return value;
				case 'b':
					return value * 0.0108;
				default:
					return value * 0.0123;
			}
		}
	 }
}

List<Element> list = new List<Element>();
while(true)
{
	string input = Console.ReadLine().ToLower();
	if(input == "exit")
		return;
	if(input == "suma")
	{
		double sum = list.Sum(x => x.PayValue);
		Console.WriteLine($"{sum} zł");
	}
	else
	if(!string.IsNullOrEmpty(input) && (input[0] == 'a' || input[0] == 'b'))
	{
		char code = input[0];
		double value;
		if(double.TryParse(input.Substring(1), out value)
			list.Add(new Element() { value = value, code = code });
	}
}
0

Hej, udało się z pomocą koleżanki z forum.
Poniżej kod, który może kiedyś pomoże komuś.

using System.Collections.Generic;
using System.Linq;

namespace KasaTest
{
    class Kasa
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("podaj kod produktu");
            List<double> netto = new List<double>();
            List<double> brutto = new List<double>();
            while (true)
            {
                try
                {
                    string productcode = Console.ReadLine();
                    if (productcode.ToLowerInvariant() == "suma")
                    {
                        break;
                    }

                    string code = productcode.Substring(0, 1);
                    double number = int.Parse(productcode.Substring(1));

                    if (code == "a" || code == "A")
                    {
                        Console.WriteLine("kwota netto " + number / 100 + ",00 zł" + " kwota brutto: " + number / 100);
                        brutto.Add(number / 100);
                        netto.Add(number / 100);
                        continue;
                    }

                    if (code == "b" || code == "B")
                    {
                        Console.WriteLine("kwota netto: " + (number / 100) + " kwota brutto: " + (number * 0.0108) + " zł");
                        brutto.Add(number * 0.0108);
                        netto.Add(number / 100);
                        continue;
                    }

                    else
                    {
                        Console.WriteLine("kwota netto: " + (number / 100) + " kwota brutto: " + (number * 0.0123) + " zł");
                        brutto.Add(number * 0.0123);
                        netto.Add(number / 100);
                        continue;
                    }
                }
                catch (FormatException)
                {
                    Console.WriteLine("UWAGA! Podaj właściwy kod");
                    continue;
                }
            }
            Console.WriteLine("Łączna kwota netto: " + netto.Sum() + " Łączna kwota brutto: " + brutto.Sum());
        }
    }
}

        
    

2
marjar9414 napisał(a):

Poniżej kod, który może kiedyś pomoże komuś.

Ja mam cichą nadzieję, że nie pomoże (dla dobra osoby potrzebującej pomocy)

0

Wszystko na "nie"

parsowanie int.Parse, by operaować w double
hocki-klocki z obliczeniami, z którymi można wejść na minę. Zupełnie nie masz wiedzy o typach liczbowych, dokładności i zaokrągleniach
DWIE listy na <double> a nie JEDNA na typie odpowiadającym zadaniu "Mam do napisania kod, który podlicza artykuły.", klasa Artykuł przynajmniej zawierająca pola netto i brutto i kod.
samo użycie double jest patologiczne dla sytuacji z okolic pieniężnych, C# ma do tego decimal
lista nie wiadomo po co, która nie prowadzi do "podliczenia", czyli ja rozumiem sumowania - widać ból, jak się meczysz z kodami 'A', 'B' poza listą
List<> nie posiada metody Sum()

Poniżej kod, który może kiedyś pomoże komuś.

Gratuluję zadowolenia z siebie, to po treningu?
Same antywzorce, to się chyba nawet nie kompiluje.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.