[Batch][Aporte] Base de datos para clientes.

Iniciado por Geormarsch, 4 Noviembre 2011, 20:52 PM

0 Miembros y 1 Visitante están viendo este tema.

Geormarsch

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

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

"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$

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

Código (dos) [Seleccionar]

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

Eleкtro

#2
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 (dos) [Seleccionar]

@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








Geormarsch

Cita de: EleKtro H@cker 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 (dos) [Seleccionar]

@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 ?
"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

Cita de: $Edu$ 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 (dos) [Seleccionar]

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

Cita de: geormarsch en  5 Noviembre 2011, 19:50 PM
no entendi la parte de tu codigo chequear disco duro ?

Código (dos) [Seleccionar]
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








s00rk

Cita de: geormarsch en  4 Noviembre 2011, 20:52 PM
Código (dos) [Seleccionar]

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

Geormarsch

Cita de: s00rk en  6 Noviembre 2011, 10:25 AM
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
"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"