Zmienna przekazywana w metodzie z argumentami...

0

Witam serdecznie wszystkich po dłuższej nieobecności....
Powróciłem do tematu C# robię drugie podejście mam teraz dużo czasu więc postanowiłem powalczyć z tym językiem ;) Ale do konkretów... Postanowiłem napisać sobie program który będzie mi odliczać kwotowo co sekundę pozostałą kwotę spłaty kredytu. Wiem durny pomysł ale akurat taki sobie wymyśliłem przykład do zrobienia do ćwiczeń.
Założenia pierwszy kredyt na 10000zł 3 lata drugi kredyt na złóżmy 20000 na 4 lata. I teraz zrobiłem taki kodzik z metodą i argumentami:

class Kredyty
        {
            public string nazwa_kredytu;
            public DateTime startTime;
            public DateTime endTime;
            public double kwotaKredytu;

            
            public void ustaw_info(string nazwak, DateTime startT, DateTime endT, double kwotaK)
            {
                nazwa_kredytu = nazwak;
                startTime = startT;
                endTime = endT;
                kwotaKredytu = kwotaK;
            }
        }


        private void tmrCounter_Tick(object sender, EventArgs e)
        {

            Kredyty kredyt1 = new Kredyty();
            kredyt1.ustaw_info("Kredyt 1", new DateTime(2015, 05, 10, 13, 00, 00), new DateTime(2018, 05, 10, 13, 00, 00), 10000.00);
            DateTime nowTime = DateTime.Now;
            double dlugoscKredytu1 = (kredyt1.endTime - kredyt1.startTime).TotalSeconds;
            var wartoscSekundy1 = kredyt1.kwotaKredytu / dlugoscKredytu1;
            var roznica1 = (kredyt1.endTime - nowTime).TotalSeconds;

            i = Convert.ToInt32(roznica1);

            label1.Text = (kredyt1.nazwa_kredytu + (roznicaG * wartoscSekundy1));
            int n = Convert.ToInt32(i);
            n--;
            lblView.Text = "Pozostało: " + n.ToString() + " sekund";
			
	    Kredyty kredyt2 = new Kredyty();
            kredyt2.ustaw_info("Kredyt 2", new DateTime(2015, 05, 10, 13, 00, 00), new DateTime(2019, 05, 10, 13, 00, 00), 20000.00);
            double dlugoscKredytu2 = (kredyt2.endTime - kredyt2.startTime).TotalSeconds;
            var wartoscSekundy2 = kredyt2.kwotaKredytu / dlugoscKredytu1;
            var roznica2 = (kredyt2.endTime - nowTime).TotalSeconds;

            i = Convert.ToInt32(roznica2);

            label2.Text = (kredyt2.nazwa_kredytu + (roznicaG * wartoscSekundy2));
            int n = Convert.ToInt32(i);
            n--;
            lblView2.Text = "Pozostało: " + n.ToString() + " sekund";


        }

I teraz mam pytanie wszystko działa jak należy ale mam pytanie czy obliczenia też można w jakiś sposób zapisać jako metodę z argumentami tak by nie powielać tych samych operacji np. wyliczania różnicy między datami??

0

Nie tyle "można", co "trzeba".
A w ogóle to kod jest naprawdę kiepski pod każdym względem. Mógłbym Ci opisać, co jest źle, ale tak naprawdę musiałbym opisywać prawie każdą linijkę.

0

Zamiast metody ustaw_info mozesz przekazac to w konstruktorze. Nie trzeba bedzie wywolywac niepotrzebnie tej metody bo ona nic nie robi.
Robisz metodę
public decimal GetPozostalaKwota(datetime currentDateTime)
{}

Jak masz gdzies kase to używaj raczej decimal a nie double. Szczegolnie w bazach danych.

Tworzenie kredytow wywal poza tick bo teraz to bez sensu sie tworza co sekunde.

Zrób metodę
int GetPozostalyCzas(DateTime now)
i niech ona odejmie sobie czas w sekundach. Teraz masz zmienne i, n niepotrzebne.

Ja w zdarzeniach timerow zatrzymuje timer na poczatku zdarzenia i uruchamiam na koncu. Nie wiadomo ile potrwa przetworzenie takiego zdarzenia a timer Ci ticka co sekunde i jak sie nie wyrobi to i tak dostaniesz następnego ticka aż w końcu sie zaticka na amen.

1 użytkowników online, w tym zalogowanych: 0, gości: 1