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

[C++] Program Baza Danych

Ostatnio zmodyfikowano 2014-04-15 19:35
Autor Wiadomość
MadnessTime
Temat założony przez niniejszego użytkownika
[C++] Program Baza Danych
» 2014-04-15 17:32:56
Witam, jestem dopiero początkującym programistą i piszę sobie program, który jest taką bazą danych. Napisałem go, przetestowałem i wszystko działa. Teraz chce go poprawić tak by działał w oparciu o funkcję i tu pojawia się problem. Jak zrobić, by zmienne, które wykorzystuje funkcja były dostępne również w bloku głównym? Jeżeli macie jakieś zastrzeżenia co do programu to komentarze również mile widziane. A to mój program:

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

using namespace std;

class bazaDanych
{
public:
    string typ;
    string przekatna;
    string cena;
    string kolor_obudowy;
   
};


int main() {
   
    char znak, znak2;
    int ile;
    string klucz;
   
    cout << "Najpierw dodaj pozycje do bazy danych" << endl;
    cout << endl << endl;
    cout << "Ile pozycji chesz dodac?" << endl;
    cin >> ile;
   
    bazaDanych monitory[ ile ];
   
    for( int i = 0; i < ile; i++ )
    {
        cout << "Podaj typ monitora" << endl;
        cin >> monitory[ i ].typ;
        cout << "Podaj przekatna monitora" << endl;
        cin >> monitory[ i ].przekatna;
        cout << "Podaj cene monitora" << endl;
        cin >> monitory[ i ].cena;
        cout << "Podaj kolor obudowy monitora" << endl;
        cin >> monitory[ i ].kolor_obudowy;
        cout << endl << endl;
    }
   
    system( "cls" );
   
    do {
        cout << " ------------------------------------" << endl;
        cout << " 1 - Wyswietlanie zawartosci " << endl;
        cout << " 2 - Wyszukiwanie po parametrach " << endl;
        cout << " 3 - Czyszczenie ekranu " << endl;
        cout << " 4 - Zapis do pliku " << endl;
        cout << " 5 - Odczyt z pliku " << endl;
        cout << " 0 - Wyjscie z programu " << endl;
        cout << " ------------------------------------" << endl;
        cin >> znak;
       
        switch( znak ) {
           
        case '1': {
                cout << endl << endl;
                for( int i = 0; i < ile; i++ )
                {
                    cout << "Typ monitora nr. " << i + 1 << ": " << endl;
                    cout << monitory[ i ].typ << endl;
                    cout << "Przekatna monitora nr. " << i + 1 << ": " << endl;
                    cout << monitory[ i ].przekatna << endl;
                    cout << "Cene monitora nr. " << i + 1 << ": " << endl;
                    cout << monitory[ i ].cena << endl;
                    cout << "Kolor obudowy monitora nr. " << i + 1 << ": " << endl;
                    cout << monitory[ i ].kolor_obudowy << endl;
                    cout << endl << endl;
                }
                break;
            }
            ;
        case '2': {
                cout << endl << endl;
               
                cout << " ------------------------------------" << endl;
                cout << " 1 - Typ " << endl;
                cout << " 2 - Przekatna " << endl;
                cout << " 3 - Cena " << endl;
                cout << " 4 - Kolor obudowy " << endl;
                break;
            }
           
        case '3': {
                cout << "Czyszczenie ekranu" << endl;
               
               
                Sleep( 500 );
                system( "cls" );
                break;
            }
           
        case '4': {
                ofstream plik;
                plik.open( "BazaDanych.txt" );
               
                for( int i = 0; i < ile; i++ ) {
                    plik << "Typ monitora nr. " << i + 1 << ": " << endl;
                    plik << monitory[ i ].typ << endl;
                    plik << "Przekatna monitora nr. " << i + 1 << ": " << endl;
                    plik << monitory[ i ].przekatna << endl;
                    plik << "Cene monitora nr. " << i + 1 << ": " << endl;
                    plik << monitory[ i ].cena << endl;
                    plik << "Kolor obudowy monitora nr. " << i + 1 << ": " << endl;
                    plik << monitory[ i ].kolor_obudowy << endl;
                    plik << endl << endl;
                }
                cout << endl << endl;
                cout << "Zapisywanie zakonczone powodzeniem!" << endl;
                cout << endl << endl;
                plik.close();
                cin.get();
                break;
            }
           
        case '5': {
                char pobieracz;
                ifstream plik;
                plik.open( "BazaDanych.txt" );
               
                if( !plik.is_open() ) {
                    cout << endl << endl;
                    cout << "Nie ma pliku, najpierw go utworz!" << endl;
                    cout << endl << endl;
                }
                plik >> noskipws >> pobieracz;
               
                while( plik.good() ) {
                    cout << pobieracz;
                    plik >> pobieracz;
                };
               
                break;
            }
           
        case '0': {
                cout << endl << endl;
                cout << "Zamykanie Programu" << endl;
                cout << endl << endl;
                break;
            }
           
            default: {
                cout << endl << endl;
                cout << "Podano bledny znak!" << endl;
                cout << endl << endl;
                break;
            }
        }
       
    } while( znak != 0 );
   
   
    return( 0 );
}
P-108214
colorgreen19
» 2014-04-15 17:34:40
nie mozesz przeszkoczyc zmienną w jakims bloku do bloku wyzszego. Zadeklaruj te zmienną w bloku głównym i przekazyj do funkcji przez jej argument.
P-108215
MadnessTime
Temat założony przez niniejszego użytkownika
» 2014-04-15 17:40:32
Wygooglowałem sobie to co powiedziałeś. Mam nadzieję, że tu znajdę odpowiedź :)
http://cpp0x.pl/kursy/Kurs-C++​/Poziom-3​/Przekazywanie-argumentow-funk​cji-przez-referencje​/356

/edit.

Chyba wiem o co ci chodziło. Najlepszym wyjściem będzie użycie wskaźników. Mam rację?
P-108216
colorgreen19
» 2014-04-15 18:28:10
zależy co chcesz osiągnąć. Proponuje zebys cos spróbował sam napisac a jak bedziesz miec problem to wtedy załącz tutaj swoj nowy kod i obczaimy co masz źle :P
P-108222
MadnessTime
Temat założony przez niniejszego użytkownika
» 2014-04-15 18:30:14
Właśnie próbując rozwiązać mój problem zobaczyłem program pisany na lekcji. Myślałem, że mi pomoże, ale niestety mimo moich chęci nie do końca go rozumiem. Mógłby ktoś dodać komentarze do tego programu?
C/C++
#include<iostream>
#include<cstdlib>
using namespace std;

void zamien1( int * a, int * b );
void zamien2( int & a, int & b );

void zamien1( int * x, int * y ) {
    int z = * x;
    * x = * y;
    * y = z;
}

void zamien2( int & a, int & b ) {
    int x = a;
    a = b;
    b = x;
   
}



int main() {
    int a, b;
    a = 10;
    b = 20;
    cout << "a=" << a << " b=" << b << endl;
    zamien1( & a, & b );
    cout << endl << endl;
    cout << "a=" << a << " b=" << b << endl;
    zamien2( a, b );
    cout << endl << endl;
    cout << "a=" << a << " b=" << b << endl;
   
    return 0;
}
P-108223
pekfos
» 2014-04-15 18:37:23
Mógłbym ktoś dodać komentarze do tego programu?
Może mógłbyś dodam komentarze.
C/C++
#include<iostream>
#include<cstdlib>
using namespace std;

void zamien1( int * a, int * b );
void zamien2( int & a, int & b );

void zamien1( int * x, int * y ) {
    int z = * x;
    * x = * y;
    * y = z;
}

void zamien2( int & a, int & b ) {
    int x = a;
    a = b;
    b = x;
   
}

//Pusta linia ponizej

int main() {
    int a, b; // a, be, średnik.
    a = 10;
    b = 20;
    cout << "a=" << a << " b=" << b << endl;
    zamien1( & a, & b );
    cout << endl << endl;
    cout << "a=" << a << " b=" << b << endl;
    zamien2( a, b );
    cout << endl << endl;
    cout << "a=" << a << " b=" << b << endl;
   
    return 0;
}
Jeśli nie trafiłem, to napisz może, czego dokładnie nie rozumiesz..
P-108224
MadnessTime
Temat założony przez niniejszego użytkownika
» 2014-04-15 18:44:46
Błąd poprawiony.

Chodzi mi dokładnie o to, dlaczego funkcje zamien1 i zamien2 są tak jakby deklarowane 2 razy?
P-108225
pekfos
» 2014-04-15 18:48:10
Bez powodu. Bez tych deklaracji program dalej będzie poprawny.
P-108226
« 1 » 2
  Strona 1 z 2 Następna strona