» »

[C#] Evidenca oseb

[C#] Evidenca oseb

Skaty ::

Pozdravljeni!

Napisal sem program, kjer uporabnik ustvari evidenco oseb. Naletel sem na težavo, ker ne vem kaj naj naredim, da bi program deloval tako, da, ko želi uporabnik poiskati osebo, vpiše priimek, program pa mu izpiše vse osebe s takim priimkom.

Program (150. vrstica):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Naloga04
{
    class Oseba
    {
        public string ime;
        public string priimek;
        public DateTime datumRojstva;

        public void vpisiIme()
        {
            Console.WriteLine("Vpiši ime: ");
            ime = Console.ReadLine();
        }
        public void vpisiPriimek()
        {
            Console.WriteLine("Vpiši priimek: ");
            priimek = Console.ReadLine();
        }
        public void vpisidatumRojstva()
        {
            Console.WriteLine("Vpiši datum rojstva: ");
            datumRojstva = DateTime.Parse(Console.ReadLine());
        }
        public Oseba()
        {
            ime = "";
            priimek = "";
            datumRojstva = new DateTime(1900, 1, 1);
        }
        public Oseba(string a, string b, int dan, int mesec, int leto)
        {
            ime = a;
            priimek = b;
            datumRojstva = new DateTime(leto, mesec, dan);
        }
        public void spremeniIme(string i)
        {
            ime = i;
        }
        public void spremeniPriimek(string p)
        {
            priimek = p;
        }
        public void spremeniDatumRojstva(DateTime dR)
        {
            datumRojstva = dR;
        }

        public void vrniIme()
        {
            Console.WriteLine(ime);
        }
        public void vrniPriimek()
        {
            Console.WriteLine(priimek);
        }
        public void vrniDatumRojstva()
        {
            Console.WriteLine(datumRojstva.ToString("m"));
        }
        public void izpisPodatkov()
        {
            Console.WriteLine("Ime: " + ime);
            Console.WriteLine("Priimek: " + priimek);
            Console.WriteLine("Datum rojstva: " + datumRojstva.ToString("m"));
        }
    }
    class Program
    { 
        static void Vpis(Oseba[] A)
        {
            Console.WriteLine("Izberite število: \n 1 ~ vstavljanje podatkov za osebe \n 2 ~ spreminjanje posameznih podatkov \n 3 ~ izpis posameznih podatkov \n 4 ~ iskanje po priimku ");
            int odg = int.Parse(Console.ReadLine());
            switch (odg)
            {
                case 1: Vstavljanje(A); break;
                case 2: Spreminjanje(A); break;
                case 3: Izpis(A); break;
                case 4: Iskanje(A); break;
            }
        }
        static void Vstavljanje(Oseba[] A)
        {
            for (int i = 1; i <= 20; i++)
            {
                Console.WriteLine("Vstavite podatke za osebo " + i);
                A[i] = new Oseba();
                A[i].vpisiIme();
                A[i].vpisiPriimek();
                A[i].vpisidatumRojstva();
                Console.WriteLine("Prekini zanko? ");
                string z = Console.ReadLine();
                switch (z)
                {
                    case "da": Vpis(A); Console.Clear(); break;
                    case "ne": break;
                }
            }
        }
        static void Spreminjanje(Oseba[] A)
        {
            for (;;)
            {
                Console.WriteLine("Vnesite indeks osebe, katere podatke želite spremeniti: ");
                int a = int.Parse(Console.ReadLine());
                Console.WriteLine("Drugo ime: ");
                string ime = Console.ReadLine();
                Console.WriteLine("Drug priimek: ");
                string priimek = Console.ReadLine();
                Console.WriteLine("Drug datum rojstva: ");
                DateTime dR = DateTime.Parse(Console.ReadLine());
                A[a].spremeniIme(ime);
                A[a].spremeniPriimek(priimek);
                A[a].spremeniDatumRojstva(dR);
                Console.WriteLine("Prekini zanko? ");
                string z = Console.ReadLine();
                switch (z)
                {
                    case "da": Vpis(A); Console.Clear(); break;
                    case "ne": break;
                }
            }
        }
        static void Izpis(Oseba[] A)
        {
            for (;;)
            {
                Console.WriteLine("Vnesite indeks osebe, katere podatke želite izpisati: ");
                int a = int.Parse(Console.ReadLine());
                A[a].izpisPodatkov();
                Console.WriteLine("Prekini zanko? ");
                string z = Console.ReadLine();
                switch (z)
                {
                    case "da": Vpis(A); Console.Clear(); break;
                    case "ne": break;
                }
            }
        }
        static void Iskanje(Oseba[] A)
        {
            for (;;)
            {
                Console.WriteLine("Vnesite priimek osebe, ki jo želite poiskati: ");
                string b = Console.ReadLine();
                /*
                ??????????????????????????????????????????????????????????????????????
                ??????????????????????????????????????????????????????????????????????
                ??????????????????????????????????????????????????????????????????????
                */

                Console.WriteLine("Prekini zanko? ");
                string z = Console.ReadLine();
                switch (z)
                {
                    case "da": Vpis(A); Console.Clear(); break;
                    case "ne": break;
                }
            }
        }
        static void Main(string[] args)
        {
            Oseba[] A = new Oseba[20];
            Vpis(A);
            Vstavljanje(A);
            Spreminjanje(A);
            Izpis(A);
            Iskanje(A);
            Console.ReadKey();
        }
    }
}


Hvala za pomoč!

Yacked2 ::

Vse Osebe zberi v enem arrayu, očitno je pri tebi to A, nato se pa v metodi sprehodi čez cel array in primerjaj ime Osebe z iskanim parametrom:
Oseba[] A = {...};
string iskanoIme = "Janez";

foreach(Oseba trenutni : A) //nisem siguren če se v C# takole naredi foreach
{
   string njegovoIme = trenutni.ime;
   if(iskanoIme == njegovoIme)
   {
      //nasli smo eno izmed iskanih oseb
   }
}


PS. Tvoja koda je grda!
Korak naprej ni vedno ustrezen...sploh če si na robu prepada!

Skaty ::

Zdaj imam to:
Console.WriteLine("Vnesite priimek osebe, ki jo želite poiskati: ");
                string b = Console.ReadLine();
                string iskanoIme = b;
                foreach (Oseba trenutni in A)
                {
                    string njegovoIme = trenutni.ime;
                    if (iskanoIme == njegovoIme)
                    {
                        Console.WriteLine(trenutni.ime + " " + trenutni.priimek + " " + trenutni.datumRojstva);
                    }
                    else
                        Console.WriteLine("Oseba ne obstaja!");

Ampak ne dela, ker je njegovoIme vedno null...

sebastjan28 ::

Za iskanje moraš poslati tudi iskani niz,...
Drugače pa se za take stvari uporablja LINQ. Ne samo, da bo rešitev precej bolj učinkovita, ampak bo tudi lažje berliva.

Spremeni array v List in napiši select nekaj v stilu:

        static List<String> Iskanje(Osebe[] osebe, string ime)
        {
              var vseOsebe = new List<Osebe>(osebe);
              return vseOsebe.Select(o=>o.Ime==ime).ToList();
         }

Skaty ::

OK, hvala.

DaMachk ::

@sebastjan28
Sploh ni res, v nejgovi kodi se niz prebere iz konzole, ko vstopi v funkcijo iskanje.
Kolikor je LINQ fascinantna zadeva in njegovo uporabo vsekako podpiram, mislim da gre za popolno začetništvo programiranja in tudi domačo nalog, kar pomeni da se uči samih osnov programiranja.

@Skaty, a ko napraviš izpis vseh oseb v polju, ima katera sploh vnešene podatke ali ne? Lahko da
also: vrži ven da oseba ni najdena v foreachu, ki si ga dodal. Pri vsaki osebi namreč izpiše, da oseba ni bila najdena, ko se ime ne ujema.
No signiature, as you see..

sebastjan28 ::

@DaMachk

Motiš se. Pri metodi, ki je poimenoval Iskanje nima logika za branje vrednosti iskanega niza kaj iskati! Če to počnemo pomeni, da začnemo skrivamo funkcionalnosti znotraj neke druge aktivnosti.

Mogoče bi bil čas, da bi v šolah malo osvežili program osnov programiranja,.. namesto, da bi učence učili v današnjem svetu zares uporabne zadeve(npr. Design patterne) in malo manj pozornosti posvetili raznim bubble sortom - pa ne mislim, da je tudi to znanje nepomenbno:)

DaMachk ::

Hja, žal je tako da se v šolah učimo računalništva a.k.a. Computer science in ne programiranja samega po sebi... Za moje čase je celo večina profesorjev izhajala iz elektrotehnike, tako da so njihove razvijalske "navade" bile še kako stare.

Mislim pa da zaenkrat, dokler so še težave s samim sintaktičnim in semantičnim razmišljanjem, naj design patterni še malo počakajo.

Navsezadnje ne moreš takoj začet "perfektno" programirat :D
No signiature, as you see..


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[c#] Ustvarjanje objekta v drugem razredu

Oddelek: Programiranje
81092 (1037) Cvenemir
»

c sharp LinkedList - Naloga

Oddelek: Programiranje
91065 (1016) Msatir
»

[C#] Kopiranje osebe iz seznama v drug seznam

Oddelek: Programiranje
5979 (840) Presidente
»

[c#] Napačen izpis -- prazni stringi

Oddelek: Programiranje
51031 (973) Spura
»

[C#] današnji datum in rojsni datum

Oddelek: Programiranje
373201 (2688) vojko20

Več podobnih tem