Výpočet odchodu do důchodu – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výpočet odchodu do důchodu – .NET – Fórum – Programujte.comVýpočet odchodu do důchodu – .NET – Fórum – Programujte.com

 

Montezo
~ Anonymní uživatel
188 příspěvků
27. 12. 2021   #1
-
0
-

   

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Vek
{
    class Program
    {

        static void Main(string[] args)
        {
            Console.Write("Zadejte datum narození: ");
            string datumText = Console.ReadLine();
            DateTime datumNarozeni = DateTime.Parse(datumText);
            Osoba osoba = new Osoba(datumNarozeni);
            int vek = osoba.SpoctiVek();
            int dni = osoba.ZbyvaDni();
            Console.WriteLine("Je Vám {0} let a narozeniny máte za {1} dní, a penze Vás čeká {2}.", vek, dni, penze);
            Console.ReadKey();
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Vek
{

    class Osoba
    {
        public DateTime DatumNarozeni { get; set; }

        public Osoba(DateTime datumNarozeni)
        {
            DatumNarozeni = datumNarozeni;
        }

        public int SpoctiVek()
        {
            DateTime dnes = DateTime.Today;
            int vek = dnes.Year - DatumNarozeni.Year;
            if (dnes < DatumNarozeni.AddYears(vek))
                vek--;
            return vek;
        }

        public int ZbyvaDni()
        {
            DateTime dnes = DateTime.Today;
            DateTime dalsiNarozeniny = DatumNarozeni.AddYears(SpoctiVek() + 1);

            TimeSpan rozdil = dalsiNarozeniny - DateTime.Today;
            return rozdil.Days;
        }

    }
}

Zdravím, a pokud mám takto kód na výpočet narozenin a dnů do dalších narozenin, jak k tomu přidat výpočet, za kdy osoba tohoto věku dostane na 65. rok života? Jde o důchod, podmínky "dřívějšího odchodu do důchodu" neřešme....   

Nahlásit jako SPAM
IP: 178.255.168.–
27. 12. 2021   #2
-
0
-

K datu narození (DateTime) přičtu 65 roků (TimeSpan), dostanu datum 65 narozenin. Pokud chci vědět za jak dlouho ode dneška, od data 65 narozenin odečtu dnešní datum.

Pozn.: nedělám si iluze, že bych šel v 65 do důchodu.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Montezo
~ Anonymní uživatel
188 příspěvků
27. 12. 2021   #3
-
0
-

A jak to na to napasovat?

Nahlásit jako SPAM
IP: 178.255.168.–
27. 12. 2021   #4
-
0
-

Jde to o trochu jednodušeji, stačí se podívat na metody třídy DateTime.

Co ti našel Google?

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Montezo
~ Anonymní uživatel
188 příspěvků
27. 12. 2021   #5
-
0
-

Google mě povětšinou odkáže sem, na superforum nebo na MS dokumentaci. Jak to teda na sebe napasovat?

Nahlásit jako SPAM
IP: 178.255.168.–
27. 12. 2021   #6
-
0
-

Napiš do Google DateTime a prohlédni si metody. Nejlépe v dokumentaci.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Montezo
~ Anonymní uživatel
188 příspěvků
27. 12. 2021   #7
-
0
-

Myslíš toto, nebo jiné?  

https://docs.microsoft.com/en-us/dotnet/api/system.datetime?view=net-6.0

Nahlásit jako SPAM
IP: 178.255.168.–
BDS+3
Věrný člen
27. 12. 2021   #8
-
0
-

#7 Montezo
Jsi líný si to pročíst, nebo jsi tak hloupí, že neumíš najít odpověď? Bez hledání se nenaučíš nic. Vrátí ti to TimeSpan a s tím si doufám už dokážeš poradit! Nebo můžeš použít přímo TimeSpan pro výpočet.

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
27. 12. 2021   #9
-
0
-

#7 Montezo
A co je tam za metody? Hodí se některá na výpočet data 65 narozenin? Hodi se některá na výpočet časového úseku mezi dvěma DateTime?

hu

Nahlásit jako SPAM
IP: 2001:af0:ffe4:85f4:a5d5:c3cb:7906:e542...–
Montezo
~ Anonymní uživatel
188 příspěvků
28. 12. 2021   #10
-
0
-

   

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Narozeniny
{
    class Program
    {

        static void Main(string[] args)
        {
            Console.Write("Zadej datum narození: ");
            string datumText = Console.ReadLine();
            DateTime datumNarozeni = DateTime.Parse(datumText);
            Osoba osoba = new Osoba(datumNarozeni);
            int vek = osoba.SpoctiVek();
            int dni = osoba.ZbyvaDni();
            int narozky = osoba.VypocetNarozek();
            Console.WriteLine("Je ti {0} let, za {1} dní slavíš narozeniny a 65. narozeniny máš za {2} dní.", vek, narozky, dni);
            Console.ReadKey();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Narozeniny
{

    class Osoba
    {
        public DateTime DatumNarozeni {get; set;}

        public Osoba(DateTime datumNarozeni)
        {
            DatumNarozeni = datumNarozeni;
        }

        public int SpoctiVek()
        {
            DateTime dnes = DateTime.Today;
            int vek = dnes.Year - DatumNarozeni.Year;
            if (dnes < DatumNarozeni.AddYears(vek))
                vek--;
            return vek;
        }

        public int ZbyvaDni()
        {
            DateTime dnes = DateTime.Today;
            DateTime dalsiNarozeniny = DatumNarozeni.AddYears(65);

            TimeSpan rozdil = dalsiNarozeniny - DateTime.Today;
            return rozdil.Days;
        }
        public int VypocetNarozek()
        {
            DateTime dnes = DateTime.Today;
            DateTime dalsiNarozeniny = DatumNarozeni.AddYears(SpoctiVek() + 1);

            TimeSpan rozdil = dalsiNarozeniny - DateTime.Today;
            return rozdil.Days;
        }

    }
}

Tak, nakonec to šlo udělat. 

Tak a teď se ještě zbavit duplicitního kódu vytvořením třetí metody, která bude počítat obecné X. narozeniny. A kód současných metod nahradit za volání té nové.

Hmm... teď se musím ovšem nějak zbavit duplicitního kódu. Vytvořím novou metodu, která bude počítat "univerzální" narozeniny. A ty dvě *současné* metody nahradím voláním s parametrem "vypocetXnarozenin(nejblizsi)" a "vypocetXnarozenin(65)"... že?

Nahlásit jako SPAM
IP: 178.255.168.–
BDS+3
Věrný člen
28. 12. 2021   #11
-
0
-

#10 Montezo
Udělal jsem to trochu jinak ať vidíš, že se to dá dělat různými způsoby. Nejsou zohledněny narozeniny 29 února!  

    internal class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.Write("Zadej datum narození: ");
                string? line = Console.ReadLine();
                if (!string.IsNullOrEmpty(line))
                {
                    try
                    {
                        DateTime ndate = DateTime.Parse(line);
                        Osoba osoba = new Osoba(ndate);
                        int let = osoba.SpoctiVek();
                        int dnydonarozenin65 = Osoba.DnyDoData(osoba.DatumNarozeni.AddYears(65));
                        int dnydonarozenin = Osoba.DnyDoData(osoba.PristiNarozeniny());
                        Console.WriteLine("Je ti {0} let, za {1} slavíš narozeniny a 65. narozeniny máš za {2}.", let, SklonDne(dnydonarozenin), SklonDne(dnydonarozenin65));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
                else break;
            }
        }
         //sklonovani let jsem vynechal
        static string SklonDne(int pocet) // sklonování slova den
        {
            switch(pocet)
            {
                case 0: return string.Format("{0} dnů", pocet);
                case 1: return string.Format("{0} den", pocet);
                case 2: return string.Format("{0} dny", pocet);
                case 3: return string.Format("{0} dny", pocet);
                case 4: return string.Format("{0} dny", pocet);
                default: return string.Format("{0} dnů", pocet);
            }
        }
    }


    class Osoba
    {
        public DateTime DatumNarozeni { get; set; }
        public Osoba(DateTime datumNarozeni)
        {
            DatumNarozeni = datumNarozeni;
        }
        private DateTime LetosniNarozeniny()
        {
            return new DateTime(DateTime.Today.Year, DatumNarozeni.Month, DatumNarozeni.Day);
        }

        public int SpoctiVek()
        {
            DateTime now = DateTime.Today;
            return (LetosniNarozeniny() > now) ? DateTime.Now.Year - DatumNarozeni.Year - 1 : DateTime.Now.Year - DatumNarozeni.Year;
        }

        public DateTime PristiNarozeniny()
        {
            var dnes = DateTime.Today;
            var letosni = LetosniNarozeniny();
            return (letosni > dnes) ? letosni : letosni.AddYears(1);
        }

        public static int DnyDoData(DateTime date) // je to static, protože nepotřebuje přístup k této třídě
        {
            return date.Subtract(DateTime.Today).Days + 1;
        }
    }

Díky za to, že už vkládáš zdroják jak se patří ;)

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

Vypocet pi — založil Nemo_001

Výpočet na GK — založil Midnight

Vypocet v C# — založil vyhno

Výpočet integrálu — založil Pavelv

Vypočet pravděpodobnosti — založil Mirek

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý