//BIBLIOTECAS EMPLEADAS //Bibliotecas #include #include #include #include #include #include #include #include //VARIABLES GLOBALES struct datos{ char nombre[20]; char apodo[20]; char numero[20]; }datos; typedef struct nodo{ char nombre[20]; char apodo[20]; char numero[20]; struct nodo *sig; }INFO; struct simbolo{ char letra; }simbolo; typedef struct nodo1{ char letra; struct nodo1 *sig; struct nodo1 *ant; }LET; int matriz1; int opcion=1; INFO *plista=NULL; char matriz2[80]; //DECLARACION DE FUNCIONES void graba(); void diario(int subopcion); void captura(int tam,int elec,char nombre[80],int x,int y); void telefonos(int subopcion); void recupera(); void introducir(); void borrar(); void contenido(); void busca(); void visualizadag(void); void visualizaag(void); LET * introduceag(void); void hora(void); void creditos(void); void dibujaeleccion(); void dibujasubmenu1(); void recuadro(int x,int y,int x1,int y1,int o); void marco(int x,int y,int x1,int y1); void menu(void); //FUNCION PRINCIPAL void main() { int a=0; recupera(); clrscr(); textbackground(0); _setcursortype(_NOCURSOR); menu(); while(opcion!=4||a!=7181) { dibujaeleccion(); while(!kbhit()) { hora(); } a=bioskey(0); if(a==7181&&opcion!=4) dibujasubmenu1(); if(a==19712) opcion++; if(a==19200) opcion--; if(opcion==0) opcion=4; if(opcion==5) opcion=1; } graba(); _setcursortype(_NORMALCURSOR); textbackground(0); clrscr(); } //DIBUJA EL INTERFAZ GENERAL void menu() { clrscr(); textattr(LIGHTGRAY); recuadro(2,2,79,24,1); recuadro(2,1,79,1,0); recuadro(2,25,79,25,0); } //DIBUJA ELECCION void dibujaeleccion() { textattr(LIGHTGRAY); textattr(127); gotoxy(3,1); cprintf(" DIARIO TELEFONOS INFORMACION FINALIZAR"); gotoxy(3,25); cprintf("Copyrights() o derechos de copia()"); textattr(LIGHTGRAY); switch(opcion) { case 1:gotoxy(8,1);cprintf("DIARIO");break; case 2:gotoxy(24,1);cprintf("TELEFONOS");break; case 3:gotoxy(43,1);cprintf("INFORMACION");break; case 4:gotoxy(64,1);cprintf("FINALIZAR");break; } } //DIBUJA SUBMENUS void dibujasubmenu1() { //subopcion son CURSOS,subopcion1 son CLASES DE CURSOS //subopcion son eleccion de submenus int a=0,subopcion1=1,subopcion2=1,subopcion3=1; while(a!=7181&&a!=283) { switch(opcion) { case 1: //DIARIO recuadro(5,2,20,6,2); marco(5,2,20,6); while(a!=7181&&a!=283&&a!=19712&&a!=19200) { textattr(127); gotoxy(7,3);cprintf(" INTRODUCIR "); gotoxy(7,4);cprintf("VER DIA AG."); gotoxy(7,5);cprintf("VER TODA AG."); textattr(LIGHTGRAY); switch(subopcion1) { case 1: gotoxy(7,3);cprintf(" INTRODUCIR ");break; case 2: gotoxy(7,4);cprintf("VER DIA AG.");break; case 3: gotoxy(7,5);cprintf("VER TODA AG.");break; } while(!kbhit()) { hora(); } a=bioskey(0); if(a==20480) subopcion1++; if(a==18432) subopcion1--; if(subopcion1==0) subopcion1=3; if(subopcion1==4) subopcion1=1; } if(a!=283&&a!=19712&&a!=19200) diario(subopcion1); textattr(LIGHTGRAY);recuadro(5,2,21,7,1); break; case 2: //TELEFONO recuadro(24,2,37,7,2); marco(24,2,37,7); while(a!=7181&&a!=283&&a!=19712&&a!=19200) { textattr(127); gotoxy(26,3);cprintf("INTRODUCIR"); gotoxy(26,4);cprintf("VER LISTA"); gotoxy(26,5);cprintf("BORRAR"); gotoxy(26,6);cprintf("BUSCAR"); textattr(LIGHTGRAY); switch(subopcion2) { case 1: gotoxy(26,3);cprintf("INTRODUCIR");break; case 2: gotoxy(26,4);cprintf("VER LISTA");break; case 3: gotoxy(26,5);cprintf("BORRAR");break; case 4: gotoxy(26,6);cprintf("BUSCAR");break; } while(!kbhit()) { hora(); } a=bioskey(0); if(a==20480) subopcion2++; if(a==18432) subopcion2--; if(subopcion2==0) subopcion2=4; if(subopcion2==5) subopcion2=1; } if(a!=283&&a!=19712&&a!=19200) { telefonos(subopcion2); } textattr(LIGHTGRAY);recuadro(24,2,38,8,1); break; case 3: //INFORMACION recuadro(42,2,55,5,2); marco(42,2,55,5); while(a!=7181&&a!=283&&a!=19712&&a!=19200) { textattr(127); gotoxy(46,3);cprintf("AYUDAS"); gotoxy(45,4);cprintf("CREDITOS"); textattr(LIGHTGRAY); switch(subopcion3) { case 1: gotoxy(46,3);cprintf("AYUDAS");break; case 2: gotoxy(45,4);cprintf("CREDITOS");break; } while(!kbhit()) { hora(); } a=bioskey(0); if(a==20480) subopcion3++; if(a==18432) subopcion3--; if(subopcion3==0) subopcion3=2; if(subopcion3==3) subopcion3=1; } if(subopcion3==1&&a!=283) hora(); else if(a!=283&&a!=19712&&a!=19200) creditos(); textattr(LIGHTGRAY);recuadro(42,2,56,6,1); break; case 4: //FINALIZAR while(!kbhit()) { hora(); } a=bioskey(0); break; } if(a==19712) {a=0;opcion++;} if(a==19200) {a=0;opcion--;} if(opcion==0) opcion=4; if(opcion==5) opcion=1; dibujaeleccion(); } } //FUNCION PARA CREAR UN RECUADRO EN LAS COORDENADAS INDICADAS void recuadro(int x,int y,int x1,int y1,int o) { int a,b; textattr(LIGHTGRAY); for(a=x;a!=x1+1;a++) for(b=y;b!=y1+1;b++) { gotoxy(a,b); if(o==0||o==2) cprintf("Û"); else cprintf("²"); } if(o==2) { textattr(0); for(a=y+1;asig!=NULL) { lista=lista->sig; } lista->sig=(INFO *)malloc(sizeof(INFO)); gotoxy(27,11); cprintf("Nombre:"); captura(10,0,lista->nombre,34,11); gotoxy(27,12); cprintf("Apodo:"); captura(11,0,lista->apodo,33,12); gotoxy(27,13); cprintf("Numero:"); captura(10,0,lista->numero,34,13); lista=lista->sig; lista->sig=NULL; textattr(LIGHTGRAY); recuadro(25,10,53,15,1); } //BORRA DE LA LISTA void borrar() { int encontrado=0; char nombre[20],apodo[20]; INFO *p,*pant; recuadro(25,10,55,14,2); marco(25,10,55,14); gotoxy(27,11); cprintf("Introduce nombre:"); captura(10,0,nombre,44,11); gotoxy(27,12); cprintf("Introduce apodo:"); captura(10,0,apodo,43,12); p=plista; pant=0; while(strcmp(nombre,p->nombre)!=0&&strcmp(apodo,p->apodo)!=0&&(p!=NULL)) { pant=p; p=p->sig; encontrado=0; } if(strcmp(nombre,p->nombre)==0&&strcmp(apodo,p->apodo)==0) { if(pant==0) {plista=p->sig;free(p);} pant->sig=p->sig; free(p); encontrado=1; } if(encontrado==0) {gotoxy(27,13);cprintf("no se encontro");} else {gotoxy(27,13);cprintf("nombre borrado");} while(!kbhit()) { hora(); } fflush(stdin); textattr(7); recuadro(25,10,56,15,1); } //MUESTRA EL CONTENIDO void contenido() { int a,c=0; INFO *lista; recuadro(2,2,79,24,0); marco(2,2,79,24); lista=plista; while(lista->sig!=NULL) { c++; gotoxy(5,c+2); cprintf("Nombre:%15s Apodo:%15s Numero:%15s",lista->nombre,lista->apodo, lista->numero); if(c==20) { c=0;gotoxy(37,24);printf("[PULSE TECLA]"); while(!kbhit()) { hora(); } while( kbhit() ) getch(); // fflush(stdin); textattr(LIGHTGRAY); recuadro(3,3,78,23,0);textattr(127);} lista=lista->sig; } while(!kbhit()) { hora(); } fflush(stdin); textattr(LIGHTGRAY); recuadro(2,2,79,24,1); } //BUSCA EL NOMBRE DE UNA PERSONA void busca() { char cadena[20]; int a,b=0,c=0; INFO *lista; lista=plista; recuadro(2,2,79,24,0); marco(2,2,79,24); gotoxy(4,3); cprintf("Nombre a buscar:"); captura(10,0,cadena,20,3); while(lista->sig!=NULL) { if(c==20) {c=0;gotoxy(37,24);cprintf("[PULSE UNA TECLA]"); while(!kbhit()) { hora(); } fflush(stdin);recuadro(2,2,79,24,0);} if(strcmp(cadena,lista->nombre)==0) { gotoxy(4,c+5); cprintf("\nApodo:%15s Numero:%15s",lista->apodo,lista->numero); b=1; c++; } lista=lista->sig; } if(b==0) {gotoxy(4,4);cprintf("Nombre no encontrado");} while(!kbhit()) { hora(); } fflush(stdin); textattr(7); recuadro(2,2,79,24,1); } //RECUPERA void recupera() { FILE *fp; INFO *lista; fp=fopen("tel.dat","rb"); fread(&datos,sizeof(datos),1,fp); lista=(INFO *)malloc(sizeof(INFO)); plista=lista; strcpy(lista->nombre,datos.nombre); strcpy(lista->apodo,datos.apodo); strcpy(lista->numero,datos.numero); while(!feof(fp)) { fread(&datos,sizeof(datos),1,fp); lista->sig=(INFO *)malloc(sizeof(INFO)); lista=lista->sig; strcpy(lista->nombre,datos.nombre); strcpy(lista->apodo,datos.apodo); strcpy(lista->numero,datos.numero); } lista->sig=NULL; fclose(fp); } /////////////////////////////////DIARIO////////////////////////////////////// void diario(int subopcion) { switch(subopcion) { case 1:introduceag();break; case 2:visualizadag();break; case 3:visualizaag();break; } } //INTRODUCE AGENDA LET * introduceag(void) { long int indice; struct date d; int x=3,y=3; char a; FILE *fp,*fp1; LET *letra,*letrant,*pletra; recuadro(2,2,79,24,0); marco(2,2,79,24); letra=(LET *)malloc(sizeof(LET)); pletra=letra; letra->ant=NULL; while(a!='\x1B') { x++; if(x==79) {x=3;y=y+1;} if(x==3&&y>3&&letra->letra=='\b') {x=79;y=y-1;} if(y==20) { gotoxy(37,24);cprintf("[PULSE UNA TECLA]"); while(!kbhit()) { hora(); } fflush(stdin); textattr(7);recuadro(3,3,78,23,0);textattr(127);x=3;y=3; } while(!kbhit()) { hora(); } a=getch(); gotoxy(x,y); cprintf("%c",a); letra->letra=a; letrant=letra; letra->sig=(LET *)malloc(sizeof(LET)); if(letra->letra=='\b'&&y>2&&x>3) { gotoxy(x-1,y);cprintf(" ");x=x-2; letra->sig=NULL; letra=letra->ant; } else if(letra->letra=='\b'&&y>2&&x==3) {x=2;} else { letra=letra->sig; letra->ant=letrant; } } letra->sig=NULL; textattr(7); recuadro(2,2,79,24,1); fp=fopen("agenda.dat","a+b"); fp1=fopen("indiceag.dat","a+b"); letra=pletra; getdate(&d); indice=ftell(fp); fwrite(&d,sizeof(d),1,fp1); fwrite(&indice,sizeof(long int),1,fp1); fwrite(&d,sizeof(d),1,fp); while(letra->sig!=NULL) { simbolo.letra=letra->letra; fwrite(&simbolo.letra,sizeof(simbolo),1,fp); letra=letra->sig; } fclose(fp); fclose(fp1); return pletra; } //VISUALIZA AGENDA DE UN DIA EN CONCRETO void visualizadag(void) { char pegote[10]; struct date d; long int indice; int dia,mes,ano; long int longitud; int x=3,y=4,encontrado=0; FILE *fp,*fp1; LET *letra,*pletra,*letrant; recuadro(2,2,79,24,0); marco(2,2,79,24); gotoxy(4,3); cprintf("Dia:"); captura(2,1,pegote,8,3); dia=matriz1; gotoxy(14,3); cprintf("Mes:"); captura(2,1,pegote,18,3); mes=matriz1; gotoxy(24,3); cprintf("A¤o:"); captura(4,1,pegote,28,3); ano=matriz1; letra=(LET *)malloc(sizeof(LET)); fp=fopen("agenda.dat","rb"); fp1=fopen("indiceag.dat","rb"); while(!feof(fp1)&&encontrado==0) { fread(&d,sizeof(d),1,fp1); fread(&indice,sizeof(long int),1,fp1); if(dia==d.da_day&&mes==d.da_mon&&ano==d.da_year) { longitud=indice; encontrado=1; } } if(longitud!=-1) { fseek(fp,longitud+4,SEEK_SET); pletra=letra; fread(&simbolo.letra,sizeof(simbolo),1,fp); letra->letra=simbolo.letra; letra->ant=NULL; fread(&simbolo.letra,sizeof(simbolo),1,fp); while(simbolo.letra!='\x1B') { letrant=letra; letra->sig=(LET *)malloc(sizeof(LET)); letra=letra->sig; letra->letra=simbolo.letra; letra->ant=letrant; fread(&simbolo.letra,sizeof(simbolo),1,fp); } letra->sig=NULL; letra=pletra; while(letra->sig!=NULL) { x++; if(x==79) {x=3;y=y+1;} if(y==20) {gotoxy(37,24);cprintf("[PULSE UNA TECLA]"); while(!kbhit()) { hora(); } fflush(stdin); textattr(7);recuadro(3,3,78,23,0);textattr(127);x=3;y=3;} gotoxy(x,y); cprintf("%c",letra->letra); letra=letra->sig; } x++; if(x==79) {x=3;y=y+1;} gotoxy(x,y); cprintf("%c",letra->letra); } while(!kbhit()) { hora(); } fflush(stdin); textattr(7); recuadro(2,2,79,24,1); fclose(fp); fclose(fp1); } //VISUALIZA AGENDA DESDE EL PRINCIPIO [intento] void visualizaag(void) { char pegote[10]; struct date d; long int indice; int dia,mes,ano; long int longitud=0; int x=3,y=4; FILE *fp,*fp1; LET *letra,*pletra,*letrant; recuadro(2,2,79,24,0); marco(2,2,79,24); letra=(LET *)malloc(sizeof(LET)); fp=fopen("agenda.dat","rb"); fp1=fopen("indiceag.dat","rb"); //crea lista while(!feof(fp1)) //if(longitud!=-1) { fread(&d,sizeof(d),1,fp1); fread(&indice,sizeof(long int),1,fp1); fseek(fp, indice/*longitud*/+4,SEEK_SET); pletra=letra; fread(&simbolo.letra,sizeof(simbolo),1,fp); letra->letra=simbolo.letra; letra->ant=NULL; fread(&simbolo.letra,sizeof(simbolo),1,fp); while(simbolo.letra!='\x1B') { letrant=letra; letra->sig=(LET *)malloc(sizeof(LET)) ); // if ( letra->sig == NULL ) NO MEMORIA letra=letra->sig; letra->letra=simbolo.letra; letra->ant=letrant; fread(&simbolo.letra,sizeof(simbolo),1,fp); } letra->sig=NULL; letra=pletra; gotoxy(3,3); cprintf("dia:%i mes:%i a¤o:%i",d.da_day,d.da_mon,d.da_year); //imprime contenido while(letra->sig!=NULL) { x++; if(x==79) {x=3;y=y+1;} if(y==20) {gotoxy(37,24);cprintf("[PULSE UNA TECLA]"); while(!kbhit()) { hora(); } fflush(stdin); textattr(7);recuadro(3,3,78,23,0);textattr(127);x=3;y=3;} gotoxy(x,y); cprintf("%c",letra->letra); letra=letra->sig; } x++; if(x==79) {x=3;y=y+1;} gotoxy(x,y); cprintf("%c",letra->letra); x=3; y=3; getch(); recuadro(3,3,78,23,0); textattr(7); } while(!kbhit()) { hora(); } fflush(stdin); textattr(7); recuadro(2,2,79,24,1); fclose(fp); fclose(fp1); } ///////////////////////////////////CAPTURA/////////////////////////////////// void captura(int tam,int elec,char nombre[73],int x,int y) { int i=0,c=0,c1=0; matriz1=0; if(elec==0) { do { while(!kbhit()) { hora(); } matriz2[i]=getch(); matriz2[i]=toupper(matriz2[i]); if(matriz2[i]=='\b') { c--; if(c==-1) c=0; i--; if(i==-1) i=0; gotoxy(x+i,y); cprintf(" "); } else { if ((isalpha(matriz2[i])!=0||matriz2[i]==' '||matriz2[i]=='¤'||matriz2[i]=='¥')&&(c!=tam)) { gotoxy(x+i,y); cprintf("%c",matriz2[i]); i++; c++; } } }while(matriz2[i]!='\r'); matriz2[i]='\0'; strcpy(nombre,matriz2); } else { do { while(!kbhit()) { hora(); } matriz2[i]=getch(); matriz2[i]=toupper(matriz2[i]); if(matriz2[i]=='\b') { c--; if(c==-1) c=0; i--; if(i==-1) i=0; gotoxy(x+i,y); cprintf(" "); } else { if (c!=tam&&matriz2[i]!='\r') { gotoxy(x+i,y); cprintf("%c",matriz2[i]); i++; c++; } } }while(matriz2[i]!='\r'); matriz2[i]='\0'; strcpy(nombre,matriz2); } if (elec==1) { c1=i; while(c1!=0) { c1--; matriz1=matriz1+((matriz2[c1])-48)*(pow(10,i-c1-1)); } } } ////////////////////////////GRABANDO DATOS ANTES DE SALIR///////////////////// void graba() { INFO *lista; FILE *fp; fp=fopen("tel.dat","wb"); lista=plista; while(lista->sig!=NULL) { strcpy(datos.nombre,lista->nombre); strcpy(datos.apodo,lista->apodo); strcpy(datos.numero,lista->numero); strupr(datos.nombre); strupr(datos.apodo); fwrite(&datos,sizeof(datos),1,fp); lista=lista->sig; } fclose(fp); }