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

Baza Danych

Ostatnio zmodyfikowano 2011-02-03 12:39
Autor Wiadomość
malan
» 2011-02-02 21:51:35
Nie licz, że ktoś Ci to edytuje. No, chyba, że nie będzie miał co robić albo... będzie mu się nudziło.
Gdybyś użył jednego z kontenerów, to nie miałbyś tych problemów...

Na szybko, to funkcję usuń zrobiłbym tak:
C/C++
void usun( Pacjent * s, int n, int ktory )
{
    for( int i = ktory - 1; i < n - 1; ++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;
    }
}
P-27736
mazur00015
Temat założony przez niniejszego użytkownika
» 2011-02-02 22:26:10
ehhh gdy próbuję usunąć jakiegoś pacjenta baza się zamyka :/

o to Case 4

C/C++
case 4:
{
   
    int n;
    Pacjent * s = new Pacjent[ n ];
   
   
    int ktory;
    cout << "Ktorego pacjenta usunac z bazy ?\n";
    cin >> ktory;
    usun( s, n, ktory );
   
    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[] s;
    break;
}

Jakieś porady co z tym zrobić aby po wyborze tej funkcji i po wpisaniu ID docelowy pacjent zostawał usunięty ?
P-27742
malan
» 2011-02-03 12:39:07
Do tego typu zadań używa się http://pl.wikipedia.org/wiki/SQL. C++ oferuje między innymi SQLite, z którym miałem okazję pracować. Nie jest on wcale taki trudny do opanowania. Tobie wystarczyły by (o ile się nie mylę) tylko 3 funkcje- (
sqlite3_open
,
sqlite3_exec
 i
sqlite3_close
).

Co do twojego problemu, to rozwiązałbym to inaczej. Najpierw bym wczytał sobie dane w z pliku do struktury, a zapisywał je dopiero kiedy program kończyłby pracę.
Mniej więcej widziałbym to tak:
C/C++
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

struct Patient
{
    std::string name;
    std::string lastName;
    std::string dateOfAdmitting;
   
    Patient( const std::string & name, const std::string & lastName, const std::string & dateOfAdmitting );
    void show();
};

Patient::Patient( const std::string & name, const std::string & lastName, const std::string & dateOfAdmitting )
    : name( name )
    , lastName( lastName )
    , dateOfAdmitting( dateOfAdmitting )
{
}

void Patient::show()
{
    std::cout << "Name: " << name << std::endl;
    std::cout << "Last name: " << lastName << std::endl;
    std::cout << "Date of admitting: " << dateOfAdmitting << std::endl;
}

void deletePatient( std::vector < Patient >& patients, int id );
bool readData( const char * fileName, std::vector < Patient >& patients );
bool savaDate( const char * fileName, std::vector < Patient >& patients );

int main()
{
    int eraseIndex, id = 0;
    std::vector < Patient > patients;
   
    if( !readData( "dataBase.txt", patients ) )
         return 1;
   
    std::cout << "=== Pacjenci ===" << std::endl;
    for( std::vector < Patient >::iterator it = patients.begin(); it != patients.end(); ++it )
    {
        std::cout << "#" << ++id << std::endl;
        it->show();
        std::cout << std::endl;
    }
   
    std::cout << "Ktorego pacjenta usunac?" << std::endl;
    std::cin >> eraseIndex;
   
    if( eraseIndex >= 1 && eraseIndex <= patients.size() )
         deletePatient( patients, eraseIndex - 1 );
   
    if( !savaDate( "dataBase.txt", patients ) )
         return 1;
   
    std::cin.sync();
    std::cin.get();
}

void deletePatient( std::vector < Patient >& patients, int id )
{
    std::cout << "=== Usuwanie pacjetna ===" << std::endl;
    std::cout << "Usuwam:" << std::endl;
   
    patients[ id ].show();
   
    patients.erase( patients.begin() + id );
}

bool readData( const char * fileName, std::vector < Patient >& patients )
{
    std::string name, lastName, dateOfAdmitting;
   
    std::ifstream dataBase( fileName );
    if( !dataBase.good() )
         return false;
   
    while( dataBase >> name >> lastName >> dateOfAdmitting )
    {
        patients.push_back( Patient( name, lastName, dateOfAdmitting ) );
    }
   
    return true;
}

bool savaDate( const char * fileName, std::vector < Patient >& patients )
{
    std::ofstream dataBase( fileName );
    if( !dataBase.good() )
         return false;
   
    for( std::vector < Patient >::iterator it = patients.begin(); it != patients.end(); ++it )
         dataBase << it->name << '\n' << it->lastName << '\n' << it->dateOfAdmitting << '\n';
   
    return true;
}
P-27747
1 « 2 »
Poprzednia strona Strona 2 z 2