Baza Danych
Ostatnio zmodyfikowano 2011-02-03 12:39
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: void usun( Pacjent * s, int n, int ktory ) { for( int i = ktory - 1; i < n - 1; ++i ) { 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; } } |
|
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 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 ? |
|
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: #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; } |
|
1 « 2 » |