Desarrollo de un programa en Python 3 para gestionar una biblioteca (Versión 0.2) Camilo Camilo Bernal Bernal
∗
9 de mayo de 2016
∗
CONTENIDO Página
1. Introducci Introducción ón
1
2. Análisis Análisis prelimin preliminar ar
2
3. Algoritm Algoritmos os Básicos Básicos
3
3.1. 3.1. Ingr Ingresa esarr libro libro . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3.2. 3.2. Borr Borrar ar lib libro ro . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
3.3. 3.3. Ingresar Ingresar clien cliente te . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3.4. 3.4. Borr Borrar ar clien cliente te . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3.5. 3.5. Pres Presta tarr libro libro . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
3.6. 3.6. Rec Recib ibir ir lib libro ro . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
4. Uso del del program programa a
10
5. Conclusi Conclusiones ones
12
6. Lecturas Lecturas recomend recomendadas adas
13
A. Anexos
14
A.1. A.1. Código Código pytho pythonn . . . . . . . . . . . . . . . . . . . . . . . . . . 14 A.2. A.2. Inter Interfaz faz de usuari usuarioo . . . . . . . . . . . . . . . . . . . . . . . . 19 I
1.
Intr Introdu oducc cció ión 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 pres presen enta ta un prob proble lema ma de gest gestió iónn de una una bibl biblio iote teca ca,, en la cual cual se deben 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 concluyendo con un programa en lenguaje Python 3, que si bien no es perfecto, al menos funciona como prototipo.
1
2.
Anál Anális isis is prel prelim imin inar ar
Se requiere realizar un programa que permite realizar las tareas más comunes en una bibl biblio iote teca. ca. Las tare tareas as ese esenci ncial ales es son: son: Ingr Ingres esar ar nuev nuevos os libr libros os,, Borr Borrar ar libros, Ingresar nuevos socios, Borrar socios, Prestar y recibir libros. Inicialmente mente se repres represen entar tarán án los algori algoritmo tmoss corres correspondi pondien entes tes a est estas as tareas tareas como como diagramas de flujo. Se recomienda hacer un trabajo de programación incremental, esto es ir realizan lizando do pequeñ pequeños os cambi cambios os al progr program amaa y volv volver er a llam llamar ar al inté intérp rpre rete te para para tareas de depuración, a fin de que cuando se concluya la tarea no se tenga una cantidad desconocida de errores. Una Una de las las may mayores ores frus frustr trac acio ione ness que que en lo perso persona nall he teni tenido do real realiz izan ando do prog progra ramas mas,, se rela relaci ciona ona con el bloqu bloqueo eo me ment ntal al ante ante una una canti cantida dadd exces excesiv ivaa de códig códigoo y exce excepci pcion ones es.. Lo que que reco recomi mien endo do es real realiz izar ar un dise diseño ño prev previo io y ayudarse con diagramas de flujo. Antes de escribir una sola línea de código, es muy conv convenien eniente te tener tener una una idea idea bási básica ca sobre sobre cómo cómo reso resolv lver er el probl problema ema;; este pequeño truco ahorrará muchas horas de trabajo y mucha frustración.
2
3.
Algo Algori ritm tmos os Bási Básico coss
El resultado de la aplicación de los algoritmos que se muestran a continuación se encu encuen entr tran an en el anex anexoo A.1, A.1, dond dondee se pres presen enta ta el códig códigoo para para las las clas clases es que representarán a cada una de las entidades que conforman la biblioteca.
3.1. 3.1.
Ingr Ingres esar ar libr libro o
Figura 1: Algoritmo - Ingresar libro
Fuente: uente: Elaboración Elaboración propia
3
3.2. 3.2.
Borr Borrar ar libr libro o
Figura 2: Algoritmo - Borrar libro
Fuente: uente: Elaboración Elaboración propia
4
3.3. 3.3.
Ingr Ingres esar ar clie clien nte
Figura 3: Algoritmo - Ingresar Cliente
Fuente: uente: Elaboración Elaboración propia
5
3.4. 3.4.
Borr Borrar ar clie clien nte
Figura 4: Algoritmo - Borrar Cliente
Fuente: uente: Elaboración Elaboración propia
6
7
3.5. 3.5.
Pres Presta tar r libr libro o
Figura 5: Algoritmo - Prestar libro
Fuente: uente: Elaboración Elaboración propia
8
3.6. 3.6.
Reci Recibi bir r libr libro o
Figura 6: Algoritmo - Recibir libro
Fuente: uente: Elaboración Elaboración propia
9
4.
Uso Us o del del pro program rama
Para empezar a usar el programa, se ubica la ruta de trabajo en el directorio del código (..principal/Codigo/) y se ejecuta el comando ./Administrar.py ./Administrar.py , con lo cual se obtiene el resultado que se muestra en la figura 7. El códig códigoo de la interfaz de usuario se encuentra en el anexo A.2.
10
Figura 7: Interfaz de usuario
Fuente: uente: Elaboración Elaboración propia
11
5.
Conc Conclu lusi sion ones es
Antes de acometer la escritura de código, conviene realizar un análisis bási básico co,, un dise diseño ño prel prelim imin inar ar y la escr escrit itur uraa del del pseu pseudoc docódi ódigo go,, con con lo cual se puede aumentar la productividad y reducir la frustración en el proceso de depuración. Python Pyth on 3 es un es estu tupen pendo do leng lenguaj uajee para para apre aprend nder er a prog progra rama mar, r, y si a es esto to se le suma suma un código código conv convenien eniente temen mente te dist distri ribui buido do junt juntoo con con los los comen comenta tari rios os perti pertinen nente tes, s, es posib posible le dism dismin inui uirr la proba probabi bililidad dad de ’bloq ’bloqueo ueo me ment ntal al’’ que que sufr sufree nues nuestr troo cer cereb ebro ro ante ante objet objetos os abstr abstrac acto toss y poco intuitivos. La progr program amaci ación ón incr increm emen enta tall consi consist stee en escr escrib ibir ir unas unas pocas pocas línea líneass y ejecuta ejecutarr pruebas pruebas constan constantes tes sobre sobre ellas. ellas. Est Estoo facili facilita ta enormem enormement entee las tareas posteriores de depuración y evita sorpresas al final.
12
6.
Lect Lectur uras as reco recome mend ndad adas as
Hay varios buenos manuales en internet. En lo personal recomiendo que busquen en google los ficheros PDF con los siguientes títulos: 1. "Apr "Aprend endaa a Pensar ensar Como Como un Progr Programa amador dor con Py Pyth thon" on",, de Alle Allenn DowDowney 2. "Inm "Inmer ersi sión ón en Py Pyth thon on 3", de Mark Mark Pilg Pilgri rim m 3. "El tutori tutorial al de Py Pyth thon" on",, de Guid Guidoo van Rossu Rossum m 4. "Pyth "Python on Refer Referenc encee Manual Manual", ", de Guid Guidoo van Rossu Rossum m
13
A.
A.1. A.1.
Anexos
Códi Código go pytho ython n
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ó decidió constru construir ir tre tress objetos: objetos: Libro, Libro, Client Clientee y Biblio Biblioteca tecario rio.. Est Estee último último objeto es el que se encarga de administrar las relaciones entre los clientes y la biblioteca. A con contin tinuaci uación ón se pres presen enta ta una una prop propue uest staa del del códig códigoo en Py Pyth thon on 3, tal tal vez es esté té plaga plagada da de erro errore res, s, ingen ingenui uidad dades es e inco inconsi nsist sten encia cias, s, pero pero incl inclus usoo de eso eso podemos aprender, y aprender es el único objetivo de este documento.
Listado 1: Clases de Biblioteca 1
# ! / u sr sr / b i n / en en v p y th th o n3 n3
2 3 4
class Libro():
"""Objetoquerepresentaunlibro""" d ef __ _ _ in i n it i t __ _ _ ( s el el f ,
5
t it it ul ul o ,
6
s el e l f . t it i t u lo lo = t i tu tu l o
7
s el e l f . a ut u t o r = a u to to r
8
a ut ut or or ,
id ):
self. id = id s el e l f . p r es es t ad ad o = N on on e
9
d ef __str__(self):
10
m sg s g = " \ n T it it u lo lo : " + st r ( s e l f . t i t u l o ) + " \ n a u t o r : " +st r (self.autor)\
11 12
+ " \ n i d : " + st r (self. id ) + " \ n P r e s t a d o : " +s t r ( s e l f . p r e s t a d o ) + " \ n "
13
return m sg
14 15
14
16 17 18
class Cliente():
"""Objetoquerepresentauncliente""" d ef _ _ i n it i t _ _ ( se s e lf lf ,
19
n om om br br e ,
id ):
s el e l f . n om o m b re re = n o mb mb r e
20
21
self. id = id s e lf lf . l i b r o s = list ()
22
d ef __str__(self):
23
m sg s g = " \ n N om om b re re : " + st r ( s e l f . n o m b r e ) + " \ n i d : " +s tr ( s e l f . id )\
24 25
+ " \ n l i b r o s : " + s tr ( s e l f . l i b r o s ) + " \ n "
26
return m sg
27 28 29 30 31
class B i b l i o t e c ar a r i o ( L i br b r o , C l i en en t e ) :
"""Objetoquerepresentaunbibliotecario""" d ef __init__(self):
32 33
s e lf lf . l i b r o s = dict ()
34
s e lf lf . c l i e n t e s = dict ()
35
s e lf lf . l _ d i s p o n i bl b l e s = list ()
36
s e lf lf . l _ p r e s t a do d o s = list ()
37
s e lf lf . c _ s i n _ l i b ro r o s = list ()
38
s e lf lf . c _ c o n _ l i b ro r o s = list ()
39
d ef i n g r e sa s a r _ l i br b r o ( s e lf l f , t i tu tu l o , a u to to r , i d _ l ib ib r o ) :
40 41
"""Metodoquedefinecomoingresarunlibro"""
42
# N u ev ev o l ib ib r o ?
43
if self.libros.__contains__(id_libro):
44
print ( " \ n : ( = > E R R O R : L i b r o y a e x i s t e \ n " )
45
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
46
return
47
# C r e a r l i b ro ro
48
n _ l i br br o = L i br br o ( t i t ul ul o , a u to to r , i d _ li li b r o )
49
self.libros.__setitem__(n_libro. id ,
50
self.l_disponibles.append(n_libro. id )
n _ li li br br o )
51
d ef b o r r a r _ l ib i b r o ( s e lf lf , i d _ l ib ib r o ) :
52 53 54
"""Metodoquedefinecomoborrarunlibro""" # E x is i s t e e l l i br br o ?
15
i f n ot ot self.libros.__contains__(id_libro):
55 56
print ( " \ n : ( = > E R RO RO R : E l l i b ro ro n o e x i s t e \ n " )
57
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
58
return
59
# E s t a d i s p on on i b l e ?
60
i f n ot ot self.l_disponibles.__contains__(id_libro):
61
print ( " \ n : ( = > E R RO RO R : E l l i b ro r o n o e s t a d i s p o ni ni b l e \ n " )
62
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
63
return
# E l i m i n ar a r l i br br o
64 65
self.libros.__delitem__(id_libro)
66
self.l_disponibles.remove(id_libro)
67
d ef i ng ng r es e s a r _c _ c l ie i e n te t e ( s el el f ,
68 69
n om om br br e ,
i d _c _c l ie i e n te te ) :
"""Metodoquedefinecomoingresarunnuevoclient e"""
70
# N u e v o c l i en en t e ?
71
if self.clientes.__contains__(id_cliente):
72
print ( " \ n : ( = > E R RO RO R : C l i e n te te y a e x i s t e \ n " )
73
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
74
return
75
# C r e a r c l i en en t e
76
n _ cl cl i en en t e = C l ie ie n te te ( n o mb mb re re ,
i d _c _c l ie i e n te te )
77
self.clientes.__setitem__(n_cliente. id ,
78
self.c_sin_libros.append(n_cliente. id )
n _c _ c li li en e n te te )
79
d ef b or or r ar a r _ cl c l i en e n t e ( se s e lf lf ,
80 81
i d _c _c l ie i e n te te ) :
"""Metodoquedefinecomoborraruncliente"""
82
# E x i s t e c l i en en t e ?
83
i f n ot ot self.clientes.__contains__(id_cliente):
84
print ( " \ n : ( = > E R RO RO R : E l c l i e nt n t e n o e x i s te te \ n " )
85
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
86
return
87
# C l i en en t e s in in l i br br o s ?
88
i f n ot ot self.c_sin_libros.__contains__(id_cliente):
89
print ( " \ n : ( = > E R RO RO R : E l c l i e nt n t e t i e n e l i b r os os \ n " )
90
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
91
return
# E l i m i n ar a r c l i en en t e
92 93
self.clientes.__delitem__(id_cliente)
16
94
self.c_sin_libros.remove(id_cliente)
95
d ef p re re s ta t a r _l _ l i br b r o ( s el el f ,
96 97
i d_ d _ c li li en en t e ,
i d _l _l i br br o ) :
"""Metodoquedefinecomoprestarunlibro"""
98
# E x is i s t e e l l i br br o ?
99
i f n ot ot self.libros.__contains__(id_libro):
100
print ( " \ n : ( = > E R RO RO R : N o e x i s te te e l l i b r o \ n " )
101
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
102
return
103
# E x is i s t e e l c l ie ie n te te ?
104
i f n ot ot self.clientes.__contains__(id_cliente):
105
print ( " \ n : ( = > E R RO RO R : N o e x i s te te e l c l i e n t e \ n " )
106
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
107
return
108
# E l l i br br o e st s t a d i sp sp o ni n i b le le ?
109
i f n ot ot self.l_disponibles.__contains__(id_libro):
110
print ( " \ n : ( = > E R RO RO R : E l l i b ro r o n o e s t a d i s p o ni ni b l e \ n " )
111
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
112
return
113
# El E l c li l i en e n te t e t ie ie ne n e m en en os o s d e t re re s l ib i b ro ro s ?
114
if s e l f . c l i e nt n t e s . _ _ g e t i t em e m _ _ ( i d _ c l i e nt n t e ) . l i b r o s . _ _ l e n_ n_ _ ( ) > 2 :
115
print ( " \ n : ( = > E R RO RO R : E l c l i e nt n t e y a t i e n e t r es es l i b r o s \ n " )
116
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
117
return
118
# R e g is i s t ra ra r c l ie ie n te te e n l i br br o
119
s e lf lf . l i b r o s [ i d _ l ib i b r o ] . p r e s t a do do = i d _ c li li e n t e
120
# R e g is i s t ra ra r l i br br o e n c l ie ie n te te
121
self.clientes[id_cliente].libros.append(id_libro)
122
self.l_disponibles.remove(id_libro)
123
self.l_prestados.append(id_libro)
124
# A c t u a l i za z a r l i st st a c _ s i n_ n_ l i b r os os
125
if self.c_sin_libros.__contains__(id_cliente):
126
self.c_sin_libros.remove(id_cliente)
127
# A c t u a l i za z a r l i st st a c _ c o n_ n_ l i b r os os
128
i f n ot ot self.c_con_libros.__contains__(id_cliente):
129
self.c_con_libros.append(id_cliente)
130
d ef r ec ec i bi b i r _l _ l i br b r o ( s el el f ,
131 132
i d_ d _ c li li en en t e ,
i d _l _l i br br o ) :
"""Metodoquedefinecomorecibirunlibro"""
17
133
# E x is i s t e e l l i br br o ?
134
i f n ot ot self.l_prestados.__contains__(id_libro):
135
print ( " \ n : ( = > E R RO RO R : E l l i b ro r o n o f i g u r a c o mo mo p r e s t a d o \ n " )
136
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
137
return
138
# E x is i s t e e l c l ie ie n te te ?
139
i f n ot ot self.clientes.__contains__(id_cliente):
140
print ( " \ n : ( = > E R RO RO R : N o e x i s te te e l c l i e n t e \ n " )
141
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
142
return
143
# E l l i br br o e st s t a p r es es t ad ad o a l c l ie ie n te te ?
144
i f n ot ot s e lf lf . l i b r o s [ i d _ l ib i b r o ] . p r e s t a do do = = i d _ c li li e n t e :
145
print ( " \ n : ( = > E R RO RO R : E l l i b ro r o n o e s t a p r e s t ad ad o a e s t e c l i e nt nt e \ n " )
146
input ( " \ n ( P r e s i on on e ’ E n t e r ’ p a ra ra t e r m i n a r ) \ n " )
147
return
148
# R e c i b ir i r l i b ro ro
149
s e lf lf . l i b r o s [ i d _ l ib i b r o ] . p r e s t a do do = N o ne ne
150
self.clientes[id_cliente].libros.remove(id_libro) # A c t ua u a l iz iz a r l i br br o s y c l ie ie n te te s
151 152
self.l_disponibles.append(id_libro)
153
self.l_prestados.remove(id_libro)
154
# A c t u a l i za z a r l i st st a c _ s i n_ n_ l i b r os os
155
if s e lf lf . c l i e n t e s [ i d _ c l ie i e n t e ] . l i b r os os . _ _ l e n _ _ ( ) = = 0 :
156
self.c_sin_libros.append(id_cliente)
157
# A c t u a l i za z a r l i st st a c _ c o n_ n_ l i b r os os
158
if s e lf lf . c l i e n t e s [ i d _ c l ie i e n t e ] . l i b r os os . _ _ l e n _ _ ( ) = = 0 :
159
self.c_con_libros.remove(id_cliente)
160
d ef __str__(self):
161 162
m sg sg = " \ n L ib ib r os os d i s p on o n i bl b l e s : " " + st r ( s e l f . l _ d i s p o n i b l e s ) \
163
+ " \ n L i b r os os p r e s ta ta d o s : " + st r ( s e l f . l _ p r e s t a d o s ) \
164
+ " \ n C . s in i n l i b r o s : " + s tr (self.c_sin_libros)\
165
+ " \ n C . c on o n l i b r o s : " + s tr ( s e l f . c _ c o n _ l i b r o s ) + " \ n "
166
return m sg
18
A.2. A.2.
Inte Interf rfaz az de usuar usuario io
La inte interf rfaz az permi permite te facil facilit itar ar enorm enormem emen ente te la inte intera racci cción ón con el usuar usuario io.. En el siguiente listado se muestra el código de la interfaz de usuario.
Listado 2: Código para interfaz de usuario 1
# ! / u sr sr / b i n / en en v p y th th o n3 n3
2 3
from Modulos.Clases import Bibliotecario
4
import sy s
5
import cm d
6
import os
7 8
b i b l i o = B i b l i ot o t e c a r io io ( )
9 10 11 12
class Interfaz(cmd.Cmd):
os.system("clear") i n t ro ro = " \ n B i e n v en e n i d o a l p r o g ra r a m a d e a d m i n i s tr t r a c i o n d e u na n a b i b l i o t e ca ca \ n \
13
conpython3\n\n\n\
14
Opcionesdeuso\n\
15
- - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - -- - - - \n \n \ n \
16
i n g r e s a r_ r _ l i b r o t i t ul u l o - - a u t o r - - i d _l _ l i b r o = > I n g re re s a r u n l i b ro ro \ n \ n \
17
b o r r a r _l _ l i b r o i d _ l i br br o = > B o r r a r u n l i br br o \ n \ n \
18
l i b r o s _ d is i s p o n i b le l e s = > V e r l o s l i b ro ro s d i s p o n i b le le s \ n \ n \
19
l i b r o s _ pr p r e s t a d os os = > V e r l o s l i b ro r o s p r e s t a d os os \ n \ n \
20
i n g r e s a r_ r _ c l i e n te t e n o m b r e - - i d _ c l ie i e n t e = > I n g r es e s a r u n c l i e nt nt e \ n \ n \
21
b o r r a r _ cl c l i e n t e i d _ c l ie i e n t e = > B o r ra r a r u n c l i e nt nt e \ n \ n \
22
c l i e n t e s _c _ c o n _ l i br b r o s = > V e r l o s c l i en e n t e s q u e t i e ne ne n l i b r o s \ n \ n \
23
c l i e n t e s _s _ s i n _ l i br b r o s = > V e r l o s c l i en e n t e s s i n l i b ro ro s \ n \ n \
24
p r e s t a r_ r _ l i b r o i d _ c l ie i e n t e - - i d _ l ib i b r o = > P r e s ta t a r u n l i b r o a un un c l i e n t e \ n \ n \
25
r e c i b i r_ r _ l i b r o i d _ c l ie i e n t e - - i d _ l ib i b r o = > R e c i bi b i r u n l i b r o p r e st st a d o a \ n \
26
uncliente\n\n\
27
ayuda=>Muestralaayuda\n\n\
28
salir=>Salir\n\n\
29
"
30
p r o mp m p t = " \ n B i b li l i o t ec ec a > > "
31
19
d ef d o _ i n g r es e s a r _ l ib i b r o ( s e lf lf , a rg rg , * a r g s ) :
32 33
’Ingresarunnuevolibro’
34
a rg r g = p a rs rs e ( a rg rg )
35
try :
b i b li li o . i n g r e s a r _ li l i b r o ( a r g [ 0] 0 ] , a r g [ 1] 1] , a r g [ 2 ]) ])
36 37
except :
38
self.default()
39
d ef d o _ b o rr r r a r _ l i br b r o ( s e lf lf , i d _l _l i br br o , * a r g s ) :
40 41
42
’Borrarunlibro’ biblio.borrar_libro(id_libro)
43
d ef d o _ l i b r o s _ d i sp s p o n i b l e s ( s el el f , * a r g s ) :
44 45
’Muestraloslibrosdisponibles’
46
print ( b i b l i o . l _ d i s p o n i b l e s )
47
d ef d o _ l i b r o s _ p r es e s t a d o s ( s el el f , * a r g s ) :
48 49
’Muestraloslibrosprestados’
50
print ( b i b l i o . l _ p r e s t a d o s )
51
d ef d o _ i n g r es e s a r _ c l ie ie n t e ( s e lf lf , a rg rg , * a r g s ) :
52 53
’Ingresarunnuevocliente’
54
a rg r g = p a rs rs e ( a rg rg )
55
try :
b i b li li o . i n g r e s a r _ c li l i e n t e ( a r g [ 0] 0] , a r g [ 1 ]) ])
56 57
except :
58
self.default()
59
d ef d o _ b o r ra r a r _ c l ie ie n t e ( s e lf lf , i d _ cl cl i e nt nt e , * a r g s ) :
60 61
62
’Borraruncliente’ biblio.borrar_cliente(id_cliente)
63
d ef d o _ c l i en en t e s _ c o n_ n _ l i b r o s ( s el el f , * a r g s ) :
64 65
66
’Muestralosclientesconlibrosenprestamo’ print ( b i b l i o . c _ c o n _ l i b r o s )
67
d ef d o _ c l i en en t e s _ s i n_ n _ l i b r o s ( s el el f , * a r g s ) :
68 69
70
’Muestralosclientessinlibrosenprestamo’ print ( b i b l i o . c _ s i n _ l i b r o s )
20
71
d ef d o _ p r es e s t a r _ l ib i b r o ( s e lf lf , a rg rg , * a r g s ) :
72
73
’Prestarleunlibroauncliente’
74
a rg r g = p a rs rs e ( a rg rg )
75
try :
b i b li li o . p r e s t a r _ l ib i b r o ( a r g [ 0] 0 ] , a r g [ 1 ]) ])
76
except :
77
78
self.default()
79
d ef d o _ r e ci c i b i r _ l ib i b r o ( s e lf lf , a rg rg , * a r g s ) :
80
81
’Recibirunlibrodeuncliente’
82
a rg r g = p a rs rs e ( a rg rg )
83
try :
b i b li li o . r e c i b i r _ l ib i b r o ( a r g [ 0] 0 ] , a r g [ 1 ]) ])
84
except :
85
86
self.default()
87
d ef d o _ a y ud ud a ( s e lf lf , * a r g s ) :
88 89
’Muestraayudaadicional’
90
os.system("clear")
91
with open ( ’ R E AD A D ME M E . t x t ’ ) a s f i ch ch e ro ro : a y ud ud a = f i ch ch e ro ro . r e ad ad ( )
92
93
print ( a y u d a )
94
d ef d o _ s a li li r ( s e lf lf , * a r g s ) :
95 96
’Salir’
97
os.system("clear")
98
return True
99
d ef p r e c md md ( s e lf l f , l i ne ne ) :
100
101
return l in i n e + " \ n" n"
102
d ef default(self):
103 104
print ( " \ n \ t : ( = > E RR R R O R : E l i ja ja u n a o p c i o n v a l id id a \ n " )
105
print ( " \ n \ t : ) = > I n gr gr e s e a y u da da ( o ? ) p a r a o b t en en e r a y u d a \
106
adicional\n")
107 108 109
d ef parse(arg):
’Envialassalidasmultiplesalafuncionquelorequiere’
21
110
while True:
if " " in arg:
111
a rg rg = a rg rg . r e p la la c e ( " " " , " " )
112
elif " - - " in arg:
113
a rg rg = a rg rg . r e p la la c e ( " " - - " , " - - " )
114 115
elif " - - " in arg:
a rg rg = a rg rg . r e p la la c e ( " --- " , " - - " )
116
else :
117
118
break
119
a r g = a r g . l s t ri ri p ( ) . r s t r i p ( )
120
a rg rg = a rg r g . s p li li t ( " - -" -" )
121
r e t ur ur n t u pl pl e ( a r g )
122 123 124
if _ _ n am a m e __ __ = = " _ _ m ai a i n __ __ " :
Interfaz().cmdloop()
22