En este módulo final, aplicarás todo lo que has aprendido a lo largo del curso en un proyecto práctico. Este proyecto te permitirá consolidar tus conocimientos y habilidades en programación en C, y te proporcionará una experiencia valiosa en el desarrollo de software. A continuación, se presentan las directrices para el proyecto.
Objetivos del Proyecto
- Aplicar conocimientos adquiridos: Utilizar los conceptos y técnicas aprendidas en los módulos anteriores.
- Desarrollar un programa completo: Crear un programa funcional y bien estructurado en C.
- Mejorar habilidades de depuración y optimización: Identificar y corregir errores, y optimizar el rendimiento del programa.
- Documentar el código: Escribir documentación clara y concisa para el código desarrollado.
Requisitos del Proyecto
- Selección del Proyecto
Elige uno de los siguientes tipos de proyectos:
- Gestor de Biblioteca: Un programa que gestione una colección de libros, permitiendo agregar, eliminar, buscar y listar libros.
- Sistema de Gestión de Estudiantes: Un programa que gestione la información de los estudiantes, incluyendo la adición, eliminación, búsqueda y listado de estudiantes.
- Juego de Adivinanza de Números: Un juego en el que el usuario debe adivinar un número generado aleatoriamente por el programa.
- Calculadora Científica: Una calculadora que realice operaciones matemáticas avanzadas como trigonometría, logaritmos, etc.
- Estructura del Programa
El programa debe estar bien estructurado y organizado. Asegúrate de:
- Dividir el código en funciones: Cada función debe tener una única responsabilidad.
- Utilizar estructuras de datos adecuadas: Emplear estructuras, arreglos, punteros, etc., según sea necesario.
- Manejo adecuado de memoria: Utilizar asignación dinámica de memoria cuando sea necesario y evitar fugas de memoria.
- Funcionalidades Mínimas
El programa debe incluir las siguientes funcionalidades mínimas:
- Entrada y salida de datos: Interacción con el usuario a través de la consola.
- Almacenamiento de datos: Uso de estructuras de datos para almacenar información.
- Operaciones CRUD: Crear, Leer, Actualizar y Eliminar datos.
- Manejo de errores: Gestión adecuada de errores y validación de entradas.
- Documentación
La documentación es una parte crucial del proyecto. Debe incluir:
- Comentarios en el código: Explicaciones claras y concisas de las secciones del código.
- Archivo README: Un archivo README.md que describa el proyecto, cómo compilarlo y ejecutarlo, y cualquier otra información relevante.
- Manual de usuario: Instrucciones detalladas sobre cómo usar el programa.
- Evaluación
El proyecto será evaluado en base a los siguientes criterios:
- Funcionalidad: El programa cumple con los requisitos y funciona correctamente.
- Estructura del código: El código está bien organizado y sigue buenas prácticas de programación.
- Manejo de errores: El programa maneja adecuadamente los errores y las excepciones.
- Documentación: La documentación es clara, completa y útil.
- Optimización: El programa está optimizado para un buen rendimiento.
Pasos para Completar el Proyecto
- Planificación: Define el alcance del proyecto y planifica las funcionalidades que implementarás.
- Diseño: Diseña la estructura del programa y las funciones que necesitarás.
- Implementación: Escribe el código del programa, dividiéndolo en funciones y módulos.
- Pruebas y Depuración: Prueba el programa exhaustivamente y corrige cualquier error.
- Optimización: Optimiza el código para mejorar el rendimiento.
- Documentación: Escribe la documentación del código y el manual de usuario.
- Revisión: Revisa el código y la documentación, y realiza mejoras si es necesario.
Ejemplo de Proyecto: Gestor de Biblioteca
Funcionalidades
- Agregar Libro: Permitir al usuario agregar un nuevo libro a la colección.
- Eliminar Libro: Permitir al usuario eliminar un libro de la colección.
- Buscar Libro: Permitir al usuario buscar un libro por título o autor.
- Listar Libros: Mostrar todos los libros en la colección.
Estructura del Código
#include <stdio.h> #include <stdlib.h> #include <string.h> // Definición de la estructura Libro typedef struct { int id; char titulo[100]; char autor[100]; } Libro; // Prototipos de funciones void agregarLibro(); void eliminarLibro(); void buscarLibro(); void listarLibros(); // Variables globales Libro biblioteca[100]; int contadorLibros = 0; int main() { int opcion; do { printf("Gestor de Biblioteca\n"); printf("1. Agregar Libro\n"); printf("2. Eliminar Libro\n"); printf("3. Buscar Libro\n"); printf("4. Listar Libros\n"); printf("5. Salir\n"); printf("Seleccione una opción: "); scanf("%d", &opcion); switch(opcion) { case 1: agregarLibro(); break; case 2: eliminarLibro(); break; case 3: buscarLibro(); break; case 4: listarLibros(); break; case 5: printf("Saliendo...\n"); break; default: printf("Opción no válida\n"); } } while(opcion != 5); return 0; } void agregarLibro() { if (contadorLibros < 100) { Libro nuevoLibro; nuevoLibro.id = contadorLibros + 1; printf("Ingrese el título del libro: "); scanf(" %[^\n]", nuevoLibro.titulo); printf("Ingrese el autor del libro: "); scanf(" %[^\n]", nuevoLibro.autor); biblioteca[contadorLibros] = nuevoLibro; contadorLibros++; printf("Libro agregado exitosamente\n"); } else { printf("No se pueden agregar más libros\n"); } } void eliminarLibro() { int id; printf("Ingrese el ID del libro a eliminar: "); scanf("%d", &id); for (int i = 0; i < contadorLibros; i++) { if (biblioteca[i].id == id) { for (int j = i; j < contadorLibros - 1; j++) { biblioteca[j] = biblioteca[j + 1]; } contadorLibros--; printf("Libro eliminado exitosamente\n"); return; } } printf("Libro no encontrado\n"); } void buscarLibro() { char titulo[100]; printf("Ingrese el título del libro a buscar: "); scanf(" %[^\n]", titulo); for (int i = 0; i < contadorLibros; i++) { if (strcmp(biblioteca[i].titulo, titulo) == 0) { printf("Libro encontrado: ID=%d, Título=%s, Autor=%s\n", biblioteca[i].id, biblioteca[i].titulo, biblioteca[i].autor); return; } } printf("Libro no encontrado\n"); } void listarLibros() { for (int i = 0; i < contadorLibros; i++) { printf("ID=%d, Título=%s, Autor=%s\n", biblioteca[i].id, biblioteca[i].titulo, biblioteca[i].autor); } }
Documentación
Archivo README.md
# Gestor de Biblioteca Este programa permite gestionar una colección de libros, permitiendo agregar, eliminar, buscar y listar libros. ## Compilación Para compilar el programa, use el siguiente comando:
gcc -o gestor_biblioteca gestor_biblioteca.c
./gestor_biblioteca
## Funcionalidades - **Agregar Libro**: Permite agregar un nuevo libro a la colección. - **Eliminar Libro**: Permite eliminar un libro de la colección. - **Buscar Libro**: Permite buscar un libro por título. - **Listar Libros**: Muestra todos los libros en la colección.
Manual de Usuario
# Manual de Usuario - Gestor de Biblioteca ## Introducción Este programa permite gestionar una colección de libros. A continuación, se describen las funcionalidades del programa y cómo utilizarlas. ## Funcionalidades ### 1. Agregar Libro Para agregar un libro, seleccione la opción 1 en el menú principal. Luego, ingrese el título y el autor del libro cuando se le solicite. ### 2. Eliminar Libro Para eliminar un libro, seleccione la opción 2 en el menú principal. Luego, ingrese el ID del libro que desea eliminar. ### 3. Buscar Libro Para buscar un libro, seleccione la opción 3 en el menú principal. Luego, ingrese el título del libro que desea buscar. ### 4. Listar Libros Para listar todos los libros, seleccione la opción 4 en el menú principal. El programa mostrará todos los libros en la colección. ### 5. Salir Para salir del programa, seleccione la opción 5 en el menú principal.
Conclusión
Este proyecto te permitirá aplicar y consolidar los conocimientos adquiridos a lo largo del curso. Asegúrate de seguir las directrices y de documentar adecuadamente tu código. ¡Buena suerte!
Curso de Programación en C
Módulo 1: Introducción a C
- Introducción a la Programación
- Configuración del Entorno de Desarrollo
- Programa Hola Mundo
- Sintaxis y Estructura Básica
Módulo 2: Tipos de Datos y Variables
Módulo 3: Flujo de Control
Módulo 4: Funciones
- Introducción a las Funciones
- Argumentos de Función y Valores de Retorno
- Ámbito y Vida de las Variables
- Funciones Recursivas
Módulo 5: Arreglos y Cadenas
- Introducción a los Arreglos
- Arreglos Multidimensionales
- Manejo de Cadenas
- Funciones de Arreglos y Cadenas
Módulo 6: Punteros
Módulo 7: Estructuras y Uniones
Módulo 8: Asignación Dinámica de Memoria
Módulo 9: Manejo de Archivos
- Introducción al Manejo de Archivos
- Lectura y Escritura de Archivos
- Posicionamiento de Archivos
- Manejo de Errores en Operaciones de Archivos
Módulo 10: Temas Avanzados
- Directivas del Preprocesador
- Argumentos de Línea de Comandos
- Listas de Argumentos Variables
- Multihilo en C
Módulo 11: Mejores Prácticas y Optimización
- Legibilidad del Código y Documentación
- Técnicas de Depuración
- Optimización del Rendimiento
- Consideraciones de Seguridad