Sistema de Gestión de Reservas para Consultorios Médicos con Python + Flask + HTML

- Si es de tu interés este artículo, apoyanos compartiendo en tus redes sociales favoritas y de esa manera también incentivando a tus amigos que crees les pueda interesar a que nos lean.


Sistema de Gestión de Reservas para Consultorios Médicos con Python + Flask + HTML

 






Introducción

La gestión de citas médicas es un aspecto fundamental en el funcionamiento de los consultorios. Este proyecto desarrolla un Sistema de Gestión de Reservas para Consultorios Médicos, utilizando Python con Flask, permitiendo a los usuarios registrar, consultar y eliminar citas médicas de manera eficiente.

Este sistema almacena las reservas en un archivo de texto (reservas.txt), evitando la complejidad de una base de datos, lo que lo hace ligero y fácil de mantener.



Tecnologías Utilizadas

Para el desarrollo del sistema, se han utilizado las siguientes tecnologías:

  • Python 3: Lenguaje de programación principal.

  • Flask: Framework para el desarrollo web en Python.

  • HTML + CSS: Para la interfaz de usuario.

  • Bootstrap (opcional): Para mejorar la apariencia del diseño.

  • Archivos de texto (.txt): Para el almacenamiento de reservas.



Características del Sistema

✅ Registro de citas médicas con datos de paciente, médico, fecha, hora y motivo.
✅ Listado de todas las citas registradas.
✅ Eliminación de una cita específica.
✅ Interfaz web amigable y responsive.
✅ Almacenamiento de datos en un archivo reservas.txt.


Estructura del Proyecto

📂 Ubicación del Proyecto: Documentos/python/ReservasConsultorio

ReservasConsultorio/
│── app.py                # Archivo principal de la aplicación Flask
│── templates/
│   ├── index.html        # Página de inicio con formulario de reserva
│   ├── reservas.html     # Página que muestra la lista de reservas
│── static/
│   ├── styles.css        # Archivo CSS para mejorar la UI
│── reservas.txt          # Archivo donde se almacenan las reservas



Código Fuente

📌 Archivo Principal: app.py

from flask import Flask, render_template, request, redirect, url_for

app = Flask(__name__)
RUTA_ARCHIVO = "reservas.txt"

def leer_reservas():
    reservas = []
    try:
        with open(RUTA_ARCHIVO, "r") as file:
            for linea in file:
                datos = linea.strip().split("|")
                if len(datos) == 5:
                    reservas.append({
                        "paciente": datos[0],
                        "medico": datos[1],
                        "fecha": datos[2],
                        "hora": datos[3],
                        "motivo": datos[4]
                    })
    except FileNotFoundError:
        pass
    return reservas

def guardar_reserva(paciente, medico, fecha, hora, motivo):
    with open(RUTA_ARCHIVO, "a") as file:
        file.write(f"{paciente}|{medico}|{fecha}|{hora}|{motivo}\n")

def eliminar_reserva(paciente, fecha, hora):
    reservas = leer_reservas()
    nuevas_reservas = [r for r in reservas if not (r["paciente"] == paciente and r["fecha"] == fecha and r["hora"] == hora)]
    
    with open(RUTA_ARCHIVO, "w") as file:
        for r in nuevas_reservas:
            file.write(f"{r['paciente']}|{r['medico']}|{r['fecha']}|{r['hora']}|{r['motivo']}\n")

@app.route("/")
def index():
    return render_template("index.html")

@app.route("/reservas")
def mostrar_reservas():
    reservas = leer_reservas()
    return render_template("reservas.html", reservas=reservas)

@app.route("/agregar_reserva", methods=["POST"])
def agregar_reserva():
    paciente = request.form["paciente"]
    medico = request.form["medico"]
    fecha = request.form["fecha"]
    hora = request.form["hora"]
    motivo = request.form["motivo"]
    
    guardar_reserva(paciente, medico, fecha, hora, motivo)
    return redirect(url_for("mostrar_reservas"))

@app.route("/eliminar_reserva", methods=["POST"])
def eliminar():
    paciente = request.form["paciente"]
    fecha = request.form["fecha"]
    hora = request.form["hora"]
    
    eliminar_reserva(paciente, fecha, hora)
    return redirect(url_for("mostrar_reservas"))

if __name__ == "__main__":
    app.run(debug=True)


📌 Página de Inicio: templates/index.html

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Reservas de Consultorio</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
</head>
<body>
    <div class="container">
        <h1>Reservar una Cita Médica</h1>
        <form action="/agregar_reserva" method="POST">
            <label>Paciente:</label>
            <input type="text" name="paciente" required>
            <label>Médico:</label>
            <input type="text" name="medico" required>
            <label>Fecha:</label>
            <input type="date" name="fecha" required>
            <label>Hora:</label>
            <input type="time" name="hora" required>
            <label>Motivo:</label>
            <input type="text" name="motivo" required>
            <button type="submit">Reservar</button>
        </form>
        <a href="/reservas">Ver todas las reservas</a>
    </div>
</body>
</html>


📌 Estilos CSS: static/styles.css

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}
body {
    font-family: Arial, sans-serif;
    background-color: #f4f4f4;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    padding: 20px;
}
.container {
    width: 100%;
    max-width: 800px;
    background: #ffffff;
    padding: 25px;
    border-radius: 10px;
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
    text-align: center;
}
h1 {
    font-size: 24px;
    color: #333;
    margin-bottom: 15px;
}



No hay comentarios