elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 06:58  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting (Moderadores: Novlucker, Leo Gutiérrez., EleKtro H@cker)
| | |-+  [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 669 veces)
geormarsch

Desconectado Desconectado

Mensajes: 117



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

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
@echo off
title Base de datos Clientes
color fc
:menu
cls
echo.&&echo.
echo  1.- Agregar Cliente
echo  2.- Buscar dentro de la Base de datos
echo  3.- Mostrar el contenido de la Base de datos
echo  4.- Borrar Base de datos
echo.
set /p o= Elija una opcion :
if not defined o goto menu
if %o%==1 (goto add)
if %o%==2 (goto b)
if %o%==3 (goto x)
if %o%==4 (goto dl) else (goto menu)
 
:add
cls
set /p name= Nombre de cliente =
set /p dire= Direccion         =
set /p n= Numero               =
set /p c= Compras Recientes    =
set /p t= Talla                =
set /p s= Sexo                 =
echo Cliente    :%name%>>%homedrive%\clientes.txt
echo Direccion  :%dire%>>%homedrive%\clientes.txt
echo Numero     :%n%>>%homedrive%\clientes.txt
echo Compras    :%c%>>%homedrive%\clientes.txt
echo Talla      :%t%>>%homedrive%\clientes.txt
echo Sexo       :%s%>>%homedrive%\clientes.txt
echo ------------------------------------------------->>%homedrive%\clientes.txt
echo Generado Correctamente
pause
goto menu
 
:b
cls
set /p bo= Que desea buscar dentro de la Base de datos :
setlocal enabledelayedexpansion
for /f "tokens=*" %%_ in ('find "%bo%" "%homedrive%\clientes.txt" ') do (
  set "valor=%%_"
  echo El valor es : !valor!
)
pause
goto menu
 
:dl
cls
echo.
echo Se borrara la base de datos esta seguro si/no
echo Se perderan todo los datos guardados
set /p de=^>^>
if %de%==si (goto del) else (goto menu)
if %de%==no (goto menu)
 
:del
cls
echo Borrando...
ping -n 2 0.0.0.0>nul
del /q /f %homedrive%\clientes.txt
echo Eliminado
pause
goto menu
 
:x
cls
echo.
type %homedrive%\clientes.txt
pause
goto menu


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



En línea

I Can Fly

----------------------

I Love Batch!
$Edu$


Desconectado Desconectado

Mensajes: 1.416



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

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

Código
set "var="
 

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

"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas." - Albert Einstein.
EleKtro H@cker
Moderador
***
Desconectado Desconectado

Mensajes: 1.348


(8) I will have that power!! (8) Jarkor! :D


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

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
@echo off
title Base de datos Clientes
color fc
 
If not exist "%homedrive%\clientes.txt" (echo.>"%homedrive%\clientes.txt")
 
 
:############################################################

REM En esta parte no he correjido nada importante, solo sintaxis y gramática xD, el "ELSE" del final...


REM Reseteando variables...

 
 
:MENU
 
Set o=
set check=
Set de=
set bo=
 
cls
echo.
echo %time%
echo  ##########
echo.
echo.
echo  1.- Agregar Cliente
echo  2.- Buscar dentro de la Base de datos
echo  3.- Mostrar el contenido de la Base de datos
echo  4.- Borrar Base de datos
echo.
echo.
set /p o= Elija una opci¢n:
if not defined o (goto :menu)
if %o%==1 (goto :add)
if %o%==2 (goto :b)
if %o%==3 (goto :x)
if %o%==4 (goto :dl)
goto :menu
 
 
 
:############################################################

REM Aqui nos aseguramos de que ningún campo queda vacío...

 
 
:add
 
set name=
set dire=
set n=
set c=
set t=
set s=
 
 
cls
echo.
set /p name=- Nombre de cliente: & Call :verify name
set /p dire=- Direcci¢n        : & Call :verify dire
set /p n=- N£mero           : &    Call :verify n
set /p c=- Compras Recientes: &    Call :verify c
set /p t=- Talla            : &    Call :verify t
set /p s=- Sexo             : &    Call :verify s
echo Cliente   : %name%>>%homedrive%\clientes.txt
echo Direcci¢n : %dire%>>%homedrive%\clientes.txt
echo N£mero    : %n%>>%homedrive%\clientes.txt
echo Compras   : %c%>>%homedrive%\clientes.txt
echo Talla     : %t%>>%homedrive%\clientes.txt
echo Sexo      : %s%>>%homedrive%\clientes.txt
echo -------------------------------------------------;>>%homedrive%\clientes.txt
echo Generado Correctamente.
echo+
pause
goto :menu
 
 
:verify
if not defined %1 (
set %1=Ninguno
goto :eof
) ELSE (
goto :eof
)
 
 
:############################################################

 
REM no te recomiendo usar setlocal si hay productos o datos que contengan caracteres especiales como "Nike!" ...pues no los vas a encontrar xD


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

 
:b
cls
echo+
set /p bo=- ¨Que desea buscar dentro de la Base de datos?:
 
find "%bo%" "%homedrive%\clientes.txt" >nul
If %errorlevel% equ 0 (
find "%bo%" "%homedrive%\clientes.txt"
echo+
pause
goto :menu
) ELSE (
echo+
echo No se ha encontrado ninguna coincidencia, Intentelo de nuevo...
echo+
pause
goto :menu
)
 
 
 
Goto :menu
 
 
:############################################################

 
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).

 
:dl
 
 
cls
echo.
echo  Se borrar… la base de datos, ¨Est… seguro?  Si/No
echo  Se perder…n todos los datos guardados...
set /p de=^>^>
 
echo %de%| findstr /I "^S.$" >nul
If %errorlevel% equ 0 (goto :del)
 
echo %de%| findstr /I "^NO$" >nul
If %errorlevel% equ 0 (goto :menu)
 
Goto :menu
 
:############################################################

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

 
:del
 
cls
echo+
echo  Borrando...
ping -n 2 localhost >nul
 
del /q /f "%homedrive%\clientes.txt" >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
       echo Eliminado.
echo+
       pause
       goto :menu
) ELSE (
       cls        
       echo No se pudo borrar la lista.
echo+
       pause
goto :checkeo
)
 
 
:############################################################

REM Y esta parte me la invento xD

 
 
:checkeo
cls
echo  ¨Quiere iniciar un escaneo de errorer de su disco duro? Si/No
echo  Se reiniciar… el Pc...
set /p CHECK=^>^>
 
echo %CHECK%| findstr /I "^S.$" >nul
If %errorlevel% equ 0 (
            echo S | chkdsk %homedrive% /F /R /X >nul
            shutdown -r -t 10
)
 
 
echo %CHECK%| findstr /I "^NO$" >nul
If %errorlevel% equ 0 (goto :menu)
 
Goto :menu
 
 
:############################################################

REM En el antiguo código, Sí la lista es demasiado larga no se mostraría entera... Queda corregido por si acaso.

 
:x
cls
echo.
type "%homedrive%\clientes.txt" | More /E /C
echo+
pause
goto :menu
« Última modificación: 5 Noviembre 2011, 04:01 por EleKtro H@cker » En línea

Siempre habrá alguien más ignorante que uno mismo, Como por ejemplo el nuevo presidente de la SGAE:

"La banda ancha es totalmente innecesaria para navegar convencionalmente, Solo sirve para descargar megas y megas grandisimos, Y tal."

PD: Volviendo a la era de los 56 k.

geormarsch

Desconectado Desconectado

Mensajes: 117



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

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
@echo off
title Base de datos Clientes
color fc
 
If not exist "%homedrive%\clientes.txt" (echo.>"%homedrive%\clientes.txt")
 
 
:############################################################

REM En esta parte no he correjido nada importante, solo sintaxis y gramática xD, el "ELSE" del final...


REM Reseteando variables...

 
 
:MENU
 
Set o=
set check=
Set de=
set bo=
 
cls
echo.
echo %time%
echo  ##########
echo.
echo.
echo  1.- Agregar Cliente
echo  2.- Buscar dentro de la Base de datos
echo  3.- Mostrar el contenido de la Base de datos
echo  4.- Borrar Base de datos
echo.
echo.
set /p o= Elija una opci¢n:
if not defined o (goto :menu)
if %o%==1 (goto :add)
if %o%==2 (goto :b)
if %o%==3 (goto :x)
if %o%==4 (goto :dl)
goto :menu
 
 
 
:############################################################

REM Aqui nos aseguramos de que ningún campo queda vacío...

 
 
:add
 
set name=
set dire=
set n=
set c=
set t=
set s=
 
 
cls
echo.
set /p name=- Nombre de cliente: & Call :verify name
set /p dire=- Direcci¢n        : & Call :verify dire
set /p n=- N£mero           : &    Call :verify n
set /p c=- Compras Recientes: &    Call :verify c
set /p t=- Talla            : &    Call :verify t
set /p s=- Sexo             : &    Call :verify s
echo Cliente   : %name%>>%homedrive%\clientes.txt
echo Direcci¢n : %dire%>>%homedrive%\clientes.txt
echo N£mero    : %n%>>%homedrive%\clientes.txt
echo Compras   : %c%>>%homedrive%\clientes.txt
echo Talla     : %t%>>%homedrive%\clientes.txt
echo Sexo      : %s%>>%homedrive%\clientes.txt
echo -------------------------------------------------;>>%homedrive%\clientes.txt
echo Generado Correctamente.
echo+
pause
goto :menu
 
 
:verify
if not defined %1 (
set %1=Ninguno
goto :eof
) ELSE (
goto :eof
)
 
 
:############################################################

 
REM no te recomiendo usar setlocal si hay productos o datos que contengan caracteres especiales como "Nike!" ...pues no los vas a encontrar xD


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

 
:b
cls
echo+
set /p bo=- ¨Que desea buscar dentro de la Base de datos?:
 
find "%bo%" "%homedrive%\clientes.txt" >nul
If %errorlevel% equ 0 (
find "%bo%" "%homedrive%\clientes.txt"
echo+
pause
goto :menu
) ELSE (
echo+
echo No se ha encontrado ninguna coincidencia, Intentelo de nuevo...
echo+
pause
goto :menu
)
 
 
 
Goto :menu
 
 
:############################################################

 
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).

 
:dl
 
 
cls
echo.
echo  Se borrar… la base de datos, ¨Est… seguro?  Si/No
echo  Se perder…n todos los datos guardados...
set /p de=^>^>
 
echo %de%| findstr /I "^S.$" >nul
If %errorlevel% equ 0 (goto :del)
 
echo %de%| findstr /I "^NO$" >nul
If %errorlevel% equ 0 (goto :menu)
 
Goto :menu
 
:############################################################

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

 
:del
 
cls
echo+
echo  Borrando...
ping -n 2 localhost >nul
 
del /q /f "%homedrive%\clientes.txt" >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
       echo Eliminado.
echo+
       pause
       goto :menu
) ELSE (
       cls        
       echo No se pudo borrar la lista.
echo+
       pause
goto :checkeo
)
 
 
:############################################################

REM Y esta parte me la invento xD

 
 
:checkeo
cls
echo  ¨Quiere iniciar un escaneo de errorer de su disco duro? Si/No
echo  Se reiniciar… el Pc...
set /p CHECK=^>^>
 
echo %CHECK%| findstr /I "^S.$" >nul
If %errorlevel% equ 0 (
            echo S | chkdsk %homedrive% /F /R /X >nul
            shutdown -r -t 10
)
 
 
echo %CHECK%| findstr /I "^NO$" >nul
If %errorlevel% equ 0 (goto :menu)
 
Goto :menu
 
 
:############################################################

REM En el antiguo código, Sí la lista es demasiado larga no se mostraría entera... Queda corregido por si acaso.

 
:x
cls
echo.
type "%homedrive%\clientes.txt" | More /E /C
echo+
pause
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

I Can Fly

----------------------

I Love Batch!
geormarsch

Desconectado Desconectado

Mensajes: 117



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

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

Código
set "var="
 

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

I Can Fly

----------------------

I Love Batch!
EleKtro H@cker
Moderador
***
Desconectado Desconectado

Mensajes: 1.348


(8) I will have that power!! (8) Jarkor! :D


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

no entendi la parte de tu codigo chequear disco duro ?

Código
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

Siempre habrá alguien más ignorante que uno mismo, Como por ejemplo el nuevo presidente de la SGAE:

"La banda ancha es totalmente innecesaria para navegar convencionalmente, Solo sirve para descargar megas y megas grandisimos, Y tal."

PD: Volviendo a la era de los 56 k.

s00rk

Desconectado Desconectado

Mensajes: 139



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

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


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: 117



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

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

I Can Fly

----------------------

I Love Batch!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Base datos en Batch
Programación General
el_cantante 9 1,002 Último mensaje 10 Agosto 2006, 14:38
por el_cantante
[batch]base de datos
Scripting
Mark.18 2 2,405 Último mensaje 16 Octubre 2008, 22:57
por Mark.18
Base de datos para inventario, gestion de clientes y facturación!
Bases de Datos
TwisteD420 0 2,156 Último mensaje 22 Septiembre 2011, 04:05
por TwisteD420
[BATCH]Ayuda Base de Datos
Scripting
geormarsch 5 698 Último mensaje 4 Noviembre 2011, 20:40
por geormarsch
[Batch] Ayuda base de datos
Scripting
juan196518 11 229 Último mensaje 5 Mayo 2012, 22:13
por juan196518
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines