
17/12/2006, 07:05
|
| | 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;
}
}
}
|