示例#1
0
        int WczytajWładających(DokumentSwde swde)
        {
            var wladajacy = swde.GetObiektyKlasy("G5UDW");

            foreach (var klu in wladajacy)
            {
                var    jdr             = klu.GetRelacja("G5RWŁD"); //Jednostka rejestrowa? (opcjonalna)
                string g5ijr           = jdr.GetAtrybut("G5IJR");
                JednostkaRejestrowa jr = _indeksJednostek[JednostkaRejestrowa.ParseG5(g5ijr).ToString()];
                var pod = klu.GetRelacja("G5RPOD"); //Podmiot
                switch (pod.Typ)
                {
                case "G5OSF":
                    jr.DodajWladajacego(pod.CreateOsobaFizyczna());
                    break;

                case "G5INS":
                    jr.DodajWladajacego(pod.CreateInstytucja());
                    break;

                case "G5MLZ":
                    jr.DodajWladajacego(pod.CreateMałżeństwo());
                    break;

                case "G5OSZ":
                    jr.DodajWladajacego(pod.CreatePodmiotGrupowy());
                    break;

                default: Kontrakt.fail(); break;
                }
            }
            return(wladajacy.Count());
        }
示例#2
0
        public IEnumerable <DzialkaEwidencyjna> dzialkiDotychczasowePodzielone()
        {
            Dictionary <string, DzialkaEwidencyjna> podzieloneDzialki = new Dictionary <string, DzialkaEwidencyjna>();
            List <DzialkaEwidencyjna> posortowaneDzialki = new List <DzialkaEwidencyjna>();

            foreach (var dzialka in this)
            {
                //Pomiń działki bez zdefiniowanej działki ewidencyjnej.
                if (!dzialka.przypisanaDotychczasowa())
                {
                    continue;
                }
                DzialkaEwidencyjna dzialkaDotychczasowa = dzialka.dzialkaDotychczasowa();
                //Pomiń działki niepodzielone.
                if (dzialkaDotychczasowa.countPodzielone() == 0)
                {
                    continue;
                }
                //Działka nowa powinna mieć inny identyfikator niż działka dotychczasowa!
                Kontrakt.assert(!dzialka.identyfikator().Equals(dzialkaDotychczasowa.identyfikator()),
                                "Identyfikator nowej działki jest taki sam jak dotychczasowej.");
                string idPodzielona = dzialkaDotychczasowa.identyfikator().ToString();
                if (!podzieloneDzialki.ContainsKey(idPodzielona))
                {
                    podzieloneDzialki.Add(idPodzielona, dzialkaDotychczasowa);
                    posortowaneDzialki.Add(dzialkaDotychczasowa);
                }
            }
            return(posortowaneDzialki);
        }
示例#3
0
        public IEnumerable <DzialkaEwidencyjna> działki()
        {
            var powierzchnia = new Powierzchnia(1);

            foreach (var dze in _dokument.GetObiektyKlasy("G5DZE"))
            {
                var g5idd   = dze.GetAtrybut("G5IDD");
                var id      = IdentyfikatorDzialki.parseG5(g5idd);
                var działka = new DzialkaEwidencyjna(id, powierzchnia);
                //Nie dodawaj do działki punktów jeżeli choć jeden jest niegraniczny, aby wymusić status "nieznany" dla działki.
                if (dze.Geometria.countPunktyNiegraniczne() == 0)
                {
                    Kontrakt.assert(działka.countPunkty() == 0, "Do działki były już importowane punkty.");
                    ObiektSwde[] punktySwde = dze.Geometria.PunktyGraniczne;
                    foreach (var punktSwde in punktySwde)
                    {
                        string     g5zrd  = punktSwde.GetAtrybut("G5ZRD");
                        string     g5bpp  = punktSwde.GetAtrybut("G5BPP");
                        var        punkt  = new PunktGraniczny(g5zrd, g5bpp);
                        ObiektSwde operat = punktSwde.GetRelacja("G5RKRG");
                        string     g5syg  = operat.GetAtrybut("G5SYG");
                        punkt.operat(g5syg);
                        działka.dodajPunkt(punkt);
                    }
                }
                yield return(działka);
            }
        }
示例#4
0
        public static IdentyfikatorDzialki parseG5(string g5idd)
        {
            //D,G5IDD,D,142302_2.0001.296
            //D,G5IDD,D,142302_2.0007.AR_2.656
            //<teryt>.<obr>.[arkusz].<idd>
            char[]   separator = new char[] { '.' };
            string[] pola      = g5idd.Split(separator);
            int      maxFields = 4;
            int      minFields = 3;

            Kontrakt.assert(pola.Length >= minFields && pola.Length <= maxFields);
            string numerTeryt   = pola[0];
            string numerObrebu  = byte.Parse(pola[1]).ToString();
            string numerDzialki = pola[pola.Length - 1];
            string numerArkusza = string.Empty;

            if (pola.Length == 4)
            {
                numerArkusza = pola[2].Replace("AR_", "");
            }
            if (!string.IsNullOrEmpty(numerArkusza))
            {
                numerDzialki = numerArkusza + "." + numerDzialki;
            }
            return(new IdentyfikatorDzialki(numerObrebu, numerDzialki));
        }
示例#5
0
        public void Wczytaj(string fileName)
        {
            //_klu.read(Path.Combine(Path.GetDirectoryName(fileName), "uzytkiG5.csv"));
            var lines  = File.ReadAllLines(path: fileName, encoding: _kodowanie);
            var header = lines.First();

            Kontrakt.assert(
                header.Equals("Rozliczenie konturów klasyfikacyjnych na działkach [m^2]"),
                "Nieprawidłowy nagłówek pliku z rozliczeniem konturów.");
            var wczytaneDziałki = 0;
            var rekordDziałki   = new List <string>();

            for (int i = 1; i < lines.Length; i++)
            {
                var trimmedLine = lines[i].Trim();
                if (KoniecRekorduDziałki(rekordDziałki, trimmedLine))
                {
                    WczytajRekordDziałki(_rozliczenie, rekordDziałki);
                    wczytaneDziałki++;
                }
                else
                {
                    //Kumulacja rekordu działki wraz z użytkami.
                    if (!String.IsNullOrEmpty(trimmedLine))
                    {
                        rekordDziałki.Add(trimmedLine);
                    }
                }
            }
            Kontrakt.ensures(rekordDziałki.Count == 0, "Nieprawidłowo zakończony rekord działki");
            Kontrakt.ensures(_rozliczenie.Any());
            Kontrakt.ensures(wczytaneDziałki == _rozliczenie.Count());
        }
        public static PodmiotGrupowy CreatePodmiotGrupowy(this ObiektSwde podmiotGrupowy)
        {
            string         npe      = podmiotGrupowy.GetAtrybut("G5NPE");
            string         nsk      = podmiotGrupowy.GetAtrybut("G5NSK");
            PodmiotGrupowy pg       = new PodmiotGrupowy(string.IsNullOrEmpty(npe) ? nsk : npe);
            var            podmioty = podmiotGrupowy.GetRelacjaWielokrotna("G5RSKD"); //Składa się

            foreach (var podmiot in podmioty)
            {
                switch (podmiot.Typ)
                {
                case "G5OSF":
                    pg.dodajPodmiot(CreateOsobaFizyczna(podmiot));
                    break;

                case "G5INS":
                    pg.dodajPodmiot(CreateInstytucja(podmiot));
                    break;

                case "G5MLZ":
                    pg.dodajPodmiot(CreateMałżeństwo(podmiot));
                    break;

                default: Kontrakt.fail(); break;
                }
            }
            return(pg);
        }
示例#7
0
 public void resetEwidencja(DzialkaEwidencyjna dzialka)
 {
     Kontrakt.requires(dzialka._dzialkiPodzielone.Count == 0);
     Kontrakt.requires(dzialka.jednostkaRejestrowa() != null, "Działka ewidencyjna nie ma przypisanej jednostki rejestrowej.");
     Kontrakt.requires(dzialka.countKlasouzytki() > 0, "Działka ewidencyjna nie ma żadnych użytków.");
     _dzialkaDotychczasowa = dzialka;
 }
示例#8
0
        public void DodajDziałkę(Działka działka)
        {
            if (działka == null)
            {
                throw new ArgumentNullException(paramName: "działka", message: "Działka jest null.");
            }
            if (działka.Any() == false)
            {
                throw new InvalidOperationException(message: "Działka nie zawiera żadnych klasoużytków.");
            }
            if (SzukajIdDziałki(działka.Id) != null)
            {
                throw new InvalidOperationException("Rozliczenie zawiera już działkę " + działka.Id);
            }
            int dzialkiPrzed = _działki.Count;

            _działki.Add(działka);
            var id = działka.Id;

            _indeksDziałek.Add(id.ToString(), działka);
            int dzialkiPo = _działki.Count;

            Kontrakt.ensures(dzialkiPrzed + 1 == dzialkiPo);
            Kontrakt.ensures(SzukajIdDziałki(id) != null);
        }
        public static bool uległaZmianie(this Działka staraDzialka, Działka nowaDzialka)
        {
            if (!nowaDzialka.Powierzchnia.Equals(staraDzialka.Powierzchnia))
            {
                return(true);                                                             //niezgodna powierzchnia działki
            }
            if (nowaDzialka.Count() != staraDzialka.Count())
            {
                return(true);                                             //niezgodna liczba użytków
            }
            var użytki = staraDzialka.UnionUżytki(nowaDzialka);

            foreach (var użytek in użytki)
            {
                Klasoużytek stary = staraDzialka.SzukajUżytku(użytek);
                Klasoużytek nowy  = nowaDzialka.SzukajUżytku(użytek);
                if (stary == null || nowy == null)
                {
                    return(true);                               //dodany/usunięty użytek
                }
                Powierzchnia stara = stary.powierzchnia();
                Powierzchnia nowa  = nowy.powierzchnia();
                if (!nowa.Equals(stara))
                {
                    return(true);                     //inna powierzchnia użytków
                }
                //if (nowa.powyzejOdchylki(stara)) return true; //powyżej odchyłki
                Kontrakt.assert(stary.Equals(nowy), "Różne oznaczenie użytku: " + stary.ToString());
            }
            return(false);
        }
示例#10
0
        public void read(string fileName)
        {
            //OZN,OFU,OZU,OZK,OPIS,OFUst,OZUst,OZKst,
            //"B","B",,,"Tereny mieszkaniowe",,"B",,
            string[] lines  = File.ReadAllLines(fileName, Encoding.GetEncoding(1250));
            string   header = lines.First();

            Kontrakt.assert(header.StartsWith("OZN,OFU,OZU,OZK,OPIS"));
            var query = from line in lines.Skip(1)
                        let split = line.Replace("\"", "").Replace("\'", "").Split(',')
                                    select new
            {
                ozn = split[0],
                ofu = split[1],
                ozu = split[2],
                ozk = split[3]
            };

            foreach (var tuple in query)
            {
                string[] ooo = new string[] { tuple.ofu, tuple.ozu, tuple.ozk };
                _oznaczenia.Add(tuple.ozn, ooo);
                _klu.Add(join(ooo), tuple.ozn);
            }
        }
示例#11
0
 public DokumentReader(string fileName)
 {
     Kontrakt.requires(File.Exists(fileName), "Plik SWDE nie istnieje: " + fileName);
     _budowniczy = new BudowniczySwde(this);
     _reader     = new SwdeReader(_budowniczy);
     _reader.Read(fileName);
     Kontrakt.ensures(_budowniczy.CzyZbudowany, "Plik SWDE nie został prawidłowo wczytany.");
 }
示例#12
0
 public void dzialkaDotychczasowa(DzialkaEwidencyjna dzialka)
 {
     Kontrakt.requires(_dzialkaDotychczasowa == null,
                       "Działce już została przypisana działka dotychczasowa " + _identyfikator);
     Kontrakt.requires(dzialka.jednostkaRejestrowa() != null, "Działka dotychczasowa nie ma przypisanej jednostki rejestrowej.");
     Kontrakt.requires(dzialka.countKlasouzytki() > 0, "Działka dotychczasowa nie ma żadnych użytków.");
     _dzialkaDotychczasowa = dzialka;
 }
示例#13
0
        public DzialkaEwidencyjna dzialkaById(IdentyfikatorDzialki id)
        {
            Kontrakt.requires(id != null);
            Kontrakt.requires(zawieraId(id), "Rozliczenie nie zawiera działki " + id.ToString());
            DzialkaEwidencyjna dzialka = _indeks[id.identyfikator()];

            Kontrakt.ensures(dzialka != null);
            return(dzialka);
        }
示例#14
0
 void wczytajPlik(string fileName)
 {
     _fileName = fileName;
     _doc      = DocX.Load(fileName);
     Kontrakt.assert(_doc.Tables.Any(), "Szablon wykazu zmian nie zawiera żadnych tabel.");
     _table       = _doc.Tables.First();
     _templateRow = _table.Rows.Last();
     wczytajNagłówek();
 }
示例#15
0
        private string _operat = string.Empty; //Sygnatura dokumentu.

        public PunktGraniczny(string zrodloDanych, string bladPolozenia)
        {
            _bladPolozenia = bladPolozenia;
            _zrodloDanych  = zrodloDanych;
            _rodzaj        = new RodzajPunktu(zrodloDanych, bladPolozenia);
            Kontrakt.ensures(_zrodloDanych.Equals(zrodloDanych));
            Kontrakt.ensures(_rodzaj != null);
            Kontrakt.ensures(_operat.Length == 0);
        }
示例#16
0
 public void dodajPodzial(DzialkaEwidencyjna dzialkaPierwotna, string uwaga)
 {
     //Działka powinna mieć inny numer!!!
     Kontrakt.requires(przypisanaDotychczasowa(),
                       "Nie można dodać podziału bez przypisania działki dotychczasowej.");
     Kontrakt.requires(_dzialkaDotychczasowa.Equals(dzialkaPierwotna),
                       "Podział działki dotyczy innej działki dotychczasowej " + _identyfikator);
     _dzialkaDotychczasowa.podziel(this);
     _dzialkaDotychczasowa._przyczynaPodzialu = uwaga;
 }
示例#17
0
        public void dodajPunkt(PunktGraniczny punkt)
        {
            Kontrakt.requires(punkt != null);
            int countPrzed = countPunkty();

            _punkty.Add(punkt);
            int countPo = countPunkty();

            Kontrakt.ensures(countPrzed + 1 == countPo);
        }
示例#18
0
 public DzialkaEwidencyjna(IdentyfikatorDzialki idDzialki, Powierzchnia powDzialki)
     : base(powDzialki)
 {
     Kontrakt.requires(idDzialki != null);
     Kontrakt.requires(powDzialki != null);
     _identyfikator = idDzialki;
     Kontrakt.ensures(_identyfikator == idDzialki);
     Kontrakt.ensures(powierzchnia().Equals(powDzialki));
     Kontrakt.ensures(_dzialkaDotychczasowa == null);
     Kontrakt.ensures(_dzialkiPodzielone.Count == 0);
 }
示例#19
0
 private bool operatowePunkty(DzialkaEwidencyjna dzialka)
 {
     foreach (var punkt in dzialka.punkty())
     {
         Kontrakt.assert(punkt.rodzaj().zPomiaru());
         string operat = punkt.operat();
         if (!operaty.Contains(operat))
         {
             return(false);
         }
     }
     return(true);
 }
示例#20
0
        public void dodajKlasouzytek(Klasouzytek klasouzytek)
        {
            Kontrakt.requires(klasouzytek != null);
            int countPrzed = countKlasouzytki();

            foreach (var uzytek in _klasouzytki)
            {
                Kontrakt.assert(!uzytek.Equals(klasouzytek), "W działce " + identyfikator().ToString() + " już jest klasoużytek " + klasouzytek);
            }
            _klasouzytki.Add(klasouzytek);
            int countPo = countKlasouzytki();

            Kontrakt.ensures(countPrzed + 1 == countPo);
        }
示例#21
0
        private Klasouzytek parseKlasouzytek(string linia)
        {
            string[]     pola         = linia.Split(new char[] { ' ' }, 2, StringSplitOptions.RemoveEmptyEntries);
            string       oznaczenie   = pola[0];
            Powierzchnia powierzchnia = Powierzchnia.parseMetry(pola[1]);

            string[]    klu         = _klu.map(oznaczenie);
            Klasouzytek klasouzytek = new Klasouzytek(klu[0], klu[1], klu[2], powierzchnia);
            string      ozn         = klasouzytek.oznaczenie(_klu);

            Kontrakt.ensures(oznaczenie.Equals(ozn), "Odtworzenie oznaczenia nie jest możliwe: " + oznaczenie + " z " +
                             klasouzytek.ToString() + " = " + ozn);
            return(klasouzytek);
        }
        /// <summary>
        /// D,G5IJR,D,
        /// 142307_2.0001.G00001
        /// 281407_2.0005.B1
        /// </summary>
        /// <param name="g5ijr"></param>
        /// <returns></returns>
        public static JednostkaRejestrowa ParseG5(string g5ijr)
        {
            char[]   separator = new char[] { '.' };
            string[] pola      = g5ijr.Split(separator);
            int      maxFields = 3;
            int      minFields = 3;

            Kontrakt.assert(pola.Length >= minFields && pola.Length <= maxFields, "Nieprawidłowy format identyfikatora jednostki rejestrowej: " + g5ijr);
            string numerTeryt     = pola[0];
            string numerObrebu    = pola[1];
            string numerJednostki = pola[2];

            //int numer = int.Parse(numerJednostki.Replace("G", String.Empty));
            return(new JednostkaRejestrowa(numerTeryt, numerObrebu, numerJednostki));
        }
示例#23
0
 public IdentyfikatorDzialki(string numerObrebu, string numerDzialki)
 {
     Kontrakt.requires(!String.IsNullOrEmpty(numerObrebu), "Numer obrębu jest pusty.");
     foreach (var c in numerObrebu)
     {
         Kontrakt.requires(char.IsDigit(c), "Numer obrębu nie składa się z cyfr:" + numerObrebu);
     }
     Kontrakt.requires(!String.IsNullOrEmpty(numerDzialki), "Numer działki jest pusty.");
     Kontrakt.requires(char.IsDigit(numerDzialki[0]),
                       "Numer działki " + numerDzialki + " nie zaczyna się od cyfry.");
     _numerObrebu  = numerObrebu;
     _numerDzialki = numerDzialki;
     Kontrakt.ensures(_numerObrebu.Equals(numerObrebu));
     Kontrakt.ensures(_numerDzialki.Equals(numerDzialki));
 }
示例#24
0
        public void dodajDzialka(DzialkaEwidencyjna dzialka)
        {
            Kontrakt.requires(dzialka != null);
            Kontrakt.requires(dzialka.countKlasouzytki() > 0, "Działka nie zawiera żadnych klasoużytków.");
            Kontrakt.requires(!zawieraId(dzialka.identyfikator()), "Rozliczenie zawiera już działkę " + dzialka.identyfikator());
            int dzialkiPrzed = _dzialki.Count;

            _dzialki.Add(dzialka);
            IdentyfikatorDzialki id = dzialka.identyfikator();

            _indeks.Add(id.identyfikator(), dzialka);
            int dzialkiPo = _dzialki.Count;

            Kontrakt.ensures(dzialkiPrzed + 1 == dzialkiPo);
            Kontrakt.ensures(zawieraId(id));
        }
        private static Collection <Kontrakt> Read(SqlDataReader reader)
        {
            Collection <Kontrakt> kontrakty = new Collection <Kontrakt>();

            while (reader.Read())
            {
                int      i        = -1;
                Kontrakt kontrakt = new Kontrakt();
                kontrakt.id       = reader.GetInt32(++i);
                kontrakt.jmeno    = reader.GetString(++i);
                kontrakt.prijmeni = reader.GetString(++i);
                kontrakt.cislo    = reader.GetInt32(++i);
                kontrakt.tym      = reader.GetString(++i);
                kontrakty.Add(kontrakt);
            }
            return(kontrakty);
        }
 private JednostkaRejestrowa(string teryt, string obreb, string numer)
 {
     Kontrakt.requires(!String.IsNullOrEmpty(teryt), "Numer teryt jednostki rejestrowej jest pusty.");
     Kontrakt.requires(!String.IsNullOrEmpty(obreb), "Numer obrębu jednostki rejestrowej jest pusty.");
     Kontrakt.requires(teryt.Length.Equals(8), "Numer teryt jednostki rejestrowej jest nieprawidłowy: " + teryt);
     Kontrakt.requires(obreb.Length.Equals(4), "Numer obrębu jednostki rejestrowej jest nieprawidłowy: " + obreb);
     Kontrakt.requires(!String.IsNullOrEmpty(numer), "Numer jednostki rejestrowej jest pusty.");
     Kontrakt.requires(numer.StartsWith("G") || numer.StartsWith("B") || numer.StartsWith("L"),
                       "Numer jednostki rejestrowej nie zaczyna się od G, B lub L: " + teryt + "." + obreb + "." + numer);
     Kontrakt.forAll(numer.Substring(2), char.IsDigit); //Numer jednostki rejestrowej powinien zawierać cyfry
     _teryt = teryt;
     _obreb = obreb;
     _numer = numer;
     Kontrakt.ensures(teryt.Equals(_teryt));
     Kontrakt.ensures(obreb.Equals(_obreb));
     Kontrakt.ensures(numer.Equals(_numer));
 }
示例#27
0
        public static string nazwa(string teryt)
        {
            string kod = teryt.Substring(0, 2);

            switch (kod)
            {
            case "02": return("DOLNOŚLĄSKIE");

            case "04": return("KUJAWSKO-POMORSKIE");

            case "06": return("LUBELSKIE");

            case "08": return("LUBUSKIE");

            case "10": return("ŁÓDZKIE");

            case "12": return("MAŁOPOLSKIE");

            case "14": return("MAZOWIECKIE");

            case "16": return("OPOLSKIE");

            case "18": return("PODKARPACKIE");

            case "20": return("PODLASKIE");

            case "22": return("POMORSKIE");

            case "24": return("ŚLĄSKIE");

            case "26": return("ŚWIĘTOKRZYSKIE");

            case "28": return("WARMIŃSKO-MAZURSKIE");

            case "30": return("WIELKOPOLSKIE");

            case "32": return("ZACHODNIOPOMORSKIE");

            default: break;
            }
            Kontrakt.fail("Tery zawiera nierozpoznany kod województwa: " + teryt);
            return(null);
        }
示例#28
0
        private void writeDzialka(DzialkaEwidencyjna dzialka)
        {
            string        id           = dzialka.identyfikator().ToString();
            RodzajDzialki rodzaj       = rozliczenie().rodzaj;
            bool          nieznany     = rodzaj.nieznany(dzialka);
            bool          wektoryzacja = rodzaj.niepomierzona(dzialka);
            bool          pomierzona   = rodzaj.pomierzona(dzialka);
            var           operaty      = from pkt in dzialka.punkty()
                                         select "[" +
                                         pkt.zrodloDanych() + ", " +
                                         pkt.bladPolozenia() + ", " +
                                         pkt.operat() + "]";
            string joinOperaty = string.Join(" ", operaty);

            if (nieznany)
            {
                _writer.WriteLine("{0,-16}{1,-16}{2}", id, "nieznany", joinOperaty);
            }
            if (wektoryzacja)
            {
                _writer.WriteLine("{0,-16}{1,-16}{2}", id, "wektoryzacja", joinOperaty);
            }
            if (pomierzona)
            {
                _writer.WriteLine("{0,-16}{1,-16}{2}", id, "pomiar", joinOperaty);
            }
            int count = 0;

            if (nieznany)
            {
                count++;
            }
            if (wektoryzacja)
            {
                count++;
            }
            if (pomierzona)
            {
                count++;
            }
            Kontrakt.ensures(count == 1, "Konflikt rodzaju działki: " + id);
        }
示例#29
0
        protected bool?pomierzonePunkty(DzialkaEwidencyjna dzialka)
        {
            List <PunktGraniczny> nieznane     = new List <PunktGraniczny>();
            List <PunktGraniczny> operatowe    = new List <PunktGraniczny>();
            List <PunktGraniczny> wektoryzacja = new List <PunktGraniczny>();
            int innePunkty = 0;

            foreach (var punkt in dzialka.punkty())
            {
                RodzajPunktu rodzaj = punkt.rodzaj();
                if (rodzaj.nieznany())
                {
                    nieznane.Add(punkt);
                }
                else if (rodzaj.zWektoryzacji())
                {
                    wektoryzacja.Add(punkt);
                }
                else if (rodzaj.zPomiaru())
                {
                    operatowe.Add(punkt);
                }
                else
                {
                    innePunkty++;
                }
            }
            Kontrakt.assert(innePunkty == 0);
            if (nieznane.Count > 0)
            {
                return(null);
            }
            if (wektoryzacja.Count > 0)
            {
                return(false);
            }
            if (operatowe.Count > 0)
            {
                return(true);
            }
            return(null);
        }
示例#30
0
        public static Powierzchnia parseMetry(string s)
        {
            Kontrakt.requires(!String.IsNullOrEmpty(s), "Powierzchnia jest pusta.");
            Powierzchnia pow = null;

            try
            {
                pow = new Powierzchnia(long.Parse(s));
            }
            catch (FormatException)
            {
                Kontrakt.fail("Napis " + s + " nie reprezentuje powierzchni w m^2.");
            }
            catch (OverflowException)
            {
                Kontrakt.fail("Napis " + s + " reprezentuje powierzchnię poza zakresem dopuszczalnych wartości.");
            }
            Kontrakt.ensures(pow != null);
            return(pow);
        }