Hola, gracias por responder, verás te hice caso y adapté lo que me dijiste pero me da error en todos los headers y no sé porque:
ManPersonas.h
Código C++:
Ver original#include <list>
#include <algorithm>
#include "Persona.h"
#ifndef CONTRPERSONAS_H
#define CONTRPERSONAS_H
using namespace std;
std::list<Persona>lista;
static int maxIdP = 0;
int getMaxIdP(){
return ++maxIdP;
}
bool check(const Persona& p){
int num_reg = std::count_if(lista.begin(),lista.end(),[&p](const Persona& p2){
return p2.nom == p.nom;
});
return num_reg > 0;
}
Persona* getRow(std::string xnom){
Persona* toReturn = NULL; // inicialización de puntero nulo
auto it = std::find_if(lista.begin,lista.end,[&xnom](const Persona& p){
return p.nom == xnom;
});
if( it != lista.end())
toReturn = &(it); // it
return toReturn;
}
Persona* getRow(int xid){
Persona* toReturn = nullptr; // inicialización de puntero nulo
auto it = std::find_if(lista.begin,lista.end,[&xid](const Persona& p){
return p.id == xid;
});
if( it != lista.end())
toReturn = &(it); // it
return toReturn;
}
bool create(Persona p){
if(check(p)){
return false;
}
else{
lista.push_back(p);
return true;
}
}
bool update(Persona p){
/*
Persona p1 = getRow(p.id);
if(p1.nom != p.nom){
if(check(p)){
return false;
}
}
lista[ind] = p;
ind = 0;
return true; */
}
if(check(p)){
}
}
std::list<Persona> read(){
return lista;
}
#endif /* CONTRPERSONAS_H */
Persona.h
Código C++:
Ver original#ifndef PERSONA_H
#define PERSONA_H
using namespace std;
struct Persona{
int id;
string nom;
string ape;
};
#endif /* PERSONA_H */
Util.h
Código C++:
Ver original#ifndef UTIL_H
#define UTIL_H
using namespace std;
bool checkInt(int s){
return s >= 48 and s <= 57;
}
bool checkStr(string s){
for(int i=0; i < s.size(); i++){
if((s[i] >= 65 and s[i]<= 90) or (s[i] >= 90 and s[i]<= 122)){
return true;
}
}
return false;
}
void pause(int dur) {
int temp
= time(NULL
) + dur
; while(temp
> time(NULL
)); }
string addString(string type){
int intento = 1;
string nom = "";
while(!checkStr(nom)){
cout << "\n intento nro "<< intento << " Ingrese " << type <<": ";
cin >> nom;
intento++;
}
return nom;
}
int addInt(string type){
int intento = 1;
int nro;
while(!checkInt(nro)){
cout << "\n intento nro "<< intento << " Ingrese " << type <<": ";
cin >> nro;
intento++;
}
return nro;
}
#endif /* UTIL_H */
crud_per.h
Código C++:
Ver original#include <iostream>
#include "Util.h"
#include "ManPersonas.h"
#ifndef CRUD_PER_H
#define CRUD_PER_H
using namespace std;
void created(){
int op;
cout << "\n ¿Desea crear una nueva persona? Aceptar=1/Cancelar=2 : ";
cin >> op;
if(op == 1) {
Persona p;
p.id = getMaxIdP();
p.nom = addString("Nombre");
p.ape = addString("Apelido");
if(create(p)){
cout << "\n persona creada :)" << endl;
}
else {
cout << "\n la persona ya existe :(" << endl;
}
}
else if(op == 2) {
pause(2);
}
else {
cout << "\n error :(" << endl;
}
}
void updated(){
int op;
string xnom;
Persona p;
xnom = addString("Nombre para la búsqueda");
p = getRow(xnom);
cout << "\n Persona: " << p.id << " Nombre: " << p.nom << " Apellido: " << p.ape;
cout << "\n ¿Desea algún dato? Aceptar=1/Cancelar=2 :";
cin >> op;
if(op == 1){
cout << "\n ¿Desea editar el nombre ("<< p.nom <<") actual? Aceptar=1/Cancelar=2 :";
cin >> op;
if(op == 1){
p.nom = addString("Nombre");
}
else {
pause(2);
}
cout << "\n ¿Desea editar el apellido ("<< p.ape <<") actual? Aceptar=1/Cancelar=2 :";
cin >> op;
if(op == 1){
p.ape = addString("Apellido");
}
else {
pause(2);
}
if(update(p)){
cout << "\n persona editada :)" << endl;
}
else {
cout << "\n la persona ya existe :(" << endl;
}
}
else if(op == 2) {
pause(2);
}
else {
cout << "\n error :(" << endl;
}
}
void deleted(){
int op;
string xnom;
Persona p;
xnom = addString("Nombre para la búsqueda");
p = getRow(xnom);
cout << "\n Persona: " << p.id << " Nombre: " << p.nom << " Apellido: " << p.ape;
cout << "\n ¿Desea eliminar la persona seleccionada? Aceptar=1/Cancelar=2 :";
cin >> op;
if(op == 1){
cout << "\n persona eliminada :)" << endl;
}
else if(op == 2) {
pause(2);
}
else {
cout << "\n error :(" << endl;
}
}
void listed(){
cout << "\n ---Mostrar Personas--- \n";
cout << "Persona\t Nombre\t Apellido \n";
for(std::list<Persona>::iterator it = read().begin(); it != read().end(); it++) {
cout << (it)->id << "\t " << (it)->nom << "\t " << (it)->ape << "\n";
}
}
#endif /* CRUD_PER_H */
menu_per.h
Código C++:
Ver original#include "Util.h"
#include "crud_per.h"
#ifndef MENU_PER_H
#define MENU_PER_H
void menu(){
int op;
cout << "\n ---CRUD Personas---\n";
cout << "\n 1. Crear Persona";
cout << "\n 2. Editar Persona";
cout << "\n 3. Borrar Persona";
cout << "\n 4. Mostrar Personas";
cout << "\n 5. Salir \n";
op = addInt("Opción");
while (op != 5){
switch(op){
case 1:
created();
break;
case 2:
updated();
break;
case 3:
deleted();
break;
case 4:
listed();
break;
default:
cout << "\n Error :( \n";
break;
}
}
cout << "\n Gracias por usarme ;) \n";
pause(2);
}
#endif /* MENU_PER_H */
Espero sus respuestas y saludos.