stasio1500 Opublikowano 2 Stycznia 2011 Zgłoś Opublikowano 2 Stycznia 2011 (edytowane) No to od początku. Program ma być prosty. (Może z czasem go rozbuduję) Program ma wczytywać informacje o tym, co jest na magazynie i w jakiś sposób je katalogować w pliku .txt Moim pomysłem było zapisywanie danych w wierszach i wczytywanie w razie konieczności określonego przez użytkownika wiersza. Jak ktoś ma jakieś sugestie czy źle myślę czy nie proszę o podpowiedzi. I napotkałem taki oto problem. Uruchamiając program, który zapisuje coś do pliku .txt w pliku, w którym już coś jest tracę to, co w nim jest. Jest to nadpisywane na bieżące wartości. A tak być nie może. Z wyświetlaniem informacji jeszcze nie robiłem nic, ale myślę, że poradzę sobie z tym. Jak będę miał dostęp do mojego lapka postaram się podać tu, co już mam, a jest tego niewiele jak na razie. Program mniej więcej podobny do tego: Program Do Obslugi Magazynu - PurePC.pl - Forum Dyskusyjne ale C# jakoś mi nie przypomina C++ Z góry dziękuję za pomoc. Edytowane 2 Stycznia 2011 przez stasio1500 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
_OskaR Opublikowano 2 Stycznia 2011 Zgłoś Opublikowano 2 Stycznia 2011 (edytowane) Zgaduję, że to się może przydać: http://www.cplusplus.com/reference/clibrary/cstdio/fseek/ http://www.cplusplus.com/reference/clibrary/cstdio/fopen/ r+ Zamiast bawić się w pliki txt, możesz użyć prostej bazy danych. Edytowane 2 Stycznia 2011 przez _OskaR 1 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
stasio1500 Opublikowano 2 Lutego 2011 Zgłoś Opublikowano 2 Lutego 2011 Oto co stworzyłem: #include <cstdlib>#include <iostream>#include <conio.h>#include <fstream.h>using namespace std;struct magazyn { char nazwatow[25]; float cena; float ilosc; }; void zapis(){ magazyn magazynu; ofstream plik1("dane.dat",ios::binary | ios::app| ios::out); cout<<"podaj nazwe towaru : "; cin>>magazynu.nazwatow; cout<<"podaj cene twoaru : "; cin>>magazynu.cena; cout<<"podaj ilosc towaru : "; cin>>magazynu.ilosc; plik1.write(reinterpret_cast<char*>(&magazynu),sizeof(magazynu)); plik1.close(); cout<<" "<<endl;}void odczyt(){magazyn magazynu; int a=1; ifstream plik1("dane.dat",ios::binary| ios::in); while (1) { plik1.read(reinterpret_cast<char*>(&magazynu),sizeof(magazynu)); if(plik1.eof()) break; cout<<a<<" "<<magazynu.nazwatow<<" "<<magazynu.cena<<" "<<magazynu.ilosc<<endl; a++; } plik1.close(); cout<<" "<<endl; getchar(); getchar();}void popraw(){ magazyn magazynu; ofstream plik1("dane.dat",ios::binary | ios::in); int k; cout<<"podaj ktory rekord chcesz poprawic "<<endl; cin>>k; plik1.seekp(sizeof(struct magazyn)*(k-1)); cout<<"podaj nazwe towaru : "; cin>>magazynu.nazwatow; cout<<"podaj cene twoaru : "; cin>>magazynu.cena; cout<<"podaj ilosc towaru : "; cin>>magazynu.ilosc; plik1.write(reinterpret_cast<char*>(&magazynu),sizeof(magazynu)); plik1.close(); cout<<" "<<endl; } void za() { magazyn magazynu; ofstream strumien; int a=1; ifstream plik1("dane.dat",ios::binary| ios::in); strumien.open("dane.txt"); while (1) { plik1.read(reinterpret_cast<char*>(&magazynu),sizeof(magazynu)); if(plik1.eof()) break; strumien << a <<" "<<magazynu.nazwatow<<" "<<magazynu.cena<<" "<<magazynu.ilosc<<endl; a++; } plik1.close(); strumien.close(); cout<<"Zapis do pliku dane.txt zakonczony powodzeniem "<<endl; getchar(); getchar(); } void usun() { system("cls"); magazyn magazynu; int k; int pom=0,pom1=0; fstream plik1("dane.dat",ios::binary | ios::in | ios::out); ofstream plik2("pomoc.tmp",ios::binary | ios::out ); cout<<"ktory rekord chcesz usunac? : "; cin>>k; pom1=(sizeof(struct magazyn)*(k-1)); while(1) { plik1.read(reinterpret_cast<char*>(&magazynu),sizeof(magazynu)); if(pom == pom1) break; plik2.write(reinterpret_cast<char*>(&magazynu),sizeof(magazynu)); pom = pom + sizeof(struct magazyn); } plik1.close(); plik2.close(); fstream plik3("dane.dat",ios::binary | ios::in | ios::out); ofstream plik4("pomoc.tmp",ios::binary | ios::out | ios::app ); plik3.seekp(sizeof(struct magazyn)*(k)); while(1) { plik3.read(reinterpret_cast<char*>(&magazynu),sizeof(magazynu)); if(plik3.eof()) break; plik4.write(reinterpret_cast<char*>(&magazynu),sizeof(magazynu)); } plik3.close(); plik4.close(); fstream plik5("pomoc.tmp",ios::binary | ios::in | ios::out); fstream plik6("dane.dat",ios::binary | ios::in | ios::out | ios::trunc ); while(1) { plik5.read(reinterpret_cast<char*>(&magazynu),sizeof(magazynu)); if(plik5.eof()) break; plik6.write(reinterpret_cast<char*>(&magazynu),sizeof(magazynu)); } plik6.close(); plik5.close(); }int menu(){int o; cout<<"Aby dodac towary do magazynu wybierz 1"<<endl; cout<<" "<<endl; cout<<"Aby odczytac zawartosc magazynu wybierz 2"<<endl; cout<<" "<<endl; cout<<"Aby poprawic dane w magazynie wybierz 3"<<endl; cout<<" "<<endl; cout<<"Aby usunac dane wybierz 4"<<endl; cout<<" "<<endl; cout<<"Aby wyeksportowac dane do pliku txt wybierz 5"<<endl; cout<<" "<<endl; cout<<"Aby zamknac wcisnij 0"<<endl; cout<<" "<<endl; cin>>o; return o;}int main(int argc, char *argv[]){ cout<<"********************************************************"<<endl; cout<<" Witam w programie MAGAZYN "<<endl; cout<<"********************************************************"<<endl; cout<<" "<<endl; int o= menu();while (o!=0){ switch(o) { case 1: { zapis(); break; } case 2: { odczyt(); break; } case 3: { popraw(); break; } case 4: { usun(); break; } case 5: { za(); break; } } o=menu(); } system("PAUSE"); return EXIT_SUCCESS;}Do zapisu postanowiłem użyć pliku binarnego. Brakuje wyszukiwania ale nie wiem jak się za nie zabrać i narazie nie jest mi potrzebne. Może komuś się przyda kod. Choć zalecam aby przed jego wykorzystaniem dać chociaż mi o tym znać. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...