Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wyszukiwanie tekstu w pliku txt

Ostatnio zmodyfikowano 2011-11-27 21:39
Autor Wiadomość
El-Pablo
Temat założony przez niniejszego użytkownika
» 2011-11-27 13:01:34
aaaaa dzieki własnie poprawiłem pętla while "while((curr->next!=NULL)&& (curr->imie!=slowo)&& (curr->nazwisko!=slowo))" było wpisane "curr!=NULL" a powinno być curr->next!=NULL i działa :), dzieki malan :) poprawiłem też funkcje szukaj jakbyś mógł rzucić okiem czy o tym pisałeś byłbym wdzięczny, teraz przynajmniej na moje oko hula :)
 o to kod:
C/C++
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;
struct osoba
{
    string imie;
    string nazwisko;
    int telefon;
    osoba * next;
};
osoba * poczatek = NULL;
const char * nazwa_pliku;
string slowo;
void dodaj()
{
    osoba * nowa = new osoba;
    cout << "Wpisz imie ";
    cin >> nowa->imie;
    cout << "Wpisz nazwisko ";
    cin >> nowa->nazwisko;
    cout << "Wpisz telefon ";
    cin >> nowa->telefon;
    nowa->next = NULL;
    if( poczatek == NULL )
    {
        poczatek = nowa;
    } else
    {
        osoba * szukaj = poczatek;
        while( szukaj->next != NULL )
        {
            szukaj = szukaj->next;
        }
        szukaj->next = nowa;
    }
}
void wyswietl()
{
    if( poczatek != NULL )
    {
        osoba * pokaz = poczatek;
        while( pokaz->next != NULL )
        {
            cout << endl << pokaz->imie;
            cout << endl << pokaz->nazwisko;
            cout << endl << pokaz->telefon << endl;
            pokaz = pokaz->next;
        }
        cout << endl << pokaz->imie;
        cout << endl << pokaz->nazwisko;
        cout << endl << pokaz->telefon << endl;
    }
}
void szukaj()
{
    int a;
    cout << " Podaj numer szukanego telefonu : ";
    cin >> a;
    osoba * szuk = poczatek;
    while(( szuk->next != NULL ) &&( szuk->telefon != a ) )
    {
       
        szuk = szuk->next;
    }
    if( szuk->telefon == a )
    {
        cout << endl << szuk->imie;
        cout << endl << szuk->nazwisko;
        cout << endl << szuk->telefon << endl;
    } else
         cout << "Nie znaleziono telefonu";
   
}
void znajdz()
{ int napis;
    fstream plik;
   
    plik.open( nazwa_pliku, fstream::in );
    if( plik.is_open() )
    { osoba * curr = poczatek;
       
        while(( curr->next != NULL ) &&( curr->imie != slowo ) &&( curr->nazwisko != slowo ) )
        {
            curr = curr->next;
           
        }
        if( curr->imie == slowo )
        {
            cout << "Znaleziono imie o podanej frazie\n" << curr->imie << endl;
        }
        if( curr->nazwisko == slowo )
        {
            cout << "Znaleziono nazwisko o podanej frazie\n" << curr->nazwisko << endl;
        }
        if(( curr->imie != slowo ) &&( curr->nazwisko != slowo ) )
        {
           
            osoba * szukaj = poczatek;
            napis = atoi( slowo.c_str() );
           
            while(( szukaj->next != NULL ) &&( szukaj->telefon != napis ) )
            {
                szukaj = szukaj->next;
            }
            if( szukaj->telefon == napis )
            {
               
                cout << "Znaleziono telefon o podanej frazie\n" << szukaj->telefon << endl;
            } else
                 cout << "Nic nie znaleziono :(\n";
           
        }
       
    }
    else cout << "Nie udalo sie otworzyc pliku";
   
    plik.close();
}
void zapisz()
{
    fstream plik( nazwa_pliku, fstream::out | fstream::app );
    if( plik.is_open() )
    {
        if( poczatek != NULL )
        {
            osoba * pokaz = poczatek;
            while( pokaz->next != NULL )
            {
                plik << pokaz->imie;
                plik << endl << pokaz->nazwisko;
                plik << endl << pokaz->telefon << endl;
                pokaz = pokaz->next;
            }
            plik << pokaz->imie;
            plik << endl << pokaz->nazwisko;
            plik << endl << pokaz->telefon << endl;
        }
        plik.close();
    }
    else cout << "Nie udalo sie otworzyc pliku";
   
}
void wczytaj()
{
    string line;
    fstream plik;
    plik.open( nazwa_pliku, fstream::in );
    if( plik.is_open() )
    {
        getline( plik, line );
        while( !plik.eof() )
        {
            osoba * nowa = new osoba;
            nowa->imie = line;
            getline( plik, line );
            nowa->nazwisko = line;
            getline( plik, line );
            nowa->telefon = atoi( line.c_str() );
            getline( plik, line );
            nowa->next = NULL;
            if( poczatek == NULL )
            {
                poczatek = nowa;
            } else
            {
                osoba * szukaj = poczatek;
                while( szukaj->next != NULL )
                {
                    szukaj = szukaj->next;
                }
                szukaj->next = nowa;
            }
        }
        plik.close();
    }
}
int main( int argc, char * argv[] )
{
    if( argc != 3 )
    {
        cout << "Zla liczba parametrow sprobuj ponownie\n";
    } else
    {
       
        nazwa_pliku = argv[ 1 ];
        slowo = argv[ 2 ];
        float pi = 3.14;
        cout << "Pi = " << pi << " adres = " << & pi << endl;
        float * addr;
        addr = & pi;
        cout << "adres = " << addr << " wartosc = " << * addr << endl;
        int a;
        while( a != 7 )
        {
            cout << "Wybierz : \n1 - dodaj osobe \n2 - wyswietl dane \n3 - wyszukaj telefon \n4 - zapisz \n5 - wczytaj \n6 - znajdz \n7 - koniec\n";
            cin >> a;
            switch( a )
            {
            case 1:
                dodaj();
                break;
            case 2:
                wyswietl();
                break;
            case 3:
                szukaj();
                break;
            case 4:
                zapisz();
                break;
            case 5:
                wczytaj();
                break;
            case 6:
                znajdz();
               
                break;
            }
        }
    }
    system( "PAUSE" );
    return EXIT_SUCCESS;
}
P-44824
malan
» 2011-11-27 13:03:51
Jakbyś wrzucił cały projekt (wraz z przykładowymi danymi to bym sprawdził :)
Jeżeli masz trochę czasu to napisz ten program z użyciem klas :) Pozbędziesz się w ten sposób zmiennych globalnych, które są feee...
P-44826
El-Pablo
Temat założony przez niniejszego użytkownika
» 2011-11-27 13:09:38
dodałem kod poprawiony, programu ja od początku nie pisałem tylko profesor od laboratoriów z programowania, ja miałem tylko zrobić funkcje która w wierszu poleceń jak sie poda nazwe prog i 2 parametry nazwe pliku i szukane słowo to stworzy taki plik po podaniu użytkowników i wciśnieciu 6 znajdzie słowo podane w parametrze czyli wpisuje Projekt1 szukaj1 123, i tworzy plik szukaj1 dodaje użutkowników poprzez dodawanie z menu 1 i po wcisnieciu 6 szuka ostatniego parametru, a i funkcje szukaj też pisałem sam tą w której wykryłeś błąd :) (ucze sie dopiero )
P-44827
El-Pablo
Temat założony przez niniejszego użytkownika
» 2011-11-27 15:34:10
ok po sugestiach malana wszystko poprawiłem i działa, teraz tylko pytanie gdzie postawić jakiś warunek który jeżeli niczego nie znajdzie to wyswietli napis ze nic nie znaleziono bo na razie jak zerkniecie na kod to działa niepoprawnie oczywiscie bo jezeli ostatni element telefonu sie nie zgadza to wyswietla ze nic nie znaleziono ale wczesniej mogło znaleść jakies telefony w srodkowych elementach a wtedy pokaze telefony ale i takze ze nic nie znaleziono, moze ktoa ma jakis pomysl o to kod poprawiony:

C/C++
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;
struct osoba
{
    string imie;
    string nazwisko;
    int telefon;
    osoba * next;
};
osoba * poczatek = NULL;
const char * nazwa_pliku;
string slowo;
void dodaj()
{
    osoba * nowa = new osoba;
    cout << "Wpisz imie ";
    cin >> nowa->imie;
    cout << "Wpisz nazwisko ";
    cin >> nowa->nazwisko;
    cout << "Wpisz telefon ";
    cin >> nowa->telefon;
    nowa->next = NULL;
    if( poczatek == NULL )
    {
        poczatek = nowa;
    } else
    {
        osoba * szukaj = poczatek;
        while( szukaj->next != NULL )
        {
            szukaj = szukaj->next;
        }
        szukaj->next = nowa;
    }
}
void wyswietl()
{
    if( poczatek != NULL )
    {
        osoba * pokaz = poczatek;
        while( pokaz->next != NULL )
        {
            cout << endl << pokaz->imie;
            cout << endl << pokaz->nazwisko;
            cout << endl << pokaz->telefon << endl;
            pokaz = pokaz->next;
        }
        cout << endl << pokaz->imie;
        cout << endl << pokaz->nazwisko;
        cout << endl << pokaz->telefon << endl;
    }
}
void szukaj()
{
    int a;
    cout << " Podaj numer szukanego telefonu : ";
    cin >> a;
    osoba * szuk = poczatek;
    while(( szuk->next != NULL ) &&( szuk->telefon != a ) )
    {
       
        szuk = szuk->next;
    }
    if( szuk->telefon == a )
    {
        cout << endl << szuk->imie;
        cout << endl << szuk->nazwisko;
        cout << endl << szuk->telefon << endl;
    } else
         cout << "Nie znaleziono telefonu";
   
}
void znajdz()
{ int napis;
    fstream plik;
   
    plik.open( nazwa_pliku, fstream::in );
    if( plik.is_open() )
    { osoba * curr = poczatek;
       
        while( curr->next != NULL )
        {
            if( curr->imie == slowo )
            {
                cout << "Znaleziono imie o podanej frazie\n" << curr->imie << " " << curr->nazwisko << " " << curr->telefon << endl;
            }
            if( curr->nazwisko == slowo )
            {
                cout << "Znaleziono nazwisko o podanej frazie\n" << curr->nazwisko << " " << curr->imie << " " << curr->telefon << endl;
            }
            curr = curr->next;
           
        }
        if( curr->imie == slowo )
        {
            cout << "Znaleziono imie o podanej frazie\n" << curr->imie << " " << curr->nazwisko << " " << curr->telefon << endl;
        }
        if( curr->nazwisko == slowo )
        {
            cout << "Znaleziono nazwisko o podanej frazie\n" << curr->nazwisko << " " << curr->imie << " " << curr->telefon << endl;
        }
       
        if(( curr->imie != slowo ) &&( curr->nazwisko != slowo ) )
        {
           
            osoba * curr = poczatek;
            napis = atoi( slowo.c_str() );
           
            while( curr->next != NULL )
            {
                if( curr->telefon == napis )
                {
                    cout << "Znaleziono telefon o podanej frazie\n" << curr->telefon << " " << curr->imie << " " << curr->nazwisko << endl;
                }
                curr = curr->next;
            }
            if( curr->telefon == napis )
            {
               
                cout << "Znaleziono telefon o podanej frazie\n" << curr->telefon << " " << curr->imie << " " << curr->nazwisko << endl;
            } else
                 cout << "Nic nie znaleziono :(\n";
           
        }
       
    }
    else cout << "Nie udalo sie otworzyc pliku";
   
    plik.close();
}
void zapisz()
{
    fstream plik( nazwa_pliku, fstream::out | fstream::app );
    if( plik.is_open() )
    {
        if( poczatek != NULL )
        {
            osoba * pokaz = poczatek;
            while( pokaz->next != NULL )
            {
                plik << pokaz->imie;
                plik << endl << pokaz->nazwisko;
                plik << endl << pokaz->telefon << endl;
                pokaz = pokaz->next;
            }
            plik << pokaz->imie;
            plik << endl << pokaz->nazwisko;
            plik << endl << pokaz->telefon << endl;
        }
        plik.close();
    }
    else cout << "Nie udalo sie otworzyc pliku";
   
}
void wczytaj()
{
    string line;
    fstream plik;
    plik.open( nazwa_pliku, fstream::in );
    if( plik.is_open() )
    {
        getline( plik, line );
        while( !plik.eof() )
        {
            osoba * nowa = new osoba;
            nowa->imie = line;
            getline( plik, line );
            nowa->nazwisko = line;
            getline( plik, line );
            nowa->telefon = atoi( line.c_str() );
            getline( plik, line );
            nowa->next = NULL;
            if( poczatek == NULL )
            {
                poczatek = nowa;
            } else
            {
                osoba * szukaj = poczatek;
                while( szukaj->next != NULL )
                {
                    szukaj = szukaj->next;
                }
                szukaj->next = nowa;
            }
        }
        plik.close();
    }
}
int main( int argc, char * argv[] )
{
    if( argc != 3 )
    {
        cout << "Zla liczba parametrow sprobuj ponownie\n";
    } else
    {
       
        nazwa_pliku = argv[ 1 ];
        slowo = argv[ 2 ];
        float pi = 3.14;
        cout << "Pi = " << pi << " adres = " << & pi << endl;
        float * addr;
        addr = & pi;
        cout << "adres = " << addr << " wartosc = " << * addr << endl;
        int a;
        while( a != 7 )
        {
            cout << "\n *MENU* \n\nWybierz co chcesz zrobic:\n \n1 - Dodaj osobe \n2 - Wyswietl dane \n3 - Wyszukaj telefon \n4 - Zapisz do pliku \n5 - Wczytaj z pliku \n6 - Znajdz w pliku \n7 - Koniec\n";
            cin >> a;
            switch( a )
            {
            case 1:
                dodaj();
                break;
            case 2:
                wyswietl();
                break;
            case 3:
                szukaj();
                break;
            case 4:
                zapisz();
                break;
            case 5:
                wczytaj();
                break;
            case 6:
                znajdz();
                break;
            case 7:
                cout << "Koniec programu !!!\n\n";
                break;
            default:
                cout << "\nNie rozpoznano polecenia sprobuj jeszcze raz !!!\n\n";
            }
            cin.clear();
            cin.sync();
        }
    }
    system( "PAUSE" );
    return EXIT_SUCCESS;
}
P-44835
El-Pablo
Temat założony przez niniejszego użytkownika
» 2011-11-27 16:34:15
moze jest jakas funkcja która sprawdza czy wyswietlono cos na ekranie ??
P-44837
malan
» 2011-11-27 21:15:19
Spróbuj czegoś takiego:
C/C++
void znajdz()
{
    int numer = atoi( slowo.c_str() );;
    osoba * aktualny = poczotek;
    osoba * znaleziony = 0;
   
    while( aktualny != NULL )
    {
        if( aktualny->imie == slowo || aktualny->nazwisko == slowo || aktualny->numer == numer )
        {
            // w sumie to tutaj już mógłbyś wypisywać...
            // ale skoro tak bardzo chcesz to mieć poza pętlą...
            znaleziony = aktualny;
            break;
        }
       
        aktualny = aktualny->next;
    }
   
    if( znaleziony )
    {
        // wypisywanie...
    }
}
P-44846
El-Pablo
Temat założony przez niniejszego użytkownika
» 2011-11-27 21:39:34
malan Ty to masz głowe, masz u mnie browara ( jak jesteś z Way to będzie łatwiej ;) ), działa, poza petla jest bo nie wiadomo co uzytkownik wpisze jak imie lub nazwisko szuka w pierwszej petli jak numer to przechodzi do drugiej pętli, najwazniejsze ze działa, jeszcze raz dzięki duzo sie nauczyłem z tej lekcji, pozdro :)
P-44848
1 « 2 »
Poprzednia strona Strona 2 z 2