17/12/2006, 12:09
|
| | Fecha de Ingreso: diciembre-2006
Mensajes: 33
Antigüedad: 18 años Puntos: 0 | |
Re: Dos programas que ya me traen loco Hola.
He estado trabajando un poco en el programa. Pero no salen los datos bien cuando los consulto desde el menú. Además cuando doy a la opcion consultar estadisticas se me queda pillado el programa.
Si podéis revisarlo en busca de errores. Yo es que estoy tan borracho de código que no veo nada.
Código:
/*Escribir un programa en C que a partir de un fichero dado con el formato adecuado:
a) Cuente el numero 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 numero 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 */
int num_clientes = 0;
/* 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 CargarDatos() {
FILE *fp;
char c;
int pos = 0;
char cad[5];
if ((fp=fopen("banco.txt","r"))!=NULL) {
c = getc(fp);
Banco[num_clientes].Ncliente = atoi(&c);
// atoi pasa de char a entero
c = getc(fp); // coge el espacio que separa NCliente de Nombre
c = getc(fp);
while (c != ' ') { // mientras q no llegue el espacio que separa Nombre de Ap
Banco[num_clientes].Nombre[pos] = c;
pos++;
c = getc(fp);
} // Esto bucle while va metiendo caracter a caracter el nombre del cliente
c = getc(fp);
pos = 0;
while (c != ' ') { // Ahora hacemos lo mismo con Ap
Banco[num_clientes].Ap[pos] = c;
pos++;
c = getc(fp);
}
c = getc(fp);
pos = 0;
while (c != ' ') {
cad[pos] = c;
pos++;
c = getc(fp);
}
cad[pos] = '\n';
Banco[num_clientes].Edad = atoi(cad); // Volvemos a pasar la cadena cad a entero
pos = 0;
c = getc(fp);
while (c != ' ') {
cad[pos] = c;
pos++;
c = getc(fp);
}
cad[pos] = '\n';
Banco[num_clientes].Saldo = atoi(cad);
pos = 0;
c = getc(fp);
while (c != ' ') {
Banco[num_clientes].Ciudad[pos] = c;
pos++;
c = getc(fp);
}
num_clientes++;
}
}
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("NCliente:");
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");
}
else {
fprintf(fp, "%d %s %s %d %d %s\n", NCliente, Nombre, Ap, Edad, Saldo, Ciudad);
/* escribimos el registro al final del fichero */
num_clientes++;
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");
}
else {
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 ConsultarEstadisticas() {
/* Consulta las estadisticas de los clientes introducidos */
FILE *fp;
int i,salir=0, cuenta_clientes = 0, menor = Banco[0].Saldo, mayor = Banco[0].Saldo, media, iguales = 0, total = 0, j;
if ((fp=fopen("banco.txt", "r"))==NULL) { /* detecta error */
printf("Error al abrir el fichero");
}
else {
for (i = 0; i < num_clientes; i++) {
// para los clientes con mas de 40 años y mas de 1.200 euros de saldo
if ((Banco[i].Edad > 40) && (Banco[i].Saldo > 1200)) {
cuenta_clientes++;
}
// Calculo del mayor de los saldos
if (Banco[i].Saldo > mayor) {
mayor = Banco[i].Saldo;
}
// Calculo del menor de los saldos
if (Banco[i].Saldo < menor) {
menor = Banco[i].Saldo;
}
// Calculo de la edad media de los clientes
total = total + Banco[i].Edad;
// Calculo de los nombres y las ciudades iguales
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)) {
1+iguales++;
}
}
media = total / num_clientes;
printf("\nNuumero de clientes mayores de 40 años y con saldo mayor de 1.200 Euros: %d ",cuenta_clientes);
printf("\nMayor de los saldos: %d",mayor);
printf("\nMenor de los saldos: %d",menor);
printf("\nMedia de edad de los clientes: %d",media);
printf("\nNumero de clientes con nombre y ciudad iguales: %d",iguales);
while (salir!=1 && !feof(fp));
if (fclose(fp)==0) {
printf("\nFichero cerrado correctamente");
}
else {
printf("Error al cerrar fichero");
}
getch();
}
}
}
void main () {
char resp;
CargarDatos();
do {
printf("\nMENU PROGRAMA\n");
printf("----------------\n");
printf("1. Insertar nuevo cliente\n");
printf("2. Consultar cliente\n");
printf("3. Consultar estadisticas\n");
printf("4. Terminar\n");
resp = getch();
switch(resp) {
case '1': InsertarCliente();
resp = '1';
break;
case '2': ConsultarCliente();
resp = '2';
break;
case '3': ConsultarEstadisticas();
resp = '3';
break;
default: printf("\nFin de programa\a");
break;
}
}
while (resp !='4'); /* solo aceptamos respuestas validas */
}
|