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

C++ Zamykanie programu ESC, sprawdzenie czy plik zapisany. Baza Danych

Ostatnio zmodyfikowano 2020-02-01 15:03
Autor Wiadomość
KarolLNS
Temat założony przez niniejszego użytkownika
C++ Zamykanie programu ESC, sprawdzenie czy plik zapisany. Baza Danych
» 2020-01-31 21:42:49
Cześć

Pisałem dzisiaj program na zaliczenie semestru, Prosta baza danych z możliwością dodania, edycji, usunięcia użytkowników. Wszystko idzie w miarę ok (chociaż jest to bardzo amatorki program), jednak jednym z punktów jest:
Zamykanie programu. Przed zamknięciem program ma sprawdzić czy plik został zapisany. Jeśli tak program kończy pracę, jeśli nie wyświetla komunikat, że nie zapisano zmian. Wtedy program pyta czy zapisać i wybieramy opcje tak albo nie. Nie program sie zamyka, tak zapisuje daje i się zamyka.

Zawile napisane.

W sumie nie wiem tylko jak napisać kod aby sprawdził czy plik był zapisany w tej sesji.

Mogę liczyć na pomoc?

C/C++
case '7':
if( tu chcialbym zeby program sprawdzil czy plik byl zapisany ) {
    return 0; // jeśli tak to zamykamy
    cout << "Zamykanie programu" << endl;
} else { // jeśli nie to wybór czy zapisać czy nie.
    char wyj;
    wyj = getch();
   
    cout << "Nie zapisales pliku." << endl;
    cout << "Czy chcesz zapisac??" << endl;
    cout << "1. Zapisz zmiany." << endl;
    cout << "2. Zamknij bez zapisywania." << endl;
    cout << endl;
    switch( wyj ) {
    case '1':
        Zapisz();
        break;
       
    case '2':
        system( "exit" );
        break;
       
    }
}

Nie wiem na ile to dobrze napisane. mogę wkleić cały kod jaki mam.

kod na zapisanie pliku:

C/C++
void Zapisz() {
    ofstream plik( "uzytkownicy.txt", ios::out | ios::trunc );
    plik << i;
    for( short j = 0; j < i; j++ ) {
        plik << uzytkownik[ j ].imie << endl;
        plik << uzytkownik[ j ].nazwisko << endl;
        plik << uzytkownik[ j ].wiek << endl;
        plik << uzytkownik[ j ].prawko << endl;
        plik << uzytkownik[ j ].kasa << endl;
    }
    cout << "Dane zostały zapisne w Bazie Danych. Wcisnij ENTER aby wrocic do MENU" << endl;
   
    getchar();
}
P-176152
pekfos
» 2020-01-31 22:12:21
Dodaj zmienną na to.
C/C++
bool czy_plik_byl_zapisany;
Ustaw na true przy zapisywaniu pliku i na false przy modyfikowaniu danych które zapisujesz.
P-176153
KarolLNS
Temat założony przez niniejszego użytkownika
» 2020-01-31 22:38:09
Nie do końca rozumiem jak to dokładnie napisać.

Cały kod do końca main wygląda tak:

C/C++
#include <iostream>
#include <conio.h>
#include <fstream>

using namespace std;

struct uzytkownicy {
    string imie;
    string nazwisko;
    string prawko;
    float wiek;
    int kasa;
};

short i; // zmienna do przechowywania ilosci uzytkownikow
uzytkownicy uzytkownik[ 200 ]; // tablica 200 elementowa

// deklaracje funkcji
void Dodaj();
void Wyswietl();
void Wyswietl_u();
void Wyswietl_e();
void Zapisz();
void Usun();
void Edytuj();
void Wczytaj();
void Wybor();

bool CPZ = Zapisz;
bool PE = Edytuj;


main() {
   
    cout << "***************" << endl;
    cout << "**Baza danych**" << endl;
    cout << "***************" << endl;
    cout << "Karol Mync, Bartosz Myszkiewicz, ..." << endl;
    cout << "***************" << endl;
   
    cout << endl;
    cout << endl;
   
    char wybor;
   
    Wczytaj();
   
    do {
        cout << "***************************" << endl;
        cout << "********** MENU ***********" << endl;
        cout << "***************************" << endl;
        cout << "1. Wyswietl Uzytkownikow " << endl;
        cout << "2. Wyszukaj Uzytkownika" << endl;
        cout << "3. Dodaj Uzytkownika" << endl;
        cout << "4. Usun Uzytkownika" << endl;
        cout << "5. Zmien dane Uzytkownika" << endl;
        cout << "6. Zapisz zmiany" << endl;
        cout << endl;
        cout << "ESC. Zamknij Aplikacje" << endl;
        cout << "***************************" << endl;
        cout << "***************************" << endl;
        cout << endl;
       
        wybor = getch();
       
        switch( wybor ) {
        case '1': Wyswietl();
            break;
           
        case '2': cout << "Wyszukaj ();" << endl;
            break;
           
        case '3': Dodaj();
            break;
           
        case '4':
            Usun();
            break;
           
        case '5':
            Edytuj();
            break;
           
        case '6': Zapisz();
            break;
           
        case '7':
            if( CPZ == true ) {
                return 0;
                cout << "Zamykanie programu" << endl;
            } if( PE == false ) {
               
                Wybor();
                break;
            }
           
        }
       
        system( "cls" );
    } while( wybor != 27 );
   
   
    return 0;
} // koniec main

obecnie po wyborze 7 po prostu zamyka program.
P-176154
pekfos
» 2020-01-31 23:01:25
Musisz modyfikować wartość zmiennej zgodnie z tym, jakie ma mieć znaczenie. Samo się to nie zrobi. Masz utrzymywać informację, czy są jakieś zmiany do zapisania. Zaraz po zapisaniu pliku, z definicji takich zmian nie ma, więc tam ustaw tą zmienną na "nie ma zmian do zapisania". Gdy zmieniasz jakieś dane, z tych które trafiają do pliku, ustaw tą zmienną na "są zmiany do zapisania".
P-176155
KarolLNS
Temat założony przez niniejszego użytkownika
» 2020-01-31 23:21:15
Niestety jestem początkujący i nie wiem jak to zrobić. Tego z zajęć nie pamiętam, może i nie było. Z resztą wiele rzeczy nie było, program zrobiłem z pomocą internetu i wyszukiwałem funkcję po funkcji jak ją napisać i na tym forum i na innych. Wiele przydatnych lekcji wziąłem z tego forum i to pomogło mi zrobić to co mam z czego jestem zadowolony.

Czy może ktoś napisać jak mniej więcej ma to wyglądać na podstawie mojego kodu?

Naprawdę nie rozumiem jak dodać bool do mojego kodu.

P-176156
pekfos
» 2020-02-01 00:09:02
No ale jak to na zajęciach nie było? To co było..? Chodzi tylko o dodanie jednej zmiennej i zaktualizowane jej w dwóch miejscach. Jeśli bool nie jest ci znane, to użyj dowolnego innego typu. Wymyśl sobie po jednej wartości na każdy z dwóch stanów o których pisałem i przypisz te wartości do tej zmiennej w odpowiednich momentach.
P-176158
KarolLNS
Temat założony przez niniejszego użytkownika
» 2020-02-01 15:03:17
Ok dzięki. Dużo pomogłem i myślałem o tym od rana, zrobiłem jak napisałeś, w każdej punkcji która miała odpowiadać na false albo true zdefiniowałem bool CPZ // czy program zapisany. w Zapisz dałem CPZ=true, w edytuj i usun CPZ=false. Na konie przy zamknij if(CPZ == true) to zamyka program w przeciwnym wypadku pisze czy zapisać czy zamknąć. Rzeczywiście było coś o zmiennej true false na zajęciach ale bardzo mało. Zaoczne studia i do tego na początku kilka zjazdów brak wykładowcy od programowania, później na szybko nauka wszystkiego i ciężko było ogarnąć.

Bardzo dziękuję za podpowiedź :)
P-176161
« 1 »
  Strona 1 z 1