1 | suma |
2 | resta |
3 | multiplicacion |
4 | division |
5 | fahrenheit |
6 | formula |
7 | formula 1000 |
8 | A mayor q B |
9 | A menor q B |
10 | mayor de 3 numeros |
11 | menor de 3 numeros |
12 | tecla Esc |
13 | Operador +,-,*,/. |
14 | Factorial |
15 | Promedio de 3 notas |
16 | Promedio de Notas (3) con for |
17 | Pi |
18 | fibonacci |
19 | de menor a mayor 3 numeros |
20 | Numero primo |
21 | año bisiesto |
22 | sumatoria (i+1) |
23 | sumatoria (i-1) |
24 | sumatoria (i2)+1 |
25 | calcular edad |
26 | Iva y total de un producto |
27 | Ingresa numero y devuelve en letras |
28 | Buscar frase o carácter |
29 | de mayúscula a minúscula |
30 | concatenar cadenas o caracteres |
31 | Posición de frase o carácter |
32 | Peso de personas |
33 | Ordenar vector metodo burbuja |
34 | Ordenar matriz metodo burbuja |
35 | Piramide de asteriscos |
36 | El ahorcado |
37 | Tres en raya |
38 | Mayor o menor de edad |
39 | Verificar si numero de cedula es correcto |
40 | Códigos de provincia, imprimir Guayaquil y Pichincha |
41 | Archivos (crear, ver, ingresar) txt. |
42 | Archivos (ingresar, buscar, eliminar) txt. |
43 | Alumno promedio (agregar, buscar, guardar, eliminar) |
44 | Estructura de una agenda |
45 | Salario mínimo y máximo |
46 | vector 6 intersección vector vector 6 |
47 | matriz 2x2 intersección matriz 2x2 |
48 | Vector de 5 sueldo, vector incremento 20% |
49 | Vector de 10 Imprimir numeros pares |
50 | Vector de 10 Imprimir numeros impares |
51 | Función Random (BUSCAMINAS) |
52 | Multiplicar matriz de 3x3 por matriz de 3x2 igual a matriz de 3x2 |
52 Ejercicios de Programación C/C++ (Carpeta)
En este programa vamos a crear un MENÚ en el cual se realizaran los siguientes pasos:
1.-Agregar Cédula, Nombre and Apellido.
2.- 2 Notas y calcular automáticamente el promedio .
3.Buscar por Cédula y mostrar todos los datos registrados.
4.-Eliminar por Cédula todos los datos del alumno.
Codigo:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h> /* setlocale */
#include <conio.h>
#define MAX 80
#define VALOR_CENTINELA -1
/* Estructuras */
struct alumno {
int cedula;
char nombre[MAX];
float nota1;
float nota2;
int promedio;
};
typedef struct alumno Estudiante;
/* Opciones del Menú */
void menuPrincipal();
void menuInsertar();
void menuBuscar();
void menuEliminar();
void menuMostrar();
Estudiante *obtenerProductos(int *n);
char existeEstudiante(int cedulaProducto, Estudiante *alumno);
char insertarEstudiante(Estudiante alumno);
char eliminarEstudiante(int cedulaEstudiante);
char eliminacionFisica();
char guardarReporte();
/* Función de lectura de cadenas */
int leecad(char *cad, int n);
char linea[MAX];
int main()
{
setlocale(LC_ALL, "spanish"); /* Permite imprimir caracteres con tilde */
menuPrincipal();
return 0;
}
void menuPrincipal()
{
char repite = 1;
int opcion = -1;
do {
system("cls");
printf("\n\t\t\t\tMENU PRINCIPAL\n");
printf("\n\t\t[1] AGREGAR\n");
printf("\t\t[2] Buscar\n");
printf("\t\t[3] Eliminar\n");
printf("\t\t[4] Mostrar listado de productos\n");
printf("\t\t[5] Salir\n");
printf("\n\t\tIngrese su opcion: [ ]\b\b");
/* Lectura segura de un entero */
leecad(linea, MAX);
sscanf(linea, "%d", &opcion);
switch (opcion) {
case 1:
menuInsertar();
break;
case 2:
menuBuscar();
break;
case 3:
menuEliminar();
break;
case 4:
menuMostrar();
break;
case 5:
repite = 0;
break;
}
} while (repite);
}
void menuInsertar()
{
Estudiante alumno;
int cedulaEstudiante = 0;
char repite = 1;
char respuesta[MAX];
do {
system("cls");
printf("\n\t\t\t==> REGISTRAR ALUMNO <==\n");
printf("\n\tCEDULA: ");
leecad(linea, MAX);
sscanf(linea, "%d", &cedulaEstudiante);
if (!existeEstudiante(cedulaEstudiante, &alumno)) {
alumno.cedula = cedulaEstudiante;
printf("\tNombres: ");
leecad(alumno.nombre, MAX);
printf("\tNota 1: ");
leecad(linea, MAX);
sscanf(linea, "%f", &alumno.nota1);
printf("\tNota 2: ");
leecad(linea, MAX);
sscanf(linea, "%f", &alumno.nota2);
alumno.promedio=(alumno.nota1+alumno.nota2)/2;
printf("\tPromedio: %d",alumno.promedio);
leecad(linea, MAX);
if (insertarEstudiante(alumno)) {
printf("\n\tEl ESTUDIANTE se Registro correctamente\n");
} else {
printf("\n\tOcurrió un error al registrar\n");
printf("\tInténtelo mas tarde\n");
}
} else {
printf("\n\tEl estudiante con cedula %d ya existe.\n", cedulaEstudiante);
printf("\tNo puede registrar dos veces con la misma cedula.\n");
}
printf("\n\tDesea registrar Otro Estudiante? [S/N]: ");
leecad(respuesta, MAX);
if (!(strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
repite = 0;
}
} while (repite);
}
void menuBuscar()
{
Estudiante alumno;
int cedulaEstudiante;
char repite = 1;
char respuesta[MAX];
do {
system("cls");
printf("\n\t\t\t==> BUSCAR CEDULA DEL ESTUDIANTE <==\n");
printf("\n\tCEDULA: ");
leecad(linea, MAX);
sscanf(linea, "%d", &cedulaEstudiante);
if (existeEstudiante(cedulaEstudiante, &alumno)) {
printf ("\n\tESTUDINTE ENCONTRADO\n");
printf("\n\tCEDULA: %d\n", alumno.cedula);
printf("\tNombres: %s\n", alumno.nombre);
printf("\tNOTA 1: %.1f \n", alumno.nota1);
printf("\tNOTA 2: %.1f \n", alumno.nota2);
printf("\tPROMEDIO: %d\n", alumno.promedio);
} else {
printf("\n\tEl ESTUDIANTE con cedula %d no existe.\n", cedulaEstudiante);
}
printf("\n\tDesea seguir buscando otra cedula? [S/N]: ");
leecad(respuesta, MAX);
if (!(strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
repite = 0;
}
} while (repite);
}
void menuEliminar()
{
Estudiante alumno;
int cedulaEstudiante;
char repite = 1;
char respuesta[MAX];
do {
system("cls");
printf("\n\t\t\t==> ELIMINAR Por CEDULA <==\n");
printf("\n\tCEDULA: ");
leecad(linea, MAX);
sscanf(linea, "%d", &cedulaEstudiante);
if (existeEstudiante(cedulaEstudiante, &alumno))
{
printf("\n\tCEDULA: %d\n", alumno.cedula);
printf("\tNombres: %s\n",alumno.nombre);
printf("\tNOTA 1: %.1f \n", alumno.nota1);
printf("\tNOTA 2: %.1f \n", alumno.nota2);
printf("\tPROMEDIO: %d\n", alumno.promedio);
printf("\n\tSeguro que desea eliminar el Alumno? [S/N]: ");
leecad(respuesta, MAX);
if (strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0) {
if (eliminarEstudiante(cedulaEstudiante)) {
printf("\n\tEstudiante eliminado satisfactoriamente.\n");
} else {
printf("\n\tEl Estudiante no pudo ser eliminado\n");
}
}
} else {
printf("\n\tEl ESTUDIANTE con cedula %d no existe.\n", cedulaEstudiante);
}
printf("\n\tDesea eliminar otro estudiante? [S/N]: ");
leecad(respuesta, MAX);
if (!(strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
repite = 0;
}
} while (repite);
}
void menuMostrar()
{
Estudiante *productos;
int numeroProductos;
int i;
char respuesta[MAX];
system("cls");
productos = obtenerProductos(&numeroProductos);
if (numeroProductos == 0) {
printf("\n\tEl archivo está vacío!!\n");
system("pause>nul");
} else {
printf("\n\t\t ==> ESTUDIANTES REGISTRADOS <==\n");
printf(" ------------------------------------------------------------------------------\n");
printf("%10s\t%-20s%15s%15s%10s\n", "CEDULA", "NOMBRES", "NOTA 1", "NOTA 2", "PROMEDIO");
printf(" ------------------------------------------------------------------------------\n");
for (i = 0; i < numeroProductos; i++) {
if (productos[i].cedula != VALOR_CENTINELA) {
printf("%10d \t%-20.20s%15.1f%15.1f%8d\n", productos[i].cedula, productos[i].nombre, productos[i].nota1, productos[i].nota2, productos[i].promedio);
}
}
printf(" ------------------------------------------------------------------------------\n");
printf("\n\tDesea guardar el registro? [S/N]: ");
leecad(respuesta, MAX);
if (strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0) {
if (guardarReporte()) {
printf("\n\tEl registro fue guardado con éxito\n");
} else {
printf("\n\tOcurrió un error al guardar el registro\n");
}
system("pause>nul");
}
}
}
Estudiante *obtenerProductos(int *n)
{
FILE *archivo;
Estudiante alumno;
Estudiante *productos;
int i;
/* Abre el archivo en modo lectura */
archivo = fopen("productos.dat", "rb");
if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
*n = 0; /* No se pudo abrir. Se considera n */
productos = NULL;
} else {
fseek(archivo, 0, SEEK_END); /* Posiciona el cursor al final del archivo */
*n = ftell(archivo) / sizeof(Estudiante);
productos = (Estudiante *)malloc((*n) * sizeof(Estudiante));
/* Se recorre el archivo secuencialmente */
fseek(archivo, 0, SEEK_SET); /* Posiciona el cursor al principio del archivo */
fread(&alumno, sizeof(alumno), 1, archivo);
i = 0;
while (!feof(archivo)) {
productos[i++] = alumno;
fread(&alumno, sizeof(alumno), 1, archivo);
}
/* Cierra el archivo */
fclose(archivo);
}
return productos;
}
char existeEstudiante(int cedulaEstudiante, Estudiante *alumno){
FILE *archivo;
char existe;
/* Abre el archivo en modo lectura */
archivo = fopen("productos.dat", "rb");
if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
existe = 0;
} else {
existe = 0;
fread(&(*alumno), sizeof(*alumno), 1, archivo);
while (!feof(archivo)) {
if ((*alumno).cedula == cedulaEstudiante) {
existe = 1;
break;
}
fread(&(*alumno), sizeof(*alumno), 1, archivo);
}
/* Cierra el archivo */
fclose(archivo);
}
return existe;
}
char insertarEstudiante(Estudiante alumno)
{
FILE *archivo;
char insercion;
/* Abre el archivo para agregar datos al final */
archivo = fopen("productos.dat", "ab"); /* Añade datos al final. Si el archivo no existe, es creado */
if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
insercion = 0;
} else {
fwrite(&alumno, sizeof(alumno), 1, archivo);
insercion = 1;
/* Cierra el archivo */
fclose(archivo);
}
return insercion;
}
/* ELiminación lógica de un registro */
char eliminarEstudiante(int cedulaEstudiante)
{
FILE *archivo;
FILE *auxiliar;
Estudiante alumno;
char elimina;
/* Abre el archivo para leer */
archivo = fopen("productos.dat", "r+b"); /* Modo lectura/escritura. Si el archivo no existe, es creado */
if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
elimina = 0;
} else {
/* Se busca el registro que se quiere borrar. Cuando se encuentra, se sitúa en esa posición mediante la
función fseek y luego se modifica el campo clave de ese registro mediante algún valor centinela, eso se logra
con fwrite. Hasta allí se ha logrado una eliminación LÓGICA. Porque el registro sigue ocupando espacio en el archivo físico */
elimina = 0;
fread(&alumno, sizeof(alumno), 1, archivo);
while (!feof(archivo)) {
if (alumno.cedula == cedulaEstudiante) {
fseek(archivo, ftell(archivo) - sizeof(alumno), SEEK_SET);
alumno.cedula = VALOR_CENTINELA;
fwrite(&alumno, sizeof(alumno), 1, archivo);
elimina = 1;
break;
}
fread(&alumno, sizeof(alumno), 1, archivo);
}
/* Cierra el archivo */
fclose(archivo);
}
return elimina;
}
char guardarReporte()
{
FILE *archivo;
char guardado;
Estudiante *productos;
int numeroProductos;
int i;
productos = obtenerProductos(&numeroProductos);
if (numeroProductos == 0) {
guardado = 0;
} else {
/* Abre el archivo en modo texto para escritura */
archivo = fopen("reporte.txt", "w");
if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
guardado = 0;
} else {
fprintf(archivo, "\n\t\t ==> ESTUDIANTES REGISTRADOS <==\n");
fprintf(archivo, " ------------------------------------------------------------------------------\n");
fprintf(archivo, "%8s\t%-20s%15s%15s%10s\n", "CEDULA", "NOMBRES", "NOTA 1", "NOTA 2", "PROMEDIO");
fprintf(archivo, " ------------------------------------------------------------------------------\n");
for (i = 0; i < numeroProductos; i++) {
if (productos[i].cedula != VALOR_CENTINELA) {
fprintf(archivo, "%7d \t%-20.20s%15.1f%15.1f%8d\n", productos[i].cedula, productos[i].nombre, productos[i].nota1, productos[i].nota2, productos[i].promedio);
}
}
fprintf(archivo, " ------------------------------------------------------------------------------\n");
guardado = 1;
/* Cierra el archivo */
fclose(archivo);
}
}
return guardado;
}
int leecad(char *cad, int n)
{
int i, c;
/* 1 COMPROBACIÓN DE DATOS INICIALES EN EL BUFFER */
c = getchar();
if (c == EOF) {
cad[0] = '\0';
return 0;
}
if (c == '\n') {
i = 0;
} else {
cad[0] = c;
i = 1;
}
/* 2. LECTURA DE LA CADENA */
for (; i < n - 1 && (c = getchar()) != EOF && c != '\n'; i++) {
cad[i] = c;
}
cad[i] = '\0';
/*3. LIMPIEZA DEL BUFFER */
/* Finalmente limpiamos el buffer si es necesario */
if (c != '\n' && c != EOF) /* es un caracter */
while ((c = getchar()) != '\n' && c != EOF);
return 1;
}
1.-Agregar Cédula, Nombre and Apellido.
2.- 2 Notas y calcular automáticamente el promedio .
3.Buscar por Cédula y mostrar todos los datos registrados.
4.-Eliminar por Cédula todos los datos del alumno.
Codigo:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h> /* setlocale */
#include <conio.h>
#define MAX 80
#define VALOR_CENTINELA -1
/* Estructuras */
struct alumno {
int cedula;
char nombre[MAX];
float nota1;
float nota2;
int promedio;
};
typedef struct alumno Estudiante;
/* Opciones del Menú */
void menuPrincipal();
void menuInsertar();
void menuBuscar();
void menuEliminar();
void menuMostrar();
Estudiante *obtenerProductos(int *n);
char existeEstudiante(int cedulaProducto, Estudiante *alumno);
char insertarEstudiante(Estudiante alumno);
char eliminarEstudiante(int cedulaEstudiante);
char eliminacionFisica();
char guardarReporte();
/* Función de lectura de cadenas */
int leecad(char *cad, int n);
char linea[MAX];
int main()
{
setlocale(LC_ALL, "spanish"); /* Permite imprimir caracteres con tilde */
menuPrincipal();
return 0;
}
void menuPrincipal()
{
char repite = 1;
int opcion = -1;
do {
system("cls");
printf("\n\t\t\t\tMENU PRINCIPAL\n");
printf("\n\t\t[1] AGREGAR\n");
printf("\t\t[2] Buscar\n");
printf("\t\t[3] Eliminar\n");
printf("\t\t[4] Mostrar listado de productos\n");
printf("\t\t[5] Salir\n");
printf("\n\t\tIngrese su opcion: [ ]\b\b");
/* Lectura segura de un entero */
leecad(linea, MAX);
sscanf(linea, "%d", &opcion);
switch (opcion) {
case 1:
menuInsertar();
break;
case 2:
menuBuscar();
break;
case 3:
menuEliminar();
break;
case 4:
menuMostrar();
break;
case 5:
repite = 0;
break;
}
} while (repite);
}
void menuInsertar()
{
Estudiante alumno;
int cedulaEstudiante = 0;
char repite = 1;
char respuesta[MAX];
do {
system("cls");
printf("\n\t\t\t==> REGISTRAR ALUMNO <==\n");
printf("\n\tCEDULA: ");
leecad(linea, MAX);
sscanf(linea, "%d", &cedulaEstudiante);
if (!existeEstudiante(cedulaEstudiante, &alumno)) {
alumno.cedula = cedulaEstudiante;
printf("\tNombres: ");
leecad(alumno.nombre, MAX);
printf("\tNota 1: ");
leecad(linea, MAX);
sscanf(linea, "%f", &alumno.nota1);
printf("\tNota 2: ");
leecad(linea, MAX);
sscanf(linea, "%f", &alumno.nota2);
alumno.promedio=(alumno.nota1+alumno.nota2)/2;
printf("\tPromedio: %d",alumno.promedio);
leecad(linea, MAX);
if (insertarEstudiante(alumno)) {
printf("\n\tEl ESTUDIANTE se Registro correctamente\n");
} else {
printf("\n\tOcurrió un error al registrar\n");
printf("\tInténtelo mas tarde\n");
}
} else {
printf("\n\tEl estudiante con cedula %d ya existe.\n", cedulaEstudiante);
printf("\tNo puede registrar dos veces con la misma cedula.\n");
}
printf("\n\tDesea registrar Otro Estudiante? [S/N]: ");
leecad(respuesta, MAX);
if (!(strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
repite = 0;
}
} while (repite);
}
void menuBuscar()
{
Estudiante alumno;
int cedulaEstudiante;
char repite = 1;
char respuesta[MAX];
do {
system("cls");
printf("\n\t\t\t==> BUSCAR CEDULA DEL ESTUDIANTE <==\n");
printf("\n\tCEDULA: ");
leecad(linea, MAX);
sscanf(linea, "%d", &cedulaEstudiante);
if (existeEstudiante(cedulaEstudiante, &alumno)) {
printf ("\n\tESTUDINTE ENCONTRADO\n");
printf("\n\tCEDULA: %d\n", alumno.cedula);
printf("\tNombres: %s\n", alumno.nombre);
printf("\tNOTA 1: %.1f \n", alumno.nota1);
printf("\tNOTA 2: %.1f \n", alumno.nota2);
printf("\tPROMEDIO: %d\n", alumno.promedio);
} else {
printf("\n\tEl ESTUDIANTE con cedula %d no existe.\n", cedulaEstudiante);
}
printf("\n\tDesea seguir buscando otra cedula? [S/N]: ");
leecad(respuesta, MAX);
if (!(strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
repite = 0;
}
} while (repite);
}
void menuEliminar()
{
Estudiante alumno;
int cedulaEstudiante;
char repite = 1;
char respuesta[MAX];
do {
system("cls");
printf("\n\t\t\t==> ELIMINAR Por CEDULA <==\n");
printf("\n\tCEDULA: ");
leecad(linea, MAX);
sscanf(linea, "%d", &cedulaEstudiante);
if (existeEstudiante(cedulaEstudiante, &alumno))
{
printf("\n\tCEDULA: %d\n", alumno.cedula);
printf("\tNombres: %s\n",alumno.nombre);
printf("\tNOTA 1: %.1f \n", alumno.nota1);
printf("\tNOTA 2: %.1f \n", alumno.nota2);
printf("\tPROMEDIO: %d\n", alumno.promedio);
printf("\n\tSeguro que desea eliminar el Alumno? [S/N]: ");
leecad(respuesta, MAX);
if (strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0) {
if (eliminarEstudiante(cedulaEstudiante)) {
printf("\n\tEstudiante eliminado satisfactoriamente.\n");
} else {
printf("\n\tEl Estudiante no pudo ser eliminado\n");
}
}
} else {
printf("\n\tEl ESTUDIANTE con cedula %d no existe.\n", cedulaEstudiante);
}
printf("\n\tDesea eliminar otro estudiante? [S/N]: ");
leecad(respuesta, MAX);
if (!(strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
repite = 0;
}
} while (repite);
}
void menuMostrar()
{
Estudiante *productos;
int numeroProductos;
int i;
char respuesta[MAX];
system("cls");
productos = obtenerProductos(&numeroProductos);
if (numeroProductos == 0) {
printf("\n\tEl archivo está vacío!!\n");
system("pause>nul");
} else {
printf("\n\t\t ==> ESTUDIANTES REGISTRADOS <==\n");
printf(" ------------------------------------------------------------------------------\n");
printf("%10s\t%-20s%15s%15s%10s\n", "CEDULA", "NOMBRES", "NOTA 1", "NOTA 2", "PROMEDIO");
printf(" ------------------------------------------------------------------------------\n");
for (i = 0; i < numeroProductos; i++) {
if (productos[i].cedula != VALOR_CENTINELA) {
printf("%10d \t%-20.20s%15.1f%15.1f%8d\n", productos[i].cedula, productos[i].nombre, productos[i].nota1, productos[i].nota2, productos[i].promedio);
}
}
printf(" ------------------------------------------------------------------------------\n");
printf("\n\tDesea guardar el registro? [S/N]: ");
leecad(respuesta, MAX);
if (strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0) {
if (guardarReporte()) {
printf("\n\tEl registro fue guardado con éxito\n");
} else {
printf("\n\tOcurrió un error al guardar el registro\n");
}
system("pause>nul");
}
}
}
Estudiante *obtenerProductos(int *n)
{
FILE *archivo;
Estudiante alumno;
Estudiante *productos;
int i;
/* Abre el archivo en modo lectura */
archivo = fopen("productos.dat", "rb");
if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
*n = 0; /* No se pudo abrir. Se considera n */
productos = NULL;
} else {
fseek(archivo, 0, SEEK_END); /* Posiciona el cursor al final del archivo */
*n = ftell(archivo) / sizeof(Estudiante);
productos = (Estudiante *)malloc((*n) * sizeof(Estudiante));
/* Se recorre el archivo secuencialmente */
fseek(archivo, 0, SEEK_SET); /* Posiciona el cursor al principio del archivo */
fread(&alumno, sizeof(alumno), 1, archivo);
i = 0;
while (!feof(archivo)) {
productos[i++] = alumno;
fread(&alumno, sizeof(alumno), 1, archivo);
}
/* Cierra el archivo */
fclose(archivo);
}
return productos;
}
char existeEstudiante(int cedulaEstudiante, Estudiante *alumno){
FILE *archivo;
char existe;
/* Abre el archivo en modo lectura */
archivo = fopen("productos.dat", "rb");
if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
existe = 0;
} else {
existe = 0;
fread(&(*alumno), sizeof(*alumno), 1, archivo);
while (!feof(archivo)) {
if ((*alumno).cedula == cedulaEstudiante) {
existe = 1;
break;
}
fread(&(*alumno), sizeof(*alumno), 1, archivo);
}
/* Cierra el archivo */
fclose(archivo);
}
return existe;
}
char insertarEstudiante(Estudiante alumno)
{
FILE *archivo;
char insercion;
/* Abre el archivo para agregar datos al final */
archivo = fopen("productos.dat", "ab"); /* Añade datos al final. Si el archivo no existe, es creado */
if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
insercion = 0;
} else {
fwrite(&alumno, sizeof(alumno), 1, archivo);
insercion = 1;
/* Cierra el archivo */
fclose(archivo);
}
return insercion;
}
/* ELiminación lógica de un registro */
char eliminarEstudiante(int cedulaEstudiante)
{
FILE *archivo;
FILE *auxiliar;
Estudiante alumno;
char elimina;
/* Abre el archivo para leer */
archivo = fopen("productos.dat", "r+b"); /* Modo lectura/escritura. Si el archivo no existe, es creado */
if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
elimina = 0;
} else {
/* Se busca el registro que se quiere borrar. Cuando se encuentra, se sitúa en esa posición mediante la
función fseek y luego se modifica el campo clave de ese registro mediante algún valor centinela, eso se logra
con fwrite. Hasta allí se ha logrado una eliminación LÓGICA. Porque el registro sigue ocupando espacio en el archivo físico */
elimina = 0;
fread(&alumno, sizeof(alumno), 1, archivo);
while (!feof(archivo)) {
if (alumno.cedula == cedulaEstudiante) {
fseek(archivo, ftell(archivo) - sizeof(alumno), SEEK_SET);
alumno.cedula = VALOR_CENTINELA;
fwrite(&alumno, sizeof(alumno), 1, archivo);
elimina = 1;
break;
}
fread(&alumno, sizeof(alumno), 1, archivo);
}
/* Cierra el archivo */
fclose(archivo);
}
return elimina;
}
char guardarReporte()
{
FILE *archivo;
char guardado;
Estudiante *productos;
int numeroProductos;
int i;
productos = obtenerProductos(&numeroProductos);
if (numeroProductos == 0) {
guardado = 0;
} else {
/* Abre el archivo en modo texto para escritura */
archivo = fopen("reporte.txt", "w");
if (archivo == NULL) { /* Si no se pudo abrir el archivo, el valor de archivo es NULL */
guardado = 0;
} else {
fprintf(archivo, "\n\t\t ==> ESTUDIANTES REGISTRADOS <==\n");
fprintf(archivo, " ------------------------------------------------------------------------------\n");
fprintf(archivo, "%8s\t%-20s%15s%15s%10s\n", "CEDULA", "NOMBRES", "NOTA 1", "NOTA 2", "PROMEDIO");
fprintf(archivo, " ------------------------------------------------------------------------------\n");
for (i = 0; i < numeroProductos; i++) {
if (productos[i].cedula != VALOR_CENTINELA) {
fprintf(archivo, "%7d \t%-20.20s%15.1f%15.1f%8d\n", productos[i].cedula, productos[i].nombre, productos[i].nota1, productos[i].nota2, productos[i].promedio);
}
}
fprintf(archivo, " ------------------------------------------------------------------------------\n");
guardado = 1;
/* Cierra el archivo */
fclose(archivo);
}
}
return guardado;
}
int leecad(char *cad, int n)
{
int i, c;
/* 1 COMPROBACIÓN DE DATOS INICIALES EN EL BUFFER */
c = getchar();
if (c == EOF) {
cad[0] = '\0';
return 0;
}
if (c == '\n') {
i = 0;
} else {
cad[0] = c;
i = 1;
}
/* 2. LECTURA DE LA CADENA */
for (; i < n - 1 && (c = getchar()) != EOF && c != '\n'; i++) {
cad[i] = c;
}
cad[i] = '\0';
/*3. LIMPIEZA DEL BUFFER */
/* Finalmente limpiamos el buffer si es necesario */
if (c != '\n' && c != EOF) /* es un caracter */
while ((c = getchar()) != '\n' && c != EOF);
return 1;
}
Menu ingresar datos del alumno y notas calcular automáticamente promedio
Dev-C++ es un Entorno Integrado de Desarrollo para el lenguaje de programación C-C++ que usa Mingw de GCC. Es un software de libre distribución sujeto a los términos de la Licencia Pública General de GNU. Algunas de las características de Dev-C++ son:
- Soporta compiladores basados en GCC, por ejemplo Mingw.
- Tiene integrado un depurador basado en GDB.
- Mantiene una lista con las clases utilizadas durante la edición de un programa.
- Mantiene una lista de las funciones definidas en la implementación del programa.
- Tiene un manejador de proyectos.
- Soporta la actualización del software y bibliotecas a través de Internet.
IDE'S COMPILADOR >> DOWNLOAD HERE