elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  pero como le asigno un valor monetario a una hora
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: pero como le asigno un valor monetario a una hora  (Leído 6,319 veces)
djnilo

Desconectado Desconectado

Mensajes: 13


Ver Perfil
pero como le asigno un valor monetario a una hora
« en: 5 Febrero 2016, 01:50 am »

buenas noches
 si me puede orientar por favor gracias estoy tratando de hacer una  aplicación de un estacionamiento

entrada y salida de vehículos

por ejemplo un auto llego 12:00 y salio 13:00 = 01:00  estuvo una hora el cobro seria $500

¿si el vehículo estuvo ejemplo llego  12:00 y salio 12:15 = estuvo 15 minutos pero igual se le cobra los $500?

otro ejemplo si el vehiculo llego 12:00 y salio 13:15 = estuvo 01:15  entoces cada 15 minutos depues de la hora deberia cobrarse $150 cada quince minutos después de la hora
 

¿ pero como le asigno un valor monetario a una hora ?
este es mi codigo para sumar las horas
Código
  1. Dim fechaini As DateTime
  2.        Dim fechafin As DateTime
  3.  
  4.        DateTime.TryParse(TextBox1.Text, fechaini) ' 12:00
  5.        DateTime.TryParse(TextBox2.Text, fechafin) '13:00
  6.  
  7.  
  8.        Dim dif As TimeSpan = fechafin - fechaini
  9.  
  10.        MsgBox("Han transcurridos " & dif.Hours & ":" & dif.Minutes & " hrs.")





« Última modificación: 5 Febrero 2016, 02:47 am por Eleкtro » En línea

XresH


Desconectado Desconectado

Mensajes: 384



Ver Perfil WWW
Re: pero como le asigno un valor monetario a una hora
« Respuesta #1 en: 5 Febrero 2016, 02:46 am »

Para asignarle podes usar una variable externa, la misma contiene el valor por ejemplo puede ser un array (depende de tu codigo) para mayor control de tiempos y precios.
La pregunta que haces de
"¿si el vehículo estuvo ejemplo llego  12:00 y salio 12:15 = estuvo 15 minutos pero igual se le cobra los $500?"
Eso depende del sistema que vos quieras hacer, si el mismo estacionamiento (al que le haces el sistema) quiere cobrar 15 minutos como 1 hora perfectamente podes, pero sino es asi, podes realizar una simple cuenta, regla de 3, para filtrar y cobrar acorde al tiempo establecido (por ejemplo, media hora, 250) o como te guste.

Saludos.


En línea

[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<
crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: pero como le asigno un valor monetario a una hora
« Respuesta #2 en: 5 Febrero 2016, 03:21 am »

Creo que tienes un mal enfoque no necesitas asignar un valor monetario a una fecha
mira este ejemplo solo basta con hacer unas simple multiplicacion y division

Código
  1.  
  2.                Dim fechaini As DateTime
  3. Dim fechafin As DateTime
  4. Dim cobro As Integer=0
  5.  
  6. DateTime.TryParse("12:00", fechaini)
  7. DateTime.TryParse("12:30", fechafin)
  8.  
  9. Dim dif As TimeSpan = fechafin - fechaini
  10.  
  11. If dif.Hours>=1 Then
  12. cobro=cobro+(500*dif.Hours)
  13.  
  14. If dif.Minutes>15 Then
  15. Dim n15min As Integer =dif.Minutes\15
  16. cobro =cobro+n15min*150
  17. End If
  18.  
  19. ElseIf dif.Minutes>=1 Then
  20. cobro=500
  21. End If
  22.  
  23.  
  24. Console.WriteLine("Han transcurridos " & dif.Hours & ":" & dif.Minutes & " hrs.")
  25. Console.WriteLine("El costo total es de "+Convert.ToString(cobro))
  26. Console.ReadLine()
  27.  

Si algo anda mal o no es lo que buscas me avisas
saludos...
« Última modificación: 5 Febrero 2016, 03:36 am por crack81 » En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: pero como le asigno un valor monetario a una hora
« Respuesta #3 en: 5 Febrero 2016, 03:44 am »

Si algo anda mal me avisas

Para calcular correctamente la diferencia completa entre dos intervalos de tiempo/fecha siempre se deben usar las propiedades que empiezan con el prefijo Total****, por que las propiedades que NO empiezan por Total**** lo que hacen es devolver el valor relativo al día (TimeSpan.Days), y esto causaría la obtención de valores incorrectos si intentasemos evaluar lapsos de más de 24 horas.

Esto es un ejemplo, fíjate en la diferencia:
Código
  1. Dim timeDiff As TimeSpan = (TimeSpan.FromDays(2) - TimeSpan.FromDays(1)) ' 1 día de diferencia inicial.
  2.  
  3. MsgBox(timeDiff.Hours)                                 ' Valor:  "0", puesto que es la hora Cero del dia Uno.
  4. MsgBox(timeDiff.Add(TimeSpan.FromHours(1)).Hours)      ' Valor:  "1", puesto que es la hora Uno del dia Uno.
  5. MsgBox(timeDiff.TotalHours)                            ' Valor: "24", puesto que hay 24 horas de diferencia entre día Uno y día Dos.
  6. MsgBox(timeDiff.Add(TimeSpan.FromHours(1)).TotalHours) ' Valor: "25", puesto que le añadí 1 hora a las 24 horas de diferencia.

...Esto lo comento por tener en cuenta el supuesto caso en el que el cliente estacionase su vehículo durante más de un día.







Teniendo esta Class para idear y personalizar la lógica de tu algoritmo:
Código
  1. Public NotInheritable Class DateUtils
  2.  
  3.    ''' <summary>
  4.    ''' Prevents a default instance of the <see cref="DateUtils"/> class from being created.
  5.    ''' </summary>
  6.    <DebuggerNonUserCode>
  7.    Private Sub New()
  8.    End Sub
  9.  
  10.    <DebuggerStepThrough>
  11.    Public Shared Function CalculateMoney(ByVal timeIn As TimeSpan, ByVal timeOut As TimeSpan,
  12.                                          Optional ByVal x1HourMoney As Double = 500.0F,
  13.                                          Optional ByVal x15MinMoneyAfter1Hour As Double = 150.0F) As Double
  14.  
  15.        Dim timeDiff As TimeSpan = (timeOut - timeIn)
  16.  
  17.        Select Case (timeDiff.TotalMinutes)
  18.  
  19.            Case Is <= 0.0R
  20.                Return 0.0R
  21.  
  22.            Case Is <= 60.0R
  23.                Return (x1HourMoney)
  24.  
  25.            Case Else
  26.                Dim fractions As Double = Math.Ceiling((timeDiff.TotalMinutes - 60.0R) / 15.0R)
  27.                Dim supplement As Double = (fractions * x15MinMoneyAfter1Hour)
  28.                Return (x1HourMoney + supplement)
  29.  
  30.        End Select
  31.  
  32.    End Function
  33.  
  34.    <DebuggerStepThrough>
  35.    Public Shared Function CalculateMoney(ByVal dateIn As Date, ByVal dateOut As Date,
  36.                                          Optional ByVal x1HourMoney As Double = 500.0F,
  37.                                          Optional ByVal x15MinMoneyAfter1Hour As Double = 150.0F) As Double
  38.  
  39.        Return DateUtils.CalculateMoney(TimeSpan.FromTicks(dateIn.Ticks), TimeSpan.FromTicks(dateOut.Ticks), x1HourMoney, x15MinMoneyAfter1Hour)
  40.  
  41.    End Function
  42.  
  43. End Class

Puedes utilizarlo de las siguientes maneras (esto son solo unos ejemplos para demostrar los resultados obtenidos)
Código
  1. Public NotInheritable Class Form1 : Inherits Form
  2.  
  3.    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) _
  4.    Handles MyBase.Shown
  5.  
  6.        Dim datePairs As New List(Of KeyValuePair(Of Date, Date)) From
  7.            {
  8.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("12:01")),
  9.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("12:15")),
  10.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:00")),
  11.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:01")),
  12.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:15")),
  13.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:30")),
  14.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:31")),
  15.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("14:00"))
  16.            }
  17.  
  18.        For Each datePair As KeyValuePair(Of Date, Date) In datePairs
  19.  
  20.            Dim sb As New StringBuilder
  21.            With sb
  22.                .AppendLine(String.Format("Time In  : {0}", datePair.Key.ToString("hh\:mm")))
  23.                .AppendLine(String.Format("Time Out : {0}", datePair.Value.ToString("hh\:mm")))
  24.                .AppendLine(String.Format("Time Diff: {0}", (datePair.Value - datePair.Key).ToString("%h\h\:%m\m")))
  25.                .AppendLine(String.Format(CultureInfo.GetCultureInfo("en-US").NumberFormat,
  26.                                          "Payment  : ${0:n0}", DateUtils.CalculateMoney(datePair.Key, datePair.Value)))
  27.            End With
  28.  
  29.            Console.WriteLine(sb.ToString)
  30.  
  31.        Next
  32.  
  33.    End Sub
  34.  
  35. End Class

Código
  1.    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) _
  2.    Handles MyBase.Shown
  3.  
  4.        Dim timePairs As New List(Of KeyValuePair(Of TimeSpan, TimeSpan)) From
  5.            {
  6.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(12.02)),
  7.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(12.25)),
  8.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.0)),
  9.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.02)),
  10.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.25)),
  11.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.5)),
  12.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.52)),
  13.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(14.0))
  14.            }
  15.  
  16.        For Each timePair As KeyValuePair(Of TimeSpan, TimeSpan) In timePairs
  17.  
  18.            Dim sb As New StringBuilder
  19.            With sb
  20.                .AppendLine(String.Format("Time In  : {0}", timePair.Key.ToString("hh\:mm")))
  21.                .AppendLine(String.Format("Time Out : {0}", timePair.Value.ToString("hh\:mm")))
  22.                .AppendLine(String.Format("Time Diff: {0}", (timePair.Value - timePair.Key).ToString("%h\h\:%m\m")))
  23.                .AppendLine(String.Format(CultureInfo.GetCultureInfo("en-US").NumberFormat,
  24.                                          "Payment  : ${0:n0}", DateUtils.CalculateMoney(timePair.Key, timePair.Value)))
  25.            End With
  26.  
  27.            Console.WriteLine(sb.ToString)
  28.  
  29.        Next
  30.  
  31.    End Sub
  32.  
  33. End Class

Resultado de ejecución:

Cita de: Visual Studio
Time In  : 12:00
Time Out : 12:01
Time Diff: 0h:1m
Payment  : $500

Time In  : 12:00
Time Out : 12:15
Time Diff: 0h:15m
Payment  : $500

Time In  : 12:00
Time Out : 13:00
Time Diff: 1h:0m
Payment  : $500

Time In  : 12:00
Time Out : 13:01
Time Diff: 1h:1m
Payment  : $650

Time In  : 12:00
Time Out : 13:15
Time Diff: 1h:15m
Payment  : $650

Time In  : 12:00
Time Out : 13:30
Time Diff: 1h:30m
Payment  : $800

Time In  : 12:00
Time Out : 13:31
Time Diff: 1h:31m
Payment  : $950

Time In  : 12:00
Time Out : 14:00
Time Diff: 2h:0m
Payment  : $1,100

Saludos
« Última modificación: 5 Febrero 2016, 04:39 am por Eleкtro » En línea

djnilo

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: pero como le asigno un valor monetario a una hora
« Respuesta #4 en: 6 Febrero 2016, 04:27 am »

Creo que tienes un mal enfoque no necesitas asignar un valor monetario a una fecha
mira este ejemplo solo basta con hacer unas simple multiplicacion y division

Código
  1.  
  2.                Dim fechaini As DateTime
  3. Dim fechafin As DateTime
  4. Dim cobro As Integer=0
  5.  
  6. DateTime.TryParse("12:00", fechaini)
  7. DateTime.TryParse("12:30", fechafin)
  8.  
  9. Dim dif As TimeSpan = fechafin - fechaini
  10.  
  11. If dif.Hours>=1 Then
  12. cobro=cobro+(500*dif.Hours)
  13.  
  14. If dif.Minutes>15 Then
  15. Dim n15min As Integer =dif.Minutes\15
  16. cobro =cobro+n15min*150
  17. End If
  18.  
  19. ElseIf dif.Minutes>=1 Then
  20. cobro=500
  21. End If
  22.  
  23.  
  24. Console.WriteLine("Han transcurridos " & dif.Hours & ":" & dif.Minutes & " hrs.")
  25. Console.WriteLine("El costo total es de "+Convert.ToString(cobro))
  26. Console.ReadLine()
  27.  

Si algo anda mal o no es lo que buscas me avisas
saludos...

muchas gracias crack 81  por responder tan prontamente pero tu codigo lo hice correr
no funciona si por ejemplo pongo las 12:00 y salio 13:15 ya deberia combrarme $650
no lo hace pero si le pongo 12:00 y 13:30 cobra 800 eso esta bien
 
En línea

djnilo

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: pero como le asigno un valor monetario a una hora
« Respuesta #5 en: 6 Febrero 2016, 04:35 am »

Para calcular correctamente la diferencia completa entre dos intervalos de tiempo/fecha siempre se deben usar las propiedades que empiezan con el prefijo Total****, por que las propiedades que NO empiezan por Total**** lo que hacen es devolver el valor relativo al día (TimeSpan.Days), y esto causaría la obtención de valores incorrectos si intentasemos evaluar lapsos de más de 24 horas.

Esto es un ejemplo, fíjate en la diferencia:
Código
  1. Dim timeDiff As TimeSpan = (TimeSpan.FromDays(2) - TimeSpan.FromDays(1)) ' 1 día de diferencia inicial.
  2.  
  3. MsgBox(timeDiff.Hours)                                 ' Valor:  "0", puesto que es la hora Cero del dia Uno.
  4. MsgBox(timeDiff.Add(TimeSpan.FromHours(1)).Hours)      ' Valor:  "1", puesto que es la hora Uno del dia Uno.
  5. MsgBox(timeDiff.TotalHours)                            ' Valor: "24", puesto que hay 24 horas de diferencia entre día Uno y día Dos.
  6. MsgBox(timeDiff.Add(TimeSpan.FromHours(1)).TotalHours) ' Valor: "25", puesto que le añadí 1 hora a las 24 horas de diferencia.

...Esto lo comento por tener en cuenta el supuesto caso en el que el cliente estacionase su vehículo durante más de un día.







Teniendo esta Class para idear y personalizar la lógica de tu algoritmo:
Código
  1. Public NotInheritable Class DateUtils
  2.  
  3.    ''' <summary>
  4.    ''' Prevents a default instance of the <see cref="DateUtils"/> class from being created.
  5.    ''' </summary>
  6.    <DebuggerNonUserCode>
  7.    Private Sub New()
  8.    End Sub
  9.  
  10.    <DebuggerStepThrough>
  11.    Public Shared Function CalculateMoney(ByVal timeIn As TimeSpan, ByVal timeOut As TimeSpan,
  12.                                          Optional ByVal x1HourMoney As Double = 500.0F,
  13.                                          Optional ByVal x15MinMoneyAfter1Hour As Double = 150.0F) As Double
  14.  
  15.        Dim timeDiff As TimeSpan = (timeOut - timeIn)
  16.  
  17.        Select Case (timeDiff.TotalMinutes)
  18.  
  19.            Case Is <= 0.0R
  20.                Return 0.0R
  21.  
  22.            Case Is <= 60.0R
  23.                Return (x1HourMoney)
  24.  
  25.            Case Else
  26.                Dim fractions As Double = Math.Ceiling((timeDiff.TotalMinutes - 60.0R) / 15.0R)
  27.                Dim supplement As Double = (fractions * x15MinMoneyAfter1Hour)
  28.                Return (x1HourMoney + supplement)
  29.  
  30.        End Select
  31.  
  32.    End Function
  33.  
  34.    <DebuggerStepThrough>
  35.    Public Shared Function CalculateMoney(ByVal dateIn As Date, ByVal dateOut As Date,
  36.                                          Optional ByVal x1HourMoney As Double = 500.0F,
  37.                                          Optional ByVal x15MinMoneyAfter1Hour As Double = 150.0F) As Double
  38.  
  39.        Return DateUtils.CalculateMoney(TimeSpan.FromTicks(dateIn.Ticks), TimeSpan.FromTicks(dateOut.Ticks), x1HourMoney, x15MinMoneyAfter1Hour)
  40.  
  41.    End Function
  42.  
  43. End Class

Puedes utilizarlo de las siguientes maneras (esto son solo unos ejemplos para demostrar los resultados obtenidos)
Código
  1. Public NotInheritable Class Form1 : Inherits Form
  2.  
  3.    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) _
  4.    Handles MyBase.Shown
  5.  
  6.        Dim datePairs As New List(Of KeyValuePair(Of Date, Date)) From
  7.            {
  8.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("12:01")),
  9.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("12:15")),
  10.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:00")),
  11.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:01")),
  12.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:15")),
  13.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:30")),
  14.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:31")),
  15.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("14:00"))
  16.            }
  17.  
  18.        For Each datePair As KeyValuePair(Of Date, Date) In datePairs
  19.  
  20.            Dim sb As New StringBuilder
  21.            With sb
  22.                .AppendLine(String.Format("Time In  : {0}", datePair.Key.ToString("hh\:mm")))
  23.                .AppendLine(String.Format("Time Out : {0}", datePair.Value.ToString("hh\:mm")))
  24.                .AppendLine(String.Format("Time Diff: {0}", (datePair.Value - datePair.Key).ToString("%h\h\:%m\m")))
  25.                .AppendLine(String.Format(CultureInfo.GetCultureInfo("en-US").NumberFormat,
  26.                                          "Payment  : ${0:n0}", DateUtils.CalculateMoney(datePair.Key, datePair.Value)))
  27.            End With
  28.  
  29.            Console.WriteLine(sb.ToString)
  30.  
  31.        Next
  32.  
  33.    End Sub
  34.  
  35. End Class

Código
  1.    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) _
  2.    Handles MyBase.Shown
  3.  
  4.        Dim timePairs As New List(Of KeyValuePair(Of TimeSpan, TimeSpan)) From
  5.            {
  6.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(12.02)),
  7.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(12.25)),
  8.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.0)),
  9.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.02)),
  10.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.25)),
  11.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.5)),
  12.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.52)),
  13.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(14.0))
  14.            }
  15.  
  16.        For Each timePair As KeyValuePair(Of TimeSpan, TimeSpan) In timePairs
  17.  
  18.            Dim sb As New StringBuilder
  19.            With sb
  20.                .AppendLine(String.Format("Time In  : {0}", timePair.Key.ToString("hh\:mm")))
  21.                .AppendLine(String.Format("Time Out : {0}", timePair.Value.ToString("hh\:mm")))
  22.                .AppendLine(String.Format("Time Diff: {0}", (timePair.Value - timePair.Key).ToString("%h\h\:%m\m")))
  23.                .AppendLine(String.Format(CultureInfo.GetCultureInfo("en-US").NumberFormat,
  24.                                          "Payment  : ${0:n0}", DateUtils.CalculateMoney(timePair.Key, timePair.Value)))
  25.            End With
  26.  
  27.            Console.WriteLine(sb.ToString)
  28.  
  29.        Next
  30.  
  31.    End Sub
  32.  
  33. End Class

Resultado de ejecución:

Saludos


Muchas gracias por responder Eleкtro se nota que te manejas en el tema   pero no  entiendo tu codigo para hacerlo correr vb net  podrias explicarme por favor soy novato
me gusto eso de las 24horas como dices tu si el auto esta estacionado mas tiempo genial la idea

esta viendo las salida de tu ejemplo

por ejemplo 12:00 salio 13:01 eso es una hora y un minutos tu resultado sale $650
debiria ser $500
pero  son 12:00 salio 13:15 eso es una hora y quince minutos deberia cobra $650
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: pero como le asigno un valor monetario a una hora
« Respuesta #6 en: 6 Febrero 2016, 11:43 am »

no  entiendo tu codigo para hacerlo correr vb net  podrias explicarme por favor soy novato

Los dos ejemplos que puse son funcionales, quiero decir que solo es necesario copiar el código, pegarlo en la class principal (o donde sea), y compilarlo para testearlo. ¿Qué es lo que no entendiste para poder correrlo?.



esta viendo las salida de tu ejemplo
por ejemplo 12:00 salio 13:01 eso es una hora y un minutos tu resultado sale $650
debiria ser $500
pero  son 12:00 salio 13:15 eso es una hora y quince minutos deberia cobra $650

Entonces el algoritmo que puse debería trabajar en base a 75 minutos, no 60.

En la condición del Select Case y la condicional del Case Else debes reemplazar los minuos con los que se trabajan, simplemente reemplaza el valor 60.0R por 74.99R ( 01:14:59 hrs. ).

Una vez realizada esa modificación, este es el resultado de ejecución:
Cita de: Visual Studio
Time In  : 12:00
Time Out : 12:01
Time Diff: 0h:1m
Payment  : $500

Time In  : 12:00
Time Out : 12:15
Time Diff: 0h:15m
Payment  : $500

Time In  : 12:00
Time Out : 13:00
Time Diff: 1h:0m
Payment  : $500

Time In  : 12:00
Time Out : 13:01
Time Diff: 1h:1m
Payment  : $500

Time In  : 12:00
Time Out : 13:14
Time Diff: 1h:14m
Payment  : $500

Time In  : 12:00
Time Out : 13:15
Time Diff: 1h:15m
Payment  : $650

Time In  : 12:00
Time Out : 13:16
Time Diff: 1h:16m
Payment  : $650

Time In  : 12:00
Time Out : 13:29
Time Diff: 1h:29m
Payment  : $650

Time In  : 12:00
Time Out : 13:30
Time Diff: 1h:30m
Payment  : $800

Time In  : 12:00
Time Out : 13:31
Time Diff: 1h:31m
Payment  : $800

Time In  : 12:00
Time Out : 13:44
Time Diff: 1h:44m
Payment  : $800

Time In  : 12:00
Time Out : 13:45
Time Diff: 1h:45m
Payment  : $950

Time In  : 12:00
Time Out : 13:46
Time Diff: 1h:46m
Payment  : $950

Time In  : 12:00
Time Out : 13:59
Time Diff: 1h:59m
Payment  : $950

Time In  : 12:00
Time Out : 14:00
Time Diff: 2h:0m
Payment  : $1,100

PD: La idea es que en base a ese ejemplo lo personalices por ti mismo para que devuelva los resultados deseados a tu criterio...

Saludos
« Última modificación: 6 Febrero 2016, 11:46 am por Eleкtro » En línea

Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: pero como le asigno un valor monetario a una hora
« Respuesta #7 en: 7 Febrero 2016, 08:15 am »

Hola

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.        Dim fechaini As DateTime
  5.        Dim fechafin As DateTime
  6.  
  7.  
  8.        DateTime.TryParse(TextBox1.Text, fechaini) ' 12:00
  9.        DateTime.TryParse(TextBox2.Text, fechafin) '13:00
  10.  
  11.  
  12.        Dim dif As TimeSpan = fechafin - fechaini
  13.  
  14.        Dim Precio As Integer = 0
  15.        Dim TotalMinutos As Integer = (dif.Hours * 60 + dif.Minutes)
  16.        If TotalMinutos < 60 Or TotalMinutos = 60 Then Precio = 500
  17.        If TotalMinutos > 60 Then Precio = 500 + (CInt((TotalMinutos - 60) / 15)) * 150
  18.  
  19.        MsgBox(Precio)
  20.    End Sub
  21. End Class


Simplemente he añadido esto a tu código

Código
  1.  
  2. ...
  3. Dim Precio As Integer = 0
  4.        Dim TotalMinutos As Integer = (dif.Hours * 60 + dif.Minutes)
  5.        If TotalMinutos < 60 Or TotalMinutos = 60 Then Precio = 500
  6.        If TotalMinutos > 60 Then Precio = 500 + (CInt((TotalMinutos - 60) / 15)) * 150
  7. ...
  8.  
Basándome en lo que ha dicho:

Código:
por ejemplo un auto llego 12:00 y salio 13:00 = 01:00  estuvo una hora el cobro seria $500 

¿si el vehículo estuvo ejemplo llego  12:00 y salio 12:15 = estuvo 15 minutos pero igual se le cobra los $500?

Lo que hago es obtener el total de minutos y establezco la condición de que si el total de minutos es menor o igual de 60 (o sea una hora) pues el Precio sea igual a 500.

Por otro lado también dices que:

Código:
entoces cada 15 minutos depues de la hora deberia cobrarse $150 

Entonces establezco la condición de que si ha pasado más de una hora es decir más de 60 minutos entonces, resta 60 minutos del total que son los 500 y luego divide el resto por 15 para obtener el número de cuartos de hora.  El resultado lo multiplica por 150, ya que como has dicho cada quince minutos después de la hora se multiplica por 150.  (:-( esto me recuerda a los problemas de mates...). Finalmente suma 500 más el producto del total de cuarto de horas por 150.

Por ejemplo:
De 12:00 a 12:15   --->  es igual a 15 minutos  < 60 min.  ---> Precio = 500
De 12:00 a 13:00   --->  es igual a 60 minutos  = 60 min.  ---> Precio = 500
De 12:00 a 13:10   ----> es igual a 70 minutos > 60 min  ---> Precio = 500 + CInt((70-60)/15)*150 = 500 ... ya que 70-60 = 10 minutos y CInt(10/15) = 0 cuartos de hora.

De 12:00 a 13:30 ---> .... > 60 min.  ----> Precio = 500 + CInt((90-60)/15)*150 = 800 ya que 90-60= 30 minutos y CInt(30/15) = 2 cuartos de hora,  2 * 150= 300
y 500 + 300 = 800

(es una versión muy simplificada de la función CalculateMoney de Elektro  . Pero que conste que la vi después, eh  :laugh:)

Sl2s





 
« Última modificación: 7 Febrero 2016, 08:38 am por Lekim » En línea

djnilo

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: pero como le asigno un valor monetario a una hora
« Respuesta #8 en: 8 Febrero 2016, 22:38 pm »

Los dos ejemplos que puse son funcionales, quiero decir que solo es necesario copiar el código, pegarlo en la class principal (o donde sea), y compilarlo para testearlo. ¿Qué es lo que no entendiste para poder correrlo?.



Entonces el algoritmo que puse debería trabajar en base a 75 minutos, no 60.

En la condición del Select Case y la condicional del Case Else debes reemplazar los minuos con los que se trabajan, simplemente reemplaza el valor 60.0R por 74.99R ( 01:14:59 hrs. ).

Una vez realizada esa modificación, este es el resultado de ejecución:
PD: La idea es que en base a ese ejemplo lo personalices por ti mismo para que devuelva los resultados deseados a tu criterio...

Saludos

muchas gracias por tu paciencia Eleкtro

Time In  : 12:00
Time Out : 14:00
Time Diff: 2h:0m
Payment  : $1,100
todavia me sale el mismo error de cobrar $1,100 siendo que son dos horas debería cobrar

12:00  salida 14:00 $ 1,000 y hice las modificacion que dijiste  



(es una versión muy simplificada de la función CalculateMoney)

Sl2s

He revisado tu código Lekim
muchas por contestar y por tu tiempo

funciona pero tiene un error si la entrada es  a las 12:00 y sale 14:15 $ 1250
deberia cobrar 1150



            [NOTA DEL MODERADOR]                   
No hagas doble post, utiliza el botón "MODIFICAR". 

« Última modificación: 8 Febrero 2016, 22:57 pm por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.810



Ver Perfil
Re: pero como le asigno un valor monetario a una hora
« Respuesta #9 en: 8 Febrero 2016, 22:54 pm »

Time In  : 12:00
Time Out : 14:00
Time Diff: 2h:0m
Payment  : $1,100
todavia me sale el mismo error de cobrar $1,100 siendo que son dos horas debería cobrar

12:00  salida 14:00 $ 1,000 y hice las modificacion que dijiste  

Bueno, eso es otro problema distinto, tu dijiste que a partir de la primera hora se cobrase por cada 15 min, y eso es lo que hace el algoritmo.

Para adaptarlo una forma sería dividir los minutos transcurridos entre 60 y así obtener la cantidad de horas, multiplicar esa cantidad por $500, y evaluar los cuartos de hora restantes para añadirle ese "suplemento" adicional a la suma...

Al menos muestra un código donde lo intentes hacer por ti mismo.

Saludos!
« Última modificación: 8 Febrero 2016, 22:58 pm por Eleкtro » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines