Distored Opublikowano 19 Stycznia 2014 Udostępnij Opublikowano 19 Stycznia 2014 Cześć, po nauce Instrukcji warunkowej if;else if;if ,pętli for;while;do...while,pseudolosowaniu,instrukcji switch,zapisu i odczytu z pliku tekstowego. Wymyśliłem swój projekt który ma na celu rozwinięcie moich "umiejętności" bo "Praktyka czyni mistrza". Projekt,plan polega na "symulatorze banku". Jest menu z opcjami 1.Zaloguj się/2.Załóż konto/3.Informacje o banku/4.Wyłącz konsole. #include <iostream> #include <windows.h> #include <fstream> #include <stdio.h> #include <cstdlib> #include <conio.h> using namespace std; string PIN,haslo; int wybor; int main() { cout << " WITAM W PANKU PKO!" << endl; cout << " MENU!" << endl; cout << "---------------------------------" << endl; cout << " 1.ZALOGUJ SIE NA KONTO" << endl; cout << " 2.ZALOZ KONTO W BANKU" << endl; cout << " 3.INFORMACJE O BAKU" << endl; cout << " 4.WYLACZ KONSOLE" << endl; cout << "---------------------------------" << endl; cout << "CHCE: "; cin >> wybor; 1.Po wyborze opcji nr 1.@up , powinno się wyświetlić podaj pin;podaj haslo. switch (wybor) { case 1: string linia; int nr_linii=1; fstream baza_danych; baza_danych.open("PIN_HASLA.txt", ios::in); system("cls");Sleep(250); if(baza_danych.good()==false) { cout << "Problem z baza danych!"; } else {system("cls");Sleep(250); cout << "Podaj PIN: "; cin >> PIN; cout << "Podaj haslo: "; cin >> haslo;} nr_linii++; break; } return 0; } jeśli nie może odczytać pliku "PIN_HASLA.txt" to wyskakuje błąd, jeżeli PIN i Hasło źle zostały wpisane wyskakuje na 1,5 sec Sleep (1500) informacja że podane hasło lub pin są niepoprawne.Po 3 nieudanych próbach wracamy do menu głównego, PIN i Hasło są wczytywane z "PIN_HASŁA".Kod zamieściłem powyżej kod, w tym momencie się zgubiłem prosił bym nakierowanie mnie na właściwą drogę.Powiedzenie jaki błąd jeszcze popełniłem.I jeżeli ktoś ma jakiś fajny projekt żebym mógł dalej coś pisać w zakresie który też wyżej wymieniłem to prosiłbym . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Phoenix_PL Opublikowano 19 Stycznia 2014 Udostępnij Opublikowano 19 Stycznia 2014 zmienne które nie muszą być globalne deklaruj w funkcji main. nie rozumiem po co ci sleep, wystarczy wsadzić cout << "Problem z baza danych!"; getch();i wtedy program czekał na kliknięcie klawisza. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
4ggr35510n Opublikowano 19 Stycznia 2014 Udostępnij Opublikowano 19 Stycznia 2014 "nie rozumiem po co ci sleep"Zabezpieczenie przed brute-force'm? Duh! @TOPIC Nie do końca rozumiem pytania. Kod wygląda poprawnie, wystarczy... zrobić to, co napisałeś, że trzeba zrobić. Pobrać od użytkownika login/hasło do zmiennych, które już masz i z nimi pracowac. @EDITJedyne, czego jeszcze nie masz to "menejdżing" haseł w pliku. Proponuję każdą parę login/hasło trzymać w JEDNEJ linii, oddzielonych spacją. Następnie używasz getline aby pobrać jedną linię. Dzielisz tę linię na dwa stringi (google: c++ string split), spacja w pliku je oddziela. Porównujesz z wprowadzonymi. Jeśli chcesz dodać parę login/hasło ( opcja Załóż Konto ) dodajesz po prostu linię na końcu pliku. Ta sygnatura jest pusta. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Distored Opublikowano 19 Stycznia 2014 Autor Udostępnij Opublikowano 19 Stycznia 2014 Tak to jest mój własny kod, ale jakoś nie potrafię sb. ułożyć tak logicznie tego. Wybieram opcje 1 >> ( Jeśli nie może wczytać bazy danych wyskakuje błąd,po 1,5 sec znika) Poprosić o PIN i HASŁO (Jeżeli hasło lub pin albo to i to zostało źle podane inkrementujemy zmienną 'int proby = 0 ' << Dać to w pętle while | while ( int proby == 3 ) | Gdy wyczerpiemy limit poinformować o tym i wyłączyć konsole exit () >> Pobierać dane z pliku txt. i tu się gubię że jest 1.PIN 2.HASŁO 3.04362 4.asdasd 5.03374 6.dsadsa i jak to odczytać poprawnie. PS. Miło że ludzie pomagają @Edit @Up Ma ktoś jakiś poradnik,który dobrze tłumaczy 'string split' ? Szukam ale na yt. jest o C# a na necie ciężej a szczególnie po angielsku to rozgryźć Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Isscord Opublikowano 19 Stycznia 2014 Udostępnij Opublikowano 19 Stycznia 2014 Mój pomysł to taki : Przekonwertować stringa na char* i potem przeczesujesz tego char'a jakąś pętelką , jeżeli podczas jednego wykonania petli nie trafi na spacje to wykonuje pętle kolejny raz a pojedyncza literke dodaje do char*. Mam nadzieje,że rozumiesz. To moja własna interpretacja split'a. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
4ggr35510n Opublikowano 19 Stycznia 2014 Udostępnij Opublikowano 19 Stycznia 2014 http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c Programowanie ma to do siebie, że nie jest po angielsku, a po C++owsku. Wybierz sobie taki, który wydaje ci się najłatwiejszy. Być może ten http://stackoverflow.com/a/5208977/3202480 @UPPo co? Uczmy się rozwiązań dla C++, nie C. Ta sygnatura jest pusta. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Distored Opublikowano 19 Stycznia 2014 Autor Udostępnij Opublikowano 19 Stycznia 2014 #include <iostream> #include <windows.h> #include <fstream> #include <stdio.h> #include <cstdlib> #include <conio.h> #include <string> #include <vector> using namespace std; string PIN,haslo; string bd_PIN,bd_haslo; int wybor,proba=1; int main() { cout << " WITAM W PANKU PKO!" << endl; cout << " MENU!" << endl; cout << "---------------------------------" << endl; cout << " 1.ZALOGUJ SIE NA KONTO" << endl; cout << " 2.ZALOZ KONTO W BANKU" << endl; cout << " 3.INFORMACJE O BAKU" << endl; cout << " 4.WYLACZ KONSOLE" << endl; cout << "---------------------------------" << endl; cout << "CHCE: "; cin >> wybor; switch (wybor) { case 1: while (proba==3) { string linia; int nr_linii = 1; fstream baza_danych; baza_danych.open("PIN_HASLA.txt", ios::in); system("cls");Sleep(250); if(baza_danych.good()==false) { cout << "Problem z baza danych!"; getch();getch(); } else {system("cls");Sleep(250); cout << "Podaj PIN: "; cin >> PIN; cout << "Podaj haslo: "; cin >> haslo;} while (getline(baza_danych, linia)) { vector<string> linia; if ( linia[0] == haslo && linia[1] == PIN ) { cout << "Zalogowany: ";} } /* if ((PIN==bd_PIN)&&(haslo==bd_haslo)) { cout << "ZALOGOWANY!"; } else { cout << "Zle haslo lub kod PIN!(Prob nr " << proba << " z 3); proba++; getchar();getchar(); } */ } } return 0; } @EDIT Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
4ggr35510n Opublikowano 19 Stycznia 2014 Udostępnij Opublikowano 19 Stycznia 2014 switch(nr_linii){case 1: bd_PIN = linia;break;case 2: bd_haslo = linia;break;}nr_linii++;break; To nie ma sensu. W tym miejscu dokonaj split'u string linia -> vector<string> linia; if ( linia[0] == haslo && linia[1] == pin ) { zalogowany: }; Ta sygnatura jest pusta. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Distored Opublikowano 19 Stycznia 2014 Autor Udostępnij Opublikowano 19 Stycznia 2014 Już się pogubiłem, dla innych to pewnie proste, ale dla mnie jako lajka pogubiłem się od wyszukiwania tego o co chodzi T-T. Program po wpisaniu 1. wysypuje się ; / #include <iostream> #include <windows.h> #include <fstream> #include <stdio.h> #include <cstdlib> #include <conio.h> #include <string> #include <vector> using namespace std; string PIN,haslo; string bd_PIN,bd_haslo; int wybor,proba=1; int main() { cout << " WITAM W PANKU PKO!" << endl; cout << " MENU!" << endl; cout << "---------------------------------" << endl; cout << " 1.ZALOGUJ SIE NA KONTO" << endl; cout << " 2.ZALOZ KONTO W BANKU" << endl; cout << " 3.INFORMACJE O BAKU" << endl; cout << " 4.WYLACZ KONSOLE" << endl; cout << "---------------------------------" << endl; cout << "CHCE: "; cin >> wybor; switch (wybor) { case 1: while (proba==3) { string linia; int nr_linii = 1; fstream baza_danych; baza_danych.open("PIN_HASLA.txt", ios::in); system("cls");Sleep(250); if(baza_danych.good()==false) { cout << "Problem z baza danych!"; getch();getch(); } else {system("cls");Sleep(250); cout << "Podaj PIN: "; cin >> PIN; cout << "Podaj haslo: "; cin >> haslo;} while (getline(baza_danych, linia)) { vector<string> linia; if ( linia[0] == haslo && linia[1] == PIN ) { cout << "Zalogowany: ";} } } } return 0; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Phoenix_PL Opublikowano 19 Stycznia 2014 Udostępnij Opublikowano 19 Stycznia 2014 Spójrz na warunek pętli, potem na deklarację. W chwili wywołania pętli, zmienna 'proba' wynosi 1. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Distored Opublikowano 19 Stycznia 2014 Autor Udostępnij Opublikowano 19 Stycznia 2014 warunek musi być że jeśli linia[0] == haslo&& linia[1] == PIN || proba==3 tak ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Zarchiwizowany
Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.