lunes, 30 de mayo de 2016

Ultima Entrega curso 2015-2016

//=======================================================================================================================================
// Name        : P4ricardomd1.cpp
// Author      : Ricardo Meza Díaz
// Version     :
// Copyright   : Your copyright notice
// Description : 16 Diciembre 2015.Diseña un programa que simula la venta de coches oficiales para venderselos a los cuatro candidatos
//                 que se presentaran a las elecciones el 20 D
//=======================================================================================================================================

//Diseñar el siguiente programa:
//Debe venderle coches oficiales a los candidatos que se presentaran a las elecciones el 20 de Diciembre, y que procese un vector de N posiciones con un registro en cada posición.
//Define las constantes y tipos de datos que estimes convenientes. Hacer un registro que contenga la enumeración del coche, la marca y el .No debe escogerse el color ya que, todos serán negros(trabajar con el color negro en el programa es opcional).
//En el programa principal tendremos el siguiente menú:
//1.Introducir los datos de los coches a vender
//2.Mostrar los datos los coches que se van a vender
//3.Simular la venta de coche
//5.Leer los datos de los coches del fichero(leer fichero)
//6.Salir
//Todas las opciones del menú (excepto salir) se implementarán en módulos.
//Realiza todas las comprobaciones necesarias para que el usuario no se confunda al introducir los datos.

#include <iostream>
#include<stdio.h>
#include<ctype.h>
//Inlcuyo la libreria fstream para trabajar con ficheros
#include<fstream>
using namespace std;
//Defino las constantes
#define N 3
#define M 30
//Defino el tipo de dato cadena para el registro comunidadyciudades
typedef char cadena[M];
//Definimos un tipo de registro comunidadesyciudades
typedef struct {
     int enumeracion;
     cadena nombre;
     float precio;

} cochelujoso; //Nombre del registro

//Defino el tipo de vector que se llamara vectorciudadesycomunidades y contendra el registro comunidadesyciudades
typedef cochelujoso vectorcoches[N];
//Prototipos modulos
void introducircoche(vectorcoches v);
void mostrarcoche(const vectorcoches v);
void ventacoche(int numerolista, const vectorcoches v);
void almacenarcoche(const vectorcoches v);
void leerdatos(ifstream & entrada);
void pasardatosficheroalvector(vectorcoches v);
int menu();

int main() {
     cadena politico;
     ;
     cout << "*********CochesOficiales S.L************" << endl;
     cout << "Solo vendemos coches oficiales" << endl;
     cout << "Bienvenido(a)," << endl;
     cout << "Es usted Pablo,Albert,Mariano o Pedro?" << endl;
     cin >> politico;
     cout << "Perfecto,ahora escoja una de nuestras opciones:" << endl;
     //Declaro el vectorcoches v
     vectorcoches v;
     //Declaro variables
     int nhumerolista, ohpcion;
     //Declaro un fichero de escritura de nombre salida
     ofstream salida;
     //Declaro un fichero de lectura de nombre entrada
     ifstream entrada;
     //Llamada al modulo menu
     //Utilizo la variable ohpcion para guardar en ella el menu, ya que el modulo menu es una funcion y devuelve un entero
     ohpcion = menu();
     //While que comprueba que si la opcion introducida esta entre 1 y 6,se podrá ejectura el modulo introducido
     while (ohpcion >=1 && ohpcion <= 6) {
         //Switch para poder seleccionar entre distisntas opciones
         switch (ohpcion) {
         case 1:
              //Llamada al modulo 1.Introducircoche
              introducircoche(v);
              break;
         case 2:
              //Llamada al modulo 2.Mostrarcoche
              mostrarcoche(v);
              break;
         case 3:
              //Muestra por pantalla un mensaje para que introduscas el podio del coche
              cout
                        << "Introduce el numero de podio donde se encuentra situado el coche:"
                        << endl;
              //Debes intorducir por teclado el nuemro de podio del coche
              cin >> nhumerolista;
              //Llamada al modulo 3.Ventacoche
              ventacoche(nhumerolista, v);
              break;
         case 4:
              //Llamada al modulo 4.Almacenarcoche
              almacenarcoche(v);
              break;
         case 5:
              //Llamada al modulo 5.leerdatos
              leerdatos(entrada);
              break;
         case 6:pasardatosficheroalvector(v);
         break;
         }
         //Se vuelve a llamar al modulo menu otra vez para que cuando se termine de ejecutar un modulo vuelva a preguntar que modulo quiere elegir
         ohpcion = menu();
     }
     //Muestra este mensaje al salir del programa
     cout << "Usted ha salido del programa" << endl;
     //Muestra en pantalla: "Presione una tecla para continuar..." cuando se ha salido del programa
     system("PAUSE");

     return 0;
     }

//Definicion de modulos
//Modulo 1.Introducircoche
void introducircoche(vectorcoches v) {
     //For para ir recorriendo el vector
     for (int i = 0; i < N; i++) {
         cout
                   << "Introduce el numero de podio donde se encuentra situado el coche en el consecionario:"
                   << endl;
         cin >> v[i].enumeracion;
         //While que comprueba que si he introducido un numero de 1 hasta 10 se podran introducir los datos del coche
         //sino mostrara error
         while (v[i].enumeracion < 1 || v[i].enumeracion > 3) {
              cout << "Error, la enumeracion debe ser >=1 o <=3" << endl;
              cin >> v[i].precio;
         }
         cout << "Introduce la marca del coche:" << endl;
         cin >> v[i].nombre;
         cout << "Introduce el precio:" << endl;
         cin >> v[i].precio;
         //While que comprueba que si he intorducido el precio mayor que cero se admitira ese precio
         while (v[i].precio <= 0) {
              cout << "Error, el precio debe ser >0" << endl;
              cin >> v[i].precio;
         }
     }
}
//Modulo 2.Mostrarcoche
void mostrarcoche(const vectorcoches v) {
     //For para ir recorriendo el vector
     for (int i = 0; i < N; i++) {
         //Se muestran por pantalla los datos de los coches introducidos en el vector hasta el momento
         cout << "La enumeracion del coche es:" << v[i].enumeracion << endl;
         cout << "La marca del coche es:" << v[i].nombre << endl;
         cout << "El precio de coche es:" << v[i].precio << endl;
     }

}
//Modulo 3.Ventacoche
void ventacoche(int numerolista, const vectorcoches v) {
     //Defino un contador y lo inicializo a cero
     int i = 0;
     bool encontrado = false;
     //While que comprueba que el contador debe ser menor o igual al total de coches para que pueda mostrar los datos del coche
     while (i < N && encontrado == false) {
         //If que comprueba que si he introducido un numero correspondiente al podio del coche,se mostraran los datos del coche
         if (v[i].enumeracion == numerolista) {

              cout << "El coche es:" << " " << v[i].nombre << endl;
              cout << "Su precio es:" << v[i].precio << " " << "euros" << endl;
              cout << "Por tanto,debe pagar:" << v[i].precio << " " << "euros"
                        << endl;
              encontrado = true;

         }
         //Contador que una aumentando en una unidad
         i++;
     }
     if(encontrado==false){
         cout<<"Error.Ha introducido un numero incorrecto"<<endl;
     }
}
//Modulo 4.Almacenarcoche
void almacenarcoche(const vectorcoches v) {
     //Declaro el fichero de escritura con nombre salida
     ofstream salida;
     //Abro el fichero Coches.txt para escribir en el
     salida.open("Coches.txt");
     //If para comprobar que si el fichero se abrio correctamente se podra escribir en el
     //sino se mostrara un mensaje de error
     if (salida.fail()) {
         cout << "Error.No he podido abrir el fichero" << endl;
     } else {
         cout << "El fichero se abrio correctamente" << endl;
         cout << "Por tanto,se ha almacenado los datos" << endl;

         //For para ir recorriendo el vector
         for (int i = 0; i < N; i++) {
              salida << v[i].enumeracion << " " << v[i].nombre << " ";
              salida << v[i].precio << " " << endl;
         }
     }
     //Se cierra el fichero
     salida.close();
}
//Modulo 5.Leerdatos
void leerdatos(ifstream & entrada) {
     //Declaro el registro cochelujoso e, ya que los pasos son por variable y  tienen qque ir al main y regresar
     cochelujoso e;
     //Abro el fichero Coches.txt para leer los datos que hay en el
     entrada.open("Coches.txt");
     //If para comprobar que si el fichero se abrio correctamente se podra leer en el
     //sino se mostrara un mensaje de error
     if (entrada.fail()) {
         cout << "Error en la apertura del fichero Coches.txt" << endl;
         cout << "Puede ser que el fichero no exista o este corrupto" << endl;
     } else {

         //Lectura anticipada para saber si hay fin de fichero
         entrada >> e.enumeracion;
         //If para comprobar que si se ha llegado a fin de fichero se mostrara un mensaje de que esta vacio
         //sino se mostraran los datos del fichero
         if (entrada.eof()) {
              cout << endl << "El fichero Coches.txt esta vacio" << endl;
         } else {
              cout << endl << "Los datos contenidos en el fichero son: " << endl;

              //While que comprueba que mientras no se llegue al final de fichero se mostraran todos los datos que hayan en el
              while (!entrada.eof()) {
                   cout << "Enumeracion:" << e.enumeracion << " ";
                   entrada >> e.nombre;
                   cout << "Nombre del coche:" << e.nombre << " ";
                   entrada >> e.precio;
                   cout << "precio:" << e.precio << " " << endl;
                   entrada >> e.enumeracion;

              }
         }
     }
}
void pasardatosficheroalvector(vectorcoches v) {
     {
         int cont;
         ifstream in;

         in.open("Coches.txt");
         if (in.fail()) {
              cout << "Se ha producido un error en el fichero al leer" << endl;
              cout << "Revise el fichero" << endl;
         } else {
              cont = 0;
              //lectura previa
              in >> v[cont].enumeracion;
              while (!in.eof() && cont < N) //no fin de fichero y no     sobrepasemos el tamanio del vector
              {
                   in >> v[cont].nombre;
                   in >> v[cont].precio;
                   cont++;
                   in >> v[cont].enumeracion;
              }
              if (!in.eof()) {
                   cout
                            << endl
                            << "El fichero contiene mas datos de  los que caben en el vector";
                   cout
                            << endl
                            << "aunque la carga del fichero al     vector, se ha realizado satisfactoriamente"
                            << endl;
              } else {
                   cout
                            << endl
                            << "La carga del fichero al vector, se     ha realizado satisfactoriamente"
                            << endl;
              }
         }
         in.close();
     }
}
//leer datos del vector

//Modulo 6.Menu
int menu() {
     //Declaro una variable opcion que sera devuelta al elegir la opcion deseada
     int opcion;
     cout << "1.Introducir los datos coches" << endl;
     cout << "2.Mostrar los datos de los coches" << endl;
     cout << "3.Simulacion venta de algun coche" << endl;
     cout << "4.Almacenar los datos en el fichero de texto" << endl;
     cout << "5.Leer los datos del fichero de texto" << endl;
     cout<<"6.Pasae datos del fichero al vector"<<endl;
     cout << "7.Salir" << endl;
     cout << "Escoja una opcion:" << endl;
     cin >> opcion;
     //While para comprobar que si la opcion introducida es menor que <1 || > 6 mostrara un mensaje de error
     // y que introduzcas un numero correcto
     while (opcion < 1 || opcion > 8) {
         cout
                   << "Error.Ha introducido un numero diferente a los que le mostramos"
                   << endl;
         cout << "Introduzca un numero del 1 al 7:" << endl;
         cin >> opcion;
     }
     //Devuelve la variable opcion elegida
     return opcion;
}






No hay comentarios:

Publicar un comentario