//pc20 listas dobles
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct xtemas{
char tema[40];
char desc[160];
struct xtemas *sig;
struct xtemas *ant;
};
struct xtemas *prim;
struct xtemas *ulti;
struct xtemas *encuentra(char *);
void introducir(void), buscar(void), guardar(void);
void recuperar(void), listar(void);
void eliminar(struct xtemas **, struct xtemas **);
void lista_doble(struct xtemas *i, struct xtemas **prim,
struct xtemas **ulti);
void entras(char *, char *, int), desplegar(struct xtemas *);
int menu(void);
int menu(void){
char s[80];
int c;
printf("\n\tMENU\n");
printf("1. Introducir tema\n");
printf("2. Buscar tema\n");
printf("3. Actualizar tema\n");
printf("4. Eliminar tema\n");
printf("5. Listar temas\n");
printf("6. Guardar temas\n");
printf("7. Recuperar temas\n");
printf("8. Fin\n");
do{
printf("\nIntroducir opcion: ");
gets(s);
c = atoi(s);
}while(c<0 || c>8);
return c;
}
void introducir(void){
struct xtemas *info;
for(;;){
info = (struct xtemas *)malloc(sizeof(struct xtemas));
if(!info) {
printf("\nFuera de memoria...");
return;
}
entras("Introducir tema: ", info->tema, 30);
if(!info->tema[0]) break;
entras("Introducir desc: ", info->desc, 40);
if(!info->desc[0]) break;
lista_doble(info, &prim, &ulti);
}
}
void entras(char *prompt, char *s, int count){
char p[255];
do{
printf("%s\n",prompt);
fgets(p, 254, stdin);
if(strlen(p) > count) printf("\nMuy largo\n");
}while(strlen(p) > count);
p[strlen(p)-1] = 0;
strcpy(s, p);
}
void actualizar(void){
struct xtemas *info;
char s[100];
entras("Introduce tema: ", s, 30);
info = encuentra(s);
if(!info){
printf("No encontrado...\n");
}else{
entras("Introducir tema: ", info->tema, 30);
//if(!info->tema[0]) break;
entras("Introducir desc: ", info->desc, 40);
//if(!info->desc[0]) break;
//lista_doble(info, &prim, &ulti);
}
}
void lista_doble(
struct xtemas *i,
struct xtemas **prim,
struct xtemas **ulti ){
struct xtemas *viejo, *p;
if(*ulti==NULL){
i->sig = NULL;
i->ant = NULL;
*ulti = i;
*prim = i;
return;
}
p = *prim;
viejo = NULL;
while(p){
if(strcmp(p->tema, i->tema)<0){
viejo = p;
p = p->sig;
}else {
if(p->ant){
p->ant->sig = i;
i->sig = p;
i->ant = p->ant;
p->ant = i;
return;
}
i->sig = p;
i->ant = NULL;
p->ant = i;
*prim = i;
return;
}
}
viejo->sig = i;
i->sig = NULL;
i->ant = viejo;
*ulti = i;
}
void eliminar(struct xtemas **prim, struct xtemas **ulti){
struct xtemas *info;
char s[80];
entras("Introduce tema: ", s, 30);
info = encuentra(s);
if(info){
if(*prim==info){
*prim=info->sig;
if(*prim) (*prim)->ant = NULL;
else *ulti = NULL;
}else{
info->ant->sig = info->sig;
if(info!=*ulti)
info->sig->ant = info->ant;
else
*ulti = info->ant;
}
free(info);
}
}
struct xtemas *encuentra( char *tema){
struct xtemas *info;
info = prim;
while(info){
if(!strcmp(tema, info->tema)) return info;
info = info->sig;
}
printf("Tema no encontrado\n");
return NULL;
}
void listar(void){
struct xtemas *info;
info = prim;
while(info){
desplegar(info);
info = info->sig;
}
}
void desplegar(struct xtemas *info){
printf("%s\n", info->tema);
printf("%s\n", info->desc);
//printf("\n\n");
}
void buscar(void){
char tema[40];
struct xtemas *info;
printf("Introducir tema: ");
gets(tema);
info = encuentra(tema);
if(!info) printf("No encontrado...\n");
else desplegar(info);
}
void guardar(void){
struct xtemas *info;
FILE *fp;
fp = fopen("mlist", "wb");
if(!fp){
printf("No abre archivo...\n");
exit(1);
}
printf("\nGuardando archivo...\n");
info = prim;
while(info){
fwrite(info, sizeof(struct xtemas), 1, fp);
info = info->sig;
}
fclose(fp);
}
void recuperar(){
struct xtemas *info;
FILE *fp;
fp = fopen("mlist", "rb");
if(!fp){
printf("No se abre archivo...\n");
exit(1);
}
while(prim){
info = prim->sig;
free(info);
prim = info;
}
prim = ulti = NULL;
printf("\nRecuperando archivo...\n");
while(!feof(fp)){
info = (struct xtemas *) malloc(sizeof(struct xtemas));
if(!info){
printf("Fuera de memoria...");
return;
}
if(1 != fread(info, sizeof(struct xtemas), 1, fp)) break;
lista_doble(info, &prim, &ulti);
}
fclose(fp);
}
int main(void){
prim = ulti = NULL;
for(;;){
switch(menu()){
case 1:
introducir();
break;
case 2:
buscar();
break;
case 3:
actualizar();
break;
case 4:
eliminar(&prim, &ulti);
break;
case 5:
listar();
break;
case 6:
guardar();
break;
case 7:
recuperar();
break;
case 8:
printf("Fin del programa...");
exit(0);
}
}
return 0;
}
Vistas de página en total
martes, 25 de febrero de 2014
Programación android con CCTools y C - pc19
//pc019 Programa de estructura y arreglo
#include<stdio.h>
#include<stdlib.h>
#define max 5
struct stemas{
char tema[100];
char desc[890];
}arreglot[max];
//struct stemas arreglot[max];
void inicializar(){
int i;
for(i=0; i<max; i++){
*arreglot[i].tema='\0';
}
}
void recuperar(){
FILE *fp;
int i;
if((fp=fopen("temas1","rb")) == NULL){
printf("No se abre archivo temas1...\n");
return;
}
inicializar();
for(i=0;i<max;i++)
if(fread(&arreglot[i],sizeof(struct stemas),1,fp) != 1){
if(feof(fp)){
printf("Archivo recuperado...\n");
fclose(fp);
return;
}
printf("Error de lectura...\n");
}
printf("Archivo recuperado...\n");
}
void guardar(){
int i;
FILE *fp;
if((fp=fopen("temas1","wb"))==NULL){
printf("No se abre archivo temas1...\n");
return;
}
for(i=0;i<max;i++){
if(*arreglot[i].tema)
if(fwrite(&arreglot[i],sizeof(struct stemas),1,fp) !=1)
printf("Error de escritura...");
}
printf("Archivo guardado...\n");
fclose(fp);
}
void listar(void){
int i;
for(i=0;i<max;i++){
printf("Tema: %s\n",arreglot[i].tema);
printf("Desc: %s\n",arreglot[i].desc);
}
}
void eliminar(int nt){
if(nt != -1){
*arreglot[nt].tema = '\0';
*arreglot[nt].desc = '\0';
puts("Tema y Descripción eliminados...");
}
}
void actualizar(nt){
int r;
char t1[100];
char t2[900];
r = nt;
printf("Reg: %d\n",r);
if(r != -1){
puts("\nIntroduce tema, max. 100 caracteres: ");
gets(t1);
if(strlen(t1)>100){
printf("\nTema %d > 100 caracteres...\n",strlen(t1));
printf("Repite 1.Introducir Tema...\n");
}else{
strcpy(arreglot[r].tema,t1);
puts("\nIntroduce .desc, max 900 caracteres: ");
gets(t2);
if(strlen(t2)>900){
printf("\nDescripción %d > 900 caracteres...\n",strlen(t2));
printf("Repite 1.Introducir Tema...\n");
*arreglot[r].tema = '\0';
}else{
strcpy(arreglot[r].desc,t2);
}
}
}
}
void desplegar(int nt){
//int nt;
if(nt != -1){
printf("\nTema:%s \nDescripción: %s\n",arreglot[nt].tema,arreglot[nt].desc);
}
}
int encontrar(){
char s[20];
int r;
printf("Introduce tema:\n");
gets(s);
for(r=0;r<5;r++){
if(!strcmp(s,arreglot[r].tema)) break;
}
if(r==5){
printf("tema no esta...\n");
return(-1);
}
return r;
}
void entras(char *promp, char *s, int num){
char c[100];
do{
printf("%s",promp);
gets(c);
if(strlen(c)>=num)
printf("\nDemasiado largo...\n");
}while(strlen(c)>=num);
strcpy(s,c);
}
void introducir(void){
int i;
do{
for(i=0;i<max;i++){
if(!*arreglot[i].tema) break;
}
//i=0;
printf("Reg: %d\n",i);
if(i>=max){
printf("Arreglo de temas max...");
break;
}else{
puts("\nTerminar con linea en blanco...");
//puts("Introduce tema");
//gets(arreglot[i].tema);
entras("Introduce tema: \n",arreglot[i].tema,100);
if(!*arreglot[i].tema) break;
//puts("Introduce desc");
//gets(arreglot[i].desc);
entras("Introduce descripcion: \n",arreglot[i].desc,900);
if(!*arreglot[i].desc){
*arreglot[i].tema='\0';
break;
}
}
}while(1);
}
int main(void){
int menu,r;
char s[80];
inicializar();
do{
printf("\n\t\tMENU \n");
printf("1 Introducir Tema \n");
printf("2 Desplegar Tema \n");
printf("3 Actualizar Tema \n");
printf("4 Eliminar Tema \n");
printf("5 Listar Temas \n");
printf("6 Guardar Temas \n");
printf("7 Recuperar Temas \n");
printf("8 Terminar \n");
do{
printf("Selecciona opcion:");
gets(s);
menu=atoi(s);
}while(menu<0 || menu>9);
switch(menu){
case(1):
introducir();
break;
case(2):
r=encontrar();
desplegar(r);
break;
case(3):
r=encontrar();
actualizar(r);
break;
case(4):
r=encontrar();
eliminar(r);
break;
case(5):
listar();
break;
case(6):
guardar();
break;
case(7):
recuperar();
break;
case(8):
puts("Fin del programa...");
break;
}
}while(menu!=8);
return(0);
}
#include<stdio.h>
#include<stdlib.h>
#define max 5
struct stemas{
char tema[100];
char desc[890];
}arreglot[max];
//struct stemas arreglot[max];
void inicializar(){
int i;
for(i=0; i<max; i++){
*arreglot[i].tema='\0';
}
}
void recuperar(){
FILE *fp;
int i;
if((fp=fopen("temas1","rb")) == NULL){
printf("No se abre archivo temas1...\n");
return;
}
inicializar();
for(i=0;i<max;i++)
if(fread(&arreglot[i],sizeof(struct stemas),1,fp) != 1){
if(feof(fp)){
printf("Archivo recuperado...\n");
fclose(fp);
return;
}
printf("Error de lectura...\n");
}
printf("Archivo recuperado...\n");
}
void guardar(){
int i;
FILE *fp;
if((fp=fopen("temas1","wb"))==NULL){
printf("No se abre archivo temas1...\n");
return;
}
for(i=0;i<max;i++){
if(*arreglot[i].tema)
if(fwrite(&arreglot[i],sizeof(struct stemas),1,fp) !=1)
printf("Error de escritura...");
}
printf("Archivo guardado...\n");
fclose(fp);
}
void listar(void){
int i;
for(i=0;i<max;i++){
printf("Tema: %s\n",arreglot[i].tema);
printf("Desc: %s\n",arreglot[i].desc);
}
}
void eliminar(int nt){
if(nt != -1){
*arreglot[nt].tema = '\0';
*arreglot[nt].desc = '\0';
puts("Tema y Descripción eliminados...");
}
}
void actualizar(nt){
int r;
char t1[100];
char t2[900];
r = nt;
printf("Reg: %d\n",r);
if(r != -1){
puts("\nIntroduce tema, max. 100 caracteres: ");
gets(t1);
if(strlen(t1)>100){
printf("\nTema %d > 100 caracteres...\n",strlen(t1));
printf("Repite 1.Introducir Tema...\n");
}else{
strcpy(arreglot[r].tema,t1);
puts("\nIntroduce .desc, max 900 caracteres: ");
gets(t2);
if(strlen(t2)>900){
printf("\nDescripción %d > 900 caracteres...\n",strlen(t2));
printf("Repite 1.Introducir Tema...\n");
*arreglot[r].tema = '\0';
}else{
strcpy(arreglot[r].desc,t2);
}
}
}
}
void desplegar(int nt){
//int nt;
if(nt != -1){
printf("\nTema:%s \nDescripción: %s\n",arreglot[nt].tema,arreglot[nt].desc);
}
}
int encontrar(){
char s[20];
int r;
printf("Introduce tema:\n");
gets(s);
for(r=0;r<5;r++){
if(!strcmp(s,arreglot[r].tema)) break;
}
if(r==5){
printf("tema no esta...\n");
return(-1);
}
return r;
}
void entras(char *promp, char *s, int num){
char c[100];
do{
printf("%s",promp);
gets(c);
if(strlen(c)>=num)
printf("\nDemasiado largo...\n");
}while(strlen(c)>=num);
strcpy(s,c);
}
void introducir(void){
int i;
do{
for(i=0;i<max;i++){
if(!*arreglot[i].tema) break;
}
//i=0;
printf("Reg: %d\n",i);
if(i>=max){
printf("Arreglo de temas max...");
break;
}else{
puts("\nTerminar con linea en blanco...");
//puts("Introduce tema");
//gets(arreglot[i].tema);
entras("Introduce tema: \n",arreglot[i].tema,100);
if(!*arreglot[i].tema) break;
//puts("Introduce desc");
//gets(arreglot[i].desc);
entras("Introduce descripcion: \n",arreglot[i].desc,900);
if(!*arreglot[i].desc){
*arreglot[i].tema='\0';
break;
}
}
}while(1);
}
int main(void){
int menu,r;
char s[80];
inicializar();
do{
printf("\n\t\tMENU \n");
printf("1 Introducir Tema \n");
printf("2 Desplegar Tema \n");
printf("3 Actualizar Tema \n");
printf("4 Eliminar Tema \n");
printf("5 Listar Temas \n");
printf("6 Guardar Temas \n");
printf("7 Recuperar Temas \n");
printf("8 Terminar \n");
do{
printf("Selecciona opcion:");
gets(s);
menu=atoi(s);
}while(menu<0 || menu>9);
switch(menu){
case(1):
introducir();
break;
case(2):
r=encontrar();
desplegar(r);
break;
case(3):
r=encontrar();
actualizar(r);
break;
case(4):
r=encontrar();
eliminar(r);
break;
case(5):
listar();
break;
case(6):
guardar();
break;
case(7):
recuperar();
break;
case(8):
puts("Fin del programa...");
break;
}
}while(menu!=8);
return(0);
}
Suscribirse a:
Entradas (Atom)