Está en la página 1de 7

Tarea Virtual 6

Programación 1
FICHEROS

Tarea Virtual
6

Realizado por: Cristian Joel


Riofrío
Fecha: 17-05-
2020
Profesor: Ing. Harold
Ordaz P1-DL-A01-02-
01.2020
Unidad: 4

Pág. 1
Cristian Joel Riofrío

This study source was downloaded by 100000827988077 from CourseHero.com on 04-05-2022 16:44:47 GMT -05:00

https://www.coursehero.com/file/64646907/Tarea-6-Cristian-Joel-Riofrio-Medinadocx/
Tarea Virtual 6

TEMA: Ficheros
OBJETIVO: Aplicar el paradigma de programación modular para la implementación de
problemas de cómputo mediante la técnica de Diseño Top-Down.

ACTIVIDAD:
Un profesor tiene 30 estudiantes y cada estudiante tiene cuatro calificaciones parciales. Almacenar los
datos en un archivo (fichero de texto o binario) asociado al nombre del estudiante, dejando espacio para la
nota final de examen.

Incluir un menú de opciones:


1. Para añadir más estudiantes
2. Visualizar datos de un estudiante
3. Introducir nuevas notas y,
4. Calcular y mostrar nota final de un estudiante (suma de notas parciales + nota final de examen)

Desarrollo:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <locale.h>
#include <iostream>
#include <vector>

using namespace std;

#define maxn 20

/* Actividad: Un profesor tiene 30 estudiantes y cada estudiante tiene cuatro calificaciones


parciales. Almacenar los datos en un archivo (fichero de texto o binario) asociado al
nombre del estudiante, dejando espacio para la nota final de examen.
Incluir un menú de opciones:
1. Para añadir más estudiantes,
2. Visualizar datos de un estudiante,
3. Introducir nuevas notas y,
4. Calcular y mostrar nota final de un estudiante (suma de notas parciales + nota final de examen).
*/

const int dimension = 30;


const char nom_fichero[20] = "estudiantes.dat";

Pág. 2
Cristian Joel Riofrío

This study source was downloaded by 100000827988077 from CourseHero.com on 04-05-2022 16:44:47 GMT -05:00

https://www.coursehero.com/file/64646907/Tarea-6-Cristian-Joel-Riofrio-Medinadocx/
Tarea Virtual 6

/* Estructuras */
typedef struct {
int codigo;
char nombre[maxn];
double p1,p2,p3,p4, nota_final;
} Estudiante;

void crear(){
FILE *archivo;
archivo = fopen(nom_fichero,"wb");
fclose(archivo);
}

bool existe_fichero(FILE *archivo){


if (archivo == NULL)
return false;
else
return true;
}

bool espacio(){
FILE *archivo;
archivo = fopen(nom_fichero,"rb");
Estudiante estudiante;
int tamanio = 0;

if (existe_fichero(archivo)){
fread(&estudiante, sizeof(Estudiante), 1, archivo);
while(!feof(archivo))
{
tamanio++;
fread(&estudiante, sizeof(Estudiante), 1, archivo);
}
fclose(archivo);
}

if(tamanio < dimension){


return true;
}
cout<<"\nError. Lista llena\n\n";
return false;
}

bool buscar(int codigo)


{
FILE *archivo;
archivo = fopen(nom_fichero,"rb");
Estudiante estudiante;
bool existe = false;

if (existe_fichero(archivo)){
fread(&estudiante, sizeof(Estudiante), 1, archivo);
while(!feof(archivo))
{
if (codigo == estudiante.codigo){
existe = true;
break;
}
fread(&estudiante, sizeof(Estudiante), 1, archivo);
}
fclose(archivo);
}
return existe;

Pág. 3
Cristian Joel Riofrío

This study source was downloaded by 100000827988077 from CourseHero.com on 04-05-2022 16:44:47 GMT -05:00

https://www.coursehero.com/file/64646907/Tarea-6-Cristian-Joel-Riofrio-Medinadocx/
Tarea Virtual 6
}

void op1() {
Estudiante estudiante;
cout<<"1. Agregar estudiantes:\n\n";
cout<<"Ingrese codigo: ";
cin>>estudiante.codigo;

if(!buscar(estudiante.codigo)){
cout<<"Ingrese nombre: ";
fflush(stdin);
/* Limpia buffer */
gets(estudiante.nombre);

estudiante.p1=0;
estudiante.p2=0;
estudiante.p3=0;
estudiante.p4=0;
estudiante.nota_final=0;

FILE *archivo;
archivo = fopen(nom_fichero,"ab");

if (!existe_fichero(archivo)){
crear();
}

fwrite(&estudiante, sizeof(Estudiante), 1, archivo);


fclose(archivo);

cout<<"Info. Se agrego al estudiante\n\n";


}
else{
cout<<"Error. Codigo ya existe\n\n";
}
}

void op2() {
Estudiante estudiante;
int codigo;
cout<<"2. Visualizar datos de un estudiante:\n\
n"; cout<<"Ingrese codigo: ";
cin>>codigo;
bool existe = false;
FILE *archivo;
archivo = fopen(nom_fichero,"rb");

if (existe_fichero(archivo)){
fread(&estudiante, sizeof(Estudiante), 1, archivo);
while(!feof(archivo))
{
if (codigo == estudiante.codigo){
cout<<"\nCodigo: "<<estudiante.codigo<<"\nNombre: "<<estudiante.nombre<<"\n\n";
existe = true;
break;
}
fread(&estudiante, sizeof(Estudiante), 1, archivo);
}
fclose(archivo);
if(!existe){
cout<<"Error. No existe el codigo "<<codigo<<"\n\n";
}
}
else{

Pág. 4
Cristian Joel Riofrío

This study source was downloaded by 100000827988077 from CourseHero.com on 04-05-2022 16:44:47 GMT -05:00

https://www.coursehero.com/file/64646907/Tarea-6-Cristian-Joel-Riofrio-Medinadocx/
Tarea Virtual 6
cout<<"Error. Archivo "<<nom_fichero<<" no existe\n\n";
}
}

void op3() {
Estudiante estudiante;
int codigo;
cout<<"3. Introducir nuevas notas:\n\n";
cout<<"Ingrese codigo: ";
cin>>codigo;
bool existe = false;
FILE *archivo;
archivo = fopen(nom_fichero,"r+b");
char respuesta[1];

if (existe_fichero(archivo)){
fread(&estudiante, sizeof(Estudiante), 1, archivo);
while(!feof(archivo))
{
if (codigo == estudiante.codigo){
cout<<"\nCodigo: "<<estudiante.codigo<<"\nNombre: "<<estudiante.nombre<<"\nNotas:"; cout<<"\n\
tParcial 1: "<<estudiante.p1;
cout<<"\n\tParcial 2: "<<estudiante.p2;
cout<<"\n\tParcial 3: "<<estudiante.p3;
cout<<"\n\tParcial 4: "<<estudiante.p4; cout<<"\
n\tNota Final: "<<estudiante.nota_final; cout<<"\
n\n";

cout<<"Desea editar las notas (S/N): ";


cin>>respuesta;
if ((strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {

cout<<"Editar las nota Parcial 1 (S/N): ";


cin>>respuesta;
if ((strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
cout<<"Ingrese la nota Parcial 1: ";
cin>>estudiante.p1;
cout<<"Info. Nota ingresada "<<estudiante.p1<<"\n";
}

cout<<"Editar las nota Parcial 2 (S/N): ";


cin>>respuesta;
if ((strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
cout<<"Ingrese la nota Parcial 2: ";
cin>>estudiante.p2;
cout<<"Info. Nota ingresada "<<estudiante.p2<<"\n";
}

cout<<"Editar las nota Parcial 3 (S/N): ";


cin>>respuesta;
if ((strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
cout<<"Ingrese la nota Parcial 3: ";
cin>>estudiante.p3;
cout<<"Info. Nota ingresada "<<estudiante.p3<<"\n";
}

cout<<"Editar las nota Parcial 4 (S/N): ";


cin>>respuesta;
if ((strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
cout<<"Ingrese la nota Parcial 4: ";
cin>>estudiante.p4;
cout<<"Info. Nota ingresada "<<estudiante.p4<<"\n";
}

Pág. 5
Cristian Joel Riofrío

This study source was downloaded by 100000827988077 from CourseHero.com on 04-05-2022 16:44:47 GMT -05:00

https://www.coursehero.com/file/64646907/Tarea-6-Cristian-Joel-Riofrio-Medinadocx/
Tarea Virtual 6
cout<<"Desea editar las nota final (S/N): ";
cin>>respuesta;
if ((strcmp(respuesta, "S") == 0 || strcmp(respuesta, "s") == 0)) {
cout<<"Ingrese la nota final: ";
cin>>estudiante.nota_final;
cout<<"Info. Nota ingresada "<<estudiante.nota_final<<"\n";
}
}

int pos = ftell(archivo) -


sizeof(Estudiante); fseek(archivo, pos, SEEK_SET);
fwrite(&estudiante, sizeof(Estudiante), 1, archivo);
existe = true;
break;
}
fread(&estudiante, sizeof(Estudiante), 1, archivo);
}
fclose(archivo);
if(!existe){
cout<<"Error. No existe el codigo "<<codigo<<"\n\n";
}
}
else{
cout<<"Error. Archivo "<<nom_fichero<<" no existe\n\n";
}
}

void op4() {
Estudiante estudiante;
int codigo;
cout<<"4. Mostrar notas de un estudiante:\n\
n"; cout<<"Ingrese codigo: ";
cin>>codigo;
bool existe = false;
FILE *archivo;
archivo = fopen(nom_fichero,"rb");
char respuesta[1];

if (existe_fichero(archivo)){
fread(&estudiante, sizeof(Estudiante), 1, archivo);
while(!feof(archivo))
{
if (codigo == estudiante.codigo){
cout<<"\nCodigo: "<<estudiante.codigo<<"\nNombre: "<<estudiante.nombre<<"\nNotas:"; cout<<"\n\
tParcial 1: "<<estudiante.p1;
cout<<"\n\tParcial 2: "<<estudiante.p2;
cout<<"\n\tParcial 3: "<<estudiante.p3;
cout<<"\n\tParcial 4: "<<estudiante.p4;
cout<<"\n\tNota Final: "<<estudiante.nota_final;

cout<<"\n\tSuma: "<<(estudiante.p1 + estudiante.p2 + estudiante.p3 +


estudiante.p4 + estudiante.nota_final);
cout<<"\n\tPromedio: "<<(estudiante.p1 + estudiante.p2 + estudiante.p3 +
estudiante.p4 + estudiante.nota_final) / 5;
cout<<"\n\n";

fwrite(&estudiante, sizeof(Estudiante), 1, archivo);


existe = true;
break;
}
fread(&estudiante, sizeof(Estudiante), 1, archivo);
}
fclose(archivo);
if(!existe){
cout<<"Error. No existe el codigo "<<codigo<<"\n\n";

Pág. 6
Cristian Joel Riofrío

This study source was downloaded by 100000827988077 from CourseHero.com on 04-05-2022 16:44:47 GMT -05:00

https://www.coursehero.com/file/64646907/Tarea-6-Cristian-Joel-Riofrio-Medinadocx/
Tarea Virtual 6
}
}
else{
cout<<"Error. Archivo "<<nom_fichero<<" no existe\n\n";
}
}

void menu(){
int op=0, ini=1, fin=5;
do{
system("cls");
cout<<"\tSistema Calificacion Estudiantes\n\n";
cout<<"Menu (Seleccione una opcion):\n\n";
cout<<"1. Agregar estudiantes\n";
cout<<"2. Visualizar datos de un estudiante\n";
cout<<"3. Introducir nuevas notas\n";
cout<<"4. Mostrar notas de un estudiante\n";
cout<<"5. Salir\n\n";
cin>>op;

do
{
if(op<ini || op>fin)
{
cout<<"Error. Seleccione una opcion correcta del Menu\n";
cin>>op;
}
}while(op<ini || op>fin);

switch (op)
{
case 1: system("cls");
if(espacio()){
op1();
}
system("pause");
break;
case 2: system("cls");
//if(espacio(array.size()))
{ op2();
//}
system("pause");
break;
case 3: system("cls");
op3();
system("pause");
break;
case 4: system("cls");
op4();
system("pause");
break;

default: break;
}

}while(op!=fin);
}

int main(int argc, char** argv) {


menu();
return 0;
}

Pág. 7
Cristian Joel Riofrío

This study source was downloaded by 100000827988077 from CourseHero.com on 04-05-2022 16:44:47 GMT -05:00

https://www.coursehero.com/file/64646907/Tarea-6-Cristian-Joel-Riofrio-Medinadocx/

También podría gustarte