Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Murd3r3r 0f daT4 en 5 Octubre 2009, 06:06 am



Título: Me ayudarian a mejorar este codigo¿?
Publicado por: Murd3r3r 0f daT4 en 5 Octubre 2009, 06:06 am
Bueno ando trabajando en un proyecto para mi escuela, la idea es que hay un centro de computo con 50 PCs, la primera parte del proyecto esta enfocada a la comodidad de los alumnos.

Actualmente llegan, tienen que preguntar a la encargada si hay PCs disponibles y se anotan en un cuaderno, la idea es que haya una PC donde llegen y se muestren las PCs disponibles, hagan doble click en la que se quieren registrar, llenen un formulario. Al hacer click en Registar! se comprobará que sus apellidos y nombre coincidan con el de su N° de cuenta de ser así registra el N° de cuenta, N° de PC y hora en que se registro.

Bueno aqui pongo los codigos:

UPDATE 1: Ya empece a manejar matrices, pero aun no funciona como debería =S

principal.frm(Form1):
Código
  1. Public statuspc As Integer
  2. Private Sub Form_Load()
  3. If App.PrevInstance = True Then
  4. MsgBox "El Programa ya se esta ejecutando", 0 + 48, "Error"
  5. End
  6. End If
  7. End Sub
  8. Private Sub pc_Click(Index As Integer)
  9. statuspc = i
  10. i = statuspc
  11. If Label(i).Caption = "DISPONIBLE" Then
  12. Unload principal
  13. registro.Show
  14. Else
  15. MsgBox "Elige otra computadora, está ya esta ocupada.", vbCritical, "Error"
  16. End If
  17. End Sub
  18.  

registro.frm(Form2):
Código
  1. Private Sub Form_Load()
  2. Command1.Enabled = False
  3. End Sub
  4. Private Sub datos_Change(Index As Integer)
  5. If datos(Index).Text <> "" Then
  6. Command1.Enabled = True
  7. Else
  8. Command1.Enabled = False
  9. End If
  10. End Sub
  11. Private Sub Command1_Click()
  12. MsgBox "Registrado. Disfruta tu estancia", vbInformation, "Registro exitoso"
  13.  
  14. Call Ocuparpc
  15.  
  16. 'Registro BD
  17.  
  18. Call Limpiardatos
  19.  
  20. Unload registro
  21. principal.Show
  22. End Sub
  23. Private Sub Command2_Click()
  24. Call Limpiardatos
  25.  
  26. Unload registro
  27. principal.Show
  28. End Sub
  29.  

funciones.bas(module1):
Código
  1. Public Sub Limpiardatos()
  2. registro.datos(Index).Text = ""
  3. End Sub
  4. Function Bloquearpc()
  5.  
  6. End Function
  7. Function Ocuparpc()
  8. For i = 0 To principal.Label(Index)
  9. principal.Label(i).Caption = "NO DISPONIBLE"
  10. Next i
  11. End Function
  12.  
  13.  

Como se podran cuenta soy muy nuevo en visual basic :(, aparte aquí les dejo el source:
http://rapidshare.com/files/291290861/Centro_de_computo.rar ----> Actualizado al Update 1 ;)

De ante mano, mil gracias por su ayuda y consejos!!


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: BlackZeroX en 5 Octubre 2009, 13:50 pm

Para yo los pics del principal.frm(Form1)  usaria una matriz de controles.
Yo en tu lugar en el    registro.frm(Form2)    usaria una clase para subclasificar todo esos eventos  _Change o mas facil aun una matriz de controles.
Quitaria los Sleep()  que de nada sirven solo estan de màs hasta donde puedo ver.

Solo te digo lo que veo a simple vista de lo que posteaste.

un saludo

Dulces Lunas!¡.


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: Murd3r3r 0f daT4 en 5 Octubre 2009, 18:49 pm

Para yo los pics del principal.frm(Form1)  usaria una matriz de controles.
Yo en tu lugar en el    registro.frm(Form2)    usaria una clase para subclasificar todo esos eventos  _Change o mas facil aun una matriz de controles.
Quitaria los Sleep()  que de nada sirven solo estan de màs hasta donde puedo ver.

Solo te digo lo que veo a simple vista de lo que posteaste.

un saludo

Dulces Lunas!¡.

Yo tomaré en cuenta cada idea, solo que las tengo que investigar porque soy muy newbie en, programación y no entendí que quisiste decir!


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: agus0 en 5 Octubre 2009, 20:35 pm
Bueno ando trabajando en un proyecto para mi escuela, la idea es que hay un centro de computo con 50 PCs, la primera parte del proyecto esta enfocada a la comodidad de los alumnos.

Actualmente llegan, tienen que preguntar a la encargada si hay PCs disponibles y se anotan en un cuaderno, la idea es que haya una PC donde llegen y se muestren las PCs disponibles, hagan doble click en la que se quieren registrar, llenen un formulario. Al hacer click en Registar! se comprobará que sus apellidos y nombre coincidan con el de su N° de cuenta de ser así registra el N° de cuenta, N° de PC y hora en que se registro.

Bueno aqui pongo los codigos:

principal.frm(Form1):
Código
  1. Public statuspc As Integer
  2.  
  3. Private Sub Form_Load()
  4. Dim running As Integer
  5. running = App.PrevInstance
  6. If running <> 0 Then
  7. MsgBox "El Programa ya se esta ejecutando", 0 + 48, "News"
  8. End
  9. End If
  10. End Sub
  11. Private Sub pc1_Click()
  12. statuspc = 1
  13. If Label1.Caption = "DISPONIBLE" Then
  14. Unload principal
  15. registro.Show
  16. Else
  17. MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
  18. End If
  19. End Sub
  20. Private Sub pc2_Click()
  21. statuspc = 2
  22. If Label2.Caption = "DISPONIBLE" Then
  23. Unload principal
  24. registro.Show
  25. Else
  26. MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
  27. End If
  28. End Sub
  29. Private Sub pc3_Click()
  30. statuspc = 3
  31. If Label3.Caption = "DISPONIBLE" Then
  32. Unload principal
  33. registro.Show
  34. Else
  35. MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
  36. End If
  37. End Sub
  38. Private Sub pc4_Click()
  39. statuspc = 4
  40. If Label4.Caption = "DISPONIBLE" Then
  41. Unload principal
  42. registro.Show
  43. Else
  44. MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
  45. End If
  46. End Sub
  47. Private Sub pc5_Click()
  48. statuspc = 5
  49. If Label5.Caption = "DISPONIBLE" Then
  50. Unload principal
  51. registro.Show
  52. Else
  53. MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
  54. End If
  55. End Sub
  56.  

registro.frm(Form2):
Código
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Private Sub Form_Load()
  3. Command1.Enabled = False
  4. End Sub
  5. Private Sub apellidop_Change()
  6. If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
  7. Command1.Enabled = True
  8. Else
  9. Command1.Enabled = False
  10. End If
  11. End Sub
  12. Private Sub apellidom_Change()
  13. If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
  14. Command1.Enabled = True
  15. Else
  16. Command1.Enabled = False
  17. End If
  18. End Sub
  19. Private Sub nombre_Change()
  20. If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
  21. Command1.Enabled = True
  22. Else
  23. Command1.Enabled = False
  24. End If
  25. End Sub
  26. Private Sub cuenta_Change()
  27. If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
  28. Command1.Enabled = True
  29. Else
  30. Command1.Enabled = False
  31. End If
  32. End Sub
  33. Private Sub Command1_Click()
  34. MsgBox "Registrado. Disfruta tu estancia", vbInformation, "Registro exitoso"
  35. Sleep 250
  36. Call Ocuparpc
  37. Sleep 250
  38. 'Registro BD
  39. Sleep 250
  40. apellidop.Text = ""
  41. apellidom.Text = ""
  42. nombre.Text = ""
  43. cuenta.Text = ""
  44. Sleep 250
  45. Unload registro
  46. principal.Show
  47. End Sub
  48. Private Sub Command2_Click()
  49. apellidop.Text = ""
  50. apellidom.Text = ""
  51. nombre.Text = ""
  52. cuenta.Text = ""
  53. Sleep 250
  54. Unload registro
  55. principal.Show
  56. End Sub
  57.  

funciones.bas(module1):
Código
  1. Function Limpiaregistro()
  2.  
  3. End Function
  4. Function Bloquearpc()
  5.  
  6. End Function
  7. Function Ocuparpc()
  8. Select Case principal.statuspc
  9. Case 1
  10. principal.Label1.Caption = "NO DISPONIBLE"
  11. Case 2
  12. principal.Label2.Caption = "NO DISPONIBLE"
  13. Case 3
  14. principal.Label3.Caption = "NO DISPONIBLE"
  15. Case 4
  16. principal.Label4.Caption = "NO DISPONIBLE"
  17. Case 5
  18. principal.Label5.Caption = "NO DISPONIBLE"
  19. End Select
  20. End Function
  21.  

Como se podran cuenta soy muy nuevo en visual basic :(, aparte aquí les dejo el source:
http://rapidshare.com/files/288825115/Centro_de_computo.rar

De ante mano, mil gracias por su ayuda y consejos!!


Yo le cambiaria alguinas cosas. pero me quedo una duda

vos sos el que publico de como cambiar a "NO DISPONIBLE" en www.forosdelweb.com (http://www.forosdelweb.com) por que ese cdigo es muy similar (Una parte) a la que le aonsegue a un usuario de FDW jaja


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: agus0 en 5 Octubre 2009, 21:05 pm
La verdad mire solo las primeras lineas por que ahora me tengo que ir a estudiar a simple vista yo reemplazaria

esto
Código:
Private Sub Form_Load()
Dim running As Integer
running = App.PrevInstance
If running <> 0 Then
MsgBox "El Programa ya se esta ejecutando", 0 + 48, "News"
End
End If
End Sub

por esto que es lo mismo pero mas corto;

Código:
Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "El Programa ya se esta ejecutando", 0 + 48, "News"
End
End If
End Sub

Ba solo ahorras 2 lineas pero me parece innecesari crear esa variable...


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: seba123neo en 6 Octubre 2009, 02:00 am
Hola, ese codigo se puede achicar un 80 %, creando matrices de controles y funciones, si no sabes lo que es eso, entonces ya no es parte nuestra enseñar eso que seria lo basico, te vas a tener que leer inevitablemente un manual de visual basic.

saludos.


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: Murd3r3r 0f daT4 en 6 Octubre 2009, 04:37 am
La verdad mire solo las primeras lineas por que ahora me tengo que ir a estudiar a simple vista yo reemplazaria

esto
Código:
Private Sub Form_Load()
Dim running As Integer
running = App.PrevInstance
If running <> 0 Then
MsgBox "El Programa ya se esta ejecutando", 0 + 48, "News"
End
End If
End Sub

por esto que es lo mismo pero mas corto;

Código:
Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "El Programa ya se esta ejecutando", 0 + 48, "News"
End
End If
End Sub

Ba solo ahorras 2 lineas pero me parece innecesari crear esa variable...

Ok, tienes toda la razón!

@agus0

Si ese era yo!!

Hola, ese codigo se puede achicar un 80 %, creando matrices de controles y funciones, si no sabes lo que es eso, entonces ya no es parte nuestra enseñar eso que seria lo basico, te vas a tener que leer inevitablemente un manual de visual basic.

saludos.
Hoy empece a leer sobre matrices!! Vere que más hago!


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: Murd3r3r 0f daT4 en 6 Octubre 2009, 05:19 am
Ya estudiando y aplicando matrices ya mejoró, pero tengo una duda como quedaría esta parte sobre todo: principal.Label(1 To 48).Caption = "NO DISPONIBLE"

El codigo ya me quedo así:

Código
  1. Function Ocuparpc()
  2.    For i = 0 To statuspc(48)
  3.        If i = statuspc(48) Then
  4.            principal.Label(1 To 48).Caption = "NO DISPONIBLE"
  5.        End If
  6.    Next i
  7. End Function
  8.  

Esa aprte que comente arriba no funciona ni idea de como hacerla =S


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: BlackZeroX en 6 Octubre 2009, 05:58 am
Antes que nada debes considerar 49 Estados ya que de 0-48 hay 49

Una recomendacion statuspc() ponlo en estado boleano o tipo boolean

Código
  1. dim statuspc(48) as boolean
  2. public sub Ocuparpc()
  3.    For i = 0 To ubound(statuspc)
  4.        If statuspc(i)  Then
  5.            principal.Label(i).Caption = "DISPONIBLE"
  6.        else
  7.            principal.Label(i).Caption = "NO DISPONIBLE"
  8.        End If
  9.    Next i
  10. End sub
  11.  

Otra forma de IF(), es lo mismo que arriba

Código
  1. dim statuspc(48) as boolean
  2. public sub Ocuparpc()
  3.    For i = 0 To ubound(statuspc)
  4.        principal.Label(i).Caption = iif(statuspc(i),"DISPONIBLE","NO DISPONIBLE")
  5.    Next i
  6. End sub
  7.  

P.D.: Usa function para procesar informacion y devolver un valor y Sub para realizar procesos sin devolver ningun valor por medio del mismo.
Usa private, public, friend segùn se requiera, pero declaralos, estos definen el accceso a dichos procesos/funciones desde exterior, se comprende que si no son declarados seria private por default pero por prioridad seria mejor derarlos.

Dulces Lunas!¡.


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: Murd3r3r 0f daT4 en 6 Octubre 2009, 06:09 am
Antes que nada debes considerar 49 Estados ya que de 0-48 hay 49

Una recomendacion statuspc() ponlo en estado boleano o tipo boolean

Código
  1. dim statuspc(48) as boolean
  2. public sub Ocuparpc()
  3.    For i = 0 To ubound(statuspc)
  4.        If statuspc(48)  Then
  5.            principal.Label(i).Caption = "DISPONIBLE"
  6.        else
  7.            principal.Label(i).Caption = "NO DISPONIBLE"
  8.        End If
  9.    Next i
  10. End sub
  11.  

Otra forma de IF(), es lo mismo que arriba

Código
  1. dim statuspc(48) as boolean
  2. public sub Ocuparpc()
  3.    For i = 0 To ubound(statuspc)
  4.        principal.Label(i).Caption = iif(statuspc(48),"DISPONIBLE","NO DISPONIBLE")
  5.    Next i
  6. End sub
  7.  

P.D.: Usa function para procesar informacion y devolver un valor y Sub para realizar procesos sin devolver ningun valor por medio del mismo.
Usa private, public, friend segùn se requiera, pero declaralos, estos definen el accceso a dichos procesos/funciones desde exterior, se comprende que si no son declarados seria private por default pero por prioridad seria mejor derarlos.

Dulces Lunas!¡.

Pues mira que use varios codigos así pero siempre me da el mismo error =S "Method or data member not found" y me marca esta zona: .Label


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: seba123neo en 6 Octubre 2009, 06:16 am
todavia no entiendo bien la logica del programa, pero bue :xD...entonces statuspc(48) deberia ser statuspc(49) si son 50 computadoras y la funcion la  deberias pasar del modulo y ponerla directamente en el formulario.y por favor indentar el codigo fuente.

Código
  1. dim statuspc(48) as boolean
  2. public sub Ocuparpc()
  3.    For i = 0 To ubound(statuspc)
  4.        principal.Label(i).Caption = iif(statuspc(48),"DISPONIBLE","NO DISPONIBLE")
  5.    Next i
  6. End sub
  7.  

no deberia reemplazarse el 48 del iif por la "i", sino siempre chequearia el valor de (48) no?

saludos.


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: seba123neo en 6 Octubre 2009, 06:19 am
Pues mira que use varios codigos así pero siempre me da el mismo error =S "Method or data member not found" y me marca esta zona: .Label

creaste la matriz de controles de labels ??


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: BlackZeroX en 6 Octubre 2009, 07:30 am
todavia no entiendo bien la logica del programa, pero bue :xD...entonces statuspc(48) deberia ser statuspc(49) si son 50 computadoras y la funcion la  deberias pasar del modulo y ponerla directamente en el formulario.y por favor indentar el codigo fuente.

Código
  1. dim statuspc(48) as boolean
  2. public sub Ocuparpc()
  3.    For i = 0 To ubound(statuspc)
  4.        principal.Label(i).Caption = iif(statuspc(48),"DISPONIBLE","NO DISPONIBLE")
  5.    Next i
  6. End sub
  7.  

no deberia reemplazarse el 48 del iif por la "i", sino siempre chequearia el valor de (48) no?

saludos.

jajaja se me paso xd, me ire a dormir ando muy desvelado ya jajaja.

Dulces Lunas!!¡.


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: Murd3r3r 0f daT4 en 6 Octubre 2009, 18:36 pm
Pues mira que use varios codigos así pero siempre me da el mismo error =S "Method or data member not found" y me marca esta zona: .Label

creaste la matriz de controles de labels ??

Claro la matriz la he definido =S, he allí lo raro de que me marque ese error!


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: BlackZeroX en 6 Octubre 2009, 22:41 pm
Haber prueba con este Ejemplo

Se nesesita Dibujar en un Form

1 CommandButton con nombre =  Command1
1 Label Con Nombre = Label Propiedad index = 0

Código
  1.  
  2. Option Explicit
  3.  
  4. Dim StatusPC() As Boolean
  5.  
  6. Private Sub Command1_Click()
  7.    Dim i As Integer
  8.    For i = 0 To UBound(StatusPC)
  9.        '   // Simulo las entradas de estado
  10.        StatusPC(i) = Round(1 * Rnd())
  11.        '   // Visualiso dichas entradas
  12.        Label(i) = i & " " & IIf(StatusPC(i), "DISPONIBLE", "NO DISPONIBLE")
  13.    Next i
  14. End Sub
  15.  
  16.    '   // Esto solo lo hago por que no deseo estar dibujando _
  17.     y posicionando cada label manualmente
  18. Private Sub Form_Load()
  19.    Dim i As Integer
  20.    Dim SumaIzquierda As Long, TopLabel As long
  21.    Const CantLabel = 80
  22.    Const Filas = 10
  23.    ReDim StatusPC(CantLabel - 1)
  24.  
  25.    BackColor = vbBlack
  26.    With Command1
  27.        .Top = 255
  28.        .Left = 255
  29.        .Caption = "Reiniciar Simulaciòn de Estados"
  30.    End With
  31.    With Label(0)
  32.        .Left = 255
  33.        .Top = Command1.Top + Command1.Height + 250
  34.        .BackColor = vbBlack
  35.        .ForeColor = vbWhite
  36.    End With
  37.    SumaIzquierda = 255
  38.    For i = 1 To CantLabel - 1
  39.        Load Label(i)
  40.        SumaIzquierda = IIf(i Mod Filas = 0, Label(i).Left + Label(i).Width + 255 + SumaIzquierda, SumaIzquierda)
  41.        TopLabel = IIf(i Mod Filas = 0, Label(0).Top, Label(i - 1).Top + Label(i - 1).Height + 25)
  42.        With Label(i)
  43.            .Top = TopLabel
  44.            .Left = SumaIzquierda
  45.            .Caption = ""
  46.            .BackColor = vbBlack
  47.            .ForeColor = vbWhite
  48.            .Visible = True
  49.        End With
  50.    Next i
  51.    Width = SumaIzquierda + Label(i - 1).Width + 255
  52.    Height = Label(Filas - 1).Top + Label(Filas).Height * 4
  53. End Sub
  54.  
  55.  

P.D.: El codigo te generara los demàs Label segun se deseen.

Dulces Lunas!¡.


Título: Re: Me ayudarian a mejorar este codigo¿?
Publicado por: Murd3r3r 0f daT4 en 10 Octubre 2009, 22:56 pm
Haber prueba con este Ejemplo

Se nesesita Dibujar en un Form

1 CommandButton con nombre =  Command1
1 Label Con Nombre = Label Propiedad index = 0

Código
  1.  
  2. Option Explicit
  3.  
  4. Dim StatusPC() As Boolean
  5.  
  6. Private Sub Command1_Click()
  7.    Dim i As Integer
  8.    For i = 0 To UBound(StatusPC)
  9.        '   // Simulo las entradas de estado
  10.        StatusPC(i) = Round(1 * Rnd())
  11.        '   // Visualiso dichas entradas
  12.        Label(i) = i & " " & IIf(StatusPC(i), "DISPONIBLE", "NO DISPONIBLE")
  13.    Next i
  14. End Sub
  15.  
  16.    '   // Esto solo lo hago por que no deseo estar dibujando _
  17.     y posicionando cada label manualmente
  18. Private Sub Form_Load()
  19.    Dim i As Integer
  20.    Dim SumaIzquierda As Long, TopLabel As long
  21.    Const CantLabel = 80
  22.    Const Filas = 10
  23.    ReDim StatusPC(CantLabel - 1)
  24.  
  25.    BackColor = vbBlack
  26.    With Command1
  27.        .Top = 255
  28.        .Left = 255
  29.        .Caption = "Reiniciar Simulaciòn de Estados"
  30.    End With
  31.    With Label(0)
  32.        .Left = 255
  33.        .Top = Command1.Top + Command1.Height + 250
  34.        .BackColor = vbBlack
  35.        .ForeColor = vbWhite
  36.    End With
  37.    SumaIzquierda = 255
  38.    For i = 1 To CantLabel - 1
  39.        Load Label(i)
  40.        SumaIzquierda = IIf(i Mod Filas = 0, Label(i).Left + Label(i).Width + 255 + SumaIzquierda, SumaIzquierda)
  41.        TopLabel = IIf(i Mod Filas = 0, Label(0).Top, Label(i - 1).Top + Label(i - 1).Height + 25)
  42.        With Label(i)
  43.            .Top = TopLabel
  44.            .Left = SumaIzquierda
  45.            .Caption = ""
  46.            .BackColor = vbBlack
  47.            .ForeColor = vbWhite
  48.            .Visible = True
  49.        End With
  50.    Next i
  51.    Width = SumaIzquierda + Label(i - 1).Width + 255
  52.    Height = Label(Filas - 1).Top + Label(Filas).Height * 4
  53. End Sub
  54.  
  55.  

P.D.: El codigo te generara los demàs Label segun se deseen.

Dulces Lunas!¡.

Primero, muchisimas gracias por andar ayudando =D, y probe ese codigo y no me funciono al 100%, pero aun así muchas gracias sigo investigando y ya pase casi todos los controles a matrices =D