REGISTER

ConsoleUi

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Register
{
    class ConsoleUI
    {
        
        private Register register;  //tato premenna register ma vsetky vlastnosti triedy register. pouzivam ju na volanie funkcii z tiedy register v tejto triede alebo na docasne ukladanie premennych z triedy register
 
        /**
         * Menu options.
         */
        private enum Option
        {
            PRINT, ADD, FIND_BY_NAME, FIND_BY_PHONE_NUMBER, SORT, EDIT, DELETE, EXIT
        };
 
        public ConsoleUI(Register register)
        {
            this.register = register;
        }
 
        public void Run()
        {
            while (true)
            {
                switch (ShowMenu())
                {
                    case Option.PRINT:
                        PrintRegister();
                        break;
                    case Option.ADD:
                        AddToRegister();
                        break;
                    case Option.FIND_BY_NAME:
                        FindInRegisterByName();
                        break;
                    case Option.FIND_BY_PHONE_NUMBER:
                        FindInRegisterByPhoneNumber();
                        break;
                    case Option.SORT:
                        Sort();
                        break;
                    case Option.EDIT:
                        Uprav();
                        break;
                    case Option.DELETE:
                        Odstran();
                        break;
                    case Option.EXIT:
                        return;
                }
            }
        }
        
        private void Sort()  //pretoze public premenna register obsahuje fciu sort.
        {
            register.Sort();
        }
//***************************************************************
        private void Uprav()
        {
            Person p = new Person();
            Console.WriteLine("zadaj meno na upravu jeho cisla");
            p = register.FindPersonByName(Console.ReadLine());
            while (p == null)
            {
                Console.WriteLine("zadali ste meno, ktore nemate ulozene v zozname, skuste zadat meno este raz");
                p = register.FindPersonByName(Console.ReadLine());
            }
            Console.WriteLine("Povodne cislo uzivatela \"{0}\" je {1}, zadajte nove cislo:", p.Name, p.PhoneNumber);
            try { p.PhoneNumber = Console.ReadLine(); }
            catch (NoValidPhoneNumber e) { Console.WriteLine(e.Message); }
            Console.WriteLine("Cislo je uspesne zmenene: {0}: {1}", p.Name, p.PhoneNumber);
 
        }
 
        private void Odstran()
        {
            Person p = new Person();
            Console.WriteLine("zadaj meno na odstranenie zo zoznamu");
            p = register.FindPersonByName(Console.ReadLine());
            while (p == null)
            {
                Console.WriteLine("zadali ste meno, ktore nemate ulozene v zozname, skuste zadat meno este raz");
                p = register.FindPersonByName(Console.ReadLine());
            }
            Console.WriteLine("Chcete naozaj vymazat osobu: {0} : {1}?  (zadajte a-ano, n-nie)", p.Name, p.PhoneNumber);
            string vyber = Console.ReadLine();
            if (vyber == "a" || vyber == "A")
            {
                register.OdstranOsobu(p);
                Console.WriteLine("Osoba uspesne odstranena");
            }
        }
 
//*************************************************************
        private Option ShowMenu()
        {
            Array optionValues = Enum.GetValues(typeof(Option));
            Console.WriteLine("Menu.");
            foreach (int value in optionValues)
            {
                Console.WriteLine("{0}. {1}\n", value + 1, Enum.GetName(typeof(Option), value));
            }
 
            Console.WriteLine("-----------------------------------------------");
 
            int selection = -1;
            do
            {
                Console.WriteLine("Option: ");
                try { selection = int.Parse(Console.ReadLine()); } //zadrzi chybu ak zisti ze vstup nie je cislo.
                catch(Exception e) // ulozi ju do premennej e ktora je formy Exception , catch je fukncia ktora ma vstup
                    {
                        Console.WriteLine ( e.Message ); //vypise chybu
                    }
            } while (selection <= 0 || selection > optionValues.Length);
 
            return (Option)optionValues.GetValue(selection - 1);
        }
 
        private void PrintRegister()
        {
            Console.WriteLine("\n --- List of persons ---\n");
            Person person = null;
            for (int i = 0; i < register.GetCount(); i++)
            {
                person = register.GetPerson(i);
                Console.WriteLine("{0}: {1}", person.Name, person.ToString());
            }
            Console.WriteLine("\n------------------------\n");
        }
 
        private void AddToRegister()
        {
            Person p = new Person(); // nova premenna p ktora ma vlastnosti triedy Person
 
            Console.WriteLine("\n >> Zadajte meno a priezvisko:");
            p.Name = Console.ReadLine();
            
            while (register.FindPersonByName(p.Name) != null)  // pokial sa meno ulozene do docasnej premennej p.Name objavi v telefonnom zozname bude mi opakovat zadavanie mena. register.findpersonbyname je premenna zadefinovane uplne hore.
            {
                Console.WriteLine("\n >> Meno uz je ulozene. Zadajte ine meno a priezvisko:");
                p.Name = Console.ReadLine();
            }
            Console.WriteLine("\n >> Zadajte telefonne cislo:");
            try { p.PhoneNumber = Console.ReadLine(); }
            catch (NoValidPhoneNumber e)
                {
                    Console.WriteLine(e.Message);
                }
 
            while (register.FindPersonByPhoneNumber(p.PhoneNumber) != null)
            {
                Console.WriteLine("\n >> Toto telefonne cislo je uz ulozene. Zadajte ine telefonne cislo:");
                try { p.PhoneNumber = Console.ReadLine(); }
                catch (NoValidPhoneNumber e)
                {
                    Console.WriteLine(e.Message);
                }
 
            }
 
            register.AddPerson(p);    //cize premenna typu register a z nej fcia add person
           
        }
                
        private void FindInRegisterByPhoneNumber()
        {
            Person p = new Person();
            p = register.FindPersonByPhoneNumber(Console.ReadLine());
            if (p != null)
            {
                Console.WriteLine(" >> Meno " + p.Name + " ma priradene cislo " + p.ToString());
            }
            else Console.WriteLine("\n >> Take cislo nema ani jeden kontakt");
        }
 
        private void FindInRegisterByName()
        {
            Person p = new Person();
            p = register.FindPersonByName(Console.ReadLine());
            if (p != null) 
            {
                //p = FindPersonByName(p.Name);
                Console.WriteLine(" >> Meno " + p.Name + " ma priradene cislo " + p.ToString());
            }
            else Console.WriteLine("\n >> Taky kontakt nie je ulozeny");
        }
 
        public static void Main(string[] args)
        {
            ConsoleUI system = new ConsoleUI(new Register());
            system.Run();
        }
    }
}
 

 

NoValidPhoneNumber

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Register
{
    class NoValidPhoneNumber : ApplicationException // musel som si vytvorit novu triedu pretoze je to vynimka, dedi vsetko po ApplicationException
    {
        public NoValidPhoneNumber(string message) : base(message) { }
    }  
}
 

 

Person

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Register
{
    public class Person //v piatom cviku chcu aby sme pred triedu dali ze je to public. 
    {
        private bool IsValidPhoneNumber(string phoneNumber)
        {
            for (int i = 0; i < phoneNumber.Length; i++)
            {
                if (!char.IsDigit(phoneNumber[i]))
                {
                    return false;
                }
            }
            return true;
        }
        
        private string name;   // privatna premenna fungujuca iba v tejto triede
 
        public string Name     // objekt prostrednictvom ktoreho manipulujem s name  
        {
            get { return name; }
            set { name = value; }
        }
        private string phoneNumber;
 
        public string PhoneNumber
        {
            get { return phoneNumber; }
            set { 
                if(!IsValidPhoneNumber(value))
                {
                    throw new NoValidPhoneNumber("\n Boli zadane pismena miesto cisel. Este raz ");
                }
                phoneNumber = value; }
        }
    
        public override string ToString()
        {
           string vypis = "[" + phoneNumber + "]";
           return vypis;
        }
        
 
    
    }
}
 

PersonComparer

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Globalization;
 
namespace Register
{
    public class PersonComparer : IComparer
    {
 
 
        private StringComparer cmp = StringComparer.Create(new CultureInfo("sk"), true);
        
        public int Compare(Person p1, Person p2)
        {
            return cmp.Compare(p1.Name, p2.Name);
        }
    }
}
 

Register

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Register
{
    class Register
    {
        private List persons; // Person[] persons; - toto bolo povedne. obycajne pole. pricom ja som to zmenil na list. pretoze list ma v sebe par funkcii. teraz musim zmenit vsetky county. pretoze list obsahuje v sebe funkcie ktore nahradia pocitanie
 
        public Register() : this(20) {}
 
        public Register(int size)
        {
            persons = new List(size);//new Person[size];
        //    count = 0;
        }
 
        public int GetCount()  // vytvaram si fciu ktora mi bude vracat pocet ludi zapisanych v zozname. pretoze persons je definovany ako list a list ma v sebe count
        {
            return persons.Count; //count;
        }
 
        public int GetSize()   
        {
            return int.MaxValue;      //return persons.Length; 
        }
 
        public Person GetPerson(int index)
        {
            return persons[index];
        }
 
        public void AddPerson(Person person)
        {
            persons.Add(person);  //persons[count] = person; - povodne
            //count++; - toto uz nepotrebujem. pretoze list persons to pocita sam
        }
 
        public Person FindPersonByName(String name)
        {
            for (int i = 0; i < GetCount()/*count*/; i++)
            {
                if (persons[i].Name.Equals(name)) 
                {
                    return persons[i];
                }
            }
            return null;
        }
 
        public Person FindPersonByPhoneNumber(String phoneNumber)
        {
            for (int i = 0; i < GetCount()/*count*/; i++)
            {
                if (persons[i].PhoneNumber.Equals(phoneNumber))
                {
                    return persons[i];
                }
                
            }
            return null;
        }
        //*****************************************************
        public void OdstranOsobu(Person osoba)
        {
            persons.Remove(osoba);
        }
 
        //*****************************************************
        public void Sort()
        {
            persons.Sort(new PersonComparer()); //usporiada zoznam podla abecedy. pricim persons pretoze to je moj zoznam, .sort pretoze persons je typu list a sort triedi. tuto fciu este musime pouzit. a to v menu si vytvorime nove tlacidlo: porovnaj/compare.
        }
    }
}