Sie sind auf Seite 1von 24

Desarrollo de un programa en Python 3 para gestionar una biblioteca (Versión 0.2)

Camilo Bernal

9 de mayo de 2016

∗

CONTENIDO

Página

1. Introducción

1

2. Análisis preliminar

 

2

3. Algoritmos Básicos

3

3.1. Ingresar libro

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

3

3.2. Borrar libro

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

4

3.3. Ingresar cliente

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

5

3.4. Borrar cliente

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

6

3.5. Prestar libro

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

8

3.6. Recibir libro

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

9

4. Uso del programa

 

10

5. Conclusiones

12

6. Lecturas recomendadas

 

13

A. Anexos

14

A.1. Código python

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

14

A.2. Interfaz de usuario

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

19

 

I

1. Introducción

Lo primero que se debe aclarar es que no soy un experto en programación ni mucho menos. Si eres un aprendiz (como yo) este manual puede ayudarte. Si eres un experto, quizás sólo te sirva para aprender cómo "no hacer las cosas como un aprendiz".

Se presenta un problema de gestión de una biblioteca, en la cual se deben manejar tareas relativas a socios y libros. El documento presenta un ejemplo de resolución del problema partiendo desde un diseño muy básico y conclu- yendo con un programa en lenguaje Python 3, que si bien no es perfecto, al menos funciona como prototipo.

1

2. Análisis preliminar

Se requiere realizar un programa que permite realizar las tareas más comunes en una biblioteca. Las tareas esenciales son: Ingresar nuevos libros, Borrar libros, Ingresar nuevos socios, Borrar socios, Prestar y recibir libros. Inicial- mente se representarán los algoritmos correspondientes a estas tareas como diagramas de flujo.

Se recomienda hacer un trabajo de programación incremental, esto es ir rea- lizando pequeños cambios al programa y volver a llamar al intérprete para tareas de depuración, a fin de que cuando se concluya la tarea no se tenga una cantidad desconocida de errores.

Una de las mayores frustraciones que en lo personal he tenido realizando programas, se relaciona con el bloqueo mental ante una cantidad excesiva de código y excepciones. Lo que recomiendo es realizar un diseño previo y ayudarse con diagramas de flujo. Antes de escribir una sola línea de código, es muy conveniente tener una idea básica sobre cómo resolver el problema; este pequeño truco ahorrará muchas horas de trabajo y mucha frustración.

2

3. Algoritmos Básicos

El resultado de la aplicación de los algoritmos que se muestran a continuación se encuentran en el anexo A.1, donde se presenta el código para las clases que representarán a cada una de las entidades que conforman la biblioteca.

3.1. Ingresar libro

Figura 1: Algoritmo - Ingresar libro

INICIO

¿Nuevo libro?
¿Nuevo
libro?
Figura 1: Algoritmo - Ingresar libro INICIO ¿Nuevo libro? SÍ Crear libro Actualizar lista de l_disponibles

Crear libro

Actualizar lista de l_disponibles FIN
Actualizar lista de
l_disponibles
FIN

NONO

Fuente: Elaboración propia

3

3.2. Borrar libro

Figura 2: Algoritmo - Borrar libro

INICIO

3.2. Borrar libro Figura 2: Algoritmo - Borrar libro INICIO NONO ¿Existe el libro? SÍ NO

NONO

¿Existe el libro? SÍ NO ¿Está disponible? SÍ Eliminar libro Actualizar lista de l_disponibles FIN
¿Existe
el libro?
NO
¿Está
disponible?
Eliminar libro
Actualizar lista de
l_disponibles
FIN

Fuente: Elaboración propia

4

3.3. Ingresar cliente

Figura 3: Algoritmo - Ingresar Cliente

INICIO

¿Nuevo cliente?
¿Nuevo
cliente?
3: Algoritmo - Ingresar Cliente INICIO ¿Nuevo cliente? SÍ Crear cliente Actualizar lista de c_sin_libros FIN

Crear cliente

Actualizar lista de c_sin_libros FIN
Actualizar lista de
c_sin_libros
FIN

NONO

Fuente: Elaboración propia

5

3.4. Borrar cliente

Figura 4: Algoritmo - Borrar Cliente

INICIO

Borrar cliente Figura 4: Algoritmo - Borrar Cliente INICIO NONO ¿Existe cliente? SÍ ¿Cliente NO sin

NONO

¿Existe cliente? SÍ ¿Cliente NO sin libros? SÍ Eliminar cliente Actualizar lista de c_sin_libros FIN
¿Existe
cliente?
¿Cliente
NO
sin
libros?
Eliminar cliente
Actualizar lista de
c_sin_libros
FIN

Fuente: Elaboración propia

6

3.5. Prestar libro

Figura 5: Algoritmo - Prestar libro

INICIO

NO NO ¿Existe el libro? SÍ NO ¿Existe el cliente? SÍ NO ¿El libro está
NO
NO
¿Existe
el libro?
NO
¿Existe el
cliente?
NO
¿El libro
está
disponible?
NO
¿El cliente
tiene menos
de 3 libros?
Registrar cliente
en libro
Registrar libro en
cliente
Actualizar lista de
l_disponibles
Actualizar lista de
l_prestados
Actualizar lista de
c_sin_libros
Actualizar lista de
c_con_libros
FIN

Fuente: Elaboración propia

8

3.6. Recibir libro

Figura 6: Algoritmo - Recibir libro

INICIO

NO NO ¿Existe el libro? SÍ NO ¿Existe el cliente? SÍ NO ¿El libro está
NO
NO
¿Existe
el libro?
NO
¿Existe el
cliente?
NO
¿El libro está
prestado a
ese cliente?
Quitar cliente en
libro
Quitar libro en
cliente
Actualizar lista de
l_disponibles
Actualizar lista de
l_prestados
Actualizar lista de
c_sin_libros
Actualizar lista de
c_con_libros
FIN

Fuente: Elaboración propia

9

4. Uso del programa

Para empezar a usar el programa, se ubica la ruta de trabajo en el directorio

del código (

con lo cual se obtiene el resultado que se muestra en la figura 7. El código

de la interfaz de usuario se encuentra en el anexo A.2.

y se ejecuta el comando ./Administrar.py,

principal/Codigo/)

10

Figura 7: Interfaz de usuario

Figura 7: Interfaz de usuario Fuente: Elaboración propia 11
Figura 7: Interfaz de usuario Fuente: Elaboración propia 11

Fuente: Elaboración propia

11

5. Conclusiones

Antes de acometer la escritura de código, conviene realizar un análisis básico, un diseño preliminar y la escritura del pseudocódigo, con lo cual se puede aumentar la productividad y reducir la frustración en el proceso de depuración.5. Conclusiones Python 3 es un estupendo lenguaje para aprender a programar, y si a esto

Python 3 es un estupendo lenguaje para aprender a programar, y si a esto se le suma un código convenientemente distribuido junto con los comentarios pertinentes, es posible disminuir la probabilidad de ’bloqueo mental’ que sufre nuestro cerebro ante objetos abstractos y poco intuitivos.y reducir la frustración en el proceso de depuración. La programación incremental consiste en escribir unas

La programación incremental consiste en escribir unas pocas líneas y ejecutar pruebas constantes sobre ellas. Esto facilita enormemente las tareas posteriores de depuración y evita sorpresas al final.disminuir la probabilidad de ’bloqueo mental’ que sufre nuestro cerebro ante objetos abstractos y poco intuitivos.

12

6. Lecturas recomendadas

Hay varios buenos manuales en internet. En lo personal recomiendo que bus- quen en google los ficheros PDF con los siguientes títulos:

1. "Aprenda a Pensar Como un Programador con Python", de Allen Dow- ney

2. "Inmersión en Python 3", de Mark Pilgrim

3. "El tutorial de Python", de Guido van Rossum

4. "Python Reference Manual", de Guido van Rossum

13

A. Anexos

A.1. Código python

Creo que no es inútil repetirlo: El código se escribe ÚNICAMENTE cuando

ya se tenga alguna idea de cómo resolver el problema y se haya planteado la

solución con alguna claridad. Lanzarse a escribir código de manera irreflexiva

es la receta perfecta para la frustración: ojalá no caigan en ese error.

Se decidió construir tres objetos: Libro, Cliente y Bibliotecario. Este último

objeto es el que se encarga de administrar las relaciones entre los clientes y

la biblioteca.

A continuación se presenta una propuesta del código en Python 3, tal vez

esté plagada de errores, ingenuidades e inconsistencias, pero incluso de eso podemos aprender, y aprender es el único objetivo de este documento.

Listado 1: Clases de Biblioteca

1

#! /usr/bin/env python3

 

2

3

class

Libro():

 

4

"""Objeto␣que␣representa␣un␣libro"""

 

5

def

init

(self

,

titulo ,

autor ,

id):

6

self.titulo

 

=

titulo

 

7

self.autor

=

autor

8

self.id = id

 

9

self.prestado

 

=

None

10

def

str

( self ):

 

11

msg = " \ nTitulo : ␣ " + str ( self . titulo )+ " \ nautor : ␣ " + str ( self . autor )\

12

+ " \ nid : ␣ " + str ( self . id )+ " \ nPrestado : ␣ " + str ( self . prestado )+ " \ n "

13

return

msg

14

15

14

16

17

class

Cliente ():

18

""" Objeto ␣ que ␣ representa ␣ un ␣ cliente """

 

19

def

init

( self ,

nombre ,

id ):

20

self . nombre

=

nombre

21

self . id

=

id

22

self . libros

=

list ()

 

23

def

str

( self ):

24

msg

=

" \

nNombre : ␣ " + str ( self . nombre )+ " \ nid : ␣ " + str ( self . id )\

25

+ " \ nlibros : ␣ " + str ( self . libros )+ " \ n "

 

26

return

msg

27

28

29

30

class

Bibliotecario ( Libro ,

Cliente ):

 

31

""" Objeto ␣ que ␣ representa ␣ un ␣ bibliotecario """

32

def

init

( self ):

33

self . libros

=

dict ()

 

34

35

= self . l_disponibles

self . l_prestados

self . clientes

dict ()

=

list ()

 

36

=

list ()

37

self . c_sin_libros

=

list ()

38

self . c_con_libros

=

list ()

39

40

def

ingresar_libro ( self ,

titulo ,

autor ,

id_libro ):

41

""" Metodo ␣ que ␣ define ␣ como ␣ ingresar ␣ un ␣ libro """

42

# Nuevo libro ?

43

if

self . libros

contains

( id_libro ):

44

print ( " \ n :( ␣ = > ␣ ERROR : ␣ Libro ␣ ya ␣ existe \ n " )

45

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

46

return

47

# Crear libro

48

n_libro

=

Libro ( titulo ,

autor ,

id_libro )

49

self . libros

setitem

( n_libro . id ,

n_libro )

50

self . l_disponibles . append ( n_libro . id )

51

52

def

borrar_libro ( self ,

id_libro ):

 

53

""" Metodo ␣ que ␣ define ␣ como ␣ borrar ␣ un ␣ libro """

54

# Existe el libro ?

15

55

if

not

self . libros

contains

( id_libro ):

56

print ( " \ n :( ␣ = > ␣ ERROR : ␣ El ␣ libro ␣ no ␣ existe \ n " )

57

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

58

return

 

59

# Esta disponible ?

60

if

not

self . l_disponibles

contains

( id_libro ):

61

print ( " \ n :( ␣ = > ␣ ERROR : ␣ El ␣ libro ␣ no ␣ esta ␣ disponible \ n " )

62

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

63

return

 

64

# Eliminar libro

65

self . libros

delitem

( id_libro )

66

self . l_disponibles . remove ( id_libro )

67

68

def

ingresar_cliente ( self ,

nombre ,

id_cliente ):

69

""" Metodo ␣ que ␣ define ␣ como ␣ ingresar ␣ un ␣ nuevo ␣ cliente """

70

# Nuevo cliente ?

 

71

if

self . clientes

contains

( id_cliente ):

72

print ( " \ n :( ␣ = > ␣ ERROR : ␣ Cliente ␣ ya ␣ existe \ n " )

73

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

74

return

 

75

# Crear cliente

76

n_cliente

=

Cliente ( nombre ,

id_cliente )

77

self . clientes

setitem

( n_cliente . id ,

n_cliente )

78

self . c_sin_libros . append ( n_cliente . id )

79

80

def

borrar_cliente ( self , id_cliente ):

 

81

""" Metodo ␣ que ␣ define ␣ como ␣ borrar ␣ un ␣ cliente """

82

# Existe cliente ?

 

83

if not self . clientes

contains

( id_cliente ):

84

print ( " \ n :( ␣ = > ␣ ERROR : ␣ El ␣ cliente ␣ no ␣ existe \ n " )

85

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

86

return

 

87

# Cliente sin libros ?

88

if not self . c_sin_libros

contains

( id_cliente ):

89

print ( " \ n :( ␣ = > ␣ ERROR : ␣ El ␣ cliente ␣ tiene ␣ libros \ n " )

90

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

91

return

 

92

# Eliminar cliente

93

self . clientes

delitem

( id_cliente )

16

94

self . c_sin_libros . remove ( id_cliente )

 

95

96

def

prestar_libro ( self , id_cliente , id_libro ):

 

97

""" Metodo ␣ que ␣ define ␣ como ␣ prestar ␣ un ␣ libro """

98

# Existe el

libro ?

99

if not self . libros

contains

( id_libro ):

 

100

print ( " \ n :( ␣ = > ␣ ERROR : ␣ No ␣ existe ␣ el ␣ libro \ n " )

101

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

102

return

103

# Existe el

cliente ?

104

if not self . clientes

contains

( id_cliente ):

 

105

print ( " \ n :( ␣ = > ␣ ERROR : ␣ No ␣ existe ␣ el ␣ cliente \ n " )

106

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

107

return

108

# El

libro esta disponible ?

 

109

if not self . l_disponibles

contains

( id_libro ):

110

print ( " \ n :( ␣ = > ␣ ERROR : ␣ El ␣ libro ␣ no ␣ esta ␣ disponible \ n " )

 

111

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

 

112

return

113

# El cliente tiene menos de tres libros ?

 

114

if self . clientes

getitem

( id_cliente ). libros

len

()

>

2:

115

print ( " \ n :( ␣ = > ␣ ERROR : ␣ El ␣ cliente ␣ ya ␣ tiene ␣ tres ␣ libros \ n " )

116

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

 

117

return

118

# Registrar

cliente en libro

119

self . libros [ id_libro ]. prestado =

id_cliente

 

120

# Registrar libro en cliente

 

121

self . clientes [ id_cliente ]. libros . append ( id_libro )

 

122

self . l_disponibles . remove ( id_libro )

 

123

self . l_prestados . append ( id_libro )

124

# Actualizar lista c_sin_libros

125

if self . c_sin_libros

contains

( id_cliente ):

 

126

self . c_sin_libros . remove ( id_cliente )

127

# Actualizar

lista c_con_libros

128

if not self . c_con_libros

contains

( id_cliente ):

129

self . c_con_libros . append ( id_cliente )

 

130

131

def

recibir_libro ( self ,

id_cliente ,

id_libro ):

 

132

""" Metodo ␣ que ␣ define ␣ como ␣ recibir ␣ un ␣ libro """

17

133

# Existe el libro ?

 

134

if

not

self . l_prestados

contains

( id_libro ):

 

135

print ( " \ n :( ␣ = > ␣ ERROR : ␣ El ␣ libro ␣ no ␣ figura ␣ como ␣ prestado \ n " )

136

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

 

137

return

 

138

# Existe el

 

cliente ?

139

if

not

self . clientes

 

contains

( id_cliente ):

 

140

print ( " \ n :( ␣ = > ␣ ERROR : ␣ No ␣ existe ␣ el ␣ cliente \ n " )

 

141

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

142

return

 

143

# El libro esta prestado

al cliente ?

144

if

not

self . libros [ id_libro ]. prestado

==

id_cliente :

145

print ( " \ n :( ␣ = > ␣ ERROR : ␣ El ␣ libro ␣ no ␣ esta ␣ prestado ␣ a ␣ este ␣ cliente \ n " )

146

input ( " \ n ( Presione ␣ ’ Enter ’␣ para ␣ terminar )\ n " )

 

147

return

 

148

# Recibir libro

 

149

self . libros [ id_libro ]. prestado

=

None

 

150

self . clientes [ id_cliente ]. libros . remove ( id_libro )

 

151

# Actualizar libros

y clientes

 

152

self . l_disponibles . append ( id_libro )

153

self . l_prestados . remove ( id_libro )

154

# Actualizar lista c_sin_libros

155

if

self . clientes [ id_cliente ]. libros

len

()

==

0:

156

self . c_sin_libros . append ( id_cliente )

 

157

# Actualizar lista c_con_libros

 

158

if

self . clientes [ id_cliente ]. libros

len

()

==

0:

159

self . c_con_libros . remove ( id_cliente )

 

160

161

def

str

( self ):

 

162

msg

= " \ nLibros ␣ disponibles : ␣ " +

str ( self . l_disponibles )\

163

+ " \ nLibros ␣ prestados : ␣ " +

str ( self . l_prestados )\

 

164

+ " \ nC . ␣

sin

libros : ␣ "

+

str ( self . c_sin_libros )\

165

+ " \ nC . ␣

con

libros : ␣ "

+

str ( self . c_con_libros )+ " \ n "

166

return

msg

18

A.2. Interfaz de usuario

La interfaz permite facilitar enormemente la interacción con el usuario. En el siguiente listado se muestra el código de la interfaz de usuario.

Listado 2: Código para interfaz de usuario

1

#! /usr/bin/env python3

 

2

3

from

Modulos.Clases

import

Bibliotecario

4

import

sys

 

5

import

cmd

6

import

os

7

8

biblio

=

Bibliotecario()

9

10

class

Interfaz ( cmd . Cmd ):

 

11

os . system ( " clear " )

12

intro

= " \ nBienvenido ␣ al ␣ programa ␣ de ␣ administracion ␣ de ␣ una ␣ biblioteca \ n \

13

␣ ␣ ␣ ␣ ␣ con ␣ python ␣ 3\ n \ n \ n \

 

14

␣ ␣ ␣ ␣ Opciones ␣ de ␣ uso \ n \

15

␣ ␣ ␣ ␣

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\ n \ n \

16

␣ ␣ ␣ ␣ ingresar_libro ␣ titulo ␣ --␣ autor ␣ --␣ id_libro ␣ = > ␣ Ingresar ␣ un ␣ libro \ n \ n \

17

␣ ␣ ␣ ␣ borrar_libro ␣ id_libro ␣ = > ␣ Borrar ␣ un ␣ libro \ n \ n \

18

␣ ␣ ␣ ␣ libros_disponibles ␣ = > ␣ Ver ␣ los ␣ libros ␣ disponibles \ n \ n \

19

␣ ␣ ␣ ␣ libros_prestados ␣ = > ␣ Ver ␣ los ␣ libros ␣ prestados \ n \ n \

20

␣ ␣ ␣ ␣ ingresar_cliente ␣ nombre ␣ --␣ id_cliente ␣ = > ␣ Ingresar ␣ un ␣ cliente \ n \ n \

21

␣ ␣ ␣ ␣ borrar_cliente ␣ id_cliente ␣ = > ␣ Borrar ␣ un ␣ cliente \ n \ n \

22

␣ ␣ ␣ ␣ clientes_con_libros ␣ = > ␣ Ver ␣ los ␣ clientes ␣ que ␣ tienen ␣ libros \ n \ n \

23

␣ ␣ ␣ ␣ clientes_sin_libros ␣ = > ␣ Ver ␣ los ␣ clientes ␣ sin ␣ libros \ n \ n \

24

␣ ␣ ␣ ␣ prestar_libro ␣ id_cliente ␣ --␣ id_libro ␣ = > ␣ Prestar ␣ un ␣ libro ␣ a ␣ un ␣ cliente \ n \ n \

25

␣ ␣ ␣ ␣ recibir_libro ␣ id_cliente ␣ --␣ id_libro ␣ = > ␣ Recibir ␣ un ␣ libro ␣ prestado ␣ a \ n \

26

␣ ␣ ␣ ␣ ␣ un ␣ cliente \ n \ n \

 

27

␣ ␣ ␣ ␣ ayuda ␣ = > ␣ Muestra ␣ la ␣ ayuda \ n \ n \

28

␣ ␣ ␣ ␣ salir ␣ = > ␣ Salir \ n \ n \

 

29

␣ ␣ ␣ ␣ "

 

30

prompt

= " \ nBiblioteca > > ␣ "

31

19

32

def

do_ingresar_libro ( self , arg , * args ):

33

’ Ingresar ␣ un ␣ nuevo ␣ libro ’

34

arg

=

parse ( arg )

35

try :

36

biblio . ingresar_libro ( arg [0] ,

arg [1] ,

arg [2])

37

except :

 

38

self . default ()

 

39

40

def

do_borrar_libro ( self ,

id_libro , * args ):

41

’ Borrar ␣ un ␣ libro ’

 

42

biblio . borrar_libro ( id_libro )

43

44

def

do_libros_disponibles ( self , * args ):

45

’ Muestra ␣ los ␣ libros ␣ disponibles ’

46

print ( biblio . l_disponibles )

47

48

def

do_libros_prestados ( self , * args ):

49

’ Muestra ␣ los ␣ libros ␣ prestados ’

50

print ( biblio . l_prestados )

51

52

def

do_ingresar_cliente ( self , arg , * args ):

53

’ Ingresar ␣ un ␣ nuevo ␣ cliente ’

54

arg

=

parse ( arg )

55

try :

56

biblio . ingresar_cliente ( arg [0] ,

arg [1])

57

except :

 

58

self . default ()

 

59

60

def

do_borrar_cliente ( self ,

id_cliente , * args ):

61

’ Borrar ␣ un ␣ cliente ’

 

62

biblio . borrar_cliente ( id_cliente )

63

64

def

do_clientes_con_libros ( self , * args ):

65

’ Muestra ␣ los ␣ clientes ␣ con ␣ libros ␣ en ␣ prestamo ’

66

print ( biblio . c_con_libros )

67

68

def

do_clientes_sin_libros ( self , * args ):

69

’ Muestra ␣ los ␣ clientes ␣ sin ␣ libros ␣ en ␣ prestamo ’

70

print ( biblio . c_sin_libros )

20

71

72

def

do_prestar_libro ( self , arg , * args ):

 

73

’ Prestarle ␣ un ␣ libro ␣ a ␣ un ␣ cliente ’

74

arg

=

parse ( arg )

 

75

try :

76

biblio . prestar_libro ( arg [0] ,

arg [1])

77

except :

 

78

self . default ()

 

79

80

def

do_recibir_libro ( self , arg , * args ):

 

81

’ Recibir ␣ un ␣ libro ␣ de ␣ un ␣ cliente ’

82

arg

=

parse ( arg )

 

83

try :

84

biblio . recibir_libro ( arg [0] ,

arg [1])

85

except :

 

86

self . default ()

 

87

88

def

do_ayuda ( self ,

* args ):

89

’ Muestra ␣ ayuda ␣ adicional ’

 

90

os . system ( " clear " )

91

with

open ( ’ README . txt ’) as

fichero :

92

ayuda

=

fichero . read ()

93

print ( ayuda )

 

94

95

def

do_salir ( self , * args ):

 

96

’ Salir ’

 

97

os . system ( " clear " )

 

98

return

True

 

99

100

def

precmd ( self ,

line ):

 

101

return

line

+

" \ n "

102

103

def

default ( self ):

 

104

print ( " \ n \ t :( ␣ = > ␣ ERROR : ␣ Elija ␣ una ␣ opcion ␣ valida \ n " )

105

print ( " \ n \ t :) ␣ = > ␣ Ingrese ␣ ayuda ␣ ( o ␣ ?) ␣ para ␣ obtener ␣ ayuda \

106

␣ ␣ ␣ ␣ ␣ ␣ ␣ ␣ adicional \ n " )

 

107

108

def

parse ( arg ):

 

109

’ Envia ␣ las ␣ salidas ␣ multiples ␣ a ␣ la ␣ funcion ␣ que ␣ lo ␣ requiere ’

21

110

while

True :

 

111

if

" ␣ ␣ "

 

in

arg :

 

112

arg

=

arg .

replace ( " ␣ ␣ " ,

" ␣ " )

113

elif

" ␣ --"

in

arg :

114

arg

=

arg .

replace ( " ␣ --" ,

"

--" )

115

elif

" --␣ "

in

arg :

116

arg

=

arg .

replace ( " --␣ " ,

" --" )

117

else :

 

118

break

 

119

arg

=

arg . lstrip (). rstrip ()

 

120

arg

=

arg . split ( " --" )

 

121

return

tuple ( arg )

 

122

123

if

name

==

"

main

"

:

124

Interfaz (). cmdloop ()

22