Page 1

Estructuras de Datos I

PRテ,TICA 2

TAD LINEALES

1/7


Estructuras de Datos I

Enunciado.La empresa de venta de vehículos de ocasión VentOcar S.A., ante la crisis en la que está inmersa, dada la escasez de venta de vehículos, se ha propuesto realizar cambios en su modelo de negocios. A la tradicional venta de vehículos (gestionada en la práctica 1), ha añadido una sección dedicada a la venta de vehículos a través de un sistema de pujas. Estos vehículos para pujas son distintos de los de las ventas tradicionales y se tratan de vehículos que de otra forma tendrían difícil salida en el mercado. Centrándonos en esta nueva forma de negocio, la idea es que los posibles compradores prueben los vehículos destinados a pujas y puedan pujar sobre los mismos. Los concesionarios estarán con ello compuestos por vehículos en venta tradicional más vehículos en pujas. Para cada vehículo en puja almacenaremos una lista con las pruebas/citas de los clientes, así como una cola de las pujas recibidas por los mismos. Para las citas/pruebas así como para las pujas se necesitará almacenar información sobre la persona que la realiza: dni, teléfono, nombre y apellidos. La estructura de una puja estará constituida por la información de la persona más la puja concreta que realiza. Se almacena en una cola pues se desea reflejar el orden estricto de alta de las pujas. La idea es que sin necesidad de almacenar fecha y hora, podamos obtener la puja máxima y quién la realizó en primer lugar. En el caso de que se trate de una prueba, se almacena la información de la persona así como la Fecha y Hora de la prueba. Se entiende que se pueden dar citas de prueba de los vehículos cada hora (9:00. 10:00, …) y que no pueden haber dos citas para un vehículo en una misma hora. La lista de citas contempla, ordenadas, las fechas y horas de citas de un vehículo. La aplicación deberá comenzar cargando los ficheros de datos, igual que en la práctica anterior. Posteriormente mostrará el siguiente menú: --- MENÚ PRINCIPAL --VentOcar S.A. --Venta Tradicional-1 .- Mostrar los datos de un Vehículo. 2 .- Mostrar los vehículos de un Concesionario. 3 .- Mostrar los vehículos de la empresa. 4 .- Ver el vehículo en venta más económico de la empresa. 5 .- Mostrar los vehículos de un determinado segmento. 6 .- Vender vehículo de un concesionario. --Venta por Pujas— 7 .- Traspasar vehículo de venta tradicional a venta por pujas. 8 .- Insertar Puja/Prueba. 9 .- Listar pujas de un coche. 10.- Listar citas de un vehículo para un día. 11.- Venta de un vehículo 12.- Listar vehículos en Pujas. ---13.- Salir Elige una opción:

Explicación de las distintas opciones. La venta tradicional no ha sufrido cambios.  Las opciones de Ventas por Pujas son todas aplicables a un concesionario concreto. En todas las opciones (de 7 a 12) deberá seleccionarse el concesionario concreto con el que trabajar, ya sea éste central o periférico. 2/7


Estructuras de Datos I

 La opción 7.- Al introducir la matrícula del vehículo deseado, representará que dicho vehículo dejará de estar disponible en la venta tradicional y pasará a ser gestionado a través de la venta por pujas. En caso de que dicho vehículo no exista en el concesionario en el que se aplica la operación se informará de ello.  La opción 8.- Introduciendo la matrícula del vehículo deseado, nos muestra, en caso de que la búsqueda haya sido correcta un submenú con las siguientes opciones. --1.2.3.-

Inserción Puja/Prueba --Introducir Puja. Introducir Prueba/Cita. Volver al menú anterior

VentOcar S.A.

Elige una opción:

 La opción 1 de este menú nos permite, tras rellenar los datos de la persona y el valor de su puja, introducir en la cola de pujas del vehículo la puja realizada.  En la opción 2 de este menú, introduciendo una fecha, nos muestra el listado de las citas del vehículo para ese día, para que el usuario tenga información sobre las citas concedidas y que, conociendo que las citas se dan de hora en hora y sólo una cita por hora, trate de elegir la cita que desee. Se solicitará hora de la cita deseada y, comprobando que está libre, se solicitará los datos de la persona y se incorporará de forma adecuada la cita en la lista de citas. Si el vehículo que buscamos no se encuentra, no se mostraría el submenú anterior y el programa informaría que no se encuentra el vehículo.  La opción 9.- Dada la matrícula de un vehículo, mostrará por pantalla un listado con toda la información relativa a las pujas realizadas con respecto a ese vehículo: dni, teléfono y nombre y apellidos de cada pujador e importe de la puja. Fruto de este listado, al final, nos destaca la puja máxima y el dni del pujador.  La opción 10.- Dada la matrícula de un vehículo y fecha, mostrará por pantalla toda la información relativa a las citas de ese vehículo y día.  La opción 11.- Periódicamente la empresa VentOcar realizará revisiones de los precios de pujas de los vehículos, de forma que cuando bajo su criterio se haya alcanzado una puja aceptable por un vehículo, procederá a su venta. En esta opción se contempla que introduciendo una matrícula de un vehículo se eliminará dicho vehículo del concesionario, obteniendo un listado de personas a las que comunicarle la venta del vehículo (tanto de citas como de pujas).  La opción 12 muestra un listado de vehículos en sistema de pujas (Similar a la opción 2 pero donde muestra los vehículos en pujas en lugar de vehículos en venta tradicional)

Estructuras, Clases, Atributos y Métodos.Para el desarrollo de la Práctica, deberemos utilizar la siguiente estructura de datos necesaria para albergar la información referente a cada vehículo, así como apoyarnos en las constantes y tipos que se expresan. #define #define #define #define

MAX_STR 30 //longitud maxima de la cadena MAX 200 // numero maximo de vehiculos en un concesionario MAXP 20 //numero máximo de vehículos en pujas MAXCITAS 20 //numero máximo de citas de pruebas para un vehículo 3/7


Estructuras de Datos I typedef char cadena[MAX_STR]; //-------------- Definición de la estructura Persona struct Persona { char DNI[10]; cadena Telefonos; cadena Nombre; cadena Apellidos; }; //-------------- Definición de la estructura Puja

-----------------------

-----------------------

struct Puja{ Persona P; float Importe; }; //-------------- Definición de la estructura Cita

-----------------------

struct Cita{ Persona P; char Fecha[11]; int hora;}; //-------------- Definición de la estructura Coche struct Coche { short int CodVeh,Anno; long NumKm, Precio; cadena Marca, Modelo, Matricula; char Combustible, Segmento; };

-----------------------

//-------------- Definición de la estructura Cochepuja

-----------------------

struct Cochepuja { Coche c; Colapujas Pujas; Listacitas Citas; }; Fichero Listacitas.h class Listacitas { Cita Citas[MAXCITAS]; //elementos de la lista int Ncitas; //nº de elementos que tiene la lista public: //Operaciones propias del TAD Lista Listacitas(); //constructor de la clase void Inicializar(); void insertar(int i, Cita e); void eliminar(int i); void modificar(int i, Cita e); int esvacia(); Cita consultar(int i); int longitud(); int posicion(Cita e); /*devuelve la posición donde se encuentra la fecha y hora de la cita e o la posición que debería ocupar dicha fecha y hora en la lista, para facilitar la inserción ordenada */ };

4/7


Estructuras de Datos I Fichero Colapujas.h class Colapujas{ FILE *f; //fichero al que está asociado la cola de pujas. cadena Nombre; //nombre del fichero físico asociado a la cola int inicio,fin; /*inicio y fin de la cola. Representan el Nº de puja que constituye el primer elemento de la cola así como el último, respectivamente. De ejemplo, tenemos una cola donde se han insertado 5 elementos y se han desencolado dos=> Inicio=2 (ya se han desencolado dos elementos) y fin=5 (se han introducido 5)*/ public://Operaciones propias del TAD Cola Colapujas(); // constructor de la clase void Inicializar(cadena Nombre); void encolar(Puja p); void desencolar(); int esvacia(); Puja consultar() ; int longitud(); };

La clase Concesionario contiene la información necesaria para gestionar cada concesionario y está compuesto por los siguientes atributos y métodos. //---------------- Definicion de clase Concesionario-------------------------class Concesionario { cadena Nombre; //Nombre del Concesionario short int NVehiculos; //Numero de vehiculos a la venta tradicional short int NVehiculospujas; //Numero de vehiculos a la venta por pujas Coche Vehiculos[MAX]; //Capacidad maxima de 200 vehiculos en cada concesionario Cochepuja Vehiculospujas[MAXP]; //Coches en pujas en concesionario public: Concesionario(); Concesionario(int N, cadena Nom); int Recuperar(cadena fich);//Recupera la informacion de los ficheros de datos int NumeroVehiculos(); //Devuelve el numero de vehiculos en venta char DameSegmento(int indice); //Devuelve el segmento del vehiculo void MuestraVehiculo(int indice); //Muestra la informacion de un vehiculo void MostrarVehiculos();//Muestra los datos de los vehiculos de un concesionario void EliminaVehiculo(int indice);//Elimina la informacion del vehiculo vendido. int BusquedaLineal(cadena mat, int inicio, int fin);//Busqueda por matricula int BusquedaBinaria(int cod,int inicio, int fin);//Busqueda por codigo vehiculo void OrdenacionBurbuja(int inicio, int fin); void OrdenacionInsercion(int inicio, int fin); void OrdenacionSeleccion(int inicio, int fin); void OrdenacionShell(int inicio, int fin); Concesionario operator+(Concesionario C); *******************************MÉTODOS NUEVOS**************************************** int NumeroVehiculosPujas();//Devuelve el numero de vehiculos en pujas void Pasaapujas(int indice);//pasa a pujas el vehículo indice int BusquedaLinealpuja(cadena mat, int inicio, int fin);//Busqueda por matricula void Introducirpuja(Puja p,int indice);//introduce la puja p en vehiculo indice void muestracitas(int indice,char fecha[11]);//muestra las citas del vehiculo //indice para la fecha indicada void Introducircita(Cita c,int indice);//introduce la cita c en vehiculo indice puja Listarpujas(int indice);/*lista las pujas del vehiculo indice, devolviendo la puja maxima*/ void Listapersonaspujas(int indice);//lista personas que han pujado por indice void Listapersonascitas(int indice);//lista personas que prueban indice void eliminavehiculopujas(int indice)//Elimina de pujas el vehiculo indice void MostrarVehiculosPujas();//Muestra los vehiculos en puja de un concesionario void OrdenacionInsercionpuja(int inicio, int fin);//Ordenación por matricula }; 5/7


Estructuras de Datos I

Los métodos nuevos de la clase Concesionario tienen el siguiente funcionamiento: int NumeroVehiculosPujas();

/* Valor de retorno: un valor entero Efecto: devuelve el número de vehículos en pujas en el concesionario */ void Pasaapujas(int indice);

/* Parámetros: índice de la tabla de Vehiculos Precondiciones: 0<=indice<NVehiculos Efecto: pasa a la tabla Vehiculospujas el vehículo cuyo índice se pasa como parámetro, desapareciendo de la tabla Vehiculos */ int BusquedaLinealpuja(cadena mat, int inicio, int fin);

/* Parámetros: mat es la Matrícula a buscar, inicio y fin los índices de la tabla Vehiculospujas entre los que buscar Valor de retorno: posición del concesionario en la que se encuentra el vehículo. Si el vehículo no se encuentra devolverá -1 Precondiciones: 0 <= inicio <= fin < NVehiculospujas Efecto: devuelve la posición del concesionario entre los límites de búsqueda inicio y fin, en la que se encuentra el vehículo cuya matrícula se pasa como parámetro. Si el vehículo no se encuentra en ese concesionario devolverá -1 */ void Introducirpuja(Puja p,int indice);

/* Parámetros: la Puja a introducir p y un índice de la tabla Vehiculospujas Precondiciones: 0 <= indice < NVehiculospujas Efecto: introduce la puja p en el vehículo cuyo índice se pasa como parámetro */ void muestracitas(int indice,char fecha[11]);

/* Parámetros: índice de la tabla de Vehículospujas y fecha para mostrar las citas Precondiciones: 0<=indice<NVehiculospujas Efecto: muestra por pantalla los datos de las citas para la fecha indicada del vehículo cuyo índice se pasa como parámetro */ void Introducircita(Cita c,int indice);

/* Parámetros: la Cita a introducir c y un índice de la tabla Vehiculospujas Precondiciones: 0 <= indice < NVehiculospujas Efecto: introduce la Cita c en el vehículo cuyo índice se pasa como parámetro Excepciones: si introducir la cita c superara el máximo de citas permitidas la cita no se introducirá */ puja Listarpujas(int indice);

/* Parámetros: índice de la tabla de Vehiculospujas Valor de retorno: una variable de tipo puja Precondiciones: 0 <= indice < NVehiculospujas Efecto: lista las pujas del vehículo de la tabla Vehiculospujas cuyo índice se pasa como parámetro, devolviendo la puja máxima /* void Listapersonaspujas(int indice);

/* Parámetros: índice de la tabla de Vehiculospujas 6/7


Estructuras de Datos I

Precondiciones: 0 <= indice< NVehiculospujas Efecto: lista las personas que han pujado por el vehículo de la tabla Vehiculospujas cuyo índice se pasa como parámetro /* void Listapersonascitas(int indice);

/* Parámetros: índice de la tabla de Vehiculospujas Precondiciones: 0 <= indice< NVehiculospujas Efecto: lista las personas que tienen cita para probar el vehículo de la tabla Vehiculospujas cuyo índice se pasa como parámetro /* void eliminavehiculopujas(int indice);

/* Parámetros: índice de la tabla de Vehiculospujas Precondiciones: 0 <= indice< NVehiculospujas. La tabla Vehiculospujas no puede estar vacía Efecto: elimina el vehículo de la tabla Vehiculospujas cuyo índice se pasa como parámetro /* void MostrarVehiculosPujas(); /*

Efecto: muestra los vehículos en puja de un concesionario */ void OrdenacionInsercionpuja(int inicio, int fin)

/* Parámetros: inicio es el índice del primer elemento de la tabla Vehiculospuja a ordenar y fin es el índice del último elemento de dicha tabla a ordenar Precondiciones: 0 <= inicio <= fin < NVehiculospuja Efecto: Método que ordena los vehículos en puja desde la posición inicio hasta la posición fin de un concesionario por la matricula utilizando el método de ordenación por Inserción Directa */ Para la elaboración de la práctica el alumno deberá utilizar  Los ficheros de datos “DATOS1.DAT” y “DATOS2.DAT” y los ficheros de cabecera (.h) que se proporcionarán junto a este enunciado y que a su vez podrán descargarse de la página web de la asignatura.  Se debe emplear Diseño Modular para la realización de la práctica. Consejos  El alumno debería ser capaz de reducir el código de modo que todas aquellas operaciones que se repitan varias veces a lo largo del programa, sean implementadas a través de subprogramas. Fecha tope de finalización La práctica deberá estar terminada para el día que se realice el primer examen de modificación de laboratorio, sobre el contenido de las prácticas 1 y 2. El alumno deberá consultar con su profesor de prácticas la fecha exacta de realización de dicho examen de modificación, y por tanto la fecha tope en el que la práctica debe estar terminada.

7/7

mi_primer libro  

pruebas de libro

Read more
Read more
Similar to
Popular now
Just for you