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

Aplikacja została zatrzymana - modyfikowanie zawartości tablic pobranych z plików

Ostatnio zmodyfikowano 2015-07-21 17:47
Autor Wiadomość
Mat
Temat założony przez niniejszego użytkownika
Aplikacja została zatrzymana - modyfikowanie zawartości tablic pobranych z plików
» 2015-07-21 17:01:20
Witam,

z kursu korzystałem już wcześniej, a dziś postanowiłem się zarejestrować także na forum. Jest to moja pierwsza - i mam nadzieję, że nie ostatnia :) - wizyta tutaj.

Przychodzę tu, niestety, z problemem. Mianowicie, postanowiłem zmierzyć się pierwszy raz w życiu z bazami danych. Napisałem w tym celu prostą aplikację, której kod prezentuję poniżej. Jednak, gdy próbuję usunąć dowolnego użytkownika z bazy, otrzymuję błąd krytyczny aplikacji. Co dla mnie niezrozumiałe, dzieje sie tak tylko, gdy dane nt. użytkowników pobierane są z plików. Gdy wprowadziłem je "ręcznie", problem zniknął.


C/C++
#include <iostream>
#include <cstdio>
#include <fstream>
#include <stdio.h>
#include <conio.h>
#include <windows.h>


using namespace std;


void gotoxy( int column, int line )
{
    //Pomijam na forum - nieistotny z punktu problemu fragment kodu
}

void clrscr()
{
    //Pomijam na forum - nieistotny z punktu problemu fragment kodu
}

void drawTabble()
//Pomijam na forum - nieistotny z punktu problemu fragment kodu
}

int prawidlowa()
{
//Pomijam na forum - nieistotny z punktu problemu fragment kodu
}

int prawidlowaDowolna()
{
int liczba;
bool czyUdana;
do
{
    cin.clear();
    cin.sync();
    cin >> liczba;
    czyUdana = cin.good();
    if( czyUdana == 0 )
    {
        cout << "Prosze podac prawidlowa liczbe." << endl;
        czyUdana = 0;
    }
} while( czyUdana != 1 );

return liczba;
}

int main()
{


unsigned int wybor;
unsigned int wskaznik;
string bazaZerujaca[ 1 ];
string bazaImion[ 8 ];
string bazaNazwisk[ 8 ];
string bazaFunkcji[ 8 ];



/*  Wziete w komentarz rozwiazanie, ktore powoduje blad przy probie usuniecia elementu z tablic.


    ifstream imiona("imiona.txt");    //Wczytywanie imion do tablicy z pliku imiona
    wskaznik = 0;
    if (!imiona)
    {
        cout << "Nie mozna otworzyc pliku ''imiona.txt''. Prawdopodobnie nie istnieje.";
        getchar();
        return 1;
    }
    while (!imiona.eof())
    imiona >> bazaImion[wskaznik++];
    imiona.close();



    ifstream nazwiska("nazwiska.txt");    //Wczytywanie nazwisk do tablicy z pliku nazwiska
    wskaznik = 0;
    if (!nazwiska)
    {
        cout << "Nie mozna otworzyc pliku ''nazwiska.txt''. Prawdopodobnie nie istnieje.";
        getchar();
        return 1;
    }
    while (!nazwiska.eof())
    nazwiska >> bazaNazwisk[wskaznik++];
    nazwiska.close();



    ifstream funkcje("funkcje.txt");    //Wczytywanie funkcji do tablicy z pliku funkcje
    wskaznik = 0;
    if (!funkcje)
    {
        cout << "Nie mozna otworzyc pliku ''funkcje.txt''. Prawdopodobnie nie istnieje.";
        getchar();
        return 1;
    }
    while (!funkcje.eof())
    funkcje >> bazaFunkcji[wskaznik++];
    funkcje.close();
*/


bazaImion[ 0 ] = "Mateusz"; //Rozwiazanie, ktore dziala
bazaNazwisk[ 0 ] = "Kowalski";
bazaFunkcji[ 0 ] = "Administrator";

bazaImion[ 1 ] = "Jakub";
bazaNazwisk[ 1 ] = "Nowak";
bazaFunkcji[ 1 ] = "Uzytkownik";

bazaImion[ 2 ] = "Wojciech";
bazaNazwisk[ 2 ] = "Kowal";
bazaFunkcji[ 2 ] = "Uzytkownik";

bazaImion[ 3 ] = "Arkady";
bazaNazwisk[ 3 ] = "Tomczuk";
bazaFunkcji[ 3 ] = "Uzytkownik";


int aktualnaIlosc = 4;
do
{
    cout << "Testowa baza danych - main menu" << endl << endl;
    cout << "1. Wyswietl baze." << endl;
    cout << "2. Dodaj osobe." << endl;
    cout << "3. Usun osobe." << endl;
    cout << "0. Wyjscie. \n\n\n\n\n\n" << endl;
    wybor = prawidlowa();
    clrscr();
   
    if( wybor == 1 )
    {
        int counterColumn = 1;
        int counterArray = 0;
        drawTabble();
        do
        {
            cout << counterColumn << ".";
            gotoxy( 3, counterColumn );
            cout << bazaImion[ counterArray ];
            gotoxy( 18, counterColumn );
            cout << bazaNazwisk[ counterArray ];
            gotoxy( 35, counterColumn );
            cout << bazaFunkcji[ counterArray ] << endl;
            counterArray++;
            counterColumn++;
        } while( counterColumn <( aktualnaIlosc + 1 ) );
       
        getch();
        clrscr();
    }
   
    else if( wybor == 2 )
    {
        if( aktualnaIlosc >= 8 )
        {
            cout << "Dotarto do aktualnego maksimum ilosci rekordow." << endl;
            getch();
            clrscr();
        }
        else
        {
            cout << "Imie:" << endl;
            cout << "Nazwisko:" << endl;
            cout << "Funkcja:" << endl;
            gotoxy( 11, 0 );
            cin >> bazaImion[ aktualnaIlosc ];
            ofstream wpisImion;
            wpisImion.open( "imiona.txt", ios::app );
            wpisImion << "\n" << bazaImion[ aktualnaIlosc ];
            gotoxy( 11, 1 );
            cin >> bazaNazwisk[ aktualnaIlosc ];
            ofstream wpisNazwisk;
            wpisNazwisk.open( "nazwiska.txt", ios::app );
            wpisNazwisk << "\n" << bazaNazwisk[ aktualnaIlosc ];
            gotoxy( 11, 2 );
            cin >> bazaFunkcji[ aktualnaIlosc ];
            ofstream wpisFunkcji;
            wpisFunkcji.open( "funkcje.txt", ios::app );
            wpisFunkcji << "\n" << bazaFunkcji[ aktualnaIlosc ];
            aktualnaIlosc++;
            clrscr();
           
        }
    }
   
    else if( wybor == 3 )
    {
        char pewnosc;
        cout << "Podaj numer ID uzytkownika, ktorego chcesz usunac." << endl;
        cout << "Numer: ";
        unsigned int removeUser;
        do
        {
            removeUser = prawidlowaDowolna();
            if( removeUser > aktualnaIlosc || removeUser < 0 )
                 cout << "Podales niewlasciwe ID. Sprobuj ponownie. ";
           
        } while( removeUser > aktualnaIlosc || removeUser < 0 );
       
        cout << endl << "Chcesz usunac uzytkownika " << bazaImion[ removeUser - 1 ] << " " << bazaNazwisk[ removeUser - 1 ] << ".";
        cout << endl << "Czy jestes tego pewien? (y/n)    ";
        cin >> pewnosc;
        if( pewnosc == 'y' || pewnosc == 'Y' )
        {
            int remover = removeUser;
            if( remover == aktualnaIlosc )
            {
                bazaImion[ remover - 1 ] = bazaZerujaca[ 0 ]; //
                bazaNazwisk[ remover - 1 ] = bazaZerujaca[ 0 ]; //Zabezpieczenie przeciwko pisaniu poza tablica przy ostatnim elemencie.
                bazaFunkcji[ remover - 1 ] = bazaZerujaca[ 0 ]; //
                aktualnaIlosc--;
            }
            else if( remover < aktualnaIlosc )
            {
                do
                {
                    bazaImion[ remover - 1 ] = bazaImion[ remover ]; //Kod, ktory generuje mi bledy...
                    bazaNazwisk[ remover - 1 ] = bazaNazwisk[ remover ];
                    bazaFunkcji[ remover - 1 ] = bazaFunkcji[ remover ];
                    remover++;
                } while( remover <= aktualnaIlosc );
               
                aktualnaIlosc--;
            }
        }
        clrscr();
    }
   
} while( wybor != 0 );

return 0;
}


Podejrzewam, że kod wygląda... źle. Aczkolwiek: co może powodować błędy? Analizowałem wiele scenariuszy i nie potrafię dostrzec tego "czegoś złego"...
P-135034
pekfos
» 2015-07-21 17:07:42
C/C++
unsigned int removeUser;
do
{
    removeUser = prawidlowaDowolna();
    if( removeUser > aktualnaIlosc || removeUser < 0 )
         cout << "Podales niewlasciwe ID. Sprobuj ponownie. ";
   
} while( removeUser > aktualnaIlosc || removeUser < 0 );

cout << endl << "Chcesz usunac uzytkownika " << bazaImion[ removeUser - 1 ] << " " << bazaNazwisk[ removeUser - 1 ] << ".";
removeUser nie może być ujemne, a dopuszczasz 0 i odejmujesz 1.

//Pomijam na forum - nieistotny z punktu problemu fragment kodu
Istotny, czy nie, kodu nie można już przetestować. Poza tym skąd pewność, że nie jest istotny..? Do tego zepsułeś formatowanie kodu zostawiając nawiasy nie od pary.
P-135035
Mat
Temat założony przez niniejszego użytkownika
» 2015-07-21 17:26:03
Pekfos, dziękuję za szybką odpowiedź. Teraz umieszczę cały kod - nie spodziewałem się, że ktoś może chcieć to testować... Poza tym, poprawiłem warunek do prawidłowego wpisu - teraz wartość minimalna wynosi 1.

C/C++
#include <iostream>
#include <cstdio>
#include <fstream>
#include <stdio.h>
#include <conio.h>
#include <windows.h>


using namespace std;


void gotoxy( int column, int line )
{
    COORD coord; // Funkcja nienapisana przeze mnie. Brak mi wiedzy...
    coord.X = column;
    coord.Y = line;
    SetConsoleCursorPosition(
    GetStdHandle( STD_OUTPUT_HANDLE ), //                 znalezione na:
    coord //  http://www.cplusplus.com/forum/general/33846/
    );
}

void clrscr()
{
    for( int i = 0; i < 50; i++ )
    {
        cout << "\n";
    }
    gotoxy( 0, 0 );
}

void drawTabble()
{
    gotoxy( 0, 0 );
    cout << "ID";
    gotoxy( 3, 0 );
    cout << "Imie";
    gotoxy( 18, 0 );
    cout << "Nazwisko";
    gotoxy( 35, 0 );
    cout << "Funkcja" << endl;
}

int prawidlowa()
{
    int liczba;
    int lineCounter = 12;
    bool czyUdana;
    do
    {
        cin.clear();
        cin.sync();
        cout << "Numer opcji: ";
        cin >> liczba;
        czyUdana = cin.good();
        if( czyUdana == 0 || liczba < 0 || liczba > 3 )
        {
            gotoxy( 26, lineCounter );
            cout << "Prosze podac prawidlowa liczbe z zakresu od 0 do 3." << endl;
            czyUdana = 0;
            lineCounter++;
        }
    } while( czyUdana != 1 );
   
    return liczba;
}

int prawidlowaDowolna()
{
    int liczba;
    bool czyUdana;
    do
    {
        cin.clear();
        cin.sync();
        cin >> liczba;
        czyUdana = cin.good();
        if( czyUdana == 0 )
        {
            cout << "Prosze podac prawidlowa liczbe." << endl;
            czyUdana = 0;
        }
    } while( czyUdana != 1 );
   
    return liczba;
}


int main()
{
   
   
    unsigned int wybor;
    unsigned int wskaznik;
    string bazaZerujaca[ 1 ];
    string bazaImion[ 8 ];
    string bazaNazwisk[ 8 ];
    string bazaFunkcji[ 8 ];
   
   
   
    /*  Wziete w komentarz rozwiazanie, ktore powoduje blad przy probie usuniecia elementu z tablic.
   
   
        ifstream imiona("imiona.txt");    //Wczytywanie imion do tablicy z pliku imiona
        wskaznik = 0;
        if (!imiona)
        {
            cout << "Nie mozna otworzyc pliku ''imiona.txt''. Prawdopodobnie nie istnieje.";
            getchar();
            return 1;
        }
        while (!imiona.eof())
        imiona >> bazaImion[wskaznik++];
        imiona.close();
   
   
   
        ifstream nazwiska("nazwiska.txt");    //Wczytywanie nazwisk do tablicy z pliku nazwiska
        wskaznik = 0;
        if (!nazwiska)
        {
            cout << "Nie mozna otworzyc pliku ''nazwiska.txt''. Prawdopodobnie nie istnieje.";
            getchar();
            return 1;
        }
        while (!nazwiska.eof())
        nazwiska >> bazaNazwisk[wskaznik++];
        nazwiska.close();
   
   
   
        ifstream funkcje("funkcje.txt");    //Wczytywanie funkcji do tablicy z pliku funkcje
        wskaznik = 0;
        if (!funkcje)
        {
            cout << "Nie mozna otworzyc pliku ''funkcje.txt''. Prawdopodobnie nie istnieje.";
            getchar();
            return 1;
        }
        while (!funkcje.eof())
        funkcje >> bazaFunkcji[wskaznik++];
        funkcje.close();
    */
   
   
    bazaImion[ 0 ] = "Mateusz"; //Rozwiazanie, ktore dziala
    bazaNazwisk[ 0 ] = "Kowalski";
    bazaFunkcji[ 0 ] = "Administrator";
   
    bazaImion[ 1 ] = "Jakub";
    bazaNazwisk[ 1 ] = "Nowak";
    bazaFunkcji[ 1 ] = "Uzytkownik";
   
    bazaImion[ 2 ] = "Wojciech";
    bazaNazwisk[ 2 ] = "Kowal";
    bazaFunkcji[ 2 ] = "Uzytkownik";
   
    bazaImion[ 3 ] = "Arkady";
    bazaNazwisk[ 3 ] = "Tomczuk";
    bazaFunkcji[ 3 ] = "Uzytkownik";
   
   
    int aktualnaIlosc = 4;
    do
    {
        cout << "Testowa baza danych - main menu" << endl << endl;
        cout << "1. Wyswietl baze." << endl;
        cout << "2. Dodaj osobe." << endl;
        cout << "3. Usun osobe." << endl;
        cout << "0. Wyjscie. \n\n\n\n\n\n" << endl;
        wybor = prawidlowa();
        clrscr();
       
        if( wybor == 1 )
        {
            int counterColumn = 1;
            int counterArray = 0;
            drawTabble();
            do
            {
                cout << counterColumn << ".";
                gotoxy( 3, counterColumn );
                cout << bazaImion[ counterArray ];
                gotoxy( 18, counterColumn );
                cout << bazaNazwisk[ counterArray ];
                gotoxy( 35, counterColumn );
                cout << bazaFunkcji[ counterArray ] << endl;
                counterArray++;
                counterColumn++;
            } while( counterColumn <( aktualnaIlosc + 1 ) );
           
            getch();
            clrscr();
        }
       
        else if( wybor == 2 )
        {
            if( aktualnaIlosc >= 8 )
            {
                cout << "Dotarto do aktualnego maksimum ilosci rekordow." << endl;
                getch();
                clrscr();
            }
            else
            {
                cout << "Imie:" << endl;
                cout << "Nazwisko:" << endl;
                cout << "Funkcja:" << endl;
                gotoxy( 11, 0 );
                cin >> bazaImion[ aktualnaIlosc ];
                ofstream wpisImion;
                wpisImion.open( "imiona.txt", ios::app );
                wpisImion << "\n" << bazaImion[ aktualnaIlosc ];
                gotoxy( 11, 1 );
                cin >> bazaNazwisk[ aktualnaIlosc ];
                ofstream wpisNazwisk;
                wpisNazwisk.open( "nazwiska.txt", ios::app );
                wpisNazwisk << "\n" << bazaNazwisk[ aktualnaIlosc ];
                gotoxy( 11, 2 );
                cin >> bazaFunkcji[ aktualnaIlosc ];
                ofstream wpisFunkcji;
                wpisFunkcji.open( "funkcje.txt", ios::app );
                wpisFunkcji << "\n" << bazaFunkcji[ aktualnaIlosc ];
                aktualnaIlosc++;
                clrscr();
               
            }
        }
       
        else if( wybor == 3 )
        {
            char pewnosc;
            cout << "Podaj numer ID uzytkownika, ktorego chcesz usunac." << endl;
            cout << "Numer: ";
            int removeUser;
            do
            {
                removeUser = prawidlowaDowolna();
                if( removeUser > aktualnaIlosc || removeUser < 1 )
                     cout << "Podales niewlasciwe ID. Sprobuj ponownie. ";
               
            } while( removeUser > aktualnaIlosc || removeUser < 1 );
           
            cout << endl << "Chcesz usunac uzytkownika " << bazaImion[ removeUser - 1 ] << " " << bazaNazwisk[ removeUser - 1 ] << ".";
            cout << endl << "Czy jestes tego pewien? (y/n)    ";
            cin >> pewnosc;
            if( pewnosc == 'y' || pewnosc == 'Y' )
            {
                int remover = removeUser;
                if( remover == aktualnaIlosc )
                {
                    bazaImion[ remover - 1 ] = bazaZerujaca[ 0 ]; //
                    bazaNazwisk[ remover - 1 ] = bazaZerujaca[ 0 ]; //Zabezpieczenie przeciwko pisaniu poza tablica przy ostatnim elemencie.
                    bazaFunkcji[ remover - 1 ] = bazaZerujaca[ 0 ]; //
                    aktualnaIlosc--;
                }
                else if( remover < aktualnaIlosc )
                {
                    do
                    {
                        bazaImion[ remover - 1 ] = bazaImion[ remover ]; //Kod, ktory generuje mi bledy...
                        bazaNazwisk[ remover - 1 ] = bazaNazwisk[ remover ];
                        bazaFunkcji[ remover - 1 ] = bazaFunkcji[ remover ];
                        remover++;
                    } while( remover <= aktualnaIlosc );
                   
                    aktualnaIlosc--;
                }
            }
            clrscr();
        }
       
    } while( wybor != 0 );
   
    return 0;
}

Komentarze mi się nieco uszkodziły... Poza tym, gdzie są jakieś nawiasy nie od pary? Ja żadnego nie znalazłem, a sam Code::Blocks usilnie dba o zamykanie wszystkich nawiasów.

@Edit: ok, już widzę te nawiasy. W nowej wersji już są normalne. Niestety, wciąż nic to nie dało...
P-135036
pekfos
» 2015-07-21 17:36:15
C/C++
do
{
    bazaImion[ remover - 1 ] = bazaImion[ remover ]; //Kod, ktory generuje mi bledy...
    bazaNazwisk[ remover - 1 ] = bazaNazwisk[ remover ];
    bazaFunkcji[ remover - 1 ] = bazaFunkcji[ remover ];
    remover++;
} while( remover <= aktualnaIlosc );

Dla remover równego aktualnaIlosc przy całkowitym wypełnieniu bazy, czytasz poza tablicą. Z niewyjaśnionego powodu wszędzie usiłujesz numerować elementy od 1 i tylko przy bezpośrednich odwołaniach do tablicy to korygować..
P-135037
Mat
Temat założony przez niniejszego użytkownika
» 2015-07-21 17:47:34
Pekfosie, jesteś WIELKI :)

Sam nie rozumiem, dlaczego nie zauważyłem, że gdy usuwam jeden element... zmniejsza mi się liczba elementów... Jeżeli ktoś jest zainteresowany, udostępniam poniżej cały, działający kod - jedynie utworzyć pliki imiona.txt, nazwiska.txt i funkcje.txt.

Dziękuję bardzo za poświęcony mojemu problemowi czas i miłego dnia!

C/C++
#include <iostream>
#include <cstdio>
#include <fstream>
#include <stdio.h>
#include <conio.h>
#include <windows.h>


using namespace std;


void gotoxy( int column, int line ) // Funkcja nienapisana przeze mnie. Brak mi wiedzy... Znalezione na: http://www.cplusplus.com/forum/general/33846/
{
    COORD coord;
    coord.X = column;
    coord.Y = line;
    SetConsoleCursorPosition(
    GetStdHandle( STD_OUTPUT_HANDLE ),
    coord
    );
}

void clrscr()
{
    for( int i = 0; i < 50; i++ )
    {
        cout << "\n";
    }
    gotoxy( 0, 0 );
}

void drawTabble()
{
    gotoxy( 0, 0 );
    cout << "ID";
    gotoxy( 3, 0 );
    cout << "Imie";
    gotoxy( 18, 0 );
    cout << "Nazwisko";
    gotoxy( 35, 0 );
    cout << "Funkcja" << endl;
}

int prawidlowa()
{
    int liczba;
    int lineCounter = 12;
    bool czyUdana;
    do
    {
        cin.clear();
        cin.sync();
        cout << "Numer opcji: ";
        cin >> liczba;
        czyUdana = cin.good();
        if( czyUdana == 0 || liczba < 0 || liczba > 3 )
        {
            gotoxy( 26, lineCounter );
            cout << "Prosze podac prawidlowa liczbe z zakresu od 0 do 3." << endl;
            czyUdana = 0;
            lineCounter++;
        }
    } while( czyUdana != 1 );
   
    return liczba;
}

int prawidlowaDowolna()
{
    int liczba;
    bool czyUdana;
    do
    {
        cin.clear();
        cin.sync();
        cin >> liczba;
        czyUdana = cin.good();
        if( czyUdana == 0 )
        {
            cout << "Prosze podac prawidlowa liczbe." << endl;
            czyUdana = 0;
        }
    } while( czyUdana != 1 );
   
    return liczba;
}

int main()
{
   
    unsigned int wybor;
    unsigned int wskaznik;
    string bazaZerujaca[ 1 ];
    string bazaImion[ 8 ];
    string bazaNazwisk[ 8 ];
    string bazaFunkcji[ 8 ];
   
   
   
    ifstream imiona( "imiona.txt" );
    wskaznik = 0;
    if( !imiona )
    {
        cout << "Nie mozna otworzyc pliku ''imiona.txt''. Prawdopodobnie nie istnieje.";
        getchar();
        return 1;
    }
    while( !imiona.eof() )
         imiona >> bazaImion[ wskaznik++ ];
   
    imiona.close();
   
   
   
    ifstream nazwiska( "nazwiska.txt" );
    wskaznik = 0;
    if( !nazwiska )
    {
        cout << "Nie mozna otworzyc pliku ''nazwiska.txt''. Prawdopodobnie nie istnieje.";
        getchar();
        return 1;
    }
    while( !nazwiska.eof() )
         nazwiska >> bazaNazwisk[ wskaznik++ ];
   
    nazwiska.close();
   
   
   
    ifstream funkcje( "funkcje.txt" );
    wskaznik = 0;
    if( !funkcje )
    {
        cout << "Nie mozna otworzyc pliku ''funkcje.txt''. Prawdopodobnie nie istnieje.";
        getchar();
        return 1;
    }
    while( !funkcje.eof() )
         funkcje >> bazaFunkcji[ wskaznik++ ];
   
    funkcje.close();
   
   
   
    int aktualnaIlosc = 8;
    do
    {
        cout << "Testowa baza danych - main menu" << endl << endl;
        cout << "1. Wyswietl baze." << endl;
        cout << "2. Dodaj osobe." << endl;
        cout << "3. Usun osobe." << endl;
        cout << "0. Wyjscie. \n\n\n\n\n\n" << endl;
        wybor = prawidlowa();
        clrscr();
       
        if( wybor == 1 )
        {
            int counterColumn = 1;
            int counterArray = 0;
            drawTabble();
            do
            {
                cout << counterColumn << ".";
                gotoxy( 3, counterColumn );
                cout << bazaImion[ counterArray ];
                gotoxy( 18, counterColumn );
                cout << bazaNazwisk[ counterArray ];
                gotoxy( 35, counterColumn );
                cout << bazaFunkcji[ counterArray ] << endl;
                counterArray++;
                counterColumn++;
            } while( counterColumn <( aktualnaIlosc + 1 ) );
           
            getch();
            clrscr();
        }
       
        else if( wybor == 2 )
        {
            if( aktualnaIlosc >= 8 )
            {
                cout << "Dotarto do aktualnego maksimum ilosci rekordow." << endl;
                getch();
                clrscr();
            }
            else
            {
                cout << "Imie:" << endl;
                cout << "Nazwisko:" << endl;
                cout << "Funkcja:" << endl;
                gotoxy( 11, 0 );
                cin >> bazaImion[ aktualnaIlosc ];
                ofstream wpisImion;
                wpisImion.open( "imiona.txt", ios::app );
                wpisImion << "\n" << bazaImion[ aktualnaIlosc ];
                gotoxy( 11, 1 );
                cin >> bazaNazwisk[ aktualnaIlosc ];
                ofstream wpisNazwisk;
                wpisNazwisk.open( "nazwiska.txt", ios::app );
                wpisNazwisk << "\n" << bazaNazwisk[ aktualnaIlosc ];
                gotoxy( 11, 2 );
                cin >> bazaFunkcji[ aktualnaIlosc ];
                ofstream wpisFunkcji;
                wpisFunkcji.open( "funkcje.txt", ios::app );
                wpisFunkcji << "\n" << bazaFunkcji[ aktualnaIlosc ];
                aktualnaIlosc++;
                clrscr();
               
            }
        }
       
        else if( wybor == 3 )
        {
            char pewnosc;
            cout << "Podaj numer ID uzytkownika, ktorego chcesz usunac." << endl;
            cout << "Numer: ";
            int removeUser;
            do
            {
                removeUser = prawidlowaDowolna();
                if( removeUser > aktualnaIlosc || removeUser < 1 )
                     cout << "Podales niewlasciwe ID. Sprobuj ponownie. ";
               
            } while( removeUser > aktualnaIlosc || removeUser < 1 );
           
            cout << endl << "Chcesz usunac uzytkownika " << bazaImion[ removeUser - 1 ] << " " << bazaNazwisk[ removeUser - 1 ] << ".";
            cout << endl << "Czy jestes tego pewien? (y/n)    ";
            cin >> pewnosc;
            if( pewnosc == 'y' || pewnosc == 'Y' )
            {
                int remover = removeUser;
                if( remover == aktualnaIlosc )
                {
                    bazaImion[ remover - 1 ] = bazaZerujaca[ 0 ];
                    bazaNazwisk[ remover - 1 ] = bazaZerujaca[ 0 ];
                    bazaFunkcji[ remover - 1 ] = bazaZerujaca[ 0 ];
                    aktualnaIlosc--;
                }
                else if( remover < aktualnaIlosc )
                {
                    do
                    {
                        bazaImion[ remover - 1 ] = bazaImion[ remover ];
                        bazaNazwisk[ remover - 1 ] = bazaNazwisk[ remover ];
                        bazaFunkcji[ remover - 1 ] = bazaFunkcji[ remover ];
                        remover++;
                    } while( remover < aktualnaIlosc );
                   
                    aktualnaIlosc--;
                }
            }
            clrscr();
        }
       
    } while( wybor != 0 );
   
    return 0;
}
P-135038
« 1 »
  Strona 1 z 1