Proyecto Final Lógica y Programación Estructurada

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 37

Escuela: UNIVERSIDAD DEL VALLE DE

MÉXICO

Materia: Lógica y programación estructurada

Actividad: 14 Proyecto Integrador Etapa 3

Alumno: Garcia Rubio Karla Itzel

Ciudad: CDMX

Fecha de entrega: 12/06/2023


Introducción: En el presente trabajo referente a la tercera etapa de entrega del
proyecto integrador se programarán las funcionalidades de “Modificaciones de
estudiantes”, “Mostrar todos” y “Buscar estudiante”. De igual forma, se le agregará
la funcionalidad de que los ficheros con los datos de los estudiantes se guarden
dentro de archivos, para evitar que se pierda la información y las acciones
realizadas al cerrar el programa
Desarrollo:
Etapa 1

Menú de Opciones

Alta de estudiantes
Baja de estudiantes
Modificaciones
Búsqueda de
Alumno
Salida

Alta de estudiantes Apellido paterno


Apellido Materno
Matricula
Correo
Baja de estudiantes Matricula
Carrera
Correo
Modificaciones Apellido paterno
Apellido Materno
Carrera
Correo
Búsqueda de alumnos Apellido paterno
Apellido materno
Matricula
Salida
Código fuente
//Catalogo de estudiantes #include
<stdio.h> int main()

{//inicio del programa

char nombre, matricula, apellido1, apellido2, correo, celular;


int opcion1, opcion2;
printf ("Bienvenido a la pagina de la Uni\n"); printf
("¿Qué es lo que necesitas hacer?\n");
printf ("\n Menú de opciones\n");

printf ("1. Alta de estudiantes\n 2. Baja de estudiantes\n 3.


Modificaciones de estudiantes\n 4.
Búsqueda de estudiantes\n 5. Salir de la pagina\n"); printf
("Seleccione una de las opciones\n");
scanf ("%d", & opcion1); return 0;

Etapa 2
Código fuente etapa 2
#include <stdio.h>

#include <string.h>

#include <locale.h>

#define MAX_TAMANIO_VECTOR 10

#define MAX_LARGO 50

void Mostrar_Menu() {

printf("\n--- MENU ---\n");

printf("1. Alta de estudiante\n");

printf("2. Baja de estudiante\n");

printf("3. Modificar estudiante\n");

printf("4. Buscar estudiante\n");


printf("5. Salir\n");

void Funcion_Alta_Estudiante(char Nombres_Estudiantes[][MAX_LARGO], char


Apellidos_Paternos[][MAX_LARGO], char Apellidos_Maternos[][MAX_LARGO], char
Matriculas_Estudiantes[][MAX_LARGO], char Carreras_Estudiantes[][MAX_LARGO], char
Correos_Estudiantes[][MAX_LARGO], char Telfonos_Estudiantes[][MAX_LARGO], int
*tam) {

if (*tam >= MAX_TAMANIO_VECTOR) {

printf("\nNo se pueden introducir más estudiantes.\n");

return;

char Nombre_Estudiante[MAX_LARGO], Apellido_Paterno[MAX_LARGO],


Apellido_Materno[MAX_LARGO], Matricula_Estudiante[MAX_LARGO],
Carrera_Estudiante[MAX_LARGO], Correo_Estudiante[MAX_LARGO],
Telefono_Estudiante[MAX_LARGO];

printf("\n\nALTA DE ESTUDIANTE");

printf("\nNombre del estudiante: ");

scanf("%s", Nombre_Estudiante);

printf("Apelido paterno: ");

scanf("%s", Apellido_Paterno);

printf("Apelido materno: ");

scanf("%s", Apellido_Materno);

printf("Matrícula: ");

scanf("%s", Matricula_Estudiante);

printf("Carrera: ");

scanf("%s", Carrera_Estudiante);

printf("Correo electrónico: ");

scanf("%s", Correo_Estudiante);

printf("Teléfono: ");
scanf("%s", Telefono_Estudiante);

strcpy(Nombres_Estudiantes[*tam], Nombre_Estudiante);

strcpy(Apellidos_Paternos[*tam], Apellido_Paterno);

strcpy(Apellidos_Maternos[*tam], Apellido_Materno);

strcpy(Matriculas_Estudiantes[*tam], Matricula_Estudiante);

strcpy(Carreras_Estudiantes[*tam], Carrera_Estudiante);

strcpy(Correos_Estudiantes[*tam], Correo_Estudiante);

strcpy(Telfonos_Estudiantes[*tam], Telefono_Estudiante);

(*tam)++;

printf("\nEl estudiante '%s' ha sido dado de alta.\n", Nombre_Estudiante);

void Funcion_Baja_Estudiante(char Nombres_Estudiantes[][MAX_LARGO], char


Apellidos_Paternos[][MAX_LARGO], char Apellidos_Maternos[][MAX_LARGO], char
Matriculas_Estudiantes[][MAX_LARGO], char Carreras_Estudiantes[][MAX_LARGO], char
Correos_Estudiantes[][MAX_LARGO], char Telfonos_Estudiantes[][MAX_LARGO], int
*tam) {

if (*tam <= 0) {

printf("\nNo se ha dado de alta a ningún estudiante.\n");

return;

char Nombre_Estudiante[MAX_LARGO], Apellido_Paterno[MAX_LARGO],


Apellido_Materno[MAX_LARGO];

printf("\n\nBAJA DE ESTUDIANTE");

printf("\nNombre del estudiante: ");

scanf("%s", Nombre_Estudiante);

printf("Apelido paterno: ");


scanf("%s", Apellido_Paterno);

printf("Apelido materno: ");

scanf("%s", Apellido_Materno);

int encontrado = 0;

int posicion = -1;

int confirmacion;

// Buscar el estudiante en el vector

for (int i = 0; i < *tam; i++) {

if (strcmp(Nombres_Estudiantes[i], Nombre_Estudiante) == 0 &&


strcmp(Apellidos_Paternos[i], Apellido_Paterno) == 0 &&
strcmp(Apellidos_Maternos[i], Apellido_Materno) == 0 ) {

encontrado = 1;

posicion = i;

break;

if (encontrado) {

// Eliminar el etudiante y reacomodar los elementos restantes

printf("\n\nSeguro que desea dar de baja a '%s %s %s'. Tecleé 1 para SI /


2 para NO: ", Nombre_Estudiante, Apellido_Paterno, Apellido_Materno);

scanf("%i", &confirmacion);

if (confirmacion==1){

for (int i = posicion; i < *tam - 1; i++) {

strcpy(Nombres_Estudiantes[i], Nombres_Estudiantes[i + 1]);

strcpy(Apellidos_Paternos[i], Apellidos_Paternos[i + 1]);


strcpy(Apellidos_Maternos[i], Apellidos_Maternos[i + 1]);

strcpy(Matriculas_Estudiantes[i], Matriculas_Estudiantes[i + 1]);

strcpy(Carreras_Estudiantes[i], Carreras_Estudiantes[i + 1]);

strcpy(Correos_Estudiantes[i], Correos_Estudiantes[i + 1]);

strcpy(Telfonos_Estudiantes[i], Telfonos_Estudiantes[i + 1]);

(*tam)--;

printf("\n\nEl estudiante '%s' ha sido dado de baja.\n",


Nombre_Estudiante);

else {

printf("\n\nBaja cancelada");

} else {

printf("El estudiante '%s' no fue encontrado.\n", Nombre_Estudiante);

int main() {

setlocale(LC_CTYPE,"spanish");

char Nombres_Estudiantes[MAX_TAMANIO_VECTOR][MAX_LARGO],
Apellidos_Paternos[MAX_TAMANIO_VECTOR][MAX_LARGO],
Apellidos_Maternos[MAX_TAMANIO_VECTOR][MAX_LARGO],
Carreras_Estudiantes[MAX_TAMANIO_VECTOR][MAX_LARGO],
Correos_Estudiantes[MAX_TAMANIO_VECTOR][MAX_LARGO],
Matriculas_Estudiantes[MAX_TAMANIO_VECTOR][MAX_LARGO],
Telefonos_Estudiantes[MAX_TAMANIO_VECTOR][MAX_LARGO];

int tam = 0, opcion;

do {

Mostrar_Menu();

printf("Ingrese una opción: ");

scanf("%d", &opcion);

switch (opcion) {

case 1:

Funcion_Alta_Estudiante(Nombres_Estudiantes, Apellidos_Paternos,
Apellidos_Maternos, Carreras_Estudiantes, Correos_Estudiantes,
Matriculas_Estudiantes, Telefonos_Estudiantes, &tam);

break;

case 2:

Funcion_Baja_Estudiante(Nombres_Estudiantes, Apellidos_Paternos,
Apellidos_Maternos, Carreras_Estudiantes, Correos_Estudiantes,
Matriculas_Estudiantes, Telefonos_Estudiantes, &tam);

break;

case 3:

break;

case 4:

break;

case 5:

break;

default:
printf("Opción inválida\n");

break;

} while (opcion != 5);

printf("\nUsted ha salido del programa");

return 0;

Capturas de pantalla etapa 2


Función Alta de estudiante
Función Baja de estudiante
Función Salir
Etapa 3
Código fuente etapa 3
#include <stdio.h>

#include <stdlib.h>

#include <locale.h>

#include <string.h>

struct datos_estudiante {

int matricula_estudiante;

char nombre_estudiante[20];

char apellido_paterno[20];

char apellido_materno[20];

char carrera[40];

char correo_electronico[40];

int telefono;

};

void Mostrar_Menu() {

printf("\n--- MENU ---\n");

printf("1. Alta de estudiante\n");

printf("2. Baja de estudiante\n");

printf("3. Modificar estudiante\n");

printf("4. Mostrar todos\n");

printf("5. Buscar estudiante\n");

printf("6. Salir\n");

void funcion_alta_estudiantes() {

char nombre_fichero[50];
struct datos_estudiante estudiante;

fflush(stdin);

printf("\nIngrese la matrícula del estudiante: ");

scanf("%d", &estudiante.matricula_estudiante);

printf("\nIngrese el nombre de la estudiante: ");

fgets(nombre_fichero, sizeof(nombre_fichero), stdin);

nombre_fichero[strcspn(nombre_fichero, "\n")] = '\0';

fflush(stdin);

printf("\nIngrese apellido paterno estudiante: ");

fgets(estudiante.apellido_paterno,
sizeof(estudiante.apellido_paterno), stdin);

estudiante.apellido_paterno[strcspn(estudiante.apellido_paterno,
"\n")] = '\0';

printf("\nIngrese apellido materno del estudiante: ");

fgets(estudiante.apellido_materno,
sizeof(estudiante.apellido_materno), stdin);

estudiante.apellido_materno[strcspn(estudiante.apellido_materno,
"\n")] = '\0';

fflush(stdin);

printf("\nIngrese carrera del estudiante: ");

fgets(estudiante.carrera, sizeof(estudiante.carrera), stdin);

estudiante.carrera[strcspn(estudiante.carrera, "\n")] = '\0';


printf("\nIngrese el correo electrónico del estudiante: ");

fgets(estudiante.correo_electronico,
sizeof(estudiante.correo_electronico), stdin);

estudiante.correo_electronico[strcspn(estudiante.correo_electronico,
"\n")] = '\0';

fflush(stdin);

printf("\nIngrese el teléfono del estudiante: ");

scanf("%d", &estudiante.telefono);

fflush(stdin);

FILE *f = fopen("estudiantes_nombres.txt", "a");

if (f == NULL) {

printf("\nNo se pudo abrir el fichero que contiene los


nombres de los ficheros.\n");

return;

else

fputs(nombre_fichero, f);

fputc('\n', f);

fclose(f);
FILE *fichero = fopen(nombre_fichero, "w");

if (fichero == NULL) {

printf("\nNo se pudo crear el fichero.\n");

return;

else

fprintf(fichero, "Matrícula: %d\n",


estudiante.matricula_estudiante);

fprintf(fichero, "Nombre: %s\n", nombre_fichero);

fprintf(fichero, "Apellido paterno: %s\n",


estudiante.apellido_paterno);

fprintf(fichero, "apellido materno: %s\n",


estudiante.apellido_materno);

fprintf(fichero, "apellido carrera: %s\n",


estudiante.carrera);

fprintf(fichero, "apellido materno: %s\n",


estudiante.correo_electronico);

fprintf(fichero, "Porcentaje CBD: %d\n",


estudiante.telefono);

printf("\n\nEl fichero del alumno '%s' ha sido creado\n",


nombre_fichero);

fclose(fichero);

int con_o_sin_estudiantes(){
FILE *fichero;

fichero = fopen("estudiantes_nombres.txt", "r");

if (fichero == NULL) {

printf("\nNo se pudo abrir el fichero


'estudiantes_nombres.txt'\n");

return -1;

fseek(fichero, 0, SEEK_END);

if (ftell(fichero) == 0) {

fclose(fichero);

return 1;

fclose(fichero);

return 0;

void impresion_nombres_estudiantes() {

char renglon[50];

FILE *fichero;

fichero = fopen("estudiantes_nombres.txt", "r");

if (fichero == NULL) {

printf("\nNo se pudo abrir el fichero


'estudiantes_nombres'\n");

return;

}
printf("\nLos ficheros creados son:\n");

while (fgets(renglon, sizeof(renglon), fichero) != NULL) {

printf("\n\t-%s", renglon);

fclose(fichero);

void baja_estudiante(){

char nombre_fichero[50], renglon[50];

int hallado = 0, op;

FILE *fichero_origen, *fichero_final;

fflush(stdin);

printf("\n\n¿Cuál es el nombre del estudiante que se dará de


baja?: ");

fgets(nombre_fichero, sizeof(nombre_fichero), stdin);

nombre_fichero[strcspn(nombre_fichero, "\n")] = '\0';

printf("\nConfirme dar de baja al estudiante '%s'\n1 = SI / 2 =


NO: ", nombre_fichero);

scanf("%d", &op);

switch(op)

case 1:
if (remove(nombre_fichero) == 0) {

fichero_origen = fopen("estudiantes_nombres.txt",
"r");

if (fichero_origen == NULL) {

printf("\nError en 'nombres_fichero'.\n");

return;

fichero_final = fopen("temporal.txt", "w");

if (fichero_final == NULL) {

printf("\nEl fichero '%s' no existe.\n",


nombre_fichero);

fclose(fichero_origen);

return;

while (fgets(renglon, sizeof(renglon),


fichero_origen) != NULL) {

if (strstr(renglon, nombre_fichero) != NULL) {

hallado = 1;

continue;

fputs(renglon, fichero_final);

fclose(fichero_final);

if (!hallado) {
printf("\nEl estudiante '%s' no se encontró\n",
nombre_fichero);

remove("temporal.txt");

return;

if (remove("estudiantes_nombres.txt") == 0 &&
rename("temporal.txt", "estudiantes_nombres.txt") == 0) {

printf("\nEstudiante dado de baja


exitosamente\n");

else {

printf("\nNo se pudo borrar a '%s' del


fichero\n", nombre_fichero);

remove("temporal.txt");

printf("\nLos datos del estudiante '%s' han sido


dados de baja correctamente.\n", nombre_fichero);

return;

else {

printf("\nEl estudiante '%s' no existe.\n",


nombre_fichero);

return;

break;

default:

printf("\nNo se dió de baja a ningún estudiante\n");


}

void modificar_estudiante()

char nombre_fichero[50], nombre_estudiante_nuevo[50],


renglon[50];

int op;

struct datos_estudiante estudiante;

FILE *fichero_final, *fichero_original,


*estudiantes_nombres_viejo, *estudiantes_nombres_nuevo;

fflush(stdin);

printf("\n\nIntroduzca el nombre del estudiante que se


modificará: ");

fgets(nombre_fichero, sizeof(nombre_fichero), stdin);

nombre_fichero[strcspn(nombre_fichero, "\n")] = '\0';

fichero_original = fopen(nombre_fichero, "r");

if (fichero_original == NULL){

printf("El estudiante '%s' no existe.", nombre_fichero);

return;

fclose(fichero_original);

fichero_final = fopen("temporal.txt", "w");

if (fichero_final == NULL) {

printf("\nNo se creó el fichero original\n");


return;

fflush(stdin);

printf("\nIntroduzca la nueva matrícula del estudiante: ");

scanf("%d", &estudiante.matricula_estudiante);

printf("\nIntroduzca el nuevo nombre del estudiante: ");

fgets(nombre_estudiante_nuevo, sizeof(nombre_estudiante_nuevo),
stdin);

nombre_estudiante_nuevo[strcspn(nombre_estudiante_nuevo, "\n")]
= '\0';

fflush(stdin);

printf("\nIntroduzca el nuevo apellido paterno de la estudiante:


");

fgets(estudiante.apellido_paterno,
sizeof(estudiante.apellido_paterno), stdin);

estudiante.apellido_paterno[strcspn(estudiante.apellido_paterno,
"\n")] = '\0';

printf("\nIntroduzca el nuevo apellido materno del estudiante:


");

fgets(estudiante.apellido_materno,
sizeof(estudiante.apellido_materno), stdin);

estudiante.apellido_materno[strcspn(estudiante.apellido_materno,
"\n")] = '\0';

fflush(stdin);
printf("\nIntroduzca la nueva carrera del estudiante: ");

fgets(estudiante.carrera, sizeof(estudiante.carrera), stdin);

estudiante.carrera[strcspn(estudiante.carrera, "\n")] = '\0';

printf("\nIntroduzca el nuevo correo electrónico del estudiante:


");

fgets(estudiante.correo_electronico,
sizeof(estudiante.correo_electronico), stdin);

estudiante.correo_electronico[strcspn(estudiante.correo_electronico,
"\n")] = '\0';

fflush(stdin);

printf("\nIntroduzca el nuevo teléfono del estudiante: ");

scanf("%d", &estudiante.telefono);

fflush(stdin);

printf("\nConfirme realizar las modificaciones\n1 = SI / 2 = NO:


");

scanf("%d", &op);

switch(op)

case 1:

fprintf(fichero_final, "Matrícula: %d\n",


estudiante.matricula_estudiante);

fprintf(fichero_final, "Nombre: %s\n",


nombre_estudiante_nuevo);
fprintf(fichero_final, "Apellido paterno: %s\n",
estudiante.apellido_paterno);

fprintf(fichero_final, "apellido materno: %s\n",


estudiante.apellido_materno);

fprintf(fichero_final, "apellido carrera: %s\n",


estudiante.carrera);

fprintf(fichero_final, "apellido materno: %s\n",


estudiante.correo_electronico);

fprintf(fichero_final, "Porcentaje CBD: %d\n",


estudiante.telefono);

fclose(fichero_final);

if (remove(nombre_fichero) == 0 &&
rename("temporal.txt", nombre_estudiante_nuevo) == 0) {

estudiantes_nombres_viejo =
fopen("estudiantes_nombres.txt", "r");

estudiantes_nombres_nuevo =
fopen("fichero_temporal.txt", "w");

const char *nombre_viejo = nombre_fichero;

if (estudiantes_nombres_viejo == NULL ||
estudiantes_nombres_nuevo == NULL) {

printf("\nNo se pudieron abrir los ficheros de


nombres.\n");

return;

while (fgets(renglon, sizeof(renglon),


estudiantes_nombres_viejo) != NULL) {

char *lugar = strstr(renglon, nombre_viejo);


if (lugar) {

int lugar_especifica = lugar - renglon;

fwrite(renglon, sizeof(char),
lugar_especifica, estudiantes_nombres_nuevo);

fputs(nombre_estudiante_nuevo,
estudiantes_nombres_nuevo);

fputs(renglon + lugar_especifica +
strlen(nombre_viejo), estudiantes_nombres_nuevo);

} else {

fputs(renglon, estudiantes_nombres_nuevo);

fclose(estudiantes_nombres_nuevo);

fclose(estudiantes_nombres_viejo);

if (remove("estudiantes_nombres.txt") == 0 &&
rename("fichero_temporal.txt", "estudiantes_nombres.txt") == 0) {

printf("\nLos datos de la estudiante han sido


modificados correctamente.\n");

} else {

printf("\nNo se pudo modificar a ningún


estudiante\n");

else {
printf("\nNo se modificó a ningún estudiante\n");

remove("temporal.txt");

break;

default:

printf("\nNo se modificó a ningún estudiante");

break;

void impresion_de_nombres()

char nombre_fichero[40], renglon[60];

fflush(stdin);

printf("\nEscriba el nombre del fichero que desee abrir: ");

fgets(nombre_fichero, sizeof(nombre_fichero), stdin);

nombre_fichero[strcspn(nombre_fichero, "\n")] = '\0'; // Elimina


el caracter de nueva línea

FILE *fichero = fopen(nombre_fichero, "r");

if (fichero == NULL) {

printf("\nNo existe el fichero de '%s'.\n", nombre_fichero);

return;
}

printf("\nLos datos de %s son:\n", nombre_fichero);

// Este while imprime los datos dentro del fichero

while (fgets(renglon, sizeof(renglon), fichero) != NULL)

printf("%s\n", renglon);

fclose(fichero);

void eliminar_ultimos_saltos_de_renglon()

FILE *fichero = fopen("estudiantes_nombres.txt", "r+");

if (fichero == NULL) {

printf("Error al abrir el fichero\n");

return;

fseek(fichero, -1, SEEK_END);

int c = fgetc(fichero);

while (c == '\n') {

fseek(fichero, -1, SEEK_END);

fputc('\0', fichero);
}

fclose(fichero);

int main() {

int seleccion;

int resultado;

setlocale(LC_CTYPE, "spanish");

do {

Mostrar_Menu();

scanf("%d", &seleccion);

printf("\n**********************************************************
*************************************");

switch(seleccion) {

case 1:

funcion_alta_estudiantes();

printf("\n");

break;

case 2:

resultado = con_o_sin_estudiantes();

if (resultado == -1)

printf("Error");
printf("\n");

else if (resultado == 1)

printf("\nNO SE HA DADO DE ALTA NINGÚN


ESTUDIANTE");

printf("\n");

else

impresion_nombres_estudiantes();

baja_estudiante();

eliminar_ultimos_saltos_de_renglon();

printf("\n");

break;

case 3:

resultado = con_o_sin_estudiantes();

if (resultado == -1)

printf("Error");

printf("\n");

else if (resultado == 1)
{

printf("\nNO SE HA DADO DE ALTA NINGÚN


ESTUDIANTE");

printf("\n");

else

impresion_nombres_estudiantes();

printf("\n");

modificar_estudiante();

printf("\n");

break;

case 4:

resultado = con_o_sin_estudiantes();

if (resultado == -1)

printf("Error");

else if (resultado == 1)

printf("\nNO SE HA DADO DE ALTA NINGÚN


ESTUDIANTE");

}
else

impresion_nombres_estudiantes();

printf("\n");

impresion_de_nombres();

printf("\n");

break;

case 5:

resultado = con_o_sin_estudiantes();

if (resultado == -1)

printf("Error");

else if (resultado == 1)

printf("\nNO SE HA DADO DE ALTA NINGÚN


ESTUDIANTE");

else

impresion_de_nombres();

printf("\n");

break;
case 6:

break;

default:

printf("\nSELECCIÓN NO VALIDA\n");

printf("\n");

} while (seleccion != 6);

printf("\nPrograma termniado. Vuelva pronto!");

return 0;

}
Capturas de pantalla etapa 3
Opción Modificar estudiante
Supuesto no se confirma modificar al estudiante
Supuesto se confirma modificar al estudiante
Supuesto no hay ningún alumno dado de alta

Opción Mostrar todos


Supuesto de que sí hay estudiantes dados de alta
Supuesto no existe el alumno buscado

Supuesto no hay alumnos dados de alta


Opción Buscar estudiante
Supuesto se muestra al estudiante

Supuesto no existe el alumno buscado


Supuesto no hay ningún alumno dado de alta

Conclusiones: Se requirió cambiar el diseño del programa en aspectos como


hacer uso de structs para gradar la información de los estudiantes en vez de
hacerlo en vectores bidimensionales, y de esta forma se minimizó el código
necesario para registrar a los estudiantes. La ventaja de hacerlo de esta forma fue
que se pudo meter la información de los estudiantes dentro de archivos de manera
más sencilla pues bastó con utilizar la función fprinf para introducir los datos dados
por el usuario. Así mismo se utilizó un archivo maestro llamado
“estudiantes_nombres” en donde se iban guardando los nombres de los archivos
creados con la información de los alumnos y con esto sólo hizo falta introducir el
nombre del alumno deseado con el cual se puede tanto mostrar los datos de ese
alumno, como modificar o borrar dicho fichero. En el caso de borrar a un
estudiante, simplemente se elimina el nombre del de dicho estudiante del archivo
maestro, y en caso de que al modificar a un estudiante se cambie su nombre, de
igual forma se cambia el nombre de dicho estudiante en el archivo maestro donde
únicamente se encuentra el nombre, así como el nombre del archivo que contine
los datos del alumno.
Bibliografía
• Christian León. (2014d, June 23). Programación en C - Lectura de
archivos [Video]. YouTube. https://www.youtube.com/watch?v=PPK28h5TmHc
• Christian León. (2014e, August 1). Programación en C - Escritura en
archivos [Video]. YouTube. https://www.youtube.com/watch?v=XDmtYJx7t1I
• Christian León. (2014b, February 8). Programación en C - MANEJO DE CADENAS
- Parte 1 [Video]. YouTube. https://www.youtube.com/watch?v=BKnIjerMHGA
• Manejo de Archivos en C. (n.d.-b). Universidad De Concepoción. Retrieved July 1,
2023, from https://w3.ual.es/~abecerra/ID/archivos

También podría gustarte