Ver Mensaje Individual
  #11 (permalink)  
Antiguo 17/12/2006, 07:05
Nevhazovat
 
Fecha de Ingreso: diciembre-2006
Mensajes: 33
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: Dos programas que ya me traen loco

Hola.

Pues si, se me echó el tiempo encima haciendo las demás prácticas que eran más sencillas y estas que son las más complicadas para mí, resulta que tengo menos tiempo para pensarlas, ya que mañana antes de las 00:00 he de entregarlas, y sí, puede que el algoritmo no sea óptimo para un programador profesional, pero yo estoy empezando en esto y no tengo suficientes conocimientos para optimizarlo. Lo que me interesa es que funcione. Cuando no tenga que entregar prácticas ya podré dedicarme a mejorarlo para el examen.

Te pego el código por si hay algún otro error que haya pasado por alto.

Código:
/*Escribir un programa en C que a partir de un fichero dado con el formato adecuado:
a) Cuente el nº de clientes de un banco con al menos 40 años y saldo en cuenta inferior a 1.200 euros;
b) Imprima el saldo menor y el saldo mayor de los clientes mayores de 30 años;
c) Imprima la edad media de todos los clientes;
d) Imprima el número de clientes que se llaman igual y viven en la misma ciudad;*/

#include <stdio.h>
#include <stdlib.h> 
#include <conio.h>
#include <string.h>

struct banco {
			int Ncliente;
         char Nombre[15]; 
			char Ap[20];
         int Edad; 
         int Saldo; 
         char Ciudad[20]; 
			};
struct banco Banco[10];  /* max 10 clientes */
/* variable global para guardar los datos de los clientes */

void InsertarCliente();
/* Añade un nuevo cliente al final del fichero */

void ConsultarCliente();
/* Consulta los datos personales de un cliente a traves de la clave del fichero */ 

//void ConsultarEstadisticas(); 
/* Consulta las estadisticas de los clientes introducidos */ 

void ParteA();

void ParteB();

void ParteC();

void ParteD();



void InsertarCliente()
/* Anade un nuevo cliente al final del fichero */
{FILE *fp;
int Edad, NCliente, Saldo;
char Nombre[20], Ap[20], Ciudad[20];
printf("Cuales son los datos del cliente a insertar?\n");
printf("Cliente:");
scanf("%d", &NCliente);
fflush(stdin);
printf("Nombre:");
gets(Nombre);
fflush(stdin);
printf("Apellido:");
gets(Ap);
printf("Edad:");
scanf("%d", &Edad);
fflush(stdin);
printf("Saldo:");
scanf("%d",&Saldo);
fflush(stdin);
printf("Ciudad:");
gets(Ciudad);
if ((fp=fopen("banco.txt", "a"))==NULL) /* detecta error */
		 {printf("Error al abrir el fichero");
		 }
fprintf(fp, "%d  %s  %s  %d  %d  %s\n", NCliente, Nombre, Ap, Edad, Saldo, Ciudad);
/* escribimos el registro al final del fichero */
if (fclose(fp)==0)
	  {printf("\nFichero cerrado correctamente");
	  }
else {printf("Error al cerrar fichero");
		}
}




void ConsultarCliente()
/* Consulta los datos personales de un cliente a traves del campo clave NCliente */
{FILE *fp;
int i=0, salir=0, Mat;
printf("Cual es el numero de matricula del cliente a consultar? ");
scanf("%d", &Mat);
if ((fp=fopen("banco.txt", "r"))==NULL) /* detecta error */
       {printf("Error al abrir el fichero"); 
		 }
do 
	{/* de paso guardamos los datos en estructuras adecuadas */
	 fscanf(fp, "%d  %s  %s  %d  %d  %s\n", &(Banco[i].Ncliente), Banco[i].Nombre, Banco[i].Ap, &(Banco[i].Edad), &(Banco[i].Saldo), Banco[i].Ciudad);
	 if (Mat==Banco[i].Ncliente)
       {printf("%d  %s  %s  %d  %d  %s\n", Banco[i].Ncliente, Banco[i].Nombre, Banco[i].Ap, Banco[i].Edad, Banco[i].Saldo, Banco[i].Ciudad); 
	salir=1;
       } 
	 else
       {i++; 
		 }
   } 
while (salir!=1 && !feof(fp));
if (fclose(fp)==0)
	  {printf("\nFichero cerrado correctamente");
     } 
else {printf("Error al cerrar fichero");
      } 
getch();

}


void ParteA()
{
FILE *fp; 
int i=0, contador=0;

if ((fp=fopen("banco.txt", "r"))==NULL) /* detecta error */
{
     printf("Error al abrir el fichero"); 
} 

while (!feof(fp))
{ 
	fscanf(fp, "%d %s %s %d %d %s\n", &(Banco[i].Ncliente), Banco[i].Nombre, Banco[i].Ap, &(Banco[i].Edad), &(Banco[i].Saldo), Banco[i].Ciudad);

   if(Banco[i].Edad>=40 && Banco[i].Saldo<1200) 
	  contador++;
} 

if (fclose(fp)==0)
   printf("\nFichero cerrado correctamente\n"); 
else
	printf("Error al cerrar fichero");

printf("Hay %d cliente(s) mayor(es) de 40 años con saldo inferior a 1200 euros.\n", contador); 
}



void ParteB() 
{ 
FILE *fp;
int i=0, contador=0, saldo_menor, saldo_mayor; 

if ((fp=fopen("banco.txt", "r"))==NULL) /* detecta error */
{ 
	  printf("Error al abrir el fichero");
}

while (!feof(fp)) 
{
	fscanf(fp, "%d %s %s %d %d %s\n", &(Banco[i].Ncliente), Banco[i].Nombre, Banco[i].Ap, &(Banco[i].Edad), &(Banco[i].Saldo), Banco[i].Ciudad);
    
	if(Banco[i].Edad>30)
   { 
      if(contador==0) 
		{
         saldo_menor = Banco[i].Saldo; 
         saldo_mayor = Banco[i].Saldo; 
		 }
       else 
		{
			if(Banco[i].Saldo<saldo_menor)
           saldo_menor = Banco[i].Saldo; 
         if(Banco[i].Saldo>saldo_mayor) 
			  saldo_mayor = Banco[i].Saldo;
		 }
      contador++; 
	}
} 

if (fclose(fp)==0)
   printf("\nFichero cerrado correctamente"); 
else 
	printf("Error al cerrar fichero");

if(contador==0)    
{
	printf("No hay personas mayores de 30");
} 
else
{ 
	printf("\nSaldo menor: %d\n", saldo_menor);
	printf("Saldo mayor: %d\n", saldo_mayor);
	printf("Clientes mayores de 30 años: %d\n", contador);
} 
}

void ParteC()
{
FILE *fp;
int i=0, suma_edad=0, total=0;

if ((fp=fopen("banco.txt", "r"))==NULL) /* detecta error */
{
	  printf("Error al abrir el fichero");
}

while (!feof(fp))
{
	fscanf(fp, "%d %s %s %d %d %s\n", &(Banco[i].Ncliente), Banco[i].Nombre, Banco[i].Ap, &(Banco[i].Edad), &(Banco[i].Saldo), Banco[i].Ciudad);

	suma_edad += Banco[i].Edad;
	total++;
}

if (fclose(fp)==0)
	printf("\nFichero cerrado correctamente\n");
else
	printf("Error al cerrar fichero");

if(total==0)
{
	printf("No hay personas");
}
else
{
	printf("Edad media: %d\n", suma_edad / total);
}
}


void ParteD()
{
FILE *fp;
int i=0, j, iguales=0, num_clientes=10;

if ((fp=fopen("banco.txt", "r"))==NULL) /* detecta error */
{
	  printf("Error al abrir el fichero");
}

while (!feof(fp))
{

for (i= 0; i < num_clientes; i++) {
for(j=i+1; j < num_clientes;j++){
if ((strcmp(Banco[i].Nombre,Banco[j].Nombre) == 0) && (strcmp(Banco[i].Ciudad,Banco[j].Ciudad) == 0)) {
iguales++;}
}
}
}

if (fclose(fp)==0)
	printf("\nFichero cerrado correctamente\n");
else
	printf("Error al cerrar fichero");

if(iguales==0)
{
	printf("No hay personas");
}
else
{
	printf("Clientes con nombre y ciudad iguales: %d\n", iguales);
}
}




main ()
{FILE * fp;

int resp;

for (;;) 
{do 
  {//clrscr(); 
	printf("\n\t  MENU PROGRAMA\n");
   printf("\t-----------------\n"); 
   printf("1. Insertar nuevo cliente\n"); 
	printf("2. Consultar cliente\n");
   printf("3. Clientes > 40 años y saldo < 1200 euros\n"); 
   printf("4. Saldo menor y mayor de clientes > 30 años\n"); 
	printf("5  Edad media de los clientes\n");
	printf("6. Clientes con nombre y ciudad iguales\n");
	printf("7. Terminar\n");
   scanf("%d", &resp); 
	}
 while (resp!=1 && resp!=2 && resp!=3 && resp!=4 && resp!=5 && resp!=6 && resp!=7); /* solo aceptamos respuestas validas */
 switch (resp) 
  {case 1:  InsertarCliente(); 
       break; 
   case 2:  ConsultarCliente(); 
       break; 
	case 3:  ParteA();
       break; 
   case 4:  ParteB(); 
       break; 
   case 5:  ParteC(); 
		 break;
	case 6:  ParteD();
	default: printf("\nFin de programa\a");
       exit(0); 
		 break;
   } 
 } 
}