lunes, 24 de noviembre de 2014

Clientes, Facturas, Detalles en estructura en disco en Ubuntu y Geany por Elinv.


/*
* Codigo desarrollado por Elinv.
* http://www.bragadomas.com/forodeprogramacion/index.php
* http://www.bragadomas.com
* http://www.bragadomas.com.ar
* http://luispedromendez.blogspot.com/
* http://elinv-elinv.blogspot.com/?expref=next-blog
*/

// Elinv_Facturas.cpp: define el punto de entrada de la aplicacion de consola.
//
// Compilado con éxito en:
// Geany 1.24.1
// Ubuntu 14.04
// 
//#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<cstring>
//usando reservacion de espacio para las funciones
using namespace std;

//Prototipo de funciones
int ingreso();
int clientes();
int detalles();
int Buscar_Clientes();

//Estructura para la factura
static struct
{
    int numFactura;
    char nombre[30];
    char apellido[30];
    char nit[30];
    char direccion[70];
    char telefono[20];
    char fecha[12];
    double total;
} Facturas;
//Estructura para el detalle
static struct
{
    int numFactura;
    int cantidad;
    char nomProducto[70];
    char medida[30];
    double precioUnitario;
    double SubTotal;
} Detalle;

int main()
{
    int respuesta;
    do //ciclo repetir asta que
    {
        system("cls");//borrar pantalla
//menu para que el usuario se guie.
        cout<<" =========================================\n";
        cout<<" || FACTURACION ||\n";
        cout<<" ||-------------------------------------||\n";
        cout<<" || 1.- Nueva Factura ||\n";
        cout<<" || 2.- Clientes ||\n";
        cout<<" || 3.- Buscar una Factura ||\n";
        cout<<" || 4.- Buscar un Cliente ||\n";
        cout<<" || 5.- Salir ||\n";
        cout<<" =========================================\n";
        cout<<endl;
        cout<<" -> INGRESE OPCION: ";//solicitud de su respues
        cin>>respuesta;//respuesta
        system("cls");//borrar pantalla
        switch(respuesta)//seleccion de en caso que respuesta se
        {
        case 1:
            ingreso();
            break;//sea uno llama al procedimiento ingreso arriba
        case 2:
            clientes();
            system("pause");
            break;//llama ala funcion ver datos
        case 3:
            detalles();
            system("pause");
            break;//llama ala funcion ver datos
        case 4:
            Buscar_Clientes();
            system("pause");
            break;//llama ala funcion ver datos
        case 5:
            system("cls");
            cout<<"*/*/*/*/*/USTED salio correctamente del programa/*/*/*/*/*/\n\n\n";
            exit(1);;
            break;//cierra el programa
        default:
            cout<<"numero incorrecto intente nuevamente\n\n";
            system("pause");
            break;//lanza un mensaje y vuelve a mostrar los datos
        }
    }
    while(respuesta!=5);

    system("pause");
    cout<<endl;
    return 0;
}


int ingreso()
{
    system("cls");//borrar pantalla
    cout << " --------------------------- \n";
    cout << " ---INGRESO NUEVA FACTURA--- \n";
    cout << " --------------------------- \n";

// captura de campos
    cout << "Ingrese fecha(ej:31/12/2010 :";
    cin >> Facturas.fecha;
    cout << "Ingrese el numero de factura :";
    cin >> Facturas.numFactura;
    cout << "\n- - - - - - DATOS DEL CLIENTE - - - - - -\n";
    fflush(stdin);
    cout << "Ingrese primer nombre :";
    cin.getline(Facturas.nombre,50);
    cout << "Ingrese apellido :";
    cin >> Facturas.apellido;
    cout << "Ingrese numero de Nit :";
    cin >> Facturas.nit;
    fflush(stdin);
    cout << "Ingrese direccion cliente :";
    cin.getline(Facturas.direccion,50);
    cout << "Ingrese telefono cliente :";
    cin >> Facturas.telefono;

// - - - - - - - DETALLE DE LA FACTURA - - - - - - -

    cout << "INGRESE LOS DATOS QUE SE LE SOLICITAN\n?";//instrucciones al usuario

    system("cls");
//
    cout<<" NOMBRE DEL CLIENTE: "<<Facturas.nombre<<Facturas.apellido;
    cout<<"\n";
    cout<<" NIT CLIENTE: "<<Facturas.nit;
    cout<<"\n";
    cout<<" DIRECCION: "<<Facturas.direccion;
    cout<<"\n";
    cout<<" TELEFONO: "<<Facturas.telefono;
    cout<<"\n";
    cout<<" --------------------------- "<<endl;
    cout<<" -----DETALLE FACTURA------- "<<endl;
    cout<<" --------------------------- "<<endl;
    cout<<endl;

    cout<<"DETALLE DE LA FACTURA #: "<<Facturas.numFactura<<endl;
    Detalle.numFactura = Facturas.numFactura;
    cout<<" - - - -- INGRESE LO QUE SE LE PIDE -- - - -"<<endl;
    cout<<" - - - - (Detalle de la Facturacion) - - - -"<<endl;

    cout << "CANTIDAD: ";
    cin >> Detalle.cantidad;
    fflush(stdin);
    cout << "DETALLE PRODUCTO: ";
    cin.getline(Detalle.nomProducto,50);
    cout << "MEDIDA(Kg, lbs,etc...: ";
    cin >> Detalle.medida;
    cout << "PRECIO POR UNIDAD: ";
    cin >> Detalle.precioUnitario;

    Detalle.SubTotal=Detalle.cantidad*Detalle.precioUnitario;

    Facturas.total=Facturas.total+Detalle.SubTotal;//acumulador que suma cada subtotal segun el detalle de la facturacion

    cout<<"SUBTOTAL CALCULADO: "<<Detalle.SubTotal<<endl;

//Grabamos a disco la estructura factura
    FILE *archdisco_factura;
    archdisco_factura = fopen("c:\\factura.txt","at+");
    fwrite(&Facturas,sizeof(Facturas),1,archdisco_factura);
    fclose(archdisco_factura);
//avisando usuario
    cout << "factura insertada" << endl;

//Grabamos a disco la estructura detalle
    FILE *archdisco_detalle;
    archdisco_detalle = fopen("c:\\detalle.txt","at+");
    fwrite(&Detalle,sizeof(Detalle),1,archdisco_detalle);
    fclose(archdisco_detalle);
//avisando usuario
    cout << "Detalle insertado" << endl;
    system("pause");
    return 0;
}

int clientes()
{
    int cantidad = 0;
//abrimos el archivo que contiene la estructura
    FILE *archdisco_open_Facturas;
    archdisco_open_Facturas = fopen("c:\\factura.txt","r");
//verificamos el numero de elementos de la misma.
    while(fread(&Facturas,sizeof(Facturas),1,archdisco_open_Facturas)==1)
    {
        cantidad++;
    };
//Lo informamos al usuario
    printf("La base de datos contiene %d facturas realizadas!.\n", cantidad);
    cout << "--------------------------------------------------" << endl;
    getchar();

    rewind(archdisco_open_Facturas);
//volvemos a leer el archivo de datos e informamos
    while(fread(&Facturas,sizeof(Facturas),1,archdisco_open_Facturas)==1)
    {
        cout << "FECHA = " << Facturas.fecha << endl;
        cout << "FACTURA = " << Facturas.numFactura << endl;
        cout << "APELLIDO = " << Facturas.apellido << endl;
        cout << "NOMBRES = " << Facturas.nombre << endl;
        cout << "DIRECCION = " << Facturas.direccion << endl;
        cout << "TELEFONO = " << Facturas.telefono << endl;
        cout << "NIT = " << Facturas.nit << endl;
        cout << "TOTAL = " << Facturas.total << endl;
        cout << "--------------------------------------------------" << endl;
    };
//Cerramos el archivo.
    fclose(archdisco_open_Facturas);
    return 0;
}

int detalles()
{
    int factura;
    cout << "Ingrese numero de factura a buscar:\t";
    while (!(cin >> factura) ) //Hacemos mientras no obtengamos el nmero de carnet
    {
        cout << "\nLa factura debe contener solamente numeros!." //Informamos el error
             << "\nRe-ingrese numero de Factura por favor!: ";
        cin.ignore(255,'\n'); //Control de errores de cin
        cin.clear(); //Control de errores de cin
        fflush(stdin); //Limpiamos las entradas del teclado
    }

    int cantidad = 0;
//abrimos el archivo que contiene la estructura
    FILE *archdisco_open_detalles;
    archdisco_open_detalles = fopen("c:\\detalle.txt","r");
//verificamos el numero de elementos de la misma.
    while(fread(&Detalle,sizeof(Detalle),1,archdisco_open_detalles)==1)
    {
        cantidad++;
    };
//Lo informamos al usuario
    printf("La base de datos contiene %d facturas realizadas!.\n", cantidad);
    cout << "--------------------------------------------------" << endl;
    getchar();
//Rebobinamos el archivo abierto al inicio.
    rewind(archdisco_open_detalles);
//volvemos a leer el archivo de datos
    bool hallado = false;
    while(fread(&Detalle,sizeof(Detalle),1,archdisco_open_detalles)==1)
    {
        if (factura == Detalle.numFactura)
        {
            cout << "FACTURA NUMERO = " << Detalle.numFactura << endl;
            cout << "CANTIDAD = " << Detalle.cantidad << endl;
            cout << "PRODUCTO = " << Detalle.nomProducto << endl;
            cout << "MEDIDA = " << Detalle.medida << endl;
            cout << "PRECIO UNITARIO = " << Detalle.precioUnitario << endl;
            cout << "SUB TOTAL = " << Detalle.SubTotal << endl;
            cout << "--------------------------------------------------" << endl;
            hallado = true;
        }
    };
    if (hallado==false)
    {
        cout <<"La factura: " << factura << " no fue hallada" << endl;
    }
//Cerramos el archivo.
    fclose(archdisco_open_detalles);
    return 0;
}
int Buscar_Clientes()
{
    int cantidad = 0;
    char apellido_a_buscar[30];
    char * pch;
    int caracter;
    bool hallado = false;

    char texto_a_buscar[30];
    cout << "Ingrese texto que recuerde del Apellido del cliente a buscar:\t";
    while (!(cin >> texto_a_buscar) ) //Hacemos mientras no obtengamos el nmero de carnet
    {
        cout << "\nNo ha ingresado texto en forma correcta!." << endl; //Informamos el error
        cin.ignore(255,'\n'); //Control de errores de cin
        cin.clear(); //Control de errores de cin
        fflush(stdin); //Limpiamos las entradas del teclado
    }


//abrimos el archivo que contiene la estructura
    FILE *archdisco_open_Facturas;
    archdisco_open_Facturas = fopen("c:\\factura.txt","r");
//verificamos el numero de elementos de la misma.
    while(fread(&Facturas,sizeof(Facturas),1,archdisco_open_Facturas)==1)
    {
        cantidad++;
    };
//Lo informamos al usuario
    printf("La base de datos contiene %d facturas realizadas!.\n", cantidad);
    cout << "--------------------------------------------------" << endl;
    getchar();

    rewind(archdisco_open_Facturas);
//volvemos a leer el archivo de datos e informamos
    while(fread(&Facturas,sizeof(Facturas),1,archdisco_open_Facturas)==1)
    {
        strcpy (apellido_a_buscar, Facturas.apellido);
        pch = strstr (apellido_a_buscar, texto_a_buscar);
        caracter = pch - apellido_a_buscar + 1;
        if (caracter >= 0)
        {
            cout << texto_a_buscar << " fue hallado..." << endl;
            cout << "--------------------------------------------------" << endl;
            cout << "FECHA = " << Facturas.fecha << endl;
            cout << "FACTURA = " << Facturas.numFactura << endl;
            cout << "APELLIDO = " << Facturas.apellido << endl;
            cout << "NOMBRES = " << Facturas.nombre << endl;
            cout << "DIRECCION = " << Facturas.direccion << endl;
            cout << "TELEFONO = " << Facturas.telefono << endl;
            cout << "NIT = " << Facturas.nit << endl;
            cout << "TOTAL = " << Facturas.total << endl;
            cout << "--------------------------------------------------" << endl;
            hallado=true;
        }
    };
    if (hallado==false)
    {
        cout <<"El texto buscado: " << texto_a_buscar << " no fue hallado" << endl;
    }
//Cerramos el archivo.
    fclose(archdisco_open_Facturas);
    return 0;
}

jueves, 11 de septiembre de 2014

C++ y C - Ejercicio con asteriscos por Elinv.



/*
 Plataforma e Ide utilizados:
 ------------
 Ubuntu 12.04
 ------------
 Geany 1.24.1
 Compilado en Agosto 20 del 2014
 ------------
*/
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;

// Procedimiento principal
int main ()
{
    // variables
    int x = 3;
    int salto = 1;    
    // cantidad de lineas de asteriscos que imprimiremos
    for (int i = 0; i < 7; i++)
 {
  // Impresión de cada línea
  for (int y = 0; y < x; y++) 
  {
   if(y==salto && salto <4)
    cout << " ";    
   else
    cout << "*";
  }
  cout << endl;
  if (i<3){  // crece
   salto++;
   if (x<7){
    x = x+2;
   }
  }  
  if (i>=3){   // decrece
   salto--;
   if (i>3){
    x = x-2;
   }
  }
 }
    getchar();
 // system("cls"); //En windows y en modo cónsola, limpiamos la pantalla
    system("clear"); //Limpia la pantalla en Linux
}

viernes, 29 de agosto de 2014

C++ y C - Otro evaluador de expresiones aritméticas - Permite evaluar en una sola línea múltiples operaciones matemáticas basicas (+ - * /)aun conteniendo espacios entre si. Y en la menor cantidad de lineas de código. Por Elinv.

 1 // Proyecto en C++. IDE CODEBLOCK 13.12
 2  #include <stdio.h>      // uso de printf, scanf, getchar
 3  #include <stdlib.h>     // uso de exit
 4  #include <strings.h>    // uso de strlen
 5  #include <iostream>     // uso de cout, isalpha, endl, isdigit
 6  using namespace std;
 7  
 8  //Funcion principal
 9  int main()
10  {
11      // Para evaluar expresion matematica basica (suma, resta, div. y multiplic.)
12      // evalua una li­nea donde haya multiples operaciones matematicas
13      // ejemplo: 24+5-256*78/2
14      // otro ejemplo con espacios: 24+ 5 -256*78 /2
15      char expresion[256];
16      printf("\nIngrese expresion aritmetica (ejem...24+25:)\t");
17      //Un especificador que admite texto:
18      scanf("%256[^\n]", expresion);
19      // vemos el tamaño ingresado
20      if (strlen(expresion)<3){
21          // mínimo 3 caracteres (ej. 2+1)
22          cout << "Expresion invalida o nula!\n";
23          exit(0);
24      }
25      // determinar lugar del signo siempre impar
26      int signo = 0;
27      // Si esta todo bien continuamos
28      //recorremos el char
29      for(int i=0; i< 256; i++)
30      {
31          //Si llegamos al final de la cadena, salimos e informamos
32          if (expresion[i]=='\0')
33          {
34              if (signo%2==0)
35              {
36                  cout << expresion << "Es una expresion aritmetica valida";
37              }else{
38                  cout << expresion << "No es una expresion aritmetica valida";
39              }
40              break;
41          }
42          //Si no es un di­gito o un signo aritmetico, informamos y salimos
43          if (isalpha(expresion[i]))
44          {
45              cout << "No es una expresion aritmetica valida 1" << endl;
46              exit(0);
47              break;
48          }
49          //Si el elemento es un digito...
50          if (isdigit(expresion[i]))
51          {
52              if (signo%2!=0){
53                  signo++; // lo volvemos par
54              }
55          }
56          if (expresion[i] == '*' || expresion[i] == '/'
57            ||expresion[i] == '+'||expresion[i] == '-')
58          {
59              signo++; //lo hacemos impar
60          }
61      }
62      getchar();
63      return 0;
64  }