Informática
Fundamentos de programación
/*********************************************************************/
/*Diseñar y escribir un programa en C, guiado por menús, que permita */
/*el aprendizaje de los países y sus correspondientes capitales. */
/*El programa tendrá los datos de países y capitales guardados en un */
/*fichero de registros donde cada registro contiene el nombre del pais */
/*y su capital (un registro es una estructura). */
/*El programa trabajará sobre memoria y no directamente sobre el */
/*fichero. */
/*Es decir, hay que cargar los datos del fichero a memoria y desde ahí */
/*trabajar. */
/*Para ello el programa mostrará un menú principal con las siguientes */
/*opciones: */
/*1. Configuración del fichero */
/*2. Determinar la capital de un país especificado */
/*3. Determinar el país cuya capital se especifica */
/*4. Juego de países y capitales */
/*5. Salir */
/* */
/*Cuando elige la opcion: */
/* */
/*1) se mostrara un nuevo menu con las opciones: */
/* a. Crear fichero */
/* b. Añadir pais y su capital */
/* c: Eliminar pais y su capital */
/* d. Modificar pais y su capital */
/* e. Ver todos los países almacenados y sus capitales */
/* */
/*La opcion: */
/* a. Permite crear el fichero si no existe */
/* b. Se usa para añadir un país y su capital */
/* c. Se usa para eliminar un país y su capital */
/* d. Se usa para modificar un país y su capital si tienen errores */
/* e. Permite ver todos los países que contiene el fichero y sus */
/* capitales */
/*En el caso de usar las opciones a,b,c y d de este menú, después de */
/*programar lo que deban hacer, se debe cargar el fichero de nuevo a */
/*memoria, puesto que con esas opciones hemos hecho cambios al fichero */
/*si no actualizamos lo que habíamos cargado al empezar el programa */
/*a memoria, no veremos los cambios realizados. */
/* */
/*2) En esta opcion se pide un país al usuario y el programa muestra */
/* la capital correspondiente. */
/* */
/* */
/*3) Es igual que la 2) pero ahora se pide la capital y se muestra el */
/* país */
/* */
/*4) Consiste en mostrar un submenú con 2 opciones: */
/* a. Tú me das el país */
/* b. Tú me das la capital */
/* */
/*Según elijamos a o b nos pedirá un país ( para adivinar su capital ) */
/*o una capital ( para adivinar de qué país es ). */
/*La forma de adivinar es co nun juego que consiste en: */
/* a) para facilitarnos el adivinar, nos muestra tantos guiones bajos */
/* como letras tiene el país o capital a adivinar. */
/* b) tenemos que ir dando letras ( como en el ahorcado ) hasta */
/* adivinar el país o capital. */
/*Si una letra no está, nos dice que no está y no pasa nada. */
/*Si la letra está, nos pone todas las que haya y en que sitio van. */
/*****************************************************************/
#include<stdio.h>
#include<stdlib.h> //se necesita para system("cls")
#include<string.h> //se necesita para strcmp
#include<conio.h> //se necesita para getch
struct datos
{
char pais[25];
char capital[25];
};
struct datos capitales; //estructura de paises y capitales. Permite guardar un número ilimitado de datos.
/*PROTOTIPOS DE LAS FUNCIONES EMPLEADAS*/
/*--------------------------------------*/
/*--------------------------------------*/
/*PROTOTIPOS DE LAS FUNCIONES DEL PRIMER MENU: */
void configuracion(FILE *fichero, struct datos capitales); //función que muestra otro menú con diferentes opciones
void determinar_capital(FILE *fichero, struct datos capitales); /*función que muestra la capital correspondiente al pais que se le pide al usuario*/
void determinar_pais(FILE *fichero, struct datos capitales); /*función que muestra el
pais correspondiente
a la capital que se le pide al usuario*/
void juego_pedir_pais(FILE *fichero, struct datos capitales); /*función que permite adivinar la capital de un
país que se le pide al usuario*/
void juego_pedir_capital(FILE *fichero, struct datos capitales); /*función que permite adivinar de que país es la
capital que se le pide al usuario/*
/*PROTOTIPOS DE LAS FUNCIONES DEL SEGUNDO MENU: */
void crear_fichero(FILE *fichero, struct datos capitales); /*función que crea el fichero si no está creado y permite introducir paises con sus respetivas capitales*/
void aniadir(FILE fichero, struct datos capitales); /*función que permite añadir un número indefinido de paises con sus capitales/
void eliminar(FILE fichero, struct datos capitales); /*función que permite dar de baja un pais con su respectiva capital*/
void modificar(FILE *fichero, struct datos capitales); /*función que pregunta el país a modificar y lo modifica con la respectiva
modificación de su capital*/
void ver(FILE fichero, struct datos capitales); /*función que permite ver un listado de todos los paises con sus capitales*/
/*programa principal*/
void main()
{
FILE *fichero;
int opc,opci;
do
{
printf("Elije una opcion\n");
printf("1.Configuracion del fichero\n");
printf("2.Determinar la capital de un pais especificado\n");
printf("3.Determinar el pais cuya capital se especifica\n");
printf("4.Juego de paises y capitales\n");
printf("5.Salir\n");
fflush(stdin);
scanf("%d", &opc);
switch(opc) //según la opcón elegida entra en case 1, case 2,...
{
case 1:
configuracion(fichero,capitales); /*llamada a la función configuración
la cual accede a otro menú para elegir
otras opciones*/
break;
case 2:
determinar_capital(fichero, capitales); /*llamada a la función determinar capital que muestra la capital de un pais pedido anteriormente*/
break;
case 3:
determinar_pais(fichero, capitales); /*llamada a la función determinar pais que muestra el pais al que pertenece una capital pedida anteriormente*/
break;
case 4:
system("cls");
printf("Elige una opcion:\n");
printf("1.Tu me das el pais\n");
printf("2.Tu me das la capital\n");
fflush(stdin);
scanf("%d",&opci);
if(opci==1)
juego_pedir_pais(fichero, capitales); /*llamada a la función juego pedir país que pedirá un país para adivinar su capital,mostrando tantos guiones como letras tenga su capital*/
else
juego_pedir_capital(fichero, capitales); /*llamada a la función juego pedir capital que pedirá una capital para adivinar su país,mostrando tantos guiones como letras tenga su país*/
break;
default:
break;
}
}while(opc!=5);
}
/**********************************************************************
/*FUNCIÓN: configuración */
/* */
/*PARÁMETROS: la declaración del fichero y la estructura donde se modificarán los */
/* datos */
/*VALOR DEVUELTO: ninguno */
/* */
/*********************************************************************/
void configuracion(FILE *fichero, struct datos capitales)
{
char opc1;
do
{
system("cls");
printf("Escoge una opcion\n");
printf("a.Crear fichero\n");
printf("b.Anadir pais y capital\n");
printf("c.Eliminar pais y capital\n");
printf("d.Modificar pais y capital\n");
printf("e.Ver todos los paises almacenados y sus capitales\n");
printf("s.Salir\n");
fflush(stdin);
scanf("%c", &opc1);
switch(opc1)
{
case 'a':
aniadir(fichero, capitales); /*llamada a la función crear fichero que crea el fichero si no existe y permite introducir paises y capitales*/
break;
case 'b':
aniadir(fichero, capitales); /*llamada a la función añadir que permite introducir paises con sus capitales*/
break;
case 'c':
eliminar(fichero, capitales); /*llamada a la función eliminar que permite eliminar un pais*/
break;
case 'd':
modificar(fichero, capitales); /*llamada a la función modifiar que permite modificar un pais, su capital o ambas */
break;
case 'e':
ver(fichero, capitales); /*llamada a la función ver que permite visualizar un listado con los paises y sus capitales que tenemos guardados en el fichero*/
break;
default:
break;
}
}while(opc1!='s');
fclose(fichero);
}
/*********************************************************************/
/*FUNCIÓN: añadir */
/* */
/*PARÁMETROS: la declaración del fichero y la estructura donde se modificarán los */
/* datos */
/* */
/*VALOR DEVUELTO: ninguno */
/* */
/*********************************************************************/
void aniadir(FILE *fichero, struct datos capitales)
{
fichero=fopen("capitales.dat","ab");
char respu;
do
{
printf("Pais: \n");
scanf("%s",capitales.pais);
printf("\n");
printf("Capital: \n");
scanf("%s",capitales.capital);
printf("Desea introducir mas paises?\n");
fwrite(&capitales,sizeof(struct datos),1,fichero);
fflush(stdin);
scanf("%c",&respu);
}while(respu!='n');
fclose(fichero);
}
/*********************************************************************/
/*FUNCIÓN: ver */
/* */
/*PARÁMETROS: la declaración del fichero y la estructura donde se modificarán los */
/* datos */
/* */
/*VALOR DEVUELTO: ninguno */
/* */
/*********************************************************************/
void ver(FILE *fichero, struct datos capitales)
{
fichero=fopen("capitales.dat","rb");
while(!feof(fichero))
{
fread(&capitales,sizeof(struct datos),1,fichero);
if(!feof(fichero))
{
printf("PAIS: %s\n",capitales.pais);
printf("CAPITAL: %s\n",capitales.capital);
printf("\n");
}
}
fclose(fichero);
getch();
}
/*********************************************************************/
/*FUNCIÓN: modificar */
/* */
/*PARÁMETROS: la declaración del fichero y la estructura donde se modificarán los */
/* datos */
/* */
/*VALOR DEVUELTO: ninguno */
/* */
/*********************************************************************/
void modificar(FILE *fichero, struct datos capitales)
{
char nombre_pais[20];
int comparar,donde;
fichero=fopen("capitales.dat","rb+");
if (fichero==NULL)
printf("ERROR\n");
else
{
printf("Introduce el nombre del pais que quieres modificar:\n");
scanf("%s",nombre_pais );
while(!feof(fichero))
{
fread(&capitales,sizeof(struct datos),1,fichero);
if(!feof(fichero))
{
comparar=strcmp(capitales.pais, nombre_pais); /*comparo el nombre del país que introduje
con el país de la estructura*/
if(comparar==0)
{
donde=ftell(fichero)-sizeof(struct datos);
printf("Nuevo nombre del pais: \n");
scanf("%s", capitales.pais);
printf("Su capital: \n");
scanf("%s", capitales.capital);
fseek(fichero,donde,SEEK_SET);
fwrite(&capitales,sizeof(struct datos),1,fichero); fseek(fichero,donde+sizeof(struct datos),SEEK_SET);
}
}
}
}
fclose(fichero);
}
/*********************************************************************/
/*FUNCIÓN: eliminar */
/* */
/*PARÁMETROS: la declaración del fichero y la estructura donde se modificarán los */
/* datos */
/* */
/*VALOR DEVUELTO: ninguno */
/* */
/*********************************************************************/
void eliminar(FILE *fichero, struct datos capitales)
{
char nombre[25];
int busc;
FILE *fichero2;
fichero=fopen("capitales.dat","rb+");
fichero2=fopen("capitales2.dat","wb");
if(fichero==NULL)
printf("Error de apertura\n");
else
{
printf("Introduce el nombre del pais que deseas borrar:\n");
fflush(stdin);
scanf("%s", nombre);
while(!feof(fichero))
{
fread(&capitales,sizeof(struct datos),1,fichero);
if(!feof(fichero))
{
busc=strcmp(capitales.pais,nombre);
if(busc==0)
printf("%s esta eliminado!\n", nombre);
else
fwrite(&capitales,sizeof(struct datos),1,fichero2);
}
}
}
fclose(fichero);
fclose(fichero2);
getch(); //utilizamos este getch para que muestre (este país esta eliminado)
remove("capitales.dat");
rename("capitales2.dat","capitales.dat");
}
/*********************************************************************/
/*FUNCIÓN: determinar capital */
/* */
/*PARÁMETROS: la declaración del fichero y la estructura donde se modificarán los */
/* datos */
/* */
/*VALOR DEVUELTO: ninguno */
/* */
/*********************************************************************/
void determinar_capital(FILE *fichero, struct datos capitales)
{
char nombre[25];
int busc;
fichero=fopen("capitales.dat","rb");
if(fichero==NULL)
printf("Error de apertura\n");
else
{
printf("Introduce el nombre del pais:\n");
fflush(stdin);
scanf("%s", nombre);
while(!feof(fichero))
{
fread(&capitales,sizeof(struct datos),1,fichero);
if(!feof(fichero))
{
busc=strcmp(capitales.pais,nombre);
if(busc==0)
printf("La capital de %s es: %s\n",nombre, capitales.capital);
printf("\n");
}
}
}
fclose(fichero);
}
/*********************************************************************/
/*FUNCIÓN: determinar país */
/* */
/*PARÁMETROS: la declaración del fichero y la estructura donde se modificarán los */
/* datos */
/* */
/*VALOR DEVUELTO: ninguno */
/* */
/*********************************************************************/
void determinar_pais(FILE *fichero, struct datos capitales)
{
char nombre[25];
int busc;
fichero=fopen("capitales.dat","rb");
if(fichero==NULL)
printf("Error de apertura\n");
else
{
printf("Introduce el nombre capital:\n");
fflush(stdin);
scanf("%s", nombre);
while(!feof(fichero))
{
fread(&capitales,sizeof(struct datos),1,fichero);
if(!feof(fichero))
{
busc=strcmp(capitales.capital,nombre);
if(busc==0)
printf("%s es la capial de: %s\n",nombre, capitales.pais);
printf("\n");
}
}
}
fclose(fichero);
}
/*********************************************************************/
/*FUNCIÓN: juego pedir pais */
/* */
/*PARÁMETROS: la declaración del fichero y la estructura donde se modificarán los */
/* datos */
/* */
/*VALOR DEVUELTO: ninguno */
/* */
/*********************************************************************/
void juego_pedir_pais(FILE *fichero,struct datos capitales)
{
char pais[25],resultado[25];
char let;
int resu,i=0,cont=0,j=0,q=0,x;
fichero=fopen("capitales.dat","rb");
for(x=0;x<25;x++)
resultado[x]='*';
if(fichero==NULL)
printf("Error de apertura\n");
else
{
printf("Dime el pais para jugar\n");
fflush(stdin);
scanf("%s",pais);
system("cls");
while(!feof(fichero))
{
fread(&capitales,sizeof(struct datos),1,fichero);
if(!feof(fichero))
{
resu=strcmp(capitales.pais,pais);
if(resu==0)
{
do
{
printf("_ ");
resultado[i]='_';
printf(" ");
q++;
i++;
}while(capitales.capital[i]!='\0');
x=0;
i=0;
do
{
printf("Introduce una letra: ");
fflush(stdin);
scanf("%c",&let);
i=0;
j++;
for(i=0;i<capitales.capital[i];i++)
{
if(let==capitales.capital[i])
{
resultado[i]=let;
cont++;
}
}
x=0;
while(resultado[x]!='*')
{
printf("%c",resultado[x]);
printf(" ");
x++;
}
}while(let!='_');
}
}
}
}
}
/*********************************************************************/
/*FUNCIÓN: juego pedir cpaital */
/* */
/*PARÁMETROS: la declaración del fichero y la estructura donde se modificarán los */
/* datos */
/* */
/*VALOR DEVUELTO: ninguno */
/* */
/*********************************************************************/
void juego_pedir_capital(FILE *fichero, struct datos capitales)
{
char capita[25],resultado[25];
char let;
int resu,i=0,cont=0,j=0,q=0,x;
fichero=fopen("capitales.dat","rb");
for(x=0;x<25;x++)
resultado[x]='*';
if(fichero==NULL)
printf("Error de apertura\n");
else
{
printf("Capital:\n");
fflush(stdin);
scanf("%s",capita);
system("cls");
while(!feof(fichero))
{
fread(&capitales,sizeof(struct datos),1,fichero);
if(!feof(fichero))
{
resu=strcmp(capitales.capital,capita);
if(resu==0)
{
do
{
printf("_ ");
resultado[i]='_';
printf(" ");
q++;
i++;
}while(capitales.pais[i]!='\0');
x=0;
i=0;
do
{
printf("Introduce una letra: ");
fflush(stdin);
scanf("%c",&let);
i=0;
j++;
for(i=0;i<capitales.pais[i];i++)
{
if(let==capitales.pais[i])
{
resultado[i]=let;
cont++;
}
}
x=0;
while(resultado[x]!='*')
{
printf("%c",resultado[x]);
printf(" ");
x++;
}
}while(let!='_');
}
}
}
}
}
Descargar
Enviado por: | Programilla |
Idioma: | castellano |
País: | España |