Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: dieguex1 en 31 Agosto 2015, 03:33 am



Título: ayuda ejercicio pago de multa
Publicado por: dieguex1 en 31 Agosto 2015, 03:33 am
necesito ayuda con este ejercicio, el enunciado es este y se cierra al ingresar "drogas"  :(

Se requiere realizar un programa en lenguaje “C” que se utilice como apoyo para la inducción en el proceso del pago de una multa.
El problema comienza solicitando al usuario el número de la causa denominado RIT (Rol interno de tribunal). También se le solicita el delito por el cual se le condenó. Si el delito corresponde a “DROGAS”, entonces el programa debe enviar un mensaje que señale: “COMPLETAR FORMULARIO DE CTA. CORRIENTE N° 9023283 DEL BANCO ESTADO, MINISTERIO DEL INTERIOR Y CONCURRIR A DEPOSITAR EL DINERO EN DICHA CUENTA”. En caso contrario si el delito no es “DROGAS”, se debe solicitar al usuario el tipo de procedimiento; si es del tipo “MONITORIO”, entonces se debe solicitar al usuario  la fecha en que recibió la notificación de la multa y el valor de la multa. Si desde aquella fecha de notificación hasta la fecha actual (hoy) han transcurrido menos o igual a 15 días, entonces se debe realizar un 25% de descuento, mostrando por pantalla el monto a pagar calculado, a través de los siguientes mensajes:
1.- “LA MULTA A PAGAR ES DE $(debe ir el monto a pagar calculado)”
2.- “COMPLETAR FORMULARIO EXCEL DENOMINADO “PAGO MONITORIO” Y CONCURRIR A PAGAR LA MULTA EN LA MUNICIPALIDAD”.
3.- “PAGAR LAS COSTAS DE LA CAUSA EN LA CUENTA CORRIENTE N°53309172147 DEL BANCO ESTADO, CORPORACIÓN ADMINISTRATIVA DEL PODER JUDICIAL”.

En el caso que el procedimiento no es del tipo “MONITORIO”, entonces el programa debe mostrar los siguientes mensajes:
1.- “INGRESAR A LA PÁGINA WEB http://www.tesoreria.cl/, COMPLETAR EL FORMULARIO 10 DE LA TESORERÍA GENERAL DE LA REPÚBLICA”.
2.- “PAGAR LA MULTA EN CUALQUIERA DE LOS SIGUIENTES BANCOS: BBVA – BICE – CORP BANCA – SCOTIABANK – CHILE – BCI – SECURITY – ITAU – INTERNATIONAL – BANCOESTADO”.

esto es lo que tengo avanzado hasta el momento

Código:
#include <stdio.h>
#include <time.h>
//----------------------------------------------------
void transformar(char delito[]){
int i;
for(i=0;delito[i]!='\0';i++){
if(delito[i]>=65&&delito[i]<=90)
delito[i]=delito[i]+32;
}
}
//----------------------------------------------------
int verificar(char delito[]){
int i;
char copia[7]={"drogas"};
for(i=0;delito[i]!='\0';i++){
if(delito[i]!=copia[i])
return 1;
}
return 0;
}
//----------------------------------------------------
int verificar2(char delito[]){
int i;
char copia[10]={"monitorio"};
for(i=0;delito[i]!='\0';i++){
if(delito[i]!=copia[i])
return 1;
}
return 0;
}
//----------------------------------------------------
float descuento(float valor, char fecha[]){
int retorno;
time_t tiempo = time(0);
struct tm *tlocal = localtime(&tiempo);
char output[128];
strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
retorno=verificarfecha(output,fecha);
switch(retorno){
case 0:{
printf("La fecha de la multa no excede los 15 dias, se aplica descuento.\n");
return valor*0.75;
break;
}
case 1:{
printf("La fecha de la multa excede los 15 dias, no se aplica descuento.\n");
return valor;
break;
}
}
}
//----------------------------------------------------
int verificarfecha(char output[], char fecha[]){
int diaac;
int diaml;
int i;
for(i=2;i<8;i++){
if(i<=5){
if (fecha[i]!=output[i])
return 1;
}
else
if (fecha[i+2]!=output[i])
return 1;
}
diaac=(output[0]-48)*10+output[1]-48;
diaml=(fecha[0]-48)*10+fecha[1]-48;
if (diaac>diaml){
if(diaac-diaml>15){
return 1;
}
return 0;
}
else{
if(diaml-diaac>15){
return 1;
}
return 0;
}
}
//----------------------------------------------------
int main(int argc,char* argv[]){
int rit;
char delito[50];
char procedimiento[50];
char fecha[11];
float valor;
printf("Ingrese su RIT:\n");
scanf("%d",&rit);
printf("Ingrese su delito:\n");
printf("el cual puede ser 'Drogas' u 'Otros'\n");
scanf("%s",delito);
transformar(delito);
switch(verificar(delito)){
case 0: {
printf("COMPLETAR FORMULARIO DE CTA. CORRIENTE N° 9023283 DEL BANCO ESTADO, MINISTERIO DEL INTERIOR Y CONCURRIR A DEPOSITAR EL DINERO EN DICHA CUENTA\n");
break;
};
case 1: {
printf("Ingrese Tipo de procedimiento:\n");
printf("Puede ser 'Monitorio' u 'Otro'\n");
scanf("%s",procedimiento);
transformar(procedimiento);
switch(verificar2(procedimiento)){
case 0:{
printf("Ingrese la fecha en la cual se le entrego la multa\n");
printf("formato fecha: 'dia/mes/año' '01/01/2000' ignorando las comillas.\n");
scanf("%s",fecha);
printf("Ingrese el valor de su multa\n");
scanf("%f",&valor);
valor=descuento(valor,fecha);
printf("LA MULTA A PAGAR ES DE $%.2f. \nCOMPLETAR FORMULARIO EXCEL DENOMINADO “PAGO MONITORIO†Y CONCURRIR A PAGAR LA MULTA EN LA MUNICIPALIDAD.\nPAGAR LAS COSTAS DE LA CAUSA EN LA CUENTA CORRIENTE N°53309172147 DEL BANCO ESTADO, CORPORACIÓN ADMINISTRATIVA DEL PODER JUDICIAL\n",valor);
break;
}
case 1:{
printf("INGRESAR A LA PÃGINA WEB http://www.tesoreria.cl/, COMPLETAR EL FORMULARIO 10 DE LA TESORERÃA GENERAL DE LA REPÚBLICA.\nPAGAR LA MULTA EN CUALQUIERA DE LOS SIGUIENTES BANCOS: BBVA – BICE – CORP BANCA – SCOTIABANK – CHILE – BCI – SECURITY – ITAU – INTERNATIONAL – BANCOESTADO\n");
break;
}
}
break;
};
}
return 0;
}

http://www.mediafire.com/download/4cdpsv9d65vjx5r/work.c.rar

de antemano muchas gracias


Título: Re: ayuda ejercicio pago de multa
Publicado por: RockPosts en 2 Septiembre 2015, 12:52 pm
Después de que se active el switch con el case 1 (el de las drogas), el programa muestra un mensaje en pantalla. Después de mostrar el mensaje, como has puesto un break, se sale del switch. Después del switch hay un 'return 0;. Cuando la función main retorna, el programa se cierra. Para solucionar esto, después del switch pon (si trabajas en Windows) system("pause");, o puedes usar getc. Eso ya es elección tuya