Advertisement
zvons

1_zadaća_c#

Dec 18th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.71 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace _1_Zadaća
  8. {
  9.  
  10.     public class Osoba : IComparable<Osoba>
  11.     {
  12.         string ime, prezime;
  13.         List<Osoba> prij;
  14.         Fejs f;
  15.         private Osoba(string Ime, string Prezime, Fejs fejs)
  16.         {
  17.             f = fejs;
  18.             ime = Ime;
  19.             prezime = Prezime;
  20.             prij = new List<Osoba>();
  21.         }
  22.  
  23.         public string Ime
  24.         {
  25.             get { return ime; }
  26.         }
  27.         public string Prezime
  28.         {
  29.             get { return prezime; }
  30.         }
  31.  
  32.         public int brojPrijatelja()
  33.         {
  34.             return prij.Count;
  35.         }
  36.         public List<Osoba> prijatelji()
  37.         {
  38.             return prij;
  39.         }
  40.  
  41.         public List<Osoba> medjuPrijatelji(Osoba o)
  42.         {
  43.             List<Osoba> mp = new List<Osoba>();
  44.             List<Osoba> p = o.prijatelji();
  45.  
  46.             foreach (Osoba x in prij)
  47.                 if (p.Contains(x))
  48.                     mp.Add(x);
  49.  
  50.             return mp;
  51.         }
  52.  
  53.         static public Osoba operator +(Osoba a, Osoba b)
  54.         {
  55.             // Provjera jesu osobe izbačene i jesu li u istom fejsu ako ih ima više
  56.             if (!a.f.Osobe.Contains(b) || !b.f.Osobe.Contains(a))
  57.                 throw new Exception("Korištenje osobe koja nije u fejsu");
  58.  
  59.             // Ako su osobe već prijatelji ne radi ništa
  60.             if (a.prij.Contains(b)) return a;
  61.  
  62.             a.prij.Add(b);
  63.             b.prij.Add(a);
  64.             return a;
  65.         }
  66.  
  67.         static public Osoba operator -(Osoba a, Osoba b)
  68.         {
  69.             // Provjera jesu osobe izbačene i jesu li u istom fejsu ako ih ima više
  70.             if (!a.f.Osobe.Contains(b) || !b.f.Osobe.Contains(a))
  71.                 throw new Exception("Korištenje osobe koja nije u fejsu");
  72.  
  73.             a.prij.Remove(b);
  74.             if (a.prij.Count == 0) a.f.IzbaciPrazno(a); // Ako nema prijatelja izbaci
  75.  
  76.             b.prij.Remove(a);
  77.             if (b.prij.Count == 0) b.f.IzbaciPrazno(b); // Ako nema prijatelja izbaci
  78.             return a;
  79.         }
  80.  
  81.         public override string ToString()
  82.         {
  83.             // Ispisuje ime osobe i sve njegove prijatelje
  84.             string s = ime + " " + prezime + " prijatelji:\n";
  85.             foreach (Osoba x in prij)
  86.                 s += x.Ime + " " + x.Prezime + ", ";
  87.             return s.Substring(0, s.Length - 2) + '.';
  88.         }
  89.  
  90.         public int CompareTo(Osoba o)
  91.         {
  92.             // Za sortiranje osoba po broju prijatelja, pa po prezimenu, pa po imenu
  93.             if (prij.Count != o.prij.Count)
  94.             {
  95.                 return brojPrijatelja() - o.brojPrijatelja();
  96.             }
  97.             else if (Prezime != o.Prezime)
  98.             {
  99.                 return Prezime.CompareTo(o.Prezime);
  100.             }
  101.             else
  102.             {
  103.                 return Ime.CompareTo(o.Ime);
  104.             }
  105.         }
  106.  
  107.  
  108.  
  109.         public class Fejs: IEnumerable<Osoba>
  110.         {
  111.             List<Osoba> osobe;
  112.  
  113.             public Fejs()
  114.             {
  115.                 osobe = new List<Osoba>();
  116.             }
  117.  
  118.             public void Dodaj(string Ime, string Prezime)
  119.             {
  120.                 osobe.Add(new Osoba(Ime, Prezime, this));
  121.             }
  122.  
  123.  
  124.             public List<Osoba> Osobe
  125.             {
  126.                 get { return osobe; }
  127.             }
  128.             public void Izbaci(string Prezime, string Ime)
  129.             {
  130.                 foreach(Osoba x in osobe)
  131.                 {
  132.                     if (x.Ime == Ime && x.Prezime == Prezime)
  133.                     {
  134.                         osobe.Remove(x);
  135.  
  136.                         // Izbačenu osobu uklanjamo sa lista prijatelja drugih osoba iz fejsa
  137.                         foreach (Osoba y in x.prijatelji())
  138.                             y.prij.Remove(x);
  139.                         return;
  140.                     }
  141.                 }
  142.             }
  143.  
  144.             public void Izbaci(Osoba a)
  145.             {
  146.                 osobe.Remove(a);
  147.  
  148.                 // Izbačenu osobu uklanjamo sa lista prijatelja drugih osoba iz fejsa
  149.                 foreach (Osoba y in a.prijatelji())
  150.                     y.prij.Remove(a);
  151.             }
  152.  
  153.             public void IzbaciPrazno(Osoba a)
  154.             {
  155.                 osobe.Remove(a);
  156.             }
  157.  
  158.             public void Sort()
  159.             {
  160.                 osobe.Sort();
  161.             }
  162.  
  163.             public IEnumerator<Osoba> GetEnumerator()
  164.             {
  165.                 foreach (Osoba o in osobe)
  166.                 {
  167.                     yield return o;
  168.                 }
  169.             }
  170.  
  171.             System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
  172.             {
  173.                 return GetEnumerator();
  174.             }
  175.  
  176.             public Dictionary<string, Osoba> this[string prezime]
  177.             {
  178.                 get {
  179.                     // Vraća Dictionary gdje je ključ ime osobe a vrijednost je sama osoba
  180.                     Dictionary<string, Osoba> op = new Dictionary<string, Osoba>();
  181.  
  182.                     foreach(Osoba x in osobe)
  183.                         if (x.Prezime == prezime)
  184.                             op.Add(x.Ime, x);
  185.  
  186.                     return op;
  187.                
  188.                 }
  189.             }
  190.  
  191.             public override string ToString()
  192.             {
  193.                 // Ispisuje sve osobe u Fejsu i koliko imaju prijatelja
  194.                 string s = "Fejs:\n";
  195.                 foreach (Osoba x in osobe)
  196.                     s += x.Ime + " " + x.Prezime + " " + x.brojPrijatelja() + ", ";
  197.                 return s.Substring(0, s.Length - 2) + '.' ;
  198.             }
  199.         }
  200.     }
  201.     class Program
  202.     {
  203.         static void Main(string[] args)
  204.         {
  205.             Osoba.Fejs fejs = new Osoba.Fejs();
  206.             fejs.Dodaj("Zvonimir", "Šimunović");
  207.             fejs.Dodaj("Petar", "Vlašić");
  208.             fejs.Dodaj("Stjepan", "Šimić");
  209.             fejs.Dodaj("Domagoj", "Mikić");
  210.             fejs.Dodaj("Marko", "Ćorić");
  211.             fejs.Dodaj("Marko", "Šimić");
  212.             fejs.Dodaj("Ivan", "Šimić");
  213.             fejs.Dodaj("Ante", "Vlašić");
  214.             fejs.Dodaj("Ante", "Šimić");
  215.             Console.WriteLine(fejs + "\n");
  216.  
  217.             fejs["Šimunović"]["Zvonimir"] += fejs["Šimić"]["Stjepan"];
  218.             fejs["Šimunović"]["Zvonimir"] += fejs["Vlašić"]["Petar"];
  219.             Console.WriteLine(fejs["Šimunović"]["Zvonimir"] + "\n");
  220.  
  221.             fejs["Šimunović"]["Zvonimir"] += fejs["Vlašić"]["Petar"];
  222.             Console.WriteLine(fejs["Šimunović"]["Zvonimir"] + "\n");
  223.  
  224.             fejs["Šimunović"]["Zvonimir"] -= fejs["Vlašić"]["Petar"];
  225.             Console.WriteLine(fejs["Šimunović"]["Zvonimir"] + "\n");
  226.  
  227.             fejs["Šimunović"]["Zvonimir"] += fejs["Ćorić"]["Marko"];
  228.             fejs["Šimunović"]["Zvonimir"] += fejs["Mikić"]["Domagoj"];
  229.  
  230.             Console.WriteLine(fejs["Šimunović"]["Zvonimir"] + "\n");
  231.             Console.WriteLine(fejs["Ćorić"]["Marko"] + "\n");
  232.  
  233.             fejs["Šimić"]["Ivan"] += fejs["Ćorić"]["Marko"];
  234.             fejs["Šimić"]["Ivan"] += fejs["Mikić"]["Domagoj"];
  235.             fejs["Šimić"]["Ivan"] += fejs["Vlašić"]["Ante"];
  236.  
  237.             Console.WriteLine(fejs["Šimić"]["Ivan"] + "\n");
  238.  
  239.             string mprij = "Medjuprijatelji:\n";
  240.             foreach (Osoba x in fejs["Šimunović"]["Zvonimir"].medjuPrijatelji(fejs["Šimić"]["Ivan"]))
  241.                 mprij += x.Ime + " " +  x.Prezime + ", ";
  242.             Console.WriteLine(mprij.Substring(0, mprij.Length - 2) + '.' + "\n");
  243.  
  244.             fejs.Izbaci( "Vlašić", "Ante");
  245.             Console.WriteLine(fejs +  "\n");
  246.  
  247.             fejs.Izbaci(fejs["Šimić"]["Ante"]);
  248.             Console.WriteLine(fejs + "\n");
  249.  
  250.             fejs.Sort();
  251.            
  252.             string o = "Fejs:\n";
  253.             foreach (Osoba x in fejs)
  254.                 o += x.Ime + " " + x.Prezime + " " + x.brojPrijatelja() + ", ";
  255.             Console.WriteLine(o.Substring(0, o.Length - 2) + '.' + "\n");
  256.  
  257.             Osoba z = fejs["Šimunović"]["Zvonimir"];
  258.             fejs.Izbaci(z);
  259.             Console.WriteLine(fejs + "\n");
  260.  
  261.             try
  262.             {
  263.                 z += fejs["Šimić"]["Stjepan"];
  264.             }
  265.             catch
  266.             {
  267.                 Console.WriteLine("Uhvaćena iznimka za izbačenu osobu za +=");
  268.             }
  269.  
  270.             try
  271.             {
  272.                 fejs["Šimić"]["Stjepan"] -= z;
  273.             }
  274.             catch
  275.             {
  276.                 Console.WriteLine("Uhvaćena iznimka za izbačenu osobu za -=");
  277.             }
  278.         }
  279.     }
  280. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement