Cześć, wykładowca wymaga ode mnie (1 rok), abym zastosował w moim projekcie potrójny wskaźnik oraz dynamicznie powiększaną tablicę, problem w tym, że mój program to przechowywacz haseł, czy password manager (po prostu dodajemy, usuwamy i wyświetlamy hasła, które potem są zapisywane do pliku txt). Nie mam zielonego pojęcia jak się do tego zabrać
Plik nagłówkowy Dane.h
#include <string>
using namespace std;
class Dane {
private:
string strona;
string login;
string haslo;
public:
//przeciazenie
Dane();
Dane(string Strona, string Login, string Haslo);
Dane(const Dane& pobranie);
void zapis();
void zapis(string Strona, string Login, string Haslo);
void wyswietl();
string get_strona();
string get_login();
string get_haslo();
};
Dane.cpp
#include "pch.h"
#include <iostream>
#include "Dane.h"
#include <string>
using namespace std;
//zapis danych do pliku z klawiatury
void Dane::zapis() {
cout << "Podaj strone: " << endl;
cin >> Dane::strona;
cout << "Podaj login: " << endl;
cin >> Dane::login;
cout << "Podaj haslo: " << endl;
cin >> Dane::haslo;
}
//zapis danych do pliku z argumentów (np. jak juz jest cos w pliku, ze zmiennej)
void Dane::zapis(string Strona, string Login, string Haslo){
this->strona = Strona;
this->login = Login;
this->haslo = Haslo;
}
Dane::Dane() {}
//lista inicjalizacyjna
Dane::Dane(string Strona, string Login, string Haslo): strona(Strona), login(Login), haslo(Haslo) { }
//konstruktor kopiujący
Dane::Dane(const Dane& pobranie) {
this->zapis(pobranie.strona, pobranie.login, pobranie.haslo);
}
void Dane::wyswietl() {
cout << Dane::strona << ": " << Dane::login << " " << Dane::haslo << endl;
}
// metody zwracajaca wartosci (wartosci sa ogolnie prywatne, a przez to czesciowo staja sie publiczne), prywatne dla bezpieczenstwa
// nie modyfikuja wartosci, tylko wyswietlaja
string Dane::get_strona() {
return Dane::strona;
}
string Dane::get_login() {
return Dane::login;
}
string Dane::get_haslo() {
return Dane::haslo;
}
oraz main
//Sejf Haseł
#include "pch.h"
#include <iostream>
#include <string>
#include <fstream>
#include "Dane.h"
using namespace std;
bool wczytywanie(string &strona,string &login,string &haslo,istream &file) {
//wczytuje hasla (jesli juz jakies sa np)
getline(file, strona);
if (strona == "") return false;
getline(file, login);
getline(file, haslo);
return true;
}
void add(Dane* hasla, int& ilosc_wpisow) {
hasla[ilosc_wpisow].zapis();
ilosc_wpisow++;
}
void view(Dane* hasla, int& ilosc_wpisow) {
for (int j = 0; j < ilosc_wpisow; j++) {
hasla[j].wyswietl();
}
}
void save(Dane* hasla, int& ilosc_wpisow) {
ofstream file;
file.open("hasla.txt");
for (int j = 0; j < ilosc_wpisow; j++) {
//nie modyfikuja wartosci, tylko wyswietlaja
file << hasla[j].get_strona() << endl << hasla[j].get_login() << endl << hasla[j].get_haslo() << endl;
}
file.close();
delete[] hasla;
}
//dynamiczne rozszerzanie tablicy nie działa
/*void plustab(Dane* hasla, int& rozmiar) {
Dane* tablica = new Dane[rozmiar + 1];
for (int i = 0; i < rozmiar; i++) {
tablica[i] = Dane(hasla[i]);
}
delete[] hasla;
hasla = new Dane [++rozmiar];
hasla = tablica;
for (int i = 0; i < rozmiar; i++) {
hasla[i] = Dane(tablica[i]);
}
delete[] tablica;
}*/
int main() {
// tworzenie tablicy obiektów na maks 20 haseł
int rozmiar = 0;
int i = 0;
bool flag = true;
Dane*** hasla = new Dane**[1];
hasla[0] = new Dane* [1];
hasla[0][0] = new Dane[20];
ifstream file;
file.open("hasla.txt");
string strona;
string login;
string haslo;
if (file.is_open()) {
while (flag) {
flag = wczytywanie(strona, login, haslo, file);
if (flag) {
//plustab(hasla, rozmiar);
hasla[0][0][i].zapis(strona, login, haslo);
i++;
}
}
}
file.close();
//referencja
int& ilosc_wpisow = i;
char operacja;
while (1) {
cout << "Co chcesz zrobic?" << endl;
cout << "a - dodac haslo " << endl;
cout << "v - wyswietlic hasla " << endl;
cout << "s - wyjsc i zapisac " << endl;
cin >> operacja;
switch (operacja) {
//dodawanie haseł
case 'a':
add(**hasla,ilosc_wpisow);
//plustab(hasla, rozmiar);
break;
//wyswietlanie hasel
case 'v':
view(**hasla, ilosc_wpisow);
break;
//zapis i zamkniecie
case 's':
save(**hasla, ilosc_wpisow);
return 0;
}
}
}
w mainie mam zakomentowane dynamiczne rozszerzanie tablicy, lecz nie działa, może ktoś z tym także pomoże? Tak samo potrójny wskaźnik - został użyty, ale nie ma zastosowania, więc prowadzący się doczepił.
Dzięki z góry :)