Implementa el mètode deleteUser a la classe
CryptoApp. Aquest mètode ha de gestionar l’eliminació
completa d’un usuari del sistema, assegurant que no quedin dades
inconsistents ("orfes"). Utilitzeu l’arxiu CryptoApp.cpp i
implementeu el mètode
void CryptoApp::deleteUser(const string& name) situat
al final de l’arxiu. Haureu de:
Descarregar els arxius públics.
Canviar el nom de CryptoApp_old.cpp a
CryptoApp.cpp.
Implementar el codi del mètode deleteUser:
// PRE: name és el nom d'usuari a eliminar
// POST: Si l'usuari existeix, elimina l'usuari i tots els seus
// holdings associats de manera eficient. Si no, no fa res.
void CryptoApp::deleteUser(const string& name)
{
}Comprimir en format .tar l’arxiu CryptoApp.cpp.
tar -cvf CryptoApp.tar CryptoApp.cppPujar l’arxiu .tar a Jutge amb la funció implementada.
ESPECIFICACIONS:
Entrada: Rep el nom de l’usuari
(string) (ex: jaume).
Context: La classe disposa de mètodes interns
que pot consultar. Per exemple, per buscar si un usuari existeix i la
seva posició en vec_users, pot utilitzar:
int findUserIndexByName(string name)
Validació: Si l’usuari no existeix, la funció no ha d’eliminar res.
Esborrat en Cascada: Abans d’eliminar l’usuari,
ha d’eliminar totes les tinences (Holdings) vinculades a aquest
usuari del vector vec_holdings.
Esborrat de l’Usuari: Finalment, elimini
l’usuari del vector vec_users.
Observacions:
Els vectors vec_users i
vec_holdings es relacionen mitjançant l’userID
(int), no pel nom.
Ha d’obtenir primer l’ID de l’usuari per poder buscar els seus corresponents holdings.
Requisits de Rendiment (Important):
El sistema pot contenir desenes de milers de Holdings.
Es valorarà l’eficiència algorítmica en l’eliminació de les tinences holdings.
Nota: L’ordre dels elements en
vec_holdings NO és rellevant i pot
alterar-se durant l’esborrat. L’ordre en vec_users sí que
s’ha de mantenir.
API DE CLASSES AUXILIARS
User
int getId() — Retorna l’ID únic de
l’usuari.
string getName() — Retorna el nom de
l’usuari.
Asset
int getId() — Retorna l’ID únic de l’actiu.
string getAssetSymbol() — Retorna el símbol (ex:
"ETH").
Holding
int getUserId() — Retorna l’ID de l’usuari
propietari.
int getAssetId() — Retorna l’ID de l’actiu.
DOCUMENTACIÓ DE REFERÈNCIA DE LA CLASSE VECTOR
Utilitzi aquesta informació per seleccionar les operacions més adequades segons els requisits d’eficiència.
v[i] — Eficiència:
Accedeix a l’element en la posició i. Permet lectura
i escriptura.
Exemple: int x = v[0];,
v[2] = 10;
v.back() — Eficiència:
Retorna una referència directa a l’últim element del vector.
Exemple accedir:
cout << v.back().getName();
Exemple sobreescriure: v.back() = objX;
v.push_back(val) — Eficiència:
Afegeix una còpia de l’element val al final del
vector. Augmenta la mida en 1.
Exemple: v.push_back(usuari);
v.pop_back() — Eficiència:
Crida al destructor de l’ultim element i l’elimina del vector. Redueix la mida en 1.
Exemple: v.pop_back();
v.erase(it) — Eficiència:
Crida al destructor de l’element apuntat per l’iterador i l’elimina del vector. Desplaça tots els elements posteriors a l’esquerra.
Exemple esborrar element amb índex 2:
v.erase(v.begin() + 2);
v.size() — Eficiència:
Retorna el nombre d’elements actuals.
Exemple: v.size();
Com a entrada hi haurà els comandaments de creació d’usuaris, actius
i holdings, finalitzant amb la crida a deleteUser.
El programa principal realitzarà una comprovació automàtica "Abans i Després":
Imprimirà si existeix l’usuari [0,1] i quants holdings
té [0, 1, ..., N] (ex: 1 3).
Executarà la funció implementada.
Imprimirà si l’usuari existeix [0,1] i quants holdings
té amb aquest ID (si s’ha eliminat correctament:
0 0)
Autoria: Jaume Gallego
Generació: 2026-01-25T21:09:35.677Z
© Jutge.org, 2006–2026.
https://jutge.org