Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => 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 (vb) [Seleccionar]
Public statuspc As Integer
Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "El Programa ya se esta ejecutando", 0 + 48, "Error"
End
End If
End Sub
Private Sub pc_Click(Index As Integer)
statuspc = i
i = statuspc
If Label(i).Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, está ya esta ocupada.", vbCritical, "Error"
End If
End Sub


registro.frm(Form2):
Código (vb) [Seleccionar]
Private Sub Form_Load()
Command1.Enabled = False
End Sub
Private Sub datos_Change(Index As Integer)
If datos(Index).Text <> "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub
Private Sub Command1_Click()
MsgBox "Registrado. Disfruta tu estancia", vbInformation, "Registro exitoso"

Call Ocuparpc

'Registro BD

Call Limpiardatos

Unload registro
principal.Show
End Sub
Private Sub Command2_Click()
Call Limpiardatos

Unload registro
principal.Show
End Sub


funciones.bas(module1):
Código (vb) [Seleccionar]
Public Sub Limpiardatos()
registro.datos(Index).Text = ""
End Sub
Function Bloquearpc()

End Function
Function Ocuparpc()
For i = 0 To principal.Label(Index)
principal.Label(i).Caption = "NO DISPONIBLE"
Next i
End Function



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
Cita de: ░▒▓BlackZeroҖ▓▒░ 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!¡.

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
Cita de: 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:

principal.frm(Form1):
Código (vb) [Seleccionar]
Public statuspc As Integer

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
Private Sub pc1_Click()
statuspc = 1
If Label1.Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
End If
End Sub
Private Sub pc2_Click()
statuspc = 2
If Label2.Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
End If
End Sub
Private Sub pc3_Click()
statuspc = 3
If Label3.Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
End If
End Sub
Private Sub pc4_Click()
statuspc = 4
If Label4.Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
End If
End Sub
Private Sub pc5_Click()
statuspc = 5
If Label5.Caption = "DISPONIBLE" Then
Unload principal
registro.Show
Else
MsgBox "Elige otra computadora, esta ya esta ocupada =(", vbCritical, "Error"
End If
End Sub


registro.frm(Form2):
Código (vb) [Seleccionar]
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_Load()
Command1.Enabled = False
End Sub
Private Sub apellidop_Change()
If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub
Private Sub apellidom_Change()
If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub
Private Sub nombre_Change()
If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub
Private Sub cuenta_Change()
If apellidop.Text <> "" And apellidom.Text <> "" And nombre.Text <> "" And cuenta.Text <> "" Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub
Private Sub Command1_Click()
MsgBox "Registrado. Disfruta tu estancia", vbInformation, "Registro exitoso"
Sleep 250
Call Ocuparpc
Sleep 250
'Registro BD
Sleep 250
apellidop.Text = ""
apellidom.Text = ""
nombre.Text = ""
cuenta.Text = ""
Sleep 250
Unload registro
principal.Show
End Sub
Private Sub Command2_Click()
apellidop.Text = ""
apellidom.Text = ""
nombre.Text = ""
cuenta.Text = ""
Sleep 250
Unload registro
principal.Show
End Sub


funciones.bas(module1):
Código (vb) [Seleccionar]
Function Limpiaregistro()

End Function
Function Bloquearpc()

End Function
Function Ocuparpc()
Select Case principal.statuspc
Case 1
principal.Label1.Caption = "NO DISPONIBLE"
Case 2
principal.Label2.Caption = "NO DISPONIBLE"
Case 3
principal.Label3.Caption = "NO DISPONIBLE"
Case 4
principal.Label4.Caption = "NO DISPONIBLE"
Case 5
principal.Label5.Caption = "NO DISPONIBLE"
End Select
End Function


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

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;


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
Cita de: 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

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;


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!!

Cita de: 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.
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 (vb) [Seleccionar]

Function Ocuparpc()
   For i = 0 To statuspc(48)
       If i = statuspc(48) Then
           principal.Label(1 To 48).Caption = "NO DISPONIBLE"
       End If
   Next i
End Function


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 (vb) [Seleccionar]

dim statuspc(48) as boolean
public sub Ocuparpc()
   For i = 0 To ubound(statuspc)
       If statuspc(i)  Then
           principal.Label(i).Caption = "DISPONIBLE"
       else
           principal.Label(i).Caption = "NO DISPONIBLE"
       End If
   Next i
End sub


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

Código (vb) [Seleccionar]

dim statuspc(48) as boolean
public sub Ocuparpc()
   For i = 0 To ubound(statuspc)
       principal.Label(i).Caption = iif(statuspc(i),"DISPONIBLE","NO DISPONIBLE")
   Next i
End sub


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
Cita de: ░▒▓BlackZeroҖ▓▒░ 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 (vb) [Seleccionar]

dim statuspc(48) as boolean
public sub Ocuparpc()
    For i = 0 To ubound(statuspc)
        If statuspc(48)  Then
            principal.Label(i).Caption = "DISPONIBLE"
        else
            principal.Label(i).Caption = "NO DISPONIBLE"
        End If
    Next i
End sub


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

Código (vb) [Seleccionar]

dim statuspc(48) as boolean
public sub Ocuparpc()
    For i = 0 To ubound(statuspc)
        principal.Label(i).Caption = iif(statuspc(48),"DISPONIBLE","NO DISPONIBLE")
    Next i
End sub


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.

Cita de: ░▒▓BlackZeroҖ▓▒░ en  6 Octubre 2009, 05:58 AM
Código (vb) [Seleccionar]

dim statuspc(48) as boolean
public sub Ocuparpc()
   For i = 0 To ubound(statuspc)
       principal.Label(i).Caption = iif(statuspc(48),"DISPONIBLE","NO DISPONIBLE")
   Next i
End sub


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
Cita de: Murd3r3r 0f daT4 en  6 Octubre 2009, 06:09 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
Cita de: 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.

Cita de: ░▒▓BlackZeroҖ▓▒░ en  6 Octubre 2009, 05:58 AM
Código (vb) [Seleccionar]

dim statuspc(48) as boolean
public sub Ocuparpc()
    For i = 0 To ubound(statuspc)
        principal.Label(i).Caption = iif(statuspc(48),"DISPONIBLE","NO DISPONIBLE")
    Next i
End sub


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
Cita de: seba123neo en  6 Octubre 2009, 06:19 AM
Cita de: Murd3r3r 0f daT4 en  6 Octubre 2009, 06:09 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 ??

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 (vb) [Seleccionar]


Option Explicit

Dim StatusPC() As Boolean

Private Sub Command1_Click()
   Dim i As Integer
   For i = 0 To UBound(StatusPC)
       '   // Simulo las entradas de estado
       StatusPC(i) = Round(1 * Rnd())
       '   // Visualiso dichas entradas
       Label(i) = i & " " & IIf(StatusPC(i), "DISPONIBLE", "NO DISPONIBLE")
   Next i
End Sub

   '   // Esto solo lo hago por que no deseo estar dibujando _
   y posicionando cada label manualmente
Private Sub Form_Load()
   Dim i As Integer
   Dim SumaIzquierda As Long, TopLabel As long
   Const CantLabel = 80
   Const Filas = 10
   ReDim StatusPC(CantLabel - 1)
   
   BackColor = vbBlack
   With Command1
       .Top = 255
       .Left = 255
       .Caption = "Reiniciar Simulaciòn de Estados"
   End With
   With Label(0)
       .Left = 255
       .Top = Command1.Top + Command1.Height + 250
       .BackColor = vbBlack
       .ForeColor = vbWhite
   End With
   SumaIzquierda = 255
   For i = 1 To CantLabel - 1
       Load Label(i)
       SumaIzquierda = IIf(i Mod Filas = 0, Label(i).Left + Label(i).Width + 255 + SumaIzquierda, SumaIzquierda)
       TopLabel = IIf(i Mod Filas = 0, Label(0).Top, Label(i - 1).Top + Label(i - 1).Height + 25)
       With Label(i)
           .Top = TopLabel
           .Left = SumaIzquierda
           .Caption = ""
           .BackColor = vbBlack
           .ForeColor = vbWhite
           .Visible = True
       End With
   Next i
   Width = SumaIzquierda + Label(i - 1).Width + 255
   Height = Label(Filas - 1).Top + Label(Filas).Height * 4
End Sub



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
Cita de: ░▒▓BlackZeroҖ▓▒░ 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 (vb) [Seleccionar]


Option Explicit

Dim StatusPC() As Boolean

Private Sub Command1_Click()
    Dim i As Integer
    For i = 0 To UBound(StatusPC)
        '   // Simulo las entradas de estado
        StatusPC(i) = Round(1 * Rnd())
        '   // Visualiso dichas entradas
        Label(i) = i & " " & IIf(StatusPC(i), "DISPONIBLE", "NO DISPONIBLE")
    Next i
End Sub

    '   // Esto solo lo hago por que no deseo estar dibujando _
    y posicionando cada label manualmente
Private Sub Form_Load()
    Dim i As Integer
    Dim SumaIzquierda As Long, TopLabel As long
    Const CantLabel = 80
    Const Filas = 10
    ReDim StatusPC(CantLabel - 1)
   
    BackColor = vbBlack
    With Command1
        .Top = 255
        .Left = 255
        .Caption = "Reiniciar Simulaciòn de Estados"
    End With
    With Label(0)
        .Left = 255
        .Top = Command1.Top + Command1.Height + 250
        .BackColor = vbBlack
        .ForeColor = vbWhite
    End With
    SumaIzquierda = 255
    For i = 1 To CantLabel - 1
        Load Label(i)
        SumaIzquierda = IIf(i Mod Filas = 0, Label(i).Left + Label(i).Width + 255 + SumaIzquierda, SumaIzquierda)
        TopLabel = IIf(i Mod Filas = 0, Label(0).Top, Label(i - 1).Top + Label(i - 1).Height + 25)
        With Label(i)
            .Top = TopLabel
            .Left = SumaIzquierda
            .Caption = ""
            .BackColor = vbBlack
            .ForeColor = vbWhite
            .Visible = True
        End With
    Next i
    Width = SumaIzquierda + Label(i - 1).Width + 255
    Height = Label(Filas - 1).Top + Label(Filas).Height * 4
End Sub



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