#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <fstream>
using namespace std;
const int MAX=30;
const int MAXPERS=100;
typedef FILE *parchivo;
typedef char tcad[MAX];
typedef struct t_nodo *pnodo;//el puntero pnodo apunta a todo el struct de t_nodo;
typedef struct t_nodo{
tcad apellido;
tcad nombre;
tcad e_mail;
int telefono;;
char dato;
pnodo sig;//sig va a ser un tipo puntero q permitira enlazar los demas t_nodos;
pnodo ant;
};
typedef t_nodo tpersona[MAXPERS];
//struct t_persona{
// tcad apellido;
// tcad nombre;
// tcad e_mail;
// int telefono;
//};
void menu (int &op);
void iniciar_lista (pnodo &lista);
void crear (pnodo &nuevo);
void agregar_inicio (pnodo &lista, pnodo nuevo);
void agregar_final (pnodo &lista, pnodo nuevo);
void agregar_orden (pnodo &lista, pnodo nuevo);
pnodo quitar_inicio (pnodo &lista);
pnodo quitar_final (pnodo &lista);
pnodo quitar_buscado (pnodo &lista, string valor);
bool buscar_nodo (pnodo lista, string valor);
void alta(parchivo agend);
int contar_personas(pnodo lista);
void mostrar (pnodo lista);
int main ()
{
fstream archivo("agenda.txt");
parchivo datos;
int op,total;
tcad valor;
bool op1 = false;
bool guardar=false;
pnodo lista, nuevo, eliminado;
char rta;
do
{
system ("cls");
menu (op);
switch (op)
{
case 1: iniciar_lista (lista);
datos = fopen("Agenda.txt","w");
op1 = true;
cout << "\nAgenda Inicializada !!!"<< endl;
cout << "\nLista Inicializada !!!" << endl;
cout << "\n";
system ("pause");
break;
case 2: if (op1 == true)
{
//alta(datos);
do{
crear (nuevo);//crear un tnodo;
if (nuevo != NULL){
agregar_inicio (lista, nuevo);
//fwrite(&nuevo,sizeof(nuevo),100,datos);
cout<<"Desea ingresar mas Personas S/N??..."<<endl;
cin>>rta;
}else{
cout << "\nError !!!, Debe Pasar Por La Opcion 1" << endl;
}
}while((rta!='N')&&(rta!='n'));
}
cout << "\n";
system ("pause");
break;
case 3: if (op1 == true)
{
cout << "\nIngrese Valor A Buscar: ";
cin >> valor;
if (buscar_nodo (lista, valor) == true)
cout << "\nEl Valor Ingresado Fue Encontrado !!!!" << endl;
else
cout << "\nEl Valor Ingresado No Fue Encontrado !!!" << endl;
}
else
cout << "\nError !!!! , Debe Pasar Por La Opcion 1" << endl;
cout << "\n";
system ("pause");
break;
case 4: if (op1 == true)
{
cout << "\nIngrese Valor A Eliminar: ";
cin >> valor;
eliminado = quitar_buscado (lista, valor);
if (eliminado != NULL)
{
cout << "\nNodo Eliminado [" << eliminado -> dato << "]" << endl;
delete (eliminado);
}
else
cout << "\nNo Se Puede Eliminar, El Valor No Esta En La Lista!!!" << endl;
}
else
cout << "\nError !!!, Debe Pasar Por La Opcion 1" << endl;
cout << "\n";
system ("pause");
break;
case 5: if (op1 == true)
mostrar (lista);
else
cout << "\nError !!!, Debe Pasar Por La Opcion 1" << endl;
cout << "\n";
system ("pause");
break;
case 6: if(op1 == true)
{
total=contar_personas(lista);
cout<<"La cantidad de Personas en la Agenda es: "<<total<<endl;
system("pause");
}else{
cout << "\nError !!!, Debe Pasar Por La Opcion 1" << endl;
cout << "\n";
system ("pause");
}
break;
case 7: if(op1 == true)
{
archivo<<"Apellido: "<<lista->apellido<<endl;
archivo<<"Nombre: "<<lista->nombre<<endl;
archivo<<"Telefono: "<<lista->telefono<<endl;
archivo<<"E_mail: "<<lista->e_mail<<endl;
guardar=true;
datos = fopen("Agenda.txt","a");
fwrite(&nuevo,sizeof(nuevo),100,datos);
fclose(datos);
system("cls");
cout<<"Agenda guardada con exito...."<<endl;
system("pause");
system("cls");
}
archivo.close();
break;
case 8: if((op1 == true) && (guardar==true)){
cout << "\n[FIN DEL PROGRAMA]" << endl;
cout << "\n" << endl;
cout << "WALTER DARIO ARAMAYO..."<<endl;
cout << "LU: 2768..."<<endl;
cout << "ANALISTA PROGRAMADOR UNIVERSITARIO..."<<endl;
cout << "FACULTAD DE INGENIERIA..."<<endl;
cout << "2017"<<endl;
system ("pause");
}else{
cout << "DEBE GUARDAR PRIMERO LA AGENDA PARA SALIR DEL PROGRAMA...."<<endl;
}
break;
default: cout << "\nError !!!, Opcion Incorrecta !!!!" << endl;
cout << "\n";
system ("pause");
}
}while (op != 8);
cout << "\n";
}
void menu (int &op)
{
cout << "********** MENU PRINCIPAL **********" << endl;
cout << "# 1- Abrir Agenda" << endl;
cout << "# 2- Agregar Contacto" << endl;
cout << "# 3- Consultar Contacto" << endl;
cout << "# 4- Borrar Contacto" << endl;
cout << "# 5- Listar Contacto" << endl;
cout << "# 6- Consultar Tamaño" << endl;
cout << "# 7- Guardar Agenda" << endl;
cout << "# 8- Salir" << endl;
cout << "********** MENU PRINCIPA ***********" << endl;
cout << "\nELIJA UNA OPCI\211N: ";
cin >> op;
}
void iniciar_lista (pnodo &lista)
{
pnodo i;
char letras;
//pers = fopen("Agenda.txt","w");
lista = NULL;//genera una lista vacia;
for(i=lista;i!=NULL;i=i->sig)
{
cout<<"Letras: .."<<i->dato<<endl;
}
system("pause");
}
// esto es como crear un t_nodo (un registro con un dato y puntero);
void crear (pnodo &nuevo)
{
int op;
bool volver=false;
string rta="";
nuevo = new t_nodo;//al puntero nuevo le asignamos las direcciones de Memo de t_nodo
if (nuevo != NULL)
{
do{
cout << "\nIngrese Apellido: ";
cin >> nuevo->apellido;//acedemos al campo dato o direccion de memor y insertamos el nuevo valor ;
cout << "\nIngrese Nombre: ";
cin >> nuevo->nombre;
cout << "\nIngrese Telefono: ";
cin >> nuevo->telefono;
cout << "\nIngrese e_mail: ";
cin >> nuevo->e_mail;
nuevo->sig = NULL;//al campo o direccion de n.sig le asignamos null;
//}
system("cls");
}while((nuevo->apellido!=nuevo->apellido) && (nuevo->nombre!=nuevo->nombre)&&(nuevo->telefono!=nuevo->telefono)&&(nuevo->e_mail!=nuevo->e_mail));
}
else
cout << "\nMemoria Insuficiente !!!" << endl;
}
void agregar_inicio (pnodo &lista, pnodo nuevo)
{
nuevo -> sig = lista;//si fuese la 1ra vez, al campo o direccion sig le asignariamos null porq eso vale lista;
lista = nuevo;//si fuese la primera vez directamente le estariamos asignando todo el contenidor o t_nodo a lista;
//por lo tanto lista apuntaria al nuevo dato y el campo de sig valdria null;
}
void agregar_final (pnodo &lista, pnodo nuevo)
{
pnodo i;
if (lista == NULL)
lista = nuevo;
else
{
for (i = lista; i -> sig != NULL; i = i -> sig);
i -> sig = nuevo;
//nuevo -> sig = NULL;// se omiote este paso;
}
}
void agregar_orden (pnodo &lista, pnodo nuevo)//para un orden creciente;
{
pnodo i;
if (lista == NULL)
lista = nuevo;
else
if (nuevo -> dato < lista -> dato)
{
nuevo -> sig = lista;//esta parte es como el agregar al inicio;
lista = nuevo;
}
else
{
//(i -> sig) -> dato // se encarga de preguntar por adelantado, pero en realidad quien lleva
//la pos exacta de i -> sig es i = i -> sig;
for (i = lista; i -> sig != NULL && nuevo -> dato > (i -> sig) -> dato; i = i -> sig);
nuevo -> sig = i -> sig;
i -> sig = nuevo;//esta linea es similar al agregar al final;
}
}
pnodo quitar_inicio (pnodo &lista)
{
pnodo borrado;
if (lista == NULL)
borrado = NULL;
else
{
borrado = lista;
lista = lista -> sig;
borrado -> sig = NULL;
}
return borrado;
}
pnodo quitar_final (pnodo &lista)
{
pnodo borrado, i;
if (lista == NULL)
borrado = NULL;
else
//{
//en caso de un solo nodo;
if (lista -> sig == NULL)
{
borrado = lista;
lista = NULL;
}
else
{
//muchos nodos, se recorre hasta el penultimo nodo;
for (i = lista; (i -> sig) -> sig != NULL; i = i -> sig);
borrado = i -> sig;
i -> sig = NULL;
}
//}
return borrado;
}
pnodo quitar_buscado (pnodo &lista, string valor)
{
pnodo borrado, i;
if (lista == NULL)
borrado = NULL;
else
if (lista->apellido == valor)
{
borrado = lista;//retorna;
lista = borrado -> sig;//es mismo q asignarle NULL;
borrado -> sig = NULL;//lo mismo que NULL;
}
else
{
for (i = lista; i -> sig != NULL && valor != (i -> sig)->apellido; i = i -> sig);
if (i -> sig != NULL)
{
borrado = i -> sig;
i -> sig = borrado -> sig;
borrado -> sig = NULL;
}
else
borrado = NULL;
}
return borrado;
}
bool buscar_nodo (pnodo lista, string valor)
{
pnodo i;
bool encontrado = false;
if (lista != NULL)
for (i = lista; i != NULL && encontrado == false; i = i -> sig)
{
if (i->apellido == valor)
encontrado = true;
}
return encontrado;
}
void mostrar (pnodo lista)
{
pnodo i;
if (lista != NULL)
{
//cout << "\n**************" << endl;
for (i = lista; i != NULL; i = i -> sig)
{
cout << "\n**************" << endl;
cout << "\n";
cout << "[" << i->apellido << "]\n ";
cout << "[" << i->nombre << "]\n ";
cout << "[" << i->telefono << "]\n ";
cout << "[" << i->e_mail << "]\n ";
cout << "\n**************" << endl;
}
//cout << "\n**************" << endl;
}
else
cout << "\nLista Vacia !!!" << endl;
}
//modificar;
/*void alta(parchivo agend)
{
pnodo nuevo;
char rta;
agend=fopen("Agenda.txt","w");
do
{
crear(nuevo);
fwrite(&nuevo,sizeof(nuevo),100,agend);
cout<<"Ingresar mas datos S/N: "<<endl;
cin>>rta;
}while(rta!='N' && rta!='n');
fclose(agend);
}*/
int contar_personas(pnodo lista)
{
pnodo i;
int suma=0;
if(lista!=NULL)
{
for(i=lista;i!=NULL;i=i->sig)
{
suma=suma+1;
}
}
return suma;
}