gsmfun Opublikowano 8 Stycznia 2007 Udostępnij Opublikowano 8 Stycznia 2007 Mam problem z zapisem do pliku w ponizszym programie.......zamiast dopisac do pliku to program nadpisuje go....tzn po uruchomieniu programu ''dodamy abonenta'' zapiszemy i odczytamy to poprzedni abonenci nam znikną a zostana zapisani ci wpisanie ''przed chwila w programie''.....a drugie: ... jak uruchomimy program zczytamy z pliku i chcemy uruchomic wyszukiwarke to wywala polecenie ''lista jest pusta'' a w pliku txt mamy zapisanego abonenta..... Prosilbym o pomoc w ten sprawie #include <iomanip> #include <iostream> #include <cstdlib> #include <cstring> #include <cctype> #include <fstream> #include <conio.h> #include <stdio.h> #include <windows.h> using namespace std; const int MAX = 100; const int STUD = 100; const char* Nazwa = "osoby.txt"; int licz_abonent = 0; extern "C" void __stdcall Sleep(DWORD dwMilliseconds); struct abonent { char nazwisko[MAX], imie[MAX]; int telefon; }; abonent *tablica_ab[sTUD]; void Dodaj() { abonent *nowy_abonent; nowy_abonent = new abonent; cout << "Podaj nazwisko: ";cin.getline(nowy_abonent->nazwisko, MAX); cout << "Podaj imie: ";cin.getline(nowy_abonent->imie, MAX); int i, dlug = strlen(nowy_abonent->nazwisko); nowy_abonent->nazwisko[0] = toupper(nowy_abonent->nazwisko[0]); for (i = 1;i < dlug;i++) nowy_abonent->nazwisko = tolower(nowy_abonent->nazwisko); nowy_abonent->imie[0] = toupper(nowy_abonent->imie[0]); dlug = strlen(nowy_abonent->imie); for (i = 1;i < dlug;i++) nowy_abonent->imie = tolower(nowy_abonent->imie); cout << "Podaj Nr.telefonu: "; cin >> nowy_abonent->telefon; cin.get(); tablica_ab[licz_abonent] = nowy_abonent; licz_abonent++; } void Znajdz() { char szukaj[MAX]; if (licz_abonent == 0) {cout << "Lista jest pusta" << endl;} else { cout << "Podaj szukane nazwisko "; cin >> szukaj;cin.get(); szukaj[0] = toupper(szukaj[0]); cout << setw(10) << "Nazwisko" << setw(10) << "Imie" << setw(10) << "Telefon" << endl; for (int i = 0; i < licz_abonent; i++) { if (strcmp(tablica_ab->nazwisko, szukaj) == 0) { cout << setw(10) << tablica_ab->nazwisko << setw(10) << tablica_ab->imie << setw(10) << tablica_ab->telefon << endl; } else cout << "Nie ma takiego abonenta" << endl; } } } void Usun() { char usun[MAX]; cout << "Podaj nazwisko do usuniecia" << endl; cin >> usun; cin.get(); int i, dlug = strlen(usun); usun[0] = toupper(usun[0]); for (int i = 1;i < dlug;i++) usun = tolower(usun); for (int i = 0; i < licz_abonent; i++) { if (strcmp(tablica_ab->nazwisko, usun) == 0) { delete tablica_ab; for (int j = i;j < licz_abonent;j++) tablica_ab[j] = tablica_ab[j+1]; licz_abonent--; } } } void fnZapisz(char* Nazwa = "osoby.txt") { if (licz_abonent == 0) { cout << "Nie ma czego zapisac" << endl; return; } ofstream plik_zap(Nazwa); if (!plik_zap) { cerr << "\n\aPliku " << Nazwa << " nie udalo sie otworzyc\n" << endl; } else { cout << "zapisuje do pliku:\n"; for (int i = 0;i < licz_abonent;i++) { plik_zap << tablica_ab->nazwisko << "," << tablica_ab->imie << "," << tablica_ab->telefon << endl; cout << tablica_ab->nazwisko << ' ' << tablica_ab->imie << ' ' << tablica_ab->telefon << endl; } plik_zap.close(); } } void fnOdczyt(char *Nazwa = "osoby.txt") { ifstream plik_odcz; plik_odcz.open(Nazwa); if (!plik_odcz) { cerr << "\nBRAK PLIKU: " << Nazwa << endl; } else { cout << "Odczytuje z pliku:\n"; cout << plik_odcz.rdbuf(); plik_odcz.close(); } } int main() { char z; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY); while (1) { cout << "\n==M===E===N===U===" << endl; Sleep(100); cout << "\n1 - Dodaj abonenta ksiazki" << endl; Sleep(100); cout << "\n2 - Znajdz abonenta" << endl; Sleep(100); cout << "\n3 - Usun abonenta ksiazki" << endl; Sleep(100); cout << "\n4 - Zapisz do pliku" << endl; Sleep(100); cout << "\n5 - Odczytytaj z pliku" << endl; Sleep(100); cout << "\nW - Wyjscie" << endl; z = getch(); switch (z) { case 'W': return EXIT_SUCCESS; case 'w': return EXIT_SUCCESS; case '1': Dodaj();break; case '2': Znajdz();break; case '3': Usun();break; case '5': fnOdczyt(); break; case '4': fnZapisz(); break; } } system("PAUSE"); return EXIT_SUCCESS; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 8 Stycznia 2007 Filar Społeczności Udostępnij Opublikowano 8 Stycznia 2007 Nie programuję w C, ale nie powinno się otworzyć pliku w trybie append tudzież przesunąć kursor do końca pliku? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
gsmfun Opublikowano 8 Stycznia 2007 Autor Udostępnij Opublikowano 8 Stycznia 2007 dzieki append dziala;)) tylko teraz mam problem z ''znajdz'' w ogole nie dziala tylko ostatni element dopisany od pliku jest wyszukiwany a reszta nie wchodzi w gre...... a zmienilem to ofstream plik_zap(Nazwa, std::ios::app); moglby ktos to przebudowac albo podac wskazowki gdzie co zmienic(taka prosba:)).. bo juz sil nie mam ja kcos zmienie w jednym miejscu to drugie nie dziala;/ ..a to pilna sprawa!! Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się