Adsence

lunes, 6 de junio de 2011

Control-de-un-Parqueadero-con-Struct

Leave a Comment


[caption id="attachment_1032" align="aligncenter" width="664"]Control del mundial de futbol FIFA con struct Control del mundial de futbol FIFA con struct[/caption]


En un parqueadero de la ciudad de Pamplona que atiende solo en horario diurno (en las noches el parqueadero queda desocupado), se cobra la tarifa por minutos de la siguiente manera, si el auto permanece cierto numero de horas mas 10 minutos no se le cobra los minutos excedidos de las horas enteras.


  • Si la placa (numero de tres dígitos) del auto termina en número par, tiene un descuento de 20% sobre el total de valor.

  • Todo auto paga un incremento del 16% de IVA sobre el valor a pagar.

  • Si los dos últimos dígitos de la placa del vehículo coinciden con los dos últimos dígitos de la cedula del conductor, se realiza un descuento adicional del 25%.


La información sobre los conductores y los vehículos se debe almacenar en un vector de registros de la siguiente forma

Clientes



Se requiere un programa en C que define las estructuras de datos necesarias para representar la información como se describe en el grafico.

Realizar las siguientes funciones:


  • Una función que registre la entrada de un vehículo, capturando todos los datos del cliente (excepto la hora de salida y el valor a pagar) y almacenándolo en el vector en la posición correspondiente, según la llegada del cliente.

  • Una función que dado un número de placa, retorne la posición dentro del vector donde se encuentra registrado dicho vehículo.

  • Una función que registre la salida de un auto. Registre la hora y minutos de salida, Calcule el total a pagar (incluyendo descuentos e iva) por parte de un cliente dando dentro de los parámetros la posición donde se encuentra ubicado el registro respectivo, y el valor del minuto. Dentro de esta misma función se debe registrar este valor en el respectivo campo

  • Una función que calcule y retorne el total recaudado por el parqueadero en un día.

  • En el main se debe, capturar el valor del minuto de parqueo, hacer uso adecuado de las funciones ya definidas y presentar


un menú con las siguientes opciones:


  1. Registro de entrada

  2. Registro de salida

  3. Terminar día




[cpp]

</div>
/*
En un parqueadero de la ciudad de Pamplona que atiende solo en horario diurno (en las noches el parqueadero queda
desocupado), se cobra la tarifa por minutos de la siguiente manera, si el auto permanece cierto numero de horas mas 10 minutos no
se le cobra los minutos excedidos de las horas enteras. Si la placa (numero de tres dígitos) del auto termina en número par, tiene un
descuento de 20% sobre el total de valor. Todo auto paga un incremento del 16% de IVA sobre el valor a pagar. Si los dos últimos
dígitos de la placa del vehículo coinciden con los dos últimos dígitos de la cedula del conductor, se realiza un descuento adicional
del 25%.
La información sobre los conductores y los vehículos se debe almacenar en un vector de registros de la siguiente forma

Se requiere un programa en C que define las estructuras de datos necesarias para representar la información como se describe en el
grafico.
Realizar las siguientes funciones:
-- Una función que registre la entrada de un vehículo, capturando todos los datos del cliente (excepto la hora de salida y el
valor a pagar) y almacenándolo en el vector en la posición correspondiente, según la llegada del cliente.
-- Una función que dado un número de placa, retorne la posición dentro del vector donde se encuentra registrado dicho
vehículo.
-- Una función que registre la salida de un auto. Registre la hora y minutos de salida, Calcule el total a pagar (incluyendo
descuentos e iva) por parte de un cliente dando dentro de los parámetros la posición donde se encuentra ubicado el registro
respectivo, y el valor del minuto. Dentro de esta misma función se debe registrar este valor en el respectivo campo.
-- Una función que calcule y retorne el total recaudado por el parqueadero en un día.
--En el main se debe, capturar el valor del minuto de parqueo, hacer uso adecuado de las funciones ya definidas y presentar
un menú con las siguientes opciones:
1. Registro de entrada
2. Registro de salida
3. Terminar día
Este menú debe repetirse hasta que el administrador del parqueadero teclee la opción 3. En cuyo caso se debe imprimir en pantalla
el total recaudado en el día
*/

#include< stdio.h >
#include< conio.h >
struct tiempo
{
int hor;
int min;
};
struct Cliente
{
int ced,pla;
char nom[50];
float val;
struct tiempo ent;
struct tiempo sal;

};
void portada(){
printf("...............................................................................\a\n");
printf("................******.*****.** **.*****.****.*****.*****..**................\a\n");
printf("................ ** .** **.*** ***.** **.** .** **.**.**.***................\a\n");
printf("................ ** .*****.*******.*****.****.*****.*****..**................\a\n");
printf("................ ** .** **.** * **.** .** .*** ....**..**................\a\n");
printf("................**** .** **.** **.** .****.** **....**.****...............\a\n");
printf("...............................jamper91.hostei.com.............................\a\n");
printf("\n");
};
void final(){
printf("-------------------------------------------------------------------------------\a\n");
printf ("******************************************************************************\a\n");
printf (" Creado por jamper91@hotmail.com\n");
printf (" Cucuta Campeon\n");
printf ("******************************************************************************\a\n");
printf("-------------------------------------------------------------------------------\a\n");
};
/*
-- Una función que registre la entrada de un vehículo, capturando todos los datos del cliente (excepto la hora de salida y el
valor a pagar) y almacenándolo en el vector en la posición correspondiente, según la llegada del cliente.
*/
void llenar(struct Cliente c[],int t)
{

for(int i=0;i< t;i++)
{
printf("\n\tDigite cedula %d:",i+1);
scanf("%d",&c[i].ced);
printf("\t %d\n",c[i].ced);
printf("\tDigite nombre %d:",i+1);
scanf("%s",&c[i].nom);
printf("\t %s\n",c[i].nom);
printf("\tDigite placa %d:",i+1);
scanf("%d",&c[i].pla);
printf("\t %d\n",c[i].pla);
printf("\tDigite Hora entrada %d:",i+1);
scanf("%d",&c[i].ent.hor);
printf("\t %d\n",c[i].ent.hor);
printf("\tDigite Minutos entrada %d:",i+1);
scanf("%d",&c[i].ent.min);
printf("\t %d\n",c[i].ent.min);

}

}
/*
Una función que dado un número de placa, retorne la posición dentro del vector donde se encuentra registrado dicho
vehículo.

*/
int buscarporPlaca(struct Cliente c[],int t,int p)
{
//Recorro todos los clientes
for(int i=0;i< t;i++)
{
if(c[i].pla==p)
return i;
}
return -1;

}
/*
Una función que registre la salida de un auto. Registre la hora y minutos de salida, Calcule el total a pagar (incluyendo
descuentos e iva) por parte de un cliente dando dentro de los parámetros la posición donde se encuentra ubicado el registro
respectivo, y el valor del minuto. Dentro de esta misma función se debe registrar este valor en el respectivo campo.

*/
void registrarSalida(struct Cliente c[],int t,int vM)
{
int p,h,m,pos;
//Variable que me acumulara el descuento
float des;
float total;
printf("Digite la placa del auto a Salir:");
scanf("%d",&p);
pos=buscarporPlaca(c,t,p);
if(p!=-1)
{
printf("Digite la hora de Salida:\n");
scanf("%d",&h);
printf("Digite los minutos de Salida:\n");
scanf("%d",&m);
//Guardo la informacion en el registro
c[pos].sal.hor=h;
c[pos].sal.min=m;
printf("Guarde la informacion\n");
//Determino si la placa es par
if((c[pos].pla%2)==0)
{
des=0.20;
}else{
des=0.0;
}
printf("Determine le descuento\n");
//Determino el total de hora que estuvo en el estacionamineto
int tH=h-c[pos].ent.hor;
//Determino el total de minutos que estuvo en el estacionamineto
int tM=m-c[pos].ent.min;
printf("Determine el total de horas: %d y el total de min:%d\n",tH,tM);
//Tengo que tener el total de minutos, para luego multiplicar ese total, por el valor por minuto (vM) y luego multiplicarle el descuento
//Recuerda que si el descuento es el 20% se hace (1-0.20)=0.80, ese valor es el que se multiplica por el total
c[pos].val=((((tH*60)+tM)*vM)*(1-des));

//Ahora le agrego el iva =16%
c[pos].val=c[pos].val+(c[pos].val*0.16);
}else{
printf("No se encontro esa placa");
}
}
/*
Una función que calcule y retorne el total recaudado por el parqueadero en un día.

*/
float totalRecaudado(struct Cliente c[],int ta)
{
float t=0;
for(int i=0;i< ta;i++)
{
//Verifico que ya haya salio el carro,
if(c[i].val!=-1.0)
{
t=t+c[i].val;

}
}
printf("El total que recaudo el parqueadero en el dia fue: %.2f",t);
return t;

}
/*
En el main se debe, capturar el valor del minuto de parqueo, hacer uso adecuado de las funciones ya definidas y presentar
un menú con las siguientes opciones:
1. Registro de entrada
2. Registro de salida
3. Terminar día
Este menú debe repetirse hasta que el administrador del parqueadero teclee la opción 3. En cuyo caso se debe imprimir en pantalla
el total recaudado en el día

*/
main()
{
int n=1,vM,op=1;
portada();
printf("Valor del minuto:");
scanf("%d",&vM);
struct Cliente c[n];
while(op!=3)
{
printf("1. Registro de Entrada\n");
printf("2. Registro de Salida\n");
printf("3. Salir\n");
printf("Escoje:");
scanf("%d",&op);
if(op==1){
llenar(c,n);
}else if(op==2){
registrarSalida(c,n,vM);
}else if(op==3){
//En caso de que escrbia algun numero diferente de 1,2,3
}else {
printf("\n\t Opcion no valida \n");
}

}
totalRecaudado(c,n);
final();
getch();
return 0;

}

[/cpp]

0 comentarios :