UTNianos

Versión completa: Ayuda TP de algoritmos
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola estoy con el TP de algoritmos el enunciado es:

Cita:Enunciado
Desarrollar un programa para obtener información sobre la asistencia de un empleado durante un mes. Para esto se requiere la siguiente información:
1. Número de mes y cantidad de días del mes. Esta información debe ingresar desde el teclado.
2. Número de empleado. Es un valor entre 1000 y 5000. Se ingresa por teclado
3. Los registros de asistencia de un empleado. Están un archivo binario cuyo nombre coincide con el número de empleado, seguido de “.dat”, (ejemplo: 2345.dat, 4567.dat). Este archivo está ordenado por el número de día. El diseño es el siguiente:
• DIA
• HORA DE ENTRADA,
• HORA DE SALIDA en formato HHMM

Se pide estrategia y algoritmo (diagrama y codificación en C/C++) para obtener y grabar en un archivo de texto:
1) Días de inasistencia (son los días que no figuran en el archivo).
2) Días que trabajó menos de ocho horas.
3) Cantidad total de horas trabajadas en el mes.
4) Promedio de horas por día (entre los días que trabajó).
5) Desarrollar una función que devuelva las horas trabajadas al pasarle la hora de entrada y la hora de salida.
6) Desarrollar otra función que acumule horas en formato HHMM
Las funciones 5 y 6 deben ser utilizadas en la resolución del problema

Estoy tratando, en primera instancia de leer los datos del archivo binario, pero compila y al ejecutarlo crashea la consola, no tengo ni idea de porque pasa, si alguno tiene idea me salva la vida, gracias de antemano.
El codigo es el siguiente:



#include <iostream>
#include <stdio.h>

using namespace std ;

// estructura de datos de los archivos
typedef char str30[31] ;

struct empl {
int dia ;
string entrada ;
string salida ;
};
// ----------------------------------------------
void mostrarDatos (empl ) ;
void mostrarArchivo(const str30 ) ;
// ----------------------------------------------
int main () {
mostrarArchivo("asisten.dat") ;
} // main
// ----------------------------------------------
void mostrarDatos (empl empleado) {
cout << empleado.dia + " " + empleado.entrada + " " + empleado.salida;
} // mostrarDatos
// ----------------------------------------------
void mostrarArchivo(const str30 nbeArch) {
empl empleado ;
FILE * fichero ;
fichero = fopen(nbeArch, "rb");
if (fichero!=NULL) {
printf("DIA HORA DE ENTRADA HORA DE SALIDA") ;
fread(&empleado, sizeof(empleado), 1, fichero) ;
while (!feof(fichero)){
mostrarDatos (empleado) ;
fread(&empleado, sizeof(empleado), 1, fichero) ;
} // while
fclose(fichero) ;
} else
printf("no existe el archivo %s", nbeArch) ;
}


URLs de referencia