[ Foro de C++ ]

PROBLEMA SENCILLO

16-Nov-2016 00:34
Invitado (Salvador)
1 Respuestas

Una empresa de turismo contrata choferes externos para realizar viajes a sus destinos principales durante temporada alta.
Los destinos que esta empresa trabaja son:
1. Mar del Plata
2. Necochea
3. Pinamar
4. Villa Gesell
5. San Bernardo
6. Mendoza
7. Bariloche
El programa que Ud. Y su equipo deben confeccionar debe levantar de los archivos choferes.dat y micros.dat los choferes y vehículos que cada chofer posee respectivamente. Datos a registrar de los choferes:
- Apellido
- Nombre
- DNI
- Nro. De contrato.
Los choferes poseen sus propios vehículos para realizar los viajes (pueden tener más de uno). De cada vehículo se registra:
- Patente
- Marca
- Modelo
- Año de fabricación
- Tamaño
- Chofer (dueño)
El tamaño de los vehículos está tipificado de la siguiente manera:
1. Pequeño : 12 Plazas
2. Mediano: 24 Plazas
3. Grande: 40 Plazas
4. Súper: 60 Plazas
Para realizar un viaje debe indicarse el destino, la cantidad de pasajeros, la fecha y hora de partida y la fecha y hora de llegada estimada y el costo del pasaje. Luego el sistema debe proponer una lista de choferes que pueden hacer ese viaje y el usuario seleccionará uno. La lista de choferes prupuesta por el sistema debe considerar las siguientes reglas:
1. El chofer debe estar disponible (no debe tener ya asignado un viaje ese día).
2. El chofer debe tener un vehículo con capacidad mayor o igual a la indicada en el viaje.
El programa también se utilizará para emitir los pagos a los choferes. Para ello debe emitir los siguientes listados:
- Cantidad de viajes realizados en un mes determinados, ordenado descendentemente por .
- Dinero a pagar total a cada chofer, considerando que se le paga un 40% del total de la venta de pasajes por cada viaje.
Opciones del menú principal del programa:
1. Ingresar nuevo chofer: en esta opción se pide directamente los datos del chofer, debe validarse que no exista algún chofer con el dni que se ingrese.
2. Ingresar nuevo vehículo: debe solicitarse primero el dni del dueño y buscar el chofer respectivo. Si se encuentra se continúa con la carga de los datos del vehículo, sino no se puede cargar un vehículo con dueño inexistente.
3. Ingresar nuevo viaje: Se solicitan los datos del viaje, para elegir chofer el sistema debe mostrar un listado de choferes disponibles según las reglas descriptas anteriormente.
4. Emitir reporte total de viajes por chofer.
5. Emitir reporte de pago a choferes.
6. Salir.


ME FALTA EL PUNTO 4/5 DEL MENU PRINCIPAL Y ESTA PARTE QUE NO SE COMO HACERLO Para realizar un viaje debe indicarse el destino, la cantidad de pasajeros, la fecha y hora de partida y la fecha y hora de llegada estimada y el costo del pasaje. Luego el sistema debe proponer una lista de choferes que pueden hacer ese viaje y el usuario seleccionará uno. La lista de choferes prupuesta por el sistema debe considerar las siguientes reglas:
1. El chofer debe estar disponible (no debe tener ya asignado un viaje ese día).
2. El chofer debe tener un vehículo con capacidad mayor o igual a la indicada en el viaje.
El programa también se utilizará para emitir los pagos a los choferes. Para ello debe emitir los siguientes listados:
- Cantidad de viajes realizados en un mes determinados, ordenado descendentemente por .
- Dinero a pagar total a cada chofer, considerando que se le paga un 40% del total de la venta de pasajes por cada viaje.

Y YO HICE ESTO


#include <iostream>
#include <windows.h>
#include <vector>
#include <ctime>
#include <stdio.h>
#include <conio.h>
#define TOTAL 1000

using namespace std;

struct Chofer
{
	char apellido[50];
	char nombre[50];
	int dni;
	int nro_contrato;
};

struct Vehiculo
{
	char marca[50];
	char modelo[50];
	char patente[10];
	char agno_de_fabricacion[10];
	char tamagno[10];
	char titular_vehiculo[50];
};

struct Viaje
{
	int agno_de_partida;
	int mes_de_partida;
	int dia_de_partida;
	int hora_de_partida;
	int hora_estimada_de_llegada;
	int costo;
};

int Ingresar_Chofer(int &e)
{
	FILE *cho;
	Chofer vectorchofer[TOTAL];

	if (cho=fopen("cho.dat", "wb+"))
	{
			cout << "ingrese el nombre del chofer: ";
			cin >> vectorchofer[e].nombre;

			cout << "ingrese el apellido del chofer: ";
			cin >> vectorchofer[e].apellido;

			cout << "ingrese el numero de contrato del chofer: ";
			cin >> vectorchofer[e].nro_contrato;

			cout << "ingrese el DNI del chofer: ";
			cin >> vectorchofer[e].dni;

        fwrite(vectorchofer,sizeof(struct Chofer),1,cho);

      	}
	fclose(cho);
	e++;
}

void Ingresar_Vehiculo(int &q)
{
	FILE *vehi;
	Vehiculo vectorvehiculo[TOTAL];

	if (vehi=fopen("vehi.dat", "wb+"))
	{
			cout << "ingrese la marca del vehiculo: ";
			cin >> vectorvehiculo[q].marca;

			cout << "ingrese el modelo del vehiculo: ";
			cin >> vectorvehiculo[q].modelo;

			cout << "ingrese la patente del vehiculo: ";
			cin >> vectorvehiculo[q].patente;

			cout << "ingrese el agno de fabricacion: ";
			cin >> vectorvehiculo[q].agno_de_fabricacion;


        fwrite(&vectorvehiculo[q],sizeof(char),1,vehi);
	}
	fclose(vehi);
	q++;
}

void verifdni(int dni, int &q)
{
	Chofer dchof;
	FILE *x;
	if(x=fopen("cho.dat","rb"))
	{
	    fseek(x,0,SEEK_SET);

		while (!feof(x))
		{

            fread(&dchof,sizeof(struct Chofer),1,x);

			if(dni == (dchof.dni))
			{
				Ingresar_Vehiculo(q);
			}

		}
		if(dni!=dchof.dni)
        {
            cout<< "Error: DNI Incorrecto" << endl;
            cout<< "Toque cualquier boton para volver al menu anterior" << endl;
            getch();
        }
	}
	fclose(x);
}

void Ingreso_Viaje(FILE *&ar)
{
	Viaje varviaje;
	int prueba;

	cout << " "<< endl;

	do
	{
		cout << "Ingrese el agno de partida" << endl;
		cin >> varviaje.agno_de_partida;

		if(varviaje.agno_de_partida<2016 || varviaje.agno_de_partida > 2500)
			{
				cout << "Error: Agno incorrecto. Vuelva a intentarlo."<<endl;
			}
	  }
	while(varviaje.mes_de_partida>=2016 || varviaje.mes_de_partida == 2500);

	do
	{
		cout << "Ingrese el mes de partida" << endl;
		cin >> varviaje.mes_de_partida;

		if(varviaje.mes_de_partida<0 || varviaje.mes_de_partida > 12)
			{
				cout << "Error: Mes incorrecto. Vuelva a intentarlo."<<endl;
			}
	  }
	while(varviaje.mes_de_partida<0 || varviaje.mes_de_partida > 12);

	do
	{
		cout << "Ingrese el dia de partida" << endl;
		cin >> varviaje.dia_de_partida;

		if(varviaje.dia_de_partida<0 || varviaje.dia_de_partida > 31)
			{
				cout << "Error: Dia incorrecto. Vuelva a intentarlo."<<endl;
			}
	  }
	while(varviaje.dia_de_partida<0 || varviaje.dia_de_partida > 31);

	do
	{
		cout << "Ingrese la hora de partida (con el siguiente formato hsmm)" << endl;
		cin >> varviaje.hora_de_partida;
		if(varviaje.hora_de_partida < 0 || varviaje.hora_de_partida > 2400)
			cout << "Error: Hora incorrecta. Vuelva a intentarlo."<<endl;
	}
	while(varviaje.hora_de_partida < 0 || varviaje.hora_de_partida > 2400);

	do
	{
		cout << "Ingrese la hora de llegada estimada (con el siguiente formato hsmm)" << endl;
		cin >> varviaje.hora_estimada_de_llegada;

		if(varviaje.hora_estimada_de_llegada < 0 || varviaje.hora_estimada_de_llegada > 2400)
		{
			cout << "Error: Hora incorrecta. Vuelva a intentarlo."<<endl;
		}

	}
	while(varviaje.hora_estimada_de_llegada < 0 || varviaje.hora_estimada_de_llegada > 2400);

	cout << "Ingrese el costo del pasaje por persona" << endl;
	cin >> varviaje.costo;

	fwrite(&varviaje,sizeof(Viaje),1,ar);
	fclose(ar);
}

void Cantidad_De_Pasajeros (FILE *&ar)
{
	int pasa;
	int aux;
	do
	{
		cout << "Ingrese la cantidad de pasajeros" << endl;
		cout << " "<< endl;
		cout << "Acuerdese que el tamagno de los vehiculos son de la siguiente manera:" << endl;
		cout << "Pequego: 12 Plazas // Mediano: 24 Plazas // Grande: 40 Plazas // Super: 60 Plazas" << endl;
		cout << " "<< endl;
		cout << "La cantidad de pasajeros son: ";
		cin >> pasa;

			if(pasa>0 && pasa <61)
			{
				aux=1;
				fwrite(&pasa,sizeof(int),1,ar);
				Ingreso_Viaje(ar);
			}
			else
			{
				system("cls");
				cout << "La cantidad de pasajeros debe ser, de al menos, 1 y debe ser menor o igual a 60. Vuelva a intentarlo." << endl;
			}
	}
	while(pasa < 0 || pasa > 60);
}

int Eleccion_Destino ()
{
FILE *ar;
int dest;

	do
		{
			cout << "Ingrese destino de viaje, teniendo en cuenta que: " << endl;
			cout << "1 - Mar del Plata" << endl;
			cout << "2 - Necochea" << endl;
			cout << "3 - Pinamar" << endl;
			cout << "4 - Villa Gesell" << endl;
			cout << "5 - San Bernardo" << endl;
			cout << "6 - Mendoza" << endl;
			cout << "7 - Bariloche" << endl;
			cout << "8 - Salir" << endl;

			cout << " " << endl;

			cout << "Ingrese la opcion del destino: ";
			cin >> dest;

			system("cls");

			if(dest=='8')
			{
				return 0;
			}

			if(dest<1 || dest > 7)
			{
				cout << "Opcion incorrecta. Vuelva a intentarlo." << endl;
			}
		}
	while (dest<1 || dest > 7);

if(ar=fopen("viajes.txt" , "a"))
{

		fwrite(&dest,sizeof(char),1,ar);
		Cantidad_De_Pasajeros(ar);
	}
	else
	{
		ar=fopen("viajes.txt", "wb");
		fclose(ar);
		ar=fopen("viajes.txt", "a");
		fwrite(&dest,sizeof(char),1,ar);
		Cantidad_De_Pasajeros(ar);
	}
}

int main()
{
	int a,op=0,e=0,q=0;
	int dni;
do
{
	system("cls");
	cout << "Elija alguna opcion para empezar" << endl;
	cout << " " << endl;
	cout << "1 - Ingresar nuevo chofer" << endl;
	cout << "2 - Ingresar nuevo vehIculo" << endl;
	cout << "3 - Ingresar nuevo viaje" << endl;
	cout << "4 - Emitir reporte total de viajes por chofer" << endl;
	cout << "5 - Emitir reporte de pago a choferes" << endl;
	cout << "6 - Salir" << endl;
	cout << " " << endl;
	cout << "Ingrese una opcion deseada: ";
	cin >> op;
    system("cls");
	switch (op)
	{
		case 1:

			Ingresar_Chofer(e);
			system("cls");
		break;

		case 2:

			cout<< "Ingrese DNI del duegno del vehiculo: ";
			cin >> dni;
			verifdni(dni,q);
			
		break;

		case 3:

			Eleccion_Destino();
			system("cls");
		break;

		case 6:
			return 0;
		break;

		default:
            cout<< "ERROR: OPCION INCORRECTA "<< endl;
            getch();
            system ("cls");
            break;
	}
}while(op!=6);
return 0;
}


 


27-Nov-2016 12:14
Nacho Cabanes (+83)

Veo que no guardas los datos en ningún array ni lista, sino que guardas todos en fichero (¿por qué fichero binario?). En ese caso, el apartado 4 (viajes por chofer) debería bastar con abrir el correspondiente fichero y procesarlo de forma secuencial, del primer dato al último.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)