Proyecto Final Lógica y Programación Estructurada
Proyecto Final Lógica y Programación Estructurada
Proyecto Final Lógica y Programación Estructurada
MÉXICO
Ciudad: CDMX
Menú de Opciones
Alta de estudiantes
Baja de estudiantes
Modificaciones
Búsqueda de
Alumno
Salida
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() {
return;
printf("\n\nALTA DE ESTUDIANTE");
scanf("%s", Nombre_Estudiante);
scanf("%s", Apellido_Paterno);
scanf("%s", Apellido_Materno);
printf("Matrícula: ");
scanf("%s", Matricula_Estudiante);
printf("Carrera: ");
scanf("%s", Carrera_Estudiante);
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)++;
if (*tam <= 0) {
return;
printf("\n\nBAJA DE ESTUDIANTE");
scanf("%s", Nombre_Estudiante);
scanf("%s", Apellido_Materno);
int encontrado = 0;
int confirmacion;
encontrado = 1;
posicion = i;
break;
if (encontrado) {
scanf("%i", &confirmacion);
if (confirmacion==1){
(*tam)--;
else {
printf("\n\nBaja cancelada");
} else {
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];
do {
Mostrar_Menu();
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;
return 0;
#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("6. Salir\n");
void funcion_alta_estudiantes() {
char nombre_fichero[50];
struct datos_estudiante estudiante;
fflush(stdin);
scanf("%d", &estudiante.matricula_estudiante);
fflush(stdin);
fgets(estudiante.apellido_paterno,
sizeof(estudiante.apellido_paterno), stdin);
estudiante.apellido_paterno[strcspn(estudiante.apellido_paterno,
"\n")] = '\0';
fgets(estudiante.apellido_materno,
sizeof(estudiante.apellido_materno), stdin);
estudiante.apellido_materno[strcspn(estudiante.apellido_materno,
"\n")] = '\0';
fflush(stdin);
fgets(estudiante.correo_electronico,
sizeof(estudiante.correo_electronico), stdin);
estudiante.correo_electronico[strcspn(estudiante.correo_electronico,
"\n")] = '\0';
fflush(stdin);
scanf("%d", &estudiante.telefono);
fflush(stdin);
if (f == NULL) {
return;
else
fputs(nombre_fichero, f);
fputc('\n', f);
fclose(f);
FILE *fichero = fopen(nombre_fichero, "w");
if (fichero == NULL) {
return;
else
fclose(fichero);
int con_o_sin_estudiantes(){
FILE *fichero;
if (fichero == NULL) {
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;
if (fichero == NULL) {
return;
}
printf("\nLos ficheros creados son:\n");
printf("\n\t-%s", renglon);
fclose(fichero);
void baja_estudiante(){
fflush(stdin);
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;
if (fichero_final == NULL) {
fclose(fichero_origen);
return;
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) {
else {
remove("temporal.txt");
return;
else {
return;
break;
default:
void modificar_estudiante()
int op;
fflush(stdin);
if (fichero_original == NULL){
return;
fclose(fichero_original);
if (fichero_final == NULL) {
fflush(stdin);
scanf("%d", &estudiante.matricula_estudiante);
fgets(nombre_estudiante_nuevo, sizeof(nombre_estudiante_nuevo),
stdin);
nombre_estudiante_nuevo[strcspn(nombre_estudiante_nuevo, "\n")]
= '\0';
fflush(stdin);
fgets(estudiante.apellido_paterno,
sizeof(estudiante.apellido_paterno), stdin);
estudiante.apellido_paterno[strcspn(estudiante.apellido_paterno,
"\n")] = '\0';
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.correo_electronico,
sizeof(estudiante.correo_electronico), stdin);
estudiante.correo_electronico[strcspn(estudiante.correo_electronico,
"\n")] = '\0';
fflush(stdin);
scanf("%d", &estudiante.telefono);
fflush(stdin);
scanf("%d", &op);
switch(op)
case 1:
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");
if (estudiantes_nombres_viejo == NULL ||
estudiantes_nombres_nuevo == NULL) {
return;
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) {
} else {
else {
printf("\nNo se modificó a ningún estudiante\n");
remove("temporal.txt");
break;
default:
break;
void impresion_de_nombres()
fflush(stdin);
if (fichero == NULL) {
return;
}
printf("%s\n", renglon);
fclose(fichero);
void eliminar_ultimos_saltos_de_renglon()
if (fichero == NULL) {
return;
int c = fgetc(fichero);
while (c == '\n') {
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("\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("\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)
}
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)
else
impresion_de_nombres();
printf("\n");
break;
case 6:
break;
default:
printf("\nSELECCIÓN NO VALIDA\n");
printf("\n");
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