// MANEJO DE ESTRUCTURAS // PERMITE INTRODUCIR DATOS // - SI NO EXISTE, QUE LO GUARDE // - SI SI EXISTE que lo borre --- MEJOR QUE NO LO BORRE // PERMITA MOSTRAR LOS DATOS ALMACENADOS /* 1.- Compras 2.- Ventas 3.- Mostrar inventario 0.- Salir COMPRAS Si se selecciona "Compras", deberá de pedir los siguientes datos: Area Título Páginas Precio Cantidad La clave, será generada de manera automática considerando tamaño de 6 caracteres las 2 primeras para el área las 2 segundas para el título las 2 últimas para un número progresivo VENTAS Si se selecciona la opción de ventas: que pida la clave y la cantidad que se vende y de manera automática, se actualiza el inventario - si la existencia es de cero, que indique el error MOSTRAR INVENTARIO Deberá mostrarse las existencias actuales de manera ALINEADA, por ejemplo: ============================================================================== Clave Area Titulo Páginas Precio Existencias ============================================================================== maca0 matematicas calculo 234 120.45 25 matr1 matematicas trigonometria 456 0.76 12 SALIR Si es la opción cero -salir- se termina la ejecución del programa */ //=========================================== #include <stdio.h> #include <string.h> #include <stdlib.h> // a cada columna se le llama CAMPO // a cada renglón (conjunto de campos) se le llama REGISTRO struct Libros { char *Area; char *Titulo; int Paginas; float Precio; char *Clave; // (6)==> (2)Area(2)Titulo(2)#progresivo }; struct Libros vector[20]; int NumProg=0; void menu(int n, char *cad) { printf("%i.- %s\n", n, cad); } int opcion(int a, int b) { int n=0; printf("¿Opción? (%i a %i) ", a, b); scanf("%i", &n); return n; } int Existe (char *T) { int k=0; int ok=0; while ( k < NumProg ) { if ( !strcmp(T, vector[k].Titulo) ) { strcpy(vector[k].Area, ""); strcpy(vector[k].Titulo, ""); strcpy(vector[k].Clave, ""); vector[k].Paginas = 0; vector[k].Precio = 0.0; printf("\nYA EXISTIA ... SE BORRÓ\n\n"); ok = 1; } k++; } return ok; } char *GeneraClave(char *A, char *T) { char *Clave = (char*)malloc(10); char *aux = (char*)malloc(3); strcpy(Clave, ""); // inicializando la cadena strncpy(Clave, A, 2); strncpy(aux, T, 2); sprintf(Clave, "%s%s%i", Clave, aux, NumProg); return Clave; } void PedirDatos() { int Paginas; float Precio; char *Area = (char*)malloc(80); char *Titulo = (char*)malloc(80); printf("\nIntroduzca los datos del nuevo libro ... {%i}\n", NumProg); printf("===========================================\n"); printf("\nTítulo del libro: "); scanf("%s",Titulo); if ( !Existe(Titulo) ) { printf("Area a la que pertenece: "); scanf("%s", Area); printf("\nNúmero de páginas: "); scanf("%i", &Paginas); printf("\nPrecio: "); scanf("%f", &Precio); // SE ALMACENA EN EL VECTOR vector[NumProg].Area = (char*)malloc(80); vector[NumProg].Titulo = (char*)malloc(80); vector[NumProg].Clave = (char*)malloc(80); strcpy(vector[NumProg].Area, Area); strcpy(vector[NumProg].Titulo, Titulo); strcpy(vector[NumProg].Clave, GeneraClave(Area, Titulo) ); vector[NumProg].Paginas = Paginas; vector[NumProg].Precio = Precio; NumProg++; } } void MostrarDatos () { int k=0; printf("\n=====================================================\n"); printf("Clave\tArea\tTitulo\tPáginas\tPrecio\tExistencias\n"); printf("=====================================================\n"); while( k < NumProg ) { printf("%s\t%s\t%s\t%i\t%f\t---\n", vector[k].Clave, vector[k].Area, vector[k].Titulo, vector[k].Paginas, vector[k].Precio); k++; } printf("=====================================================\n\n\n"); } void procesar(int n) { switch (n) { case 1: PedirDatos(); break; case 2: MostrarDatos(); } } void Inicio() { int opc=0; while(1) { menu(1, "Pedir datos"); menu(2, "Mostrar datos"); menu(0, "Salir"); if ( opc = opcion(0,2) ) procesar(opc); else break; } } int main(int n, char **a) { Inicio(); system("clear"); }