-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
198 lines (175 loc) · 7.99 KB
/
main.py
File metadata and controls
198 lines (175 loc) · 7.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
import sqlite3
from typing import List, Tuple, Optional
class BibliotecaDB:
def __init__(self, nome_db: str = "biblioteca.db"):
self.nome_db = nome_db
self.inicializar_db()
def inicializar_db(self):
"""Inicializa o banco de dados e cria a tabela de livros se ela não existir."""
with sqlite3.connect(self.nome_db) as conn:
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS livros (
id INTEGER PRIMARY KEY AUTOINCREMENT,
titulo TEXT NOT NULL,
autor TEXT NOT NULL,
isbn TEXT UNIQUE,
ano_publicacao INTEGER,
status TEXT DEFAULT 'disponivel'
)
''')
conn.commit()
def adicionar_livro(self, titulo: str, autor: str, isbn: str, ano_publicacao: int) -> bool:
"""Adiciona um novo livro à biblioteca."""
try:
with sqlite3.connect(self.nome_db) as conn:
cursor = conn.cursor()
cursor.execute('''
INSERT INTO livros (titulo, autor, isbn, ano_publicacao)
VALUES (?, ?, ?, ?)
''', (titulo, autor, isbn, ano_publicacao))
conn.commit()
return True
except sqlite3.IntegrityError:
print("Erro: ISBN já existe no banco de dados.")
return False
def obter_todos_livros(self) -> List[Tuple]:
"""Recupera todos os livros da biblioteca."""
with sqlite3.connect(self.nome_db) as conn:
cursor = conn.cursor()
cursor.execute('SELECT * FROM livros')
return cursor.fetchall()
def buscar_livros(self, termo: str) -> List[Tuple]:
"""Busca livros por título ou autor."""
with sqlite3.connect(self.nome_db) as conn:
cursor = conn.cursor()
cursor.execute('''
SELECT * FROM livros
WHERE titulo LIKE ? OR autor LIKE ?
''', (f'%{termo}%', f'%{termo}%'))
return cursor.fetchall()
def atualizar_livro(self, id_livro: int, titulo: Optional[str] = None,
autor: Optional[str] = None, isbn: Optional[str] = None,
ano_publicacao: Optional[int] = None, status: Optional[str] = None) -> bool:
"""Atualiza informações do livro."""
try:
with sqlite3.connect(self.nome_db) as conn:
cursor = conn.cursor()
atualizacoes = []
valores = []
if titulo is not None:
atualizacoes.append('titulo = ?')
valores.append(titulo)
if autor is not None:
atualizacoes.append('autor = ?')
valores.append(autor)
if isbn is not None:
atualizacoes.append('isbn = ?')
valores.append(isbn)
if ano_publicacao is not None:
atualizacoes.append('ano_publicacao = ?')
valores.append(ano_publicacao)
if status is not None:
atualizacoes.append('status = ?')
valores.append(status)
if not atualizacoes:
return False
valores.append(id_livro)
query = f'''
UPDATE livros
SET {', '.join(atualizacoes)}
WHERE id = ?
'''
cursor.execute(query, valores)
conn.commit()
return True
except sqlite3.IntegrityError:
print("Erro: ISBN já existe no banco de dados.")
return False
def deletar_livro(self, id_livro: int) -> bool:
"""Remove um livro da biblioteca."""
with sqlite3.connect(self.nome_db) as conn:
cursor = conn.cursor()
cursor.execute('DELETE FROM livros WHERE id = ?', (id_livro,))
conn.commit()
return cursor.rowcount > 0
def main():
# Cria uma nova biblioteca
biblioteca = BibliotecaDB()
while True:
print("\n=== Sistema de Gerenciamento de Biblioteca ===")
print("1. Adicionar novo livro")
print("2. Ver todos os livros")
print("3. Buscar livro")
print("4. Atualizar livro")
print("5. Deletar livro")
print("6. Sair")
escolha = input("\nDigite sua escolha (1-6): ")
if escolha == "1":
titulo = input("Digite o título do livro: ")
autor = input("Digite o nome do autor: ")
isbn = input("Digite o ISBN: ")
try:
ano = int(input("Digite o ano de publicação: "))
if biblioteca.adicionar_livro(titulo, autor, isbn, ano):
print("Livro adicionado com sucesso!")
else:
print("Falha ao adicionar livro.")
except ValueError:
print("Formato de ano inválido. Por favor, digite um número.")
elif escolha == "2":
livros = biblioteca.obter_todos_livros()
if livros:
print("\nTodos os Livros:")
for livro in livros:
print(f"ID: {livro[0]}, Título: {livro[1]}, Autor: {livro[2]}, "
f"ISBN: {livro[3]}, Ano: {livro[4]}, Status: {livro[5]}")
else:
print("Nenhum livro encontrado na biblioteca.")
elif escolha == "3":
termo = input("Digite o termo de busca (título ou autor): ")
livros = biblioteca.buscar_livros(termo)
if livros:
print("\nResultados da Busca:")
for livro in livros:
print(f"ID: {livro[0]}, Título: {livro[1]}, Autor: {livro[2]}, "
f"ISBN: {livro[3]}, Ano: {livro[4]}, Status: {livro[5]}")
else:
print("Nenhum livro encontrado com esse termo.")
elif escolha == "4":
try:
id_livro = int(input("Digite o ID do livro para atualizar: "))
print("\nDeixe em branco para manter o valor atual")
titulo = input("Digite o novo título (ou pressione Enter para pular): ").strip()
autor = input("Digite o novo autor (ou pressione Enter para pular): ").strip()
isbn = input("Digite o novo ISBN (ou pressione Enter para pular): ").strip()
ano_str = input("Digite o novo ano de publicação (ou pressione Enter para pular): ").strip()
status = input("Digite o novo status (ou pressione Enter para pular): ").strip()
# Converte strings vazias para None
titulo = titulo if titulo else None
autor = autor if autor else None
isbn = isbn if isbn else None
ano = int(ano_str) if ano_str else None
status = status if status else None
if biblioteca.atualizar_livro(id_livro, titulo, autor, isbn, ano, status):
print("Livro atualizado com sucesso!")
else:
print("Falha ao atualizar livro.")
except ValueError:
print("Entrada inválida. Por favor, digite um ID de livro e ano válidos.")
elif escolha == "5":
try:
id_livro = int(input("Digite o ID do livro para deletar: "))
if biblioteca.deletar_livro(id_livro):
print("Livro deletado com sucesso!")
else:
print("Livro não encontrado.")
except ValueError:
print("Entrada inválida. Por favor, digite um ID de livro válido.")
elif escolha == "6":
print("Obrigado por usar o Sistema de Gerenciamento de Biblioteca!")
break
else:
print("Escolha inválida. Por favor, tente novamente.")
if __name__ == "__main__":
main()