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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch][Aporte] Base de datos para clientes.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Batch][Aporte] Base de datos para clientes.  (Leído 3,784 veces)
Geormarsch

Desconectado Desconectado

Mensajes: 160



Ver Perfil
[Batch][Aporte] Base de datos para clientes.
« en: 4 Noviembre 2011, 20:52 pm »

Hola amigos gracias a esta comu pude desarrollar mi primera Base de datos en Batch...

Como funciona:

El batch consta en 4 opciones.
las cuales te permiten realizar :

1.- Agregar Cliente
2.- Buscar dentro de la Base de datos
3.- Mostrar el contenido de la Base de datos
4.- Borrar Base de datos


Al agregar un cliente se guarda en un txt llamado Cliente guardado en %Homedrive%. Bueno sin mas charla el codigo

Código
  1. @echo off
  2. title Base de datos Clientes
  3. color fc
  4. :menu
  5. cls
  6. echo  1.- Agregar Cliente
  7. echo  2.- Buscar dentro de la Base de datos
  8. echo  3.- Mostrar el contenido de la Base de datos
  9. echo  4.- Borrar Base de datos
  10. set /p o= Elija una opcion :
  11. if %o%==1 (goto add)
  12. if %o%==2 (goto b)
  13. if %o%==3 (goto x)
  14. if %o%==4 (goto dl) else (goto menu)
  15.  
  16. :add
  17. cls
  18. set /p name= Nombre de cliente =
  19. set /p dire= Direccion         =
  20. set /p n= Numero               =
  21. set /p c= Compras Recientes    =
  22. set /p t= Talla                =
  23. set /p s= Sexo                 =
  24. echo Cliente    :%name%>>%homedrive%\clientes.txt
  25. echo Direccion  :%dire%>>%homedrive%\clientes.txt
  26. echo Numero     :%n%>>%homedrive%\clientes.txt
  27. echo Compras    :%c%>>%homedrive%\clientes.txt
  28. echo Talla      :%t%>>%homedrive%\clientes.txt
  29. echo Sexo       :%s%>>%homedrive%\clientes.txt
  30. echo ------------------------------------------------->>%homedrive%\clientes.txt
  31. echo Generado Correctamente
  32. goto menu
  33.  
  34. :b
  35. cls
  36. set /p bo= Que desea buscar dentro de la Base de datos :
  37. setlocal enabledelayedexpansion
  38. for /f "tokens=*" %%_ in ('find "%bo%" "%homedrive%\clientes.txt" ') do (
  39.   set "valor=%%_"
  40.   echo El valor es : !valor!
  41. )
  42. goto menu
  43.  
  44. :dl
  45. cls
  46. echo Se borrara la base de datos esta seguro si/no
  47. echo Se perderan todo los datos guardados
  48. set /p de=^>^>
  49. if %de%==si (goto del) else (goto menu)
  50. if %de%==no (goto menu)
  51.  
  52. cls
  53. echo Borrando...
  54. ping -n 2 0.0.0.0>nul
  55. del /q /f %homedrive%\clientes.txt
  56. echo Eliminado
  57. goto menu
  58.  
  59. :x
  60. cls
  61. type %homedrive%\clientes.txt
  62. goto menu


Si encuentran un error o una mejora, Bienvenido sea...



En línea

"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"
$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [Batch][Aporte] Base de datos para clientes.
« Respuesta #1 en: 4 Noviembre 2011, 23:55 pm »

Yo le pondria mas "anti errores", por ejemplo cada vez q pides el valor de una variable, antes tienes que anularla asi:

Código
  1. set "var="
  2.  

Por que sino quedara con el valor que tenia antes, para entender lo que te digo, agarra tu programa sin poner esto que te digo y elegi una opcion en el menu, la que quieras; ahora cuando estes de nuevo en el menu, apreta solo Enter sin escribir nada y te llevara al mismo lugar.

Y aunque sea feo y tengas que crear mas etiquetas le pondria los if not defined cuando pides los datos, para que no dejen nada en blanco.

Espero haberte ayudado


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: [Batch][Aporte] Base de datos para clientes.
« Respuesta #2 en: 5 Noviembre 2011, 03:51 am »

Cierto, usas muchas variables y conviene "resetearlas" al volver al :MENU, porque sino aunque dejes vacía alguna de las variables como talla dire y eso, se tomará la variable anterior... espero que se me entienda xD

aparte de eso, dejame mejorartelo un poquito lo que pueda  :xD


PD: Copia este código tal cual, para probarlo, aunque veas caracteres raros al copiar no te preocupes, en la consola salen bien las palabras con los acentos y eso  ::)

Leo es un crack con el tema de trabajar sobre archivos de texto así que yo esperaría a ver si te da una solución para una mejor busqueda sobre la lista de clientes...  ;-)




Código
  1. @echo off
  2. title Base de datos Clientes
  3. color fc
  4.  
  5. If not exist "%homedrive%\clientes.txt" (echo.>"%homedrive%\clientes.txt")
  6.  
  7.  
  8. :############################################################
  9.  
  10. REM En esta parte no he correjido nada importante, solo sintaxis y gramática xD, el "ELSE" del final...
  11.  
  12. REM Reseteando variables...
  13.  
  14.  
  15. :MENU
  16.  
  17. Set o=
  18. set check=
  19. Set de=
  20. set bo=
  21.  
  22. cls
  23. echo %time%
  24. echo  ##########
  25. echo  1.- Agregar Cliente
  26. echo  2.- Buscar dentro de la Base de datos
  27. echo  3.- Mostrar el contenido de la Base de datos
  28. echo  4.- Borrar Base de datos
  29. set /p o= Elija una opci¢n:
  30. if not defined o (goto :menu)
  31. if %o%==1 (goto :add)
  32. if %o%==2 (goto :b)
  33. if %o%==3 (goto :x)
  34. if %o%==4 (goto :dl)
  35. goto :menu
  36.  
  37.  
  38.  
  39. :############################################################
  40.  
  41. REM Aqui nos aseguramos de que ningún campo queda vacío...
  42.  
  43.  
  44. :add
  45.  
  46. set name=
  47. set dire=
  48. set n=
  49. set c=
  50. set t=
  51. set s=
  52.  
  53.  
  54. cls
  55. set /p name=- Nombre de cliente: & Call :verify name
  56. set /p dire=- Direcci¢n        : & Call :verify dire
  57. set /p n=- N£mero           : &    Call :verify n
  58. set /p c=- Compras Recientes: &    Call :verify c
  59. set /p t=- Talla            : &    Call :verify t
  60. set /p s=- Sexo             : &    Call :verify s
  61. echo Cliente   : %name%>>%homedrive%\clientes.txt
  62. echo Direcci¢n : %dire%>>%homedrive%\clientes.txt
  63. echo N£mero    : %n%>>%homedrive%\clientes.txt
  64. echo Compras   : %c%>>%homedrive%\clientes.txt
  65. echo Talla     : %t%>>%homedrive%\clientes.txt
  66. echo Sexo      : %s%>>%homedrive%\clientes.txt
  67. echo -------------------------------------------------;>>%homedrive%\clientes.txt
  68. echo Generado Correctamente.
  69. goto :menu
  70.  
  71.  
  72. set %1=Ninguno
  73. goto :eof
  74. ) ELSE (
  75. goto :eof
  76. )
  77.  
  78.  
  79. :############################################################
  80.  
  81.  
  82. REM no te recomiendo usar setlocal si hay productos o datos que contengan caracteres especiales como "Nike!" ...pues no los vas a encontrar xD
  83.  
  84. REM en el metodo de buscqueda no he podido hacer nada mejor, habria sido fácil usando tail y txtback porque cada cliente esta separado en 7 líneas, pero bueno, no me he kerido comer más el coco  :xD
  85.  
  86. :b
  87. cls
  88. set /p bo=- ¨Que desea buscar dentro de la Base de datos?:
  89.  
  90. find "%bo%" "%homedrive%\clientes.txt" >nul
  91. If %errorlevel% equ 0 (
  92. find "%bo%" "%homedrive%\clientes.txt"
  93. goto :menu
  94. ) ELSE (
  95. echo No se ha encontrado ninguna coincidencia, Intentelo de nuevo...
  96. goto :menu
  97. )
  98.  
  99.  
  100.  
  101. Goto :menu
  102.  
  103.  
  104. :############################################################
  105.  
  106.  
  107. REM Ahora el código reconoce varias respuestas (si,SI,Si,sI,sí,Sí - No,no,NO,nO) en cambio tu código solo reconocia dos (Aunque no te lo parezca así era).
  108.  
  109. :dl
  110.  
  111.  
  112. cls
  113. echo  Se borrar… la base de datos, ¨Est… seguro?  Si/No
  114. echo  Se perder…n todos los datos guardados...
  115. set /p de=^>^>
  116.  
  117. echo %de%| findstr /I "^S.$" >nul
  118. If %errorlevel% equ 0 (goto :del)
  119.  
  120. echo %de%| findstr /I "^NO$" >nul
  121. If %errorlevel% equ 0 (goto :menu)
  122.  
  123. Goto :menu
  124.  
  125. :############################################################
  126.  
  127. REM Mas vale prevenir que curar, Los HDD's a veces se estropean, mejor nos aseguramos de que la lista se borre de verdad xD
  128.  
  129.  
  130. cls
  131. echo  Borrando...
  132. ping -n 2 localhost >nul
  133.  
  134. del /q /f "%homedrive%\clientes.txt" >nul 2>&1
  135. IF %ERRORLEVEL% EQU 0 (
  136.        echo Eliminado.
  137.        pause
  138.        goto :menu
  139. ) ELSE (
  140.        cls        
  141.        echo No se pudo borrar la lista.
  142.        pause
  143. goto :checkeo
  144. )
  145.  
  146.  
  147. :############################################################
  148.  
  149. REM Y esta parte me la invento xD
  150.  
  151.  
  152. :checkeo
  153. cls
  154. echo  ¨Quiere iniciar un escaneo de errorer de su disco duro? Si/No
  155. echo  Se reiniciar… el Pc...
  156. set /p CHECK=^>^>
  157.  
  158. echo %CHECK%| findstr /I "^S.$" >nul
  159. If %errorlevel% equ 0 (
  160.             echo S | chkdsk %homedrive% /F /R /X >nul
  161.             shutdown -r -t 10
  162. )
  163.  
  164.  
  165. echo %CHECK%| findstr /I "^NO$" >nul
  166. If %errorlevel% equ 0 (goto :menu)
  167.  
  168. Goto :menu
  169.  
  170.  
  171. :############################################################
  172.  
  173. REM En el antiguo código, Sí la lista es demasiado larga no se mostraría entera... Queda corregido por si acaso.
  174.  
  175. :x
  176. cls
  177. type "%homedrive%\clientes.txt" | More /E /C
  178. goto :menu
« Última modificación: 5 Noviembre 2011, 04:01 am por EleKtro H@cker » En línea


Geormarsch

Desconectado Desconectado

Mensajes: 160



Ver Perfil
Re: [Batch][Aporte] Base de datos para clientes.
« Respuesta #3 en: 5 Noviembre 2011, 19:50 pm »

Cierto, usas muchas variables y conviene "resetearlas" al volver al :MENU, porque sino aunque dejes vacía alguna de las variables como talla dire y eso, se tomará la variable anterior... espero que se me entienda xD

aparte de eso, dejame mejorartelo un poquito lo que pueda  :xD


PD: Copia este código tal cual, para probarlo, aunque veas caracteres raros al copiar no te preocupes, en la consola salen bien las palabras con los acentos y eso  ::)

Leo es un crack con el tema de trabajar sobre archivos de texto así que yo esperaría a ver si te da una solución para una mejor busqueda sobre la lista de clientes...  ;-)




Código
  1. @echo off
  2. title Base de datos Clientes
  3. color fc
  4.  
  5. If not exist "%homedrive%\clientes.txt" (echo.>"%homedrive%\clientes.txt")
  6.  
  7.  
  8. :############################################################
  9.  
  10. REM En esta parte no he correjido nada importante, solo sintaxis y gramática xD, el "ELSE" del final...
  11.  
  12. REM Reseteando variables...
  13.  
  14.  
  15. :MENU
  16.  
  17. Set o=
  18. set check=
  19. Set de=
  20. set bo=
  21.  
  22. cls
  23. echo %time%
  24. echo  ##########
  25. echo  1.- Agregar Cliente
  26. echo  2.- Buscar dentro de la Base de datos
  27. echo  3.- Mostrar el contenido de la Base de datos
  28. echo  4.- Borrar Base de datos
  29. set /p o= Elija una opci¢n:
  30. if not defined o (goto :menu)
  31. if %o%==1 (goto :add)
  32. if %o%==2 (goto :b)
  33. if %o%==3 (goto :x)
  34. if %o%==4 (goto :dl)
  35. goto :menu
  36.  
  37.  
  38.  
  39. :############################################################
  40.  
  41. REM Aqui nos aseguramos de que ningún campo queda vacío...
  42.  
  43.  
  44. :add
  45.  
  46. set name=
  47. set dire=
  48. set n=
  49. set c=
  50. set t=
  51. set s=
  52.  
  53.  
  54. cls
  55. set /p name=- Nombre de cliente: & Call :verify name
  56. set /p dire=- Direcci¢n        : & Call :verify dire
  57. set /p n=- N£mero           : &    Call :verify n
  58. set /p c=- Compras Recientes: &    Call :verify c
  59. set /p t=- Talla            : &    Call :verify t
  60. set /p s=- Sexo             : &    Call :verify s
  61. echo Cliente   : %name%>>%homedrive%\clientes.txt
  62. echo Direcci¢n : %dire%>>%homedrive%\clientes.txt
  63. echo N£mero    : %n%>>%homedrive%\clientes.txt
  64. echo Compras   : %c%>>%homedrive%\clientes.txt
  65. echo Talla     : %t%>>%homedrive%\clientes.txt
  66. echo Sexo      : %s%>>%homedrive%\clientes.txt
  67. echo -------------------------------------------------;>>%homedrive%\clientes.txt
  68. echo Generado Correctamente.
  69. goto :menu
  70.  
  71.  
  72. set %1=Ninguno
  73. goto :eof
  74. ) ELSE (
  75. goto :eof
  76. )
  77.  
  78.  
  79. :############################################################
  80.  
  81.  
  82. REM no te recomiendo usar setlocal si hay productos o datos que contengan caracteres especiales como "Nike!" ...pues no los vas a encontrar xD
  83.  
  84. REM en el metodo de buscqueda no he podido hacer nada mejor, habria sido fácil usando tail y txtback porque cada cliente esta separado en 7 líneas, pero bueno, no me he kerido comer más el coco  :xD
  85.  
  86. :b
  87. cls
  88. set /p bo=- ¨Que desea buscar dentro de la Base de datos?:
  89.  
  90. find "%bo%" "%homedrive%\clientes.txt" >nul
  91. If %errorlevel% equ 0 (
  92. find "%bo%" "%homedrive%\clientes.txt"
  93. goto :menu
  94. ) ELSE (
  95. echo No se ha encontrado ninguna coincidencia, Intentelo de nuevo...
  96. goto :menu
  97. )
  98.  
  99.  
  100.  
  101. Goto :menu
  102.  
  103.  
  104. :############################################################
  105.  
  106.  
  107. REM Ahora el código reconoce varias respuestas (si,SI,Si,sI,sí,Sí - No,no,NO,nO) en cambio tu código solo reconocia dos (Aunque no te lo parezca así era).
  108.  
  109. :dl
  110.  
  111.  
  112. cls
  113. echo  Se borrar… la base de datos, ¨Est… seguro?  Si/No
  114. echo  Se perder…n todos los datos guardados...
  115. set /p de=^>^>
  116.  
  117. echo %de%| findstr /I "^S.$" >nul
  118. If %errorlevel% equ 0 (goto :del)
  119.  
  120. echo %de%| findstr /I "^NO$" >nul
  121. If %errorlevel% equ 0 (goto :menu)
  122.  
  123. Goto :menu
  124.  
  125. :############################################################
  126.  
  127. REM Mas vale prevenir que curar, Los HDD's a veces se estropean, mejor nos aseguramos de que la lista se borre de verdad xD
  128.  
  129.  
  130. cls
  131. echo  Borrando...
  132. ping -n 2 localhost >nul
  133.  
  134. del /q /f "%homedrive%\clientes.txt" >nul 2>&1
  135. IF %ERRORLEVEL% EQU 0 (
  136.        echo Eliminado.
  137.        pause
  138.        goto :menu
  139. ) ELSE (
  140.        cls        
  141.        echo No se pudo borrar la lista.
  142.        pause
  143. goto :checkeo
  144. )
  145.  
  146.  
  147. :############################################################
  148.  
  149. REM Y esta parte me la invento xD
  150.  
  151.  
  152. :checkeo
  153. cls
  154. echo  ¨Quiere iniciar un escaneo de errorer de su disco duro? Si/No
  155. echo  Se reiniciar… el Pc...
  156. set /p CHECK=^>^>
  157.  
  158. echo %CHECK%| findstr /I "^S.$" >nul
  159. If %errorlevel% equ 0 (
  160.             echo S | chkdsk %homedrive% /F /R /X >nul
  161.             shutdown -r -t 10
  162. )
  163.  
  164.  
  165. echo %CHECK%| findstr /I "^NO$" >nul
  166. If %errorlevel% equ 0 (goto :menu)
  167.  
  168. Goto :menu
  169.  
  170.  
  171. :############################################################
  172.  
  173. REM En el antiguo código, Sí la lista es demasiado larga no se mostraría entera... Queda corregido por si acaso.
  174.  
  175. :x
  176. cls
  177. type "%homedrive%\clientes.txt" | More /E /C
  178. goto :menu

Me Gusto el code y si acerca de resetear la variables $edu$ me lo enseño para mi Codificador...
Se me olvido hacerlo y tambien el if nod defined...
pero no entendi la parte de tu codigo chequear disco duro ?
En línea

"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"
Geormarsch

Desconectado Desconectado

Mensajes: 160



Ver Perfil
Re: [Batch][Aporte] Base de datos para clientes.
« Respuesta #4 en: 5 Noviembre 2011, 19:51 pm »

Yo le pondria mas "anti errores", por ejemplo cada vez q pides el valor de una variable, antes tienes que anularla asi:

Código
  1. set "var="
  2.  

Por que sino quedara con el valor que tenia antes, para entender lo que te digo, agarra tu programa sin poner esto que te digo y elegi una opcion en el menu, la que quieras; ahora cuando estes de nuevo en el menu, apreta solo Enter sin escribir nada y te llevara al mismo lugar.

Y aunque sea feo y tengas que crear mas etiquetas le pondria los if not defined cuando pides los datos, para que no dejen nada en blanco.

Espero haberte ayudado

Lo recuerdo como si hubiese sido ayer la primera vez que me ayudaste ;D
En línea

"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: [Batch][Aporte] Base de datos para clientes.
« Respuesta #5 en: 6 Noviembre 2011, 10:03 am »

no entendi la parte de tu codigo chequear disco duro ?

Código
  1. echo S | chkdsk %homedrive% /F /R /X >nul

supongo que lo que no entendiste es eso

al ejecutar el chkdsk en el disco principal, windows pide una confirmación para ejecutarlo en el proximo reinicio (S/N), pues con el echo S | confirmamos S automáticamente.

/F  es para corregir los sectores dañados

/R para algo parecido

/X para demontar la unidad y poder analizarla (%homedrive%) (en el proximo reinicio del pc)


saludosss
En línea


s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: [Batch][Aporte] Base de datos para clientes.
« Respuesta #6 en: 6 Noviembre 2011, 10:25 am »

Código
  1. :dl
  2. cls
  3. echo Se borrara la base de datos esta seguro si/no
  4. echo Se perderan todo los datos guardados
  5. set /p de=^>^>
  6. if %de%==si (goto del) else (goto menu)
  7. if %de%==no (goto menu)
  8.  


Lo unico que yo veo que podria cambiar ademas de lo que ya te mencionaron podria ser esta parte esta demas el segundo if, ya que jamas entrara jejeje
yo lo dejaria ya en si:
--
if %de%==si (goto del) else (goto menu)
--
En línea

Geormarsch

Desconectado Desconectado

Mensajes: 160



Ver Perfil
Re: [Batch][Aporte] Base de datos para clientes.
« Respuesta #7 en: 7 Noviembre 2011, 22:28 pm »

Lo unico que yo veo que podria cambiar ademas de lo que ya te mencionaron podria ser esta parte esta demas el segundo if, ya que jamas entrara jejeje
yo lo dejaria ya en si:
--
if %de%==si (goto del) else (goto menu)
--


Toda La razon .... Fue un error mio jejejeje
En línea

"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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