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

Baza Danych

Ostatnio zmodyfikowano 2011-02-03 12:39
Autor Wiadomość
mazur00015
Temat założony przez niniejszego użytkownika
Baza Danych
» 2011-02-02 19:38:56
Witam wszystkich użytkowników.

Dostałem zadanie napisania "Bazy Danych Pacjentów" zrobiłem wszystko co trzeba było "ale"....

Gdy wpisuje do bazy w miejscu opisu świadczenia więcej niż jeden wyraz, to kolejne pola odpowiednio ile wpisałem wyrazów tyle zostaje pustych ( wiem że to trochę niezrozumiałe dlatego zilustruje na przykładzie )

Ile ma być pacjentów : // podaj liczbę
12312
Imie
Tadek
Nazwisko
Kowalski
Data przyjecia
1997
Opis
Bolala go glowa
Imie           
Nazwisko          } W miejscu opisu świadczenia wpisałem 3 wyrazy, i jak widać w kolejne 3 rekordy są puste :|
Data przyjecia  

Co zrobiłem nie tak ? Czy ktoś mógłby mi udzielić wskazówek, jak to obejść ?

Z góry dziękuje :}
P-27712
WiecznyWem
» 2011-02-02 19:42:59
Nie wiem czy bym wiedział, ale wiem, że bez kodu źródłowego ani rusz. ;) Chyba, że to MySQL to podaj budowę tabeli i skrypt wpisujący pacjenta.
P-27713
LukiPRO
» 2011-02-02 19:43:18
hmm może byś pokazał kod?

UP
hmm ale mi się wydaje że to temat o C/C++ a nie MySQL ?
sry nie temat tylko dział :D
P-27714
mazur00015
Temat założony przez niniejszego użytkownika
» 2011-02-02 19:50:28
C/C++
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

struct Pacjent
{
    int ID; ///   numer w bazie
    string Imie;
    string Nazwisko;
    string Opis;
    int Data_przyjecia; ///   Data przyjęcia pacjenta
   
};



void dodaj_do_bazy( char * in, Pacjent * s, int n )
{
    ofstream plik;
    plik.open( in );
   
    for( int i = 0; i < n; ++i )
    {
        s[ i ].ID = i + 1;
        plik << s[ i ].ID << endl;
        cout << "Podaj Imie :\n";
        cin >> s[ i ].Imie;
        plik << s[ i ].Imie << endl;
        cout << "Podaj Nazwisko :\n";
        cin >> s[ i ].Nazwisko;
        plik << s[ i ].Nazwisko << endl;
        cout << "Podaj Date przyjecia :\n";
        cin >> s[ i ].Data_przyjecia;
        plik << s[ i ].Data_przyjecia << endl;
        cout << "Podaj Opis swiadczenia :\n";
        cin >> s[ i ].Opis;
        plik << s[ i ].Opis << endl;
       
        plik << "\n\n";
    }
    plik.close();
}


///funkcja liczaca rozmiar tablicy struktur (wyciaga z pliku juz zapisanych tam pacjentów)
///do ktorej wpisujemy dane o pacjentach

int rozmiar( char * in )
{
    string Nazwisko, Imie, Opis;
    int Data_przyjecia, ID;
   
   
    ifstream plik;
    plik.open( in );
    int rozm = 0;
   
    while( !plik.eof() )
    {
        plik >> ID;
        plik >> Imie;
        plik >> Nazwisko;
        plik >> Data_przyjecia;
        plik >> Opis;
       
        rozm += 1;
    }
   
    plik.close();
    return rozm;
}

///funkcja wyciagajaca z pliku pacjentow do tablicy struktur
void zpliku( char * in, Pacjent * s, int n )
{
    ifstream plik;
    plik.open( in );
   
    for( int i = 0; i < n; ++i )
    {
        plik >> s[ i ].ID;
        plik >> s[ i ].Imie;
        plik >> s[ i ].Nazwisko;
        plik >> s[ i ].Data_przyjecia;
        plik >> s[ i ].Opis;
    }
}
/// funkja wypisujaca wszystkich pacjentow na ekran

void wypisz( Pacjent * s, int n )
{
    for( int i = 0; i < n; ++i )
    {
        cout << "ID" << s[ i ].ID << endl;
        cout << "Imie :         " << s[ i ].Imie << endl;
        cout << "Nazwisko :         " << s[ i ].Nazwisko << endl;
        cout << "Data przyjecia : " << s[ i ].Data_przyjecia << endl;
        cout << "Opis :          " << s[ i ].Opis << endl;
        cout << "-  -  -  -  -  -  -  -  -  -  -  -  -\n";
    }
}


/// funkcja sortuje po Nazwisku

void sort( Pacjent * s, int n )
{
    Pacjent tmp;
    for( int i = 0; i < n; ++i )
    {
        for( int j = 0; j < n - 1; ++j )
        {
            if( s[ j ].Nazwisko > s[ j + 1 ].Nazwisko )
            {
                tmp = s[ j + 1 ];
                s[ j + 1 ] = s[ j ];
                s[ j ] = tmp;
            }
        }
    }
}


/// funkcja sortuje po Imieniu

void sort2( Pacjent * s, int n )
{
    Pacjent tmp;
    for( int i = 0; i < n; ++i )
    {
        for( int j = 0; j < n - 1; ++j )
        {
            if( s[ j ].Imie > s[ j + 1 ].Imie )
            {
                tmp = s[ j + 1 ];
                s[ j + 1 ] = s[ j ];
                s[ j ] = tmp;
            }
            if( s[ j ].Imie == s[ j + 1 ].Imie )
            {
                if( s[ j ].Nazwisko > s[ j + 1 ].Nazwisko )
                {
                    tmp = s[ j + 1 ];
                    s[ j + 1 ] = s[ j ];
                    s[ j ] = tmp;
                }
            }
        }
    }
}


/// funkcja usuwajaca pacjenta z bazy

void usun( Pacjent * s, int n, int ktory )
{
    int tmp;
    for( int i = 0; i < n; ++i )
    {
        if( i + 1 == ktory )
        {
            tmp = i;
        }
    }
   
    for( int i = tmp; i < n; ++i )
    {
        //s[i] = s[i+1];
       
        s[ i ].Imie = s[ i + 1 ].Imie;
        s[ i ].Nazwisko = s[ i + 1 ].Nazwisko;
        s[ i ].Data_przyjecia = s[ i + 1 ].Data_przyjecia;
        s[ i ].Opis = s[ i + 1 ].Opis;
    }
}

/// funkcja tworzaca kopie bazy danych (pliku)
void kopia( Pacjent * s, int n, char * out )
{
    ofstream plik;
    plik.open( out );
   
    for( int i = 0; i < n; ++i )
    {
        plik << s[ i ].ID << endl;
        plik << s[ i ].Imie << endl;
        plik << s[ i ].Nazwisko << endl;
        plik << s[ i ].Data_przyjecia << endl;
        plik << s[ i ].Opis << endl;
        plik << ".  .  .  .  .  .  \n";
    }
   
    plik.close();
}

/**------------------------- funkcja main --------------------------**/

int main( int argc, char ** argv )
{
   
    cout << "************************************************************************\n";
    cout << "**************************BAZA DANYCH PACJENTOW*************************\n";
    cout << "************************************************************************\n";
   
   
   
    int znak;
   
    ///przykladowa nazwa bazy danych
   
    argv[ 1 ] = "baza.txt";
   
    do
    {
        cout << " Utworz baze danych (plik) wcisnij - 1\n";
        cout << " Dopisanie nowego Pacjenta/Pacjentow wcisnij - 2\n";
        cout << " Wypisanie wszystkich pacjentow         wcisnij - 3\n";
        cout << " Usuniecie Pacjenta z bazy               wcisnij - 4\n";
        cout << " Sortowanie Pacjentow po Dacie przyjecia         wcisnij - 5\n";
        cout << " Sortowanie Pacjentow po Nazwisku wcisnij - 6\n";
        cout << " Tworzenie kopi bazy danych       wcisnij - 7\n\n";
       
       
        cout << " Wyjscie z programu                   wcisnij - 0\n\n";
       
       
        cout << "\tCo chcesz robic ??\n";
       
        cin >> znak;
       
       
        switch( znak )
        {
        case 1:
            {
                int n;
                cout << "Ile Pacjentow zapisac w bazie ?\n";
                cin >> n;
                Pacjent * s = new Pacjent[ n ];
                dodaj_do_bazy( argv[ 1 ], s, n );
                delete[] s;
                break;
            }
        case 2:
            {
               
                int ile;
                cout << "Ile pacjetnow chcesz dopisac do bazy ?\n";
                cin >> ile;
               
                int roz = rozmiar( argv[ 1 ] ) + ile - 1;
                int rozm = rozmiar( argv[ 1 ] ) - 1;
               
               
                Pacjent * s = new Pacjent[ roz ];
                zpliku( argv[ 1 ], s, rozm );
               
                for( int i = rozm; i < roz; ++i )
                {
                    s[ i ].ID = i + 1;
                    cout << "Podaj Imie :\n";
                    cin >> s[ i ].Imie;
                    cout << "Podaj Nazwisko :\n";
                    cin >> s[ i ].Nazwisko;
                    cout << "Podaj Data przyjecia :\n";
                    cin >> s[ i ].Data_przyjecia;
                    cout << "Podaj Opis swiadczenia:\n";
                    cin >> s[ i ].Opis;
                }
               
                ofstream plik;
                plik.open( argv[ 1 ] );
                for( int i = 0; i < roz; ++i )
                {
                    plik << s[ i ].ID << endl;
                    plik << s[ i ].Imie << endl;
                    plik << s[ i ].Nazwisko << endl;
                    plik << s[ i ].Data_przyjecia << endl;
                    plik << s[ i ].Opis << endl;
                    plik << "\n\n";
                }
                plik.close();
                delete[] s;
                break;
            }
        case 3:
            {
                cout << "Pacjenci w bazie :\n\n";
               
                int n = rozmiar( argv[ 1 ] ) - 1;
                Pacjent * s = new Pacjent[ n ];
                zpliku( argv[ 1 ], s, n );
                wypisz( s, n );
               
                delete[] s;
                break;
            }
           
        case 4:
            {
               
                int n = rozmiar( argv[ 1 ] ) - 1;
                Pacjent * s = new Pacjent[ n ];
                zpliku( argv[ 1 ], s, n );
               
                int ID;
                cout << "Ktorego Pacjenta usunac z bazy ?\n";
                cin >> ID;
                usun( s, n, ID );
               
                ofstream plik;
                plik.open( argv[ 1 ] );
                for( int i = 0; i < n - 1; ++i )
                {
                    plik << s[ i ].ID << endl;
                    plik << s[ i ].Imie << endl;
                    plik << s[ i ].Nazwisko << endl;
                    plik << s[ i ].Data_przyjecia << endl;
                    plik << s[ i ].Opis << endl;
                    plik << "\n\n";
                }
                plik.close();
               
                delete[ ID ] s;
                break;
            }
        case 5:
            {
                cout << "Pacjenci z bazy posortowani po Dacie przyjecia \n";
                int n = rozmiar( argv[ 1 ] ) - 1;
                Pacjent * s = new Pacjent[ n ];
                zpliku( argv[ 1 ], s, n );
                sort( s, n );
                wypisz( s, n );
               
                delete[] s;
                break;
            }
        case 6:
            {
                cout << "Pacjenci z bazy posortowani po Imieniu \n";
                int n = rozmiar( argv[ 1 ] ) - 1;
                Pacjent * s = new Pacjent[ n ];
                zpliku( argv[ 1 ], s, n );
                sort2( s, n );
                wypisz( s, n );
               
                delete[] s;
                break;
               
            }
        case 7:
            {
                char nazwa[ 20 ];
                cout << "Podaj nazwe jaka bedzie miala kopia bazy \n";
                cin >> nazwa;
                int n = rozmiar( argv[ 1 ] ) - 1;
                Pacjent * s = new Pacjent[ n ];
                zpliku( argv[ 1 ], s, n );
               
                ofstream plik;
                plik.open( nazwa );
                for( int i = 0; i < n; ++i )
                {
                    plik << s[ i ].ID << endl;
                    plik << s[ i ].Imie << endl;
                    plik << s[ i ].Nazwisko << endl;
                    plik << s[ i ].Data_przyjecia << endl;
                    plik << s[ i ].Opis << endl;
                    plik << "\n\n";
                }
                plik.close();
               
               
                delete[] s;
                break;
               
               
            }
        case 0:
            {
                cout << "Dziekuje! Dowidzenia  ;)\n";
               
                //break;
            }
        }
    } while( znak != 0 );
   
   
    return 0;
}

I dorzucę jeszcze coś ;( ... Opcja Usuwania pacjentów jest również zła wpisuję ID pacjenta i wyskakuje error , imie , error , nazwisko itd itp nie działa.
P-27715
szyx_yankez
» 2011-02-02 19:53:20
Otaguj kod w [cpp] ... [/cpp].
P-27717
LukiPRO
» 2011-02-02 19:53:44
OMFG
mam prośbę

zrób tak
klik na edytuj
i weź ten kod w
[ cpp] [/cpp]

dzięki
P-27718
DejaVu
» 2011-02-02 20:27:45
Uhm... masz na tyle dużo błędów, że nie chce mi się ich nawet wymieniać wszystkich. W skrócie: źle obsługujesz zapis/odczyt.

Wczytywanie danych

Opcja pierwsza

  • Wczytaj liczbę rekordów w pliku
  • Wczytaj n' rekordów

Opcja druga

  • Wczytuj rekordy dopóki nie nastąpi koniec pliku

Zapis danych

Opcja pierwsza

  • Zapisz liczbę rekordów w pliku
  • Zapisz n' rekordów

Opcja druga

  • Zapisz n' rekordów

Dopisywanie danych

  • Dopisz rekord do tablicy przechowującej dane
  • Zapisz cały plik

Usuwanie danych

  • Usuń rekord z tablicy przechowującej dane
  • Zapisz cały plik

Edycja danych

  • Edytuj rekord w tablicy przechowującej dane
  • Zapisz cały plik

Podsumowanie

Możesz napisać oczywiście po swojemu rozwiązanie, ale tylko życie sobie skomplikujesz.
P-27721
mazur00015
Temat założony przez niniejszego użytkownika
» 2011-02-02 20:36:58
Czy ktoś mógłby to dla mnie z edytować ? Chodzi mi głównie o funkcje nr 4 "case4" usuwanie pacjentów.
P-27724
« 1 » 2
  Strona 1 z 2 Następna strona