Да се напише програма, която има следните три функции:
- добавяне на нов потребител и неговата парола
- проверка дали е въведен валиден потребител и парола
Програмата да пази данните си между две стартирания.
По желание: Да се добави функция за изтриване на потребител и за промяна на паролата на въведен вече потребител.


#include <stdafx.h> //Този хедър може и да ви пречи #include <cstdlib> #include <iostream> #include <fstream> using namespace std; const char file_danni[20]="login.txt"; struct danni_whod { char ime[64]; char pass[128]; }; int prowerka_potrebitel (char ime[64]) //Проверка за съвпадащи потребители. { ifstream danni; danni.open(file_danni, ios::in); char temp[64]; while(danni>>temp) if(strcmp(ime,temp)==0) { danni.close(); return 1; } danni.close(); return 0; }; void zapis (danni_whod potrebitel) //Запис на данни във файла. { ofstream danni; danni.open(file_danni, ios::app); danni<<potrebitel.ime<<" "<<potrebitel.pass<<endl; danni.close(); }; int wpiswane(danni_whod potrebitel) //Вписване на потребител. { ifstream danni; danni.open (file_danni, ios::in); danni_whod tmp; while (danni>>tmp.ime>>tmp.pass) { if ((strcmp(tmp.ime,potrebitel.ime)==0)&&(strcmp(tmp.pass,potrebitel.pass)==0)) { danni.close(); return 1; } } danni.close(); return 0; }; // Извежда информацията във файла. int izwedi() { ifstream danni; danni.open(file_danni, ios::in); danni_whod tmp; int n=0; while(danni>>tmp.ime>>tmp.pass) { cout<<n<<": "<<tmp.ime<<endl; n++; }; return n; } /* * Изтрива избраният от потребителя ред. * За целта копира всичката информация във друг файл * освен избраният ред. */ int iztriwane(int n) { ifstream danni_chetene (file_danni, ios::in); ofstream danni_zapis ("login_tmp.txt", ios::app); danni_whod tmp; int red=0; while(danni_chetene>>tmp.ime>>tmp.pass) { if(red!=n) danni_zapis<<tmp.ime<<" "<<tmp.pass<<endl; red++; }; danni_chetene.close(); danni_zapis.close(); if (!rename (file_danni, "login_old.txt")) { rename ("login_tmp.txt", file_danni); remove ("login_old.txt"); return 1; } else { remove ("login_tmp.txt"); return 0; }; }; /* * Подобно на изтриването на ред с тази * особеност, че се подменя само полето парола. */ int smqna_parola(int n, char pass[128]) { ifstream danni_chetene (file_danni, ios::in); ofstream danni_zapis ("login_tmp.txt", ios::app); danni_whod tmp; int red=0; while(danni_chetene>>tmp.ime>>tmp.pass) { if(red==n) danni_zapis<<tmp.ime<<" "<<pass<<endl; else danni_zapis<<tmp.ime<<" "<<tmp.pass<<endl; red++; }; danni_chetene.close(); danni_zapis.close(); if (!rename (file_danni, "login_old.txt")) { rename ("login_tmp.txt", file_danni); remove ("login_old.txt"); return 1; } else { remove ("login_tmp.txt"); return 0; }; }; int main(int argc, char** argv) { danni_whod potrebitel; fstream danni; danni.open(file_danni, ios::in | ios::app); if (danni.is_open())// проверява дали има такъв файл. { danni.close(); cout<<"Wuwedi: \n1: za registrirane \n2: za whod \n3: za iztriwane na potrebitel \n4: za smqna na parola \n"; int n; cin>>n; switch (n) { case 1: cout<<"Wuwedi ime i parola: "; cin>>potrebitel.ime>>potrebitel.pass; if(prowerka_potrebitel(potrebitel.ime)) cout<<"Weche ima takuw potrebitel\n"; else { zapis(potrebitel); cout<<"Weche si registriran!\n"; }; break; case 2: cout<<"Wuwedi ime i parola: "; cin>>potrebitel.ime>>potrebitel.pass; if (wpiswane(potrebitel)) cout<<"Wie wlqzohte kato "<<potrebitel.ime<<endl; else cout<<"Greshen potrebitel ili parola\n"; break; case 3: int i, red; i=izwedi(); cout<<"Wuwedete nomera na potrebitelq za iztriwane: "; cin>>red; if ((red<0)||(red>i)) cout<<"Newaliden red\n"; else if (iztriwane(red)) cout<<"Uspeshno e iztrit potrebitelq\n"; else cout<<"Greshka pri iztriwaneto\n"; break; case 4: i=izwedi(); cout<<"Wuwedete nomera na potrebitelq za smqna na parola: "; cin>>red; if ((red<0)||(red>i)) cout<<"Newaliden red\n"; else { char pass[128]; cout<<"Wuwedete nowa parola: "; cin>>pass; if (smqna_parola(red, pass)) cout<<"Parolata e smenena uspeshno\n"; else cout<<"Greshka pri podmqnata\n"; } break; default: cout<<"Nqma takuw wariant\n"; }; } else cout<<"Problem s otwarqneto na faila!!!\n"; system("pause"); return 0; }#include <stdafx.h> //Този хедър може и да ви пречи #include <cstdlib> #include <iostream> #include <fstream> using namespace std; const char file_danni[20]="login.txt"; // деклариране на константа от тип низ struct danni_whod // структура с име danni_whod { char ime[64]; // деклариране поле от тип низ char pass[128]; // деклариране на поле от тип низ }; int prowerka_potrebitel (char ime[64]) //Проверка за съвпадащи потребители. С един параметър с име "ime" { ifstream danni; // файл за четене danni.open(file_danni, ios::in); // отваряне на файл за четене с име file_danni char temp[64];// деклариране на низ while(danni>>temp) // цикъл while (докато можем да прочетем от файла в temp) if(strcmp(ime,temp)==0) // ако двете са еднакви { danni.close(); // затваряне на файла return 1; // връщане на стойност 1 } danni.close(); // затваряне на файла return 0; // връщане на стойност 0{ void zapis (danni_whod potrebitel) //Запис на данни във файла. { ofstream danni; // деклариране на файл само за запис с име danni. danni.open(file_danni, ios::app); //отваряне на файла за добавяне само в края на файла и записване на съдържанието му. danni<<potrebitel.ime<<" "<<potrebitel.pass<<endl; // запис във файла и нов ред. danni.close(); // затваряне на файла. }; int wpiswane(danni_whod potrebitel) //Вписване на потребител. { ifstream danni; // файл danni само за четене. danni.open (file_danni, ios::in); // отваряне на файла за четене. danni_whod tmp; // декларираме променлива от тип структура с име tmp. while (danni>>tmp.ime>>tmp.pass) //цикъл while (четене на данни име и парола). { if ((strcmp(tmp.ime,potrebitel.ime)==0)&&(strcmp(tmp.pass,potrebitel.pass)==0)) // сравнява низовете (ако името съответсва на това подадено на потребителя и паролата също) { danni.close(); // затваряне на файла. return 1; // връща 1 (условието е изпълнено). } } danni.close(); //затваряне на файла. return 0;// връща 0 (условието не е изпълнено) . };#include <cstdlib> #include <iostream> #include <fstream> //деклариране на библиотека using namespace std; int main(int argc, char *argv[]) { int iztriwane(int n) // деклариране на функция от целочислен тип { ifstream danni_chetene (file_danni, ios::in); // деклариране на файл само за четене и го отваря в режим за четене ofstream danni_zapis ("login_tmp.txt", ios::app); // деклариране на файл само за запис danni_whod tmp; // деклариране на променлива тип структура int red=0; // деклариране на променлива от целочислен тип и едновременно с това инициализираме while(danni_chetene>>tmp.ime>>tmp.pass) // цикъл с постусловие (докато от файла се четат името и паролата) { if(red!=n) // ако red е различно от променливата във файла danni_zapis<<tmp.ime<<" "<<tmp.pass<<endl; // записваме във файла за запис името и паролата red++; // увеличаване на реда с 1 }; danni_chetene.close(); // затваряне на файла за четене danni_zapis.close(); // затваряне на файла за запис if (!rename (file_danni, "login_old.txt")) //ако успешно е преименуван файла с данни { rename ("login_tmp.txt", file_danni); //преименуване файла с данни от "login_tmp.txt" на записаното във file_danni remove ("login_old.txt"); //премахване на стария файл login_old.txt return 1; // връща 1 ,т.е. успешно е преименуван } else //ако преименуването не е успешно { remove ("login_tmp.txt"); //премахване на новия файл login_tmp.txt return 0; //връща 0, т.е. преименуването е неуспешно }; }; system("PAUSE"); return EXIT_SUCCESS; }