Как я могу использовать текст из файла, как переменные - PullRequest
0 голосов
/ 21 октября 2018

Я делаю небольшую систему банкомат-банк.

Я спрашиваю, как я могу взять значения из текстового файла (базы данных) и использовать его в некоторых переменных.

Iуже может хранить: name, age, money, card number и pin в текстовом файле, но у меня возникают проблемы при попытке проверить имя и пин-код из файла .txt.

Вот код.Эта программа имеет 2 версии: английскую и румынскую.Я сделал только часть "ro" (часть "en" просто введение), это просто раздел чтения / записи в файл:

void ro_utilizator_nou()
{

    system ("cls");

    string nume;
    int ziuac, lunac, anc, ziuan, lunan, ann, varsta, anbisect, bani=0;

    time_t t = time(NULL);
    tm* timePtr = localtime(&t);

    ziuac=timePtr->tm_mday;
    lunac=timePtr->tm_mon+1;
    anc=timePtr->tm_year+1900;

nume_gresit:
    cout<<"Introduceti numele: "<<endl;
    cin>>nume;
    cin.sync();
    if (!string_litere(nume)){system("cls");goto nume_gresit;}

data_gresita:
    cout<<"Va rugam sa va introduceti data nasterii."<<endl;

    cout<<"Introduceti ziua nasterii:"<<endl;
    cin>>ziuan; cin.clear(); cin.ignore();
    if (ziuan<1 || ziuan>31) {system("cls"); goto data_gresita;}

    cout<<"Introduceti luna nasterii:"<<endl;
    cin>>lunan; cin.clear(); cin.ignore();
    if (lunan<1 || lunan>12) {system("cls"); goto data_gresita;}

    cout<<"Introduceti anul nasterii:"<<endl;
    cin>>ann; cin.clear(); cin.ignore();
    if (ann>2018 || ann<1900) {system("cls"); goto data_gresita;}

    if ((ann % 4 == 0 && ann % 100 != 0 ) || ann % 400 == 0) anbisect = 1; else anbisect = 0; //stabilirea daca anul nasterii este bisect sau nu
    if (ziuan<1 || (lunan==2 && anbisect==1 && ziuan>29) || (lunan==2 && anbisect==0 && ziuan>28) || ((lunan==1 || lunan==3 || lunan==5 || lunan==7 || lunan==8 || lunan==10 || lunan==12) && ziuan>31) || ((lunan==4 || lunan==6 || lunan==9 || lunan==11) && ziuan>30) )
    {system("cls"); cout<<"Data nasterii incorecta!"<<endl<<endl;; goto data_gresita;}

    varsta=anc-ann; //stabilirea varstei
    if (lunan>lunac) varsta--;
    else if (lunan==lunac) if (ziuan>ziuac) varsta--;

    cout<<endl<<"Aveti "<<varsta<<" ani."<<endl;

    if (varsta<14) {
        cout<<"Ne pare rau, nu puteti avea un card de credit daca nu aveti minim 14 ani impliniti."<<endl<<endl;
        system("pause");
        main();
    }

    int card_number = generare_card_number();
    int card_pin = generare_pin();
    cout<<"Numarul cardului (si al contului) dumneavoastra este: "<<card_number<<endl;
    cout<<endl<<"ATENTIE! Urmeaza sa va afisam codul secret PIN!!!"<<endl<<"(Apasati orice tasta)"<<endl;
    cin.ignore(); cout<<"Pinul dumneavoastra este: "<<card_pin<<endl;cin.ignore();

    ofstream new_data_base("database.txt", ios::app);
    new_data_base << nume << ' ' << varsta << ' ' << bani << ' ' << card_number << ' ' << card_pin <<endl;
    new_data_base.close();
}
void ro_utilizator_existent()
{

    ifstream data_base("database.txt");

    string nume, nume2;
    int pin, optiune, inregistrat, varsta, bani, card_number, card_pin;

    if (!data_base.eof()){
        data_base >> nume >> varsta >> bani >> card_number >> card_pin;
    }

nume_gresit:
    system ("cls");
    cout<<"Introduceti numele: "<<endl;
    cin>>nume2;
    cin.sync();
    if (!string_litere(nume2)){system("cls");goto nume_gresit;}

    while (data_base >> nume){

        if (nume == nume2) goto pin_gresit;

        else {

            system("cls");
            cout<<"Nume gresit! Nu sunteti inregistrat?"<<endl;

repetare:
            cout<<"1 - Sunt inregistrat"<<endl<<"2 - Nu sunt inregistrat"<<endl;
            cin>>inregistrat; cin.clear(); cin.ignore();

            if (inregistrat==1) goto nume_gresit;
            else if (inregistrat==2) ro_utilizator_nou();
            else {system("cls"); goto repetare;
            }
        }
    }


pin_gresit:
    cout<<"Introduceti PIN-ul:"<<endl;
    cin>>pin; cin.clear(); cin.ignore();

    while (data_base >> nume >> varsta >> bani >> card_number >> card_pin){
        if (pin == card_pin) goto reusit;
        else {system("cls"); cout<<"PIN gresit!"; goto pin_gresit;}
    }

reusit:
    system("cls");

    cout<<"Logare reusita!"<<endl<<endl;

optiune_gresita:
    cout<<"1. Informatii cont."<<endl;
    cout<<"2. Cautare utilizator."<<endl;
    cout<<"3. Adaugare fonduri."<<endl;
    cout<<"4. Transfer bancar."<<endl;
    cout<<"5. Retragere numerar."<<endl<<endl;

    cout<<"9. Delogare."<<endl<<endl;

    cin>>optiune;
}

Когда я ввожу подходящее имя, оно говорит, что имя неверно;или когда имя работает, любое число считается похожим на правый штифт.

ps: со временем я вычислил возраст ("varsta");ps2: "bani" означает деньги ps3: я взял несколько примеров из https://www.youtube.com/watch?v=p3m3qLNX9zA, но это не так;мой код (весь) здесь: https://www.mediafire.com/file/zmujjs9014mej7c/BCR_ATM.cpp/file

1 Ответ

0 голосов
/ 21 октября 2018

Когда вы пишете файл, каждый человек находится в строке:

new_data_base << nume << ' ' << varsta << ' ' << bani << ' ' << card_number << ' ' << card_pin <<endl;

То есть, когда вы читаете файл.Всегда читайте одну целую запись за раз.Таким образом, вам не нужно беспокоиться о частичном чтении или поиске начала следующей записи.

Поэтому замените:

while (data_base >> nume){

на

while ( data_base >> nume >> varsta >> bani >> card_number >> card_pin ) {

Тогдавы можете удалить части, где вы пытаетесь игнорировать или извлечь различные части объекта.

Мой следующий совет очень важен.

  1. Получите эту работу /
  2. Перейдите к https://codereview.stackexchange.com
    Обратите внимание, что они смотрят только на рабочий код, поэтому сначала выполните первый шаг.
  3. Получите отзыв.Это чрезвычайно важно.

Вы используете так много вредных привычек.Вам нужно остановиться сейчас.Вам нужен реальный совет о том, как писать код.Если вы продолжите идти по этому пути, вы просто примете действительно плохую форму, что код не спасен.

Прекратите использовать MediaFire для размещения вашего источника.Никто не собирается загружать это.Получите себе аккаунт на github .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...