[ Foro de C++ ]

No Guarda la informacion mi programa

10-Dec-2022 00:18
Invitado (carlos)
0 Respuestas

hola cree este programa y corre y genera bien el archivo pero no almacena la informacion que se le da
#include "iostream"
#include "stdlib.h"
#include "fstream"
#include "cstdlib"
using namespace std;

struct contacto{
int ID;
char RFC[15];
char nombre [30];
char apellidos [30];
char telefono [15];
char celular [15];
char correo[50];
char fecha[15];
};

struct nodo{
contacto info;
nodo *siguiente;
};

nodo *raiz=NULL;

int vacia();
int cantidad();
void insertar(int pos, contacto x);
void imprimmir();
contacto extraer(int pos);
void borrar(int pos);
void intercambiar(int pos1, int pos2);
void ordenamenormayor();
void ordenamayormenor();
void menu();
void capturadato(contacto &dato);
void Imprimirdato(contacto dato);
void guarda();
void Leer();

int main(){
Leer();
menu();
return 0;
}

int vacia(){
if(raiz==NULL) return 1;
else return 0;
}
int cantidad(){
nodo *reco=raiz;
int cant=0;
while (reco!=NULL){
reco=reco->siguiente;
cant++;
}
return cant;
}

void insertar(int pos, contacto x){
nodo *nuevo;
nuevo=(nodo*) malloc(sizeof (nodo));
nuevo->info=x;
if (pos<=cantidad()+1){
if(pos==1){
nuevo->siguiente=raiz;
raiz=nuevo;
}
else {
if(pos<=cantidad()+1){
nodo *reco=raiz;
while (reco->siguiente!=NULL){
reco=reco->siguiente;
}
reco->siguiente=nuevo;
nuevo->siguiente=NULL;
}
else{
nodo *reco=raiz;
for (int i=1; i<=pos-2; i++){
reco=reco->siguiente;
}
nodo *sig=reco->siguiente;
reco->siguiente=nuevo;
nuevo->siguiente=sig;
}
}
}else{
nodo*reco=raiz;
while (reco->siguiente!=NULL){
reco=reco->siguiente;
nodo *reco=raiz;
while (reco->siguiente!=NULL){
reco=reco->siguiente;
}
reco->siguiente=nuevo;
nuevo->siguiente=NULL;
}
}
}

void imprimir(){
nodo *reco=raiz;
if (vacia( )==1){
cout<<"Lista esta vacia: "<<endl;
}else{
cout<<"Lista esta completa: "<<endl;
while (reco!=NULL){
Imprimirdato(reco->info);
reco=reco->siguiente;
}
cout<<endl;
}
}

contacto extraer(int pos){
if(pos<=cantidad()){
contacto informacion;
nodo *bor;
if (pos=1){
informacion=raiz->info;
bor=raiz;
raiz=raiz->siguiente;
}
else{
nodo *reco;
reco=raiz;
for (int i=1; i<=pos-2;i++){
reco=reco->siguiente;
}
nodo *prox=reco->siguiente;
reco->siguiente=prox->siguiente;
bor=prox;
}
free(bor);
return informacion;
}
}

void borrar(int pos){
if(pos<=cantidad()){
nodo *bor;
if (pos==1){
bor=raiz;
raiz=raiz->siguiente;
}
else{
nodo*reco;
reco=raiz;
for(int i=1; i<=pos-2; i++){
reco=reco->siguiente;
}
nodo *prox=reco->siguiente;
bor=prox;
}
free(bor);
}
}


void intercambiar(int pos1, int pos2){
if(pos1<=cantidad() && pos2<=cantidad()){
nodo *reco1=raiz;
for(int f=1; f<pos1; f++){
reco1=reco1->siguiente;
}
nodo *reco2=raiz;
for (int f=1; f<pos2;f++){
reco2=reco2->siguiente;
}
contacto aux=reco1->info;
reco1->info=reco2->info;
reco2->info=aux;
}
}

void ordenamenormayor(){
nodo *reco1=raiz;
nodo *reco2;
while(reco1 !=NULL){
reco2=reco1->siguiente;
while (reco2!=NULL){
if(reco2->info.ID<reco1->info.ID){
contacto aux=reco2->info;
reco2->info=reco1->info;
reco1->info=aux;
}
reco2=reco2->siguiente;
}
reco1=reco1->siguiente;
}
}


void ordenamayormenor(){
nodo *reco1=raiz;
nodo *reco2;
while(reco1 !=NULL){
reco2=reco1->siguiente;
while (reco2!=NULL){
if(reco2->info.ID>reco1->info.ID){
contacto aux=reco2->info;
reco2->info=reco1->info;
reco1->info=aux;
}
reco2=reco2->siguiente;
}
reco1=reco1->siguiente;
}
}

void capturadato(contacto &dato){
system("cls");
cout<<"Datos de contacto: "<<endl;
cout<<"ID: ";
cin>>dato.ID;
cin.get();
cout<<"RFC: ";
cin.getline(dato.RFC,15);
cout<<"Nombre: ";
cin.getline(dato.nombre,30);
cout<<"Apellidos: ";
cin.getline(dato.apellidos,30);
cout<<"Telefono: ";
cin.getline(dato.telefono,15);
cout<<"Celular: ";
cin.getline(dato.celular,15);
cout<<"Correoelectronico: ";
cin.getline(dato.correo,50);
cout<<"Fecha de nacimiento: (DD/MM/AA) ";
cin.getline(dato.fecha,15);
}

void Imprimirdato(contacto dato){
cout<<"ID: "<<dato.ID<<endl;
cout<<"RFC: "<<dato.RFC<<endl;
cout<<"Nombre: "<<dato.nombre<<endl;
cout<<"Apellidos: "<<dato.apellidos<<endl;
cout<<"Telefono: "<<dato.telefono<<endl;
cout<<"Celular: "<<dato.celular<<endl;
cout<<"Correo electronico: "<<dato.correo<<endl;
cout<<"Fecha de nacimiento: "<<dato.fecha<<endl;
}

void guarda(){
nodo *reco=raiz;
FILE *archivo;
archivo=fopen("Agenda de contactos.txt","wt+");
while(reco!=NULL){
fwrite(&reco->info, sizeof(reco->info),1,archivo);
reco=reco->siguiente;
}
fclose(archivo);
}

void Leer(){
char cadena[30], cadena15[15];
contacto recupera;
FILE *archivo;
archivo=fopen("Agenda de contactos.txt","at+");
while (fread(&recupera,sizeof(recupera),1,archivo)==1){
insertar(1,recupera);
}
fclose(archivo);
ordenamayormenor();
}

void menu(){
int opc=0;
while(opc !=9){
system ("cls");
cout<<"1. Agregar a la agenda"<<endl;
cout<<"2. Extraer contacto"<<endl;
cout<<"3. Borrar contacto"<<endl;
cout<<"4. Imprimir la lista"<<endl;
cout<<"5. Ordenar de mayor a menor"<<endl;
cout<<"6. Ordenar de menor a mayor"<<endl;
cout<<"7. Cantidad de contactos"<<endl;
cout<<"8. Mover contactos"<<endl;
cout<<"9. Guardar y salir"<<endl;
cout<<"\n \n \n";
cout<<"Elige una opcion...."<<endl;
cin>>opc;
cin.get();
switch(opc){
case 1:
system ("cls");
contacto dato;
int pos;
capturadato(dato);
cout<<"que pocision desea insertar"<<endl;
case 2:{
system("cls");
int pos;
if (vacia()==1){
cout<<" lista vacia : "<<endl;
}else{
cout<<"el contacto a extraer es: ";
cin>>pos;
cin.get();
cout<<"extrayendo el contacto: "<<endl;
Imprimirdato(extraer(pos));
}
cout<<"Presione cualquier tecla para continuar";
cin.get();
break;
}
case 3:{
system("cls");
int pos;
if (vacia()==1){
cout<<" Lista vacia : "<<endl;
}else{
cout<<"posicion a borrar: ";
cin>>pos;
cin.get();
borrar(pos);
cout<<"eliminado \n";
}
cout<<"Precione cualquier tecla para continuar";
cin.get();
break;
}
case 4:{
system("cls");
imprimir();
cout<<"Presione cualquier tecla para continuar";
cin.get();
break;
}
case 5:{
system("cls");
if(vacia()==1){
cout<<" lista vacia : "<<endl;
}else{
ordenamenormayor();
cout<<"lista a sido ordenada \n";
}
cout<<"Presione cualquier tecla para continuar";
cin.get();
break;
}
case 6:{
system("cls");
if(vacia()==1){
cout<<" lista vacia : "<<endl;
}else{
ordenamayormenor();
cout<<"lista ordenada\n";
}
cout<<"Presione cualquier tecla para continuar";
cin.get();
break;
}
case 7:{
system("cls");
if(vacia()==1){
cout<<"lista vacia : "<<endl;
}else{
cout<<"no de contactos: "<<cantidad()<<endl;
}
cout<<"Presione cualquier tecla para continuar";
cin.get();
break;
}
case 8:{
system("cls");
int pos1, pos2;
if(vacia()==1){
cout<<" 1er contacto a intercambiar: ";
cin>>pos1;
cin.get();
cout<<"2do contacto a intercambiar: ";
cin>>pos2;
cin.get();
intercambiar(pos1, pos2);
imprimir();
}
cout<<"Precione cualquier tecla para continuar";
cin.get();
break;
}
case 9:{
system("cls");
cout<<"Guardando agenda...\n";
guarda();
cout<<"Operacion existosa.\nPresione cualquier tecla para continuar"<<endl;
cin.get();
break;
}
default:{
system("cls");
cout<<"Opcion no valida\n";
cout<<"Presione cualquier tecla para continuar";
break;
}
}
}
}




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)