Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)
Autor
|
Tema: [Batch][Aporte] Base de datos para clientes. (Leído 669 veces)
|
geormarsch
Desconectado
Mensajes: 117
|
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 datosAl agregar un cliente se guarda en un txt llamado Cliente guardado en %Homedrive%. Bueno sin mas charla el codigo@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
Mensajes: 1.416
|
Yo le pondria mas "anti errores", por ejemplo cada vez q pides el valor de una variable, antes tienes que anularla asi: 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
|
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  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... 
@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
Mensajes: 117
|
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  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... 
@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
Mensajes: 117
|
Yo le pondria mas "anti errores", por ejemplo cada vez q pides el valor de una variable, antes tienes que anularla asi: 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 
|
|
|
|
|
En línea
|
I Can Fly
----------------------
I Love Batch!
|
|
|
|
EleKtro H@cker
|
no entendi la parte de tu codigo chequear disco duro ?
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
Mensajes: 139
|
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
Mensajes: 117
|
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!
|
|
|
|
|