Untitled

 avatar
unknown
plain_text
2 years ago
7.2 kB
6
Indexable
namespace Cw5
{
    class Kontakt
    {
        public string nazwisko;
        public string telefon;
    }

    class Telefony
    {
        public Kontakt[] lista = new Kontakt[100];//tablica kontaktów
        public int n = 0; // liczba kontaktów
    }
    internal class Program
    {
        public static Telefony Wczytaj(string path)
        {
            Telefony t = new Telefony();
            if (File.Exists(path))
            {
                string[] dane = File.ReadAllLines(path);
                int m = dane.Length;
                Kontakt[] lista = new Kontakt[m];
                // mozna lączyć rekord w jeden string a przy odczycie robić split
                for (int i = 0; i < m; i = i + 2)
                {
                    Kontakt k = new Kontakt();
                    k.nazwisko = dane[i];
                    k.telefon = dane[i + 1];
                    lista[i / 2] = k;
                }
                t.lista = lista;
                t.n = m / 2;
            }
            return t;
        }

        public static void Zapisz(string path, Telefony t)
        {
            // mozna lączyć rekord w jeden string a przy odczycie robić split
            string[] dane = new string[t.n * 2];
            for (int i = 0; i < t.n; i++)
            {
                dane[2 * i] = t.lista[i].nazwisko;
                dane[2 * i + 1] = t.lista[i].telefon;
            }
            File.WriteAllLines(path, dane);
            return;
        }

        public static string Wypisz(Telefony t)
        {
            string telefony = "Książka telefoniczna\n";
            if (t.lista != null)
                for (int i = 0; i < t.n; i++)
                    telefony += t.lista[i].nazwisko + " " + t.lista[i].telefon + "\n";
            else telefony += "lista jest pusta\n";
            return telefony;
        }

        public static void Dodaj(Telefony t, Kontakt k)
        {
            if (t.n == t.lista.Length - 1)
            {
                //Console.WriteLine("brak miejsca");
                Kontakt[] tmp = new Kontakt[t.n + 20];
                for (int i = 0; i < t.n; i++)
                    tmp[i] = t.lista[i];
                t.lista = tmp;
            }

            t.lista[t.n] = k;
            t.n = t.n + 1;
        }

        // zakładamy unikalność nazwiska
        public static int Wyszukaj(Telefony t, string osoba)
        {
            if (t.lista != null)
            {
                for (int i = 0; i < t.n; i++)
                {
                    if (osoba == t.lista[i].nazwisko)
                    {
                        return i;
                    }
                }
            }
            return -1; // nie znaleziono
        }

        public static bool CzyPoprawny(string z)
        {
            if (z.Length != 9) return false;
            for (int i = 0; i < z.Length; i++)
                if (!Char.IsDigit(z[i])) return false;
            return true;
        }

        public static int Usun(Telefony t, string osoba)
        {
            if (t.lista != null)
            {
                int usuwany = -1;
                for (int i = 0; i < t.n; i++)
                {
                    if (osoba == t.lista[i].nazwisko)
                    {
                        usuwany = i;
                        break;
                    }
                }

                if (usuwany != -1)
                {
                    for (int i = usuwany; i < t.n - 1; i++)
                        t.lista[i] = t.lista[i + 1];
                    t.lista[t.n - 1] = null;
                    t.n--;
                }
                return usuwany;
            }
            return -1; // nie znaleziono
        }
        static void Main(string[] args)
        {
            char c;
            string s, z;
            string path = "Telefony.txt"; //plik zapisze sie w tym samym katalogu, co projekt

            Telefony t = Wczytaj(path);

            Console.WriteLine("witamy w programie książka telefoniczna");

            do
            {
                Console.WriteLine("\nAby wypisać listę wciśnij a" +
                                  "\nAby wpisać kontakt wciśnij b" +
                                  "\nAby wyszukać osobę wciśnij c" +
                                  "\nAby usunąć osobę wciśnij d" +
                                  "\nAby zakończyć wciśnij k\n");
                c = Console.ReadKey(true).KeyChar;

                //przetwarzanie polecenia użytkownika
                switch (c)
                {
                    case 'a':
                    case 'A':
                        Console.WriteLine(Wypisz(t));

                        break;
                    case 'b':
                    case 'B':
                        Console.WriteLine("podaj nazwisko");
                        s = Console.ReadLine();
                        //tu w razie czego sprawdzanie poprawności danych
                        if (Wyszukaj(t, s) != -1)
                        {
                            Console.WriteLine("kontakt już wpisany");
                            break;
                        }

                        Console.WriteLine("podaj telefon");
                        z = Console.ReadLine();
                        //tu w razie czego sprawdzanie poprawności danych
                        if (!CzyPoprawny(z))
                        {
                            Console.WriteLine("telefon niepoprawny");
                            break;
                        }
                        Kontakt k = new Kontakt();
                        k.nazwisko = s;
                        k.telefon = z;
                        Dodaj(t, k);
                        break;
                    case 'c':
                    case 'C':
                        Console.WriteLine("podaj nazwisko do wyszukania");
                        s = Console.ReadLine();
                        int wynik = Wyszukaj(t, s);
                        if (wynik >= 0)
                        {
                            Console.WriteLine("znaleziono na pozycji " + wynik +
                                              " - " + t.lista[wynik].nazwisko +
                                              " - " + t.lista[wynik].telefon);
                        }
                        else Console.WriteLine("nie znaleziono osoby " + s);
                        Console.WriteLine();
                        break;
                    case 'd':
                    case 'D':
                        Console.WriteLine("podaj nazwisko");
                        s = Console.ReadLine();
                        if (Usun(t, s) >= 0) Console.WriteLine("usunięto " + s);
                        else Console.WriteLine("nie znaleziono osoby " + s);
                        break;
                }
            }
            while (!(c == 'k' || c == 'K'));

            Zapisz(path, t);

        }
    }
}
Editor is loading...