funkcja wyszukiwania

0

Witam, mam problem z funkcja wyszukiwania w c#, wyskakuje mi błąd The name 'KsiazkiList' does not exist in the current context w funkcji wyszukiwania, jak można to naprawić ,co napisałem źle? Poniżaj wklejam cały kod programu, pozdrawiam.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;


class ksiazki
{
    public string tytul { get; private set; }
    public string imie { get; private set; }
    public string nazwisko { get; private set; }
    public string wydawnictwo { get; private set; }
    public int rok_wydania { get; private set; }
    public int nr_isbn { get; private set; }
    public int nr_wydania { get; private set; }

    public ksiazki(string tyt, string imi, string nazw, string wyd, int rok, int isbn, int nrwyd)
    {

        tytul = tyt;
        imie = imi;
        nazwisko = nazw;
        wydawnictwo = wyd;
        rok_wydania = rok;
        nr_isbn = isbn;
        nr_wydania = nrwyd;

    }

    public void wyswietl()
    {
        Console.WriteLine(tytul + " " + imie + " " + nazwisko + " " + wydawnictwo + " " + rok_wydania + " " + nr_isbn + " " + nr_wydania);
    }
}



class Program
{

    
    static public void search()
        {
            bool start = true ;

            if (KsiazkiList.Count == 0)
            {
                Console.WriteLine("Lista filmow jest pusta!\n\n");
            }
            else
            {
                Console.WriteLine("Wpisz szukane słowo:");
                String searchWord = Console.ReadLine();

                for (int j = 0; j < KsiazkiList.Count; j++)
                {
                    ksiazki current = KsiazkiList.ElementAt(j);

                    if (current.tytul == searchWord || 
                        current.imie == searchWord ||
                        Convert.ToString(current.rok_wydania) == searchWord ||
                        Convert.ToString(current.nr_isbn) == searchWord ||
                        Convert.ToString(current.nr_wydania) == searchWord ||
                        current.wydawnictwo == searchWord ||
                        current.nazwisko == searchWord ||
                       
                   
                    {
                        if (start)
                        {
                            Console.WriteLine("Index {0}  {1}  {2}  {3}  {4}  {5}  {6} \n\n", "TYTUL", "REZYSER", "ROK PRODUKCJI", "DLUGOSC", "TYP DYSKU", "FORMAT", "NAPISY");
                            start = false;
                        }

                        Console.WriteLine("{0}  {1}  {2}  {3}  {4}  {5}  {6}  {7} \n", j, current.imie, current.nazwisko, current.tytul, current.wydawnictwo, current.rok_wydania,
                               current.nr_isbn, current.nr_wydania);
                    }
                }

                if (start)
                {
                    Console.WriteLine("Brak wynikow!");
                }
    }
            
    }

    private static void zapis(List<ksiazki> KsiazkiList)
    {
        FileStream plik;


        try
        {
            plik = new FileStream("baza.txt", FileMode.Create, FileAccess.Write);
        }

        catch (FileNotFoundException)
        {
            plik = new FileStream("baza.txt", FileMode.OpenOrCreate, FileAccess.Write);

        }

        StreamWriter str_zapis = new StreamWriter(plik);

        foreach (ksiazki oksiazki in KsiazkiList)
        {
            //Console.WriteLine(oksiazki.tytul + " " + oksiazki.imie + " " + oksiazki.nazwisko + " " + oksiazki.wydawnictwo + " " + oksiazki.rok_wydania + " " + oksiazki.nr_isbn + " " + oksiazki.nr_wydania);
            str_zapis.WriteLine(oksiazki.tytul + " " + oksiazki.imie + " " + oksiazki.nazwisko + " " + oksiazki.wydawnictwo + " " + oksiazki.rok_wydania + " " + oksiazki.nr_isbn + " " + oksiazki.nr_wydania);
        }
        str_zapis.Close();
        plik.Close();

    }

    private static void odczyt(List<ksiazki> KsiazkiList)
    {
        //List<ksiazki> KsiazkiList = new List<ksiazki>();
        FileStream plik;

        try
        {
            plik = new FileStream("baza.txt", FileMode.Open, FileAccess.Read);
        }

        catch (FileNotFoundException)
        {
            Console.WriteLine("* BŁĄD * Brak pliku baza.txt");
            return;
        }

        StreamReader str_odczyt = new StreamReader(plik);

        string odczyt;

        do
        {
            odczyt = str_odczyt.ReadLine();
            if (odczyt == null)
                break;
            //Console.WriteLine(odczyt);

            string[] split = odczyt.Split(new Char[] { ' ' });




            string tytul = split[0];
            string imie = split[1];
            string nazwisko = split[2];
            string wydawnictwo = split[3];
            int rok_wydania = Int32.Parse(split[4]);
            int nr_isbn = Int32.Parse(split[5]);
            int nr_wydania = Int32.Parse(split[6]);

            KsiazkiList.Add(new ksiazki(tytul, imie, nazwisko, wydawnictwo, rok_wydania, nr_isbn, nr_wydania));

        } while (odczyt != null);

        //foreach (ksiazki oksiazki in KsiazkiList)
        //   //Console.WriteLine(oksiazki.tytul + " " + oksiazki.imie + " " + oksiazki.nazwisko + " " + oksiazki.wydawnictwo + " " + oksiazki.rok_wydania + " " + oksiazki.nr_isbn + " " + oksiazki.nr_wydania);


        str_odczyt.Close();
        plik.Close();
        plik = new FileStream("baza.txt", FileMode.Create, FileAccess.ReadWrite);
        plik.Close();
        zapis(KsiazkiList);

    }

    private static void dodaj(List<ksiazki> KsiazkiList)
    {
        int rok_wydania, nr_isbn, nr_wydania;
        string liczba, liczba1, liczba2, tytul, imie, nazwisko, wydawnictwo;
        Console.WriteLine("Podaj tytul:");
        tytul = Console.ReadLine();
        Console.WriteLine("Podaj Imie autora:");
        imie = Console.ReadLine();
        Console.WriteLine("Podaj nazwisko autora:");
        nazwisko = Console.ReadLine();
        Console.WriteLine("Podaj nazwe wydawnictwa:");
        wydawnictwo = Console.ReadLine();
        Console.WriteLine("Podaj rok_wydania:");
        liczba = Console.ReadLine();
        rok_wydania = Int32.Parse(liczba);
        Console.WriteLine("Podaj Numer ISBN (bez myslnikow):");
        liczba1 = Console.ReadLine();
        nr_isbn = Int32.Parse(liczba1);
        Console.WriteLine("Podaj numer wydania:");
        liczba2 = Console.ReadLine();
        nr_wydania = Int32.Parse(liczba2);


        KsiazkiList.Add(new ksiazki(tytul, imie, nazwisko, wydawnictwo, rok_wydania, nr_isbn, nr_wydania));

    }

    private static void wyswietl(List<ksiazki> KsiazkiList)
    {
        int i = 1;
        Console.WriteLine("\n\n");
        foreach (ksiazki oksiazki in KsiazkiList)
        {
            Console.WriteLine(i+ "." + "Tytuł:" + oksiazki.tytul +  " Imie autora:" + oksiazki.imie + "Nazwisko autora: " + oksiazki.nazwisko + "Nazwa wydawnictwa: " + oksiazki.wydawnictwo + "Rok wydania: " + oksiazki.rok_wydania + "Numer ISBN " + oksiazki.nr_isbn + "Numer wydania " + oksiazki.nr_wydania);
            i++;
        }
        Console.WriteLine("\n\n");
    }

    private static void usun(List<ksiazki> KsiazkiList)
    {
        List<ksiazki> FoundKsiazke = KsiazkiList.FindAll(Element => Element.tytul.Equals("Samsung"));
        foreach (ksiazki oksiazki in KsiazkiList)
        {
            Console.WriteLine(". " + oksiazki.tytul + " " + oksiazki.imie + " " + oksiazki.nazwisko + " " + oksiazki.wydawnictwo + " " + oksiazki.rok_wydania + " " + oksiazki.nr_isbn + " " + oksiazki.nr_wydania);

        }
    }







    static void Main(string[] args)
    {

        List<ksiazki> KsiazkiList = new List<ksiazki>();
        int opt;
        for (; ; )
        {
            Console.WriteLine("\n Program - Lista ksiazek \n Wybierz opcje: \n 1 - Wyswietl liste \n 2 - Dodaj do listy \n 3 - zapisz do pliku \n 4 - Odczyt z pliku \n 0 - Zakoncz program \n");

            string liczba = Console.ReadLine();
            opt = Int32.Parse(liczba);

            switch (opt)
            {
                case 1:
                    usun(KsiazkiList);
                    wyswietl(KsiazkiList);
                    break;

                case 2:
                    dodaj(KsiazkiList);
                    break;

                case 3:
                    zapis(KsiazkiList);
                    break;

                case 4:
                    KsiazkiList.Clear();
                    odczyt(KsiazkiList);
                    break;

                case 0:
                    goto end;
                    break;

                default:
                    Console.WriteLine("Wybrales zla opcje");
                    break;
            }
        }

       // Console.WriteLine(PhonesList.Count);




        end:


        string b;
        b = Console.ReadLine();

    }
}


 
0

musisz gdzieś zadeklarować tą listę albo wrzucić jako argument do metody.

0

nie wiem czy źle wkleiłeś czy co ale masz błąd tutaj;

    if (current.tytul == searchWord || 
                        current.imie == searchWord ||
                        Convert.ToString(current.rok_wydania) == searchWord ||
                        Convert.ToString(current.nr_isbn) == searchWord ||
                        Convert.ToString(current.nr_wydania) == searchWord ||
                        current.wydawnictwo == searchWord ||
                        current.nazwisko == searchWord ||
 
 
                    {

nie zamknąłeś warunki IF

i oprócz tego do funkcji search powinieneś dodać (w sensie jako parametr):

 List<ksiazki> KsiazkiList 
0

Oczywiście, że Ci wyskakuje taki błąd, bo sprawdzasz property Count na obiekcie, którego nie ma w tej metodzie (druga linijka w metodzie search()).

PS. Kod twój kod fatalnie się czyta,

  1. Nie mieszaj polskich nazw z angielskimi,
  2. W C# metody nazywamy raczej od dużej litery (tylko konwencja ale popularna),
  3. Twórz małe metody,
  4. W klasie książki zamiast wyświetl() powinieneś mieć nadpisane ToString(),
  5. Ta pętla nieskończona z wyjściem za pomocą goto też nie jest dobrym pomysłem,
0

a próbowałem zrobic funkcje wyszukiwania i napisałem coś takiego

   static public void sortowanie(List<ksiazki> KsiazkiList)
    {
        IEnumerable<string> query = from tytul in ksiazki
                                    orderby tytul.Lenght
                                    select tytul;

        foreach (string str in query)
            Console.WriteLine(str);
    }
 

tylko nie dziala mi to i pytanie w ktorym miejscu zrobilem blad

0

Na pierwszy rzut oka - w zapytaniu Linq powinno być KsiazkiList, a nie ksiazki. Podajesz tam nazwę zmiennej, a nie nazwę klasy.

0

napisalem tak jak mowisz , potrzebuje funkcji ktora posortuje mi alfabetycznie wg tytulu czy wydawnictwa

0

no to posortuj po tytule, a nie po jego długości?

0

tylko jak to zrobic i czy w ogole tą funkcje dobrze napisałem?

0

Masz napisane: orderby tytul.Lenght. Po co .Length? przez to sortuje po długości tytułu. Wystarczy samo orderby tytul.

0
     static public void sortowanie(List<ksiazki> KsiazkiList)
    {
        IEnumerable<string> query = from tytul in KsiazkiList
                                    orderby tytul;
                                    select tytul1;

        foreach (string str in query)
            Console.WriteLine(str);
    }


tylko nie wiem czy po form nie powinna byc nazwa struktury?

0

Za szybko przeczytałam. Po from jest nazwa jednego elementu z kolekcji (jak w foreach). Czyli coś w stylu:

 from ksiazka in KsiazkiList orderby ksiazka.tytul 
0
    static public void sortowanie(List<ksiazki> KsiazkiList)
    {
        IEnumerable<string> query = from ksiazka in KsiazkiList
                                    orderby ksiazka.tytul
                                   select ksiazka
                                  
        foreach (string str in query)
            Console.WriteLine(str);
    }




  

nadal wyskakuje bład tzn podkresla mi zmienna ksiazka

0

A czytałeś treść błędu? Po pierwsze brak średnika, po drugie: przypisujesz rezultat zapytania do zmiennej IEnumerable<string>, a w zapytaniu masz select ksiazka - czyli wyciągasz obiekty typu ksiazki. Nie da się tego zrzutować na stringa. Albo zrobisz IEnumerable<ksiazki>, albo select ksiazka.tytul, czy co tam potrzebujesz.

0
  static public void sortowanie(List<ksiazki> KsiazkiList)
    {
        IEnumerable<ksiazki> query = from ksiazka in KsiazkiList
                                     orderby ksiazka.tytul
                                     select ksiazka;
                                  
        foreach (string str in query)
            Console.WriteLine(str);
    }

 

teraz mi tylko wyskakuje ze nie moze przekonwertowac typu ksiazki do stringu

0

No bo w kolekcji query masz obiekty typu ksiazki. A w foreachu każesz pobierać z niej stringi. Musisz tam dopasować typ do zawartości kolekcji.

0

tzn?

0

Czego nie rozumiesz? Napisałeś

foreach (string str in query)

A query jest zadeklarowane jako IEnumerable<ksiazki>, czyli jest kolekcją książek. Nie stringów.

0

static public void sortowanie(List<ksiazki> KsiazkiList)
{
IEnumerable<ksiazki> query = from oksiazki in KsiazkiList
orderby oksiazki.tytul
select oksiazki;

    foreach (ksiazki str in query)
        Console.WriteLine(str);
}

?
jest dosc pozno i moj mozg powoli przestaje pracowac :D

0
 foreach (ksiazki ks in query)
            ks.wyswietl();

Czy ty w ogóle rozumiesz co robisz?

0

co do funkcji sortowania-nie, dlatego zapytalem tutaj jak ją wykonac w opraciu o kod który wstawiłem na poczatku tematu

1

zmień nazwe typu z ksiazki na ksiazka, do liczby pojedynczej!

1 użytkowników online, w tym zalogowanych: 0, gości: 1