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.
}
}
}