struct Livro {
    let titulo: String
    let autor: String
    var ano: Int?
    var estaEmprestado: Bool
    
    mutating func emprestar() {
        if !estaEmprestado {
            estaEmprestado = true
            print("Livro '\(titulo)' emprestado.")
        } else {
            print("Livro '\(titulo)' já está emprestado.")
        }
    }
    
    mutating func devolver() {
        if estaEmprestado {
            estaEmprestado = false
            print("Livro '\(titulo)' devolvido.")
        } else {
            print("Livro '\(titulo)' já está disponível.")
        }
    }
    
    func status() {
        let estado = estaEmprestado ? "Emprestado" : "Disponível"
        print("• \(titulo) — \(autor) — \(estado)")
    }
}

class Biblioteca {
    private var livros: [Livro] = []
    private var usuarios: [Usuario] = []

    func adicionarLivro(_ livro: Livro) {
        livros.append(livro)
        print("Livro '\(livro.titulo)' adicionado à biblioteca.")
    }

    func listarLivros() {
        print("\n📚 Lista de Livros:")
        for livro in livros {
            livro.status()
        }
    }

    func adicionarUsuario(_ usuario: Usuario) {
        usuarios.append(usuario)
        print("Usuário \(usuario.nome) adicionado.")
    }

    func listarUsuarios() {
        print("\n👥 Lista de Usuários:")
        for usuario in usuarios {
            print("• \(usuario.nome) — \(usuario.cpf)")
        }
    }

    func emprestarLivro(titulo: String, para usuario: Usuario, naData data: String) {
        print("Livro \(titulo) emprestado para \(usuario.nome) na data \(data)")
    }

    func devolverLivro(titulo: String, de usuario: Usuario, naData data: String) {
        print("Livro \(titulo) devolvido por \(usuario.nome) na data \(data)")
    }
}

// Criando 7 livros
let livro1 = Livro(titulo: "11 Minutos", autor: "Paulo Coelho", ano: 2003, estaEmprestado: false)
let livro2 = Livro(titulo: "Se Houver Amanhã", autor: "Sidney Sheldon", ano: 1985, estaEmprestado: false)
let livro3 = Livro(titulo: "A Mão e a Luva", autor: "Machado de Assis", ano: 1874, estaEmprestado: true)
let livro4 = Livro(titulo: "Esaú e Jacó", autor: "Machado de Assis", ano: 1904, estaEmprestado: false)
let livro5 = Livro(titulo: "Por que as Nações Fracassam", autor: "Acemoglu & Robinson", ano: 2002, estaEmprestado: false)
let livro6 = Livro(titulo: "O Cavaleiro dos Sete Reinos", autor: "George R. R. Martin", ano: nil, estaEmprestado: false)
let livro7 = Livro(titulo: "O Morro dos Ventos Uivantes", autor: "Emily Brontë", ano: 1847, estaEmprestado: true)

// Biblioteca
let minhaBiblioteca = Biblioteca()

// Adicionando TODOS os 7 livros
minhaBiblioteca.adicionarLivro(livro1)
minhaBiblioteca.adicionarLivro(livro2)
minhaBiblioteca.adicionarLivro(livro3)
minhaBiblioteca.adicionarLivro(livro4)
minhaBiblioteca.adicionarLivro(livro5)
minhaBiblioteca.adicionarLivro(livro6)
minhaBiblioteca.adicionarLivro(livro7)

minhaBiblioteca.listarLivros()


// criar usuários da biblioeca

class Usuario {
    let nome: String
    let cpf: String
    var livrosEmprestados: [(livro: Livro, dataRetirada: String, dataEntrega: String?)] = []

    init(nome: String, cpf: String) {
        self.nome = nome
        self.cpf = cpf
    }

    func listarLivrosEmprestados() {
        for item in livrosEmprestados {
            print("Livro: \(item.livro.titulo), Retirado: \(item.dataRetirada), Entrega: \(item.dataEntrega ?? "Ainda não devolvido")")
        }
    }
}


let usuario1 = Usuario(nome: "Zulmira", cpf: "123.456.789-00")
let usuario2 = Usuario(nome: "João", cpf: "987.654.321-00")
let usuario3 = Usuario(nome: "Jacob", cpf: "432.987.210-28")


// Empréstimo de livros

minhaBiblioteca.emprestarLivro(
    titulo: "11 Minutos",
    para: usuario1,
    naData: "05/09/2026"
)

minhaBiblioteca.emprestarLivro(
    titulo: "Por que as nações fracassam",
    para: usuario1,
    naData: "07/09/2026"
)

// Devolução dos livros

minhaBiblioteca.devolverLivro(
    titulo: "A Mão e a Luva",
    de: usuario2,
    naData: "06/09/2026"
)
// listar livros emprestados e devolvidos

usuario1.listarLivrosEmprestados()
usuario2.listarLivrosEmprestados()

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: