Hola a todos, quería hacer una consulta sobre c++, antes que nada uso netbeans 8.0.2 y linuz mint 17.1, mi problema es que intento simplificar el código para que no quede demasiado largo, y hasta ahí bien pero cuando ejecuto el menú no me funcionan la parte para acceder a las modificaciones y las bajas, pongo el código:
Header Files:
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 */
ManPersonas.h
Código C++:
Ver original#include "Persona.h"
#ifndef CONTRPERSONAS_H
#define CONTRPERSONAS_H
using namespace std;
struct persona lista[20];
int maxIdP = 0;
int lastP = 0;
int ind = 0;
int getMaxIdP(){
return maxIdP+1;
}
void upMaxIdP(){
maxIdP++;
}
bool check(persona p){
for (int i=0; i< lastP; i++){
if(lista[i].nom == p.nom){
ind = i;
return true;
}
}
return false;
}
persona getRow(string xnom){
persona p;
for (int i=0; i< lastP; i++){
if(lista[i].nom == xnom){
p = lista[i];
break;
}
}
return p;
}
persona getRow(int id){
persona p;
for (int i=0; i< lastP; i++){
if(lista[i].id == id){
p = lista[i];
break;
}
}
return p;
}
bool create(persona p){
if(check(p)){
return false;
}
else{
lista[lastP] = p;
lastP++;
upMaxIdP();
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)){
for(int i=ind; i<lastP-1; i++){
lista[i] = lista[i+1];
}
lastP--;
ind = 0;
}
}
persona * read(){
return lista;
}
#endif /* CONTRPERSONAS_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;
cout << "\n Ingrese nombre: ";
cin >> xnom;
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;
cout << "\n Ingrese nombre: ";
cin >> xnom;
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 list(){
cout << "\n ---Mostrar Personas--- \n";
cout << "Persona\t Nombre\t Apellido \n";
for (int i=0; i< lastP; i++){
cout << read()[i].id << "\t " << read()[i].nom << "\t " << read()[i].ape << "\n";
}
}
#endif /* CRUD_PER_H */
menu_per.h
Código C++:
Ver original#include "crud_per.h"
#ifndef MENU_PER_H
#define MENU_PER_H
void menu(){
int op = 0;
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";
cout << "\n Ingrese Opción: ";
cin >> op;
switch(op){
case 1:
created();
break;
case 2:
updated();
break;
case 3:
deleted();
break;
case 4:
list();
break;
case 5:
cout << "\n Gracias por usarme ;) \n";
break;
default:
cout << "\n Error :( \n";
break;
}
menu();
}
#endif /* MENU_PER_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;
}
#endif /* UTIL_H */
Sources Files:
main.cpp
Código C++:
Ver original#include <iostream>
#include <stdlib.h>
#include "menu_per.h"
using namespace std;
int main(int argc, char** argv) {
menu();
}
Espero sus respuestas y saludos