Programa de C++ llenado de un cheque.

resulta que este año vi un ejercicio muy bueno en un curso programacion, y decidi hacerlo ya que se ve muy entrenido, ya que involucra usar varias librerias y libreria de windows.h para posicionar el cursor en la consola, asi mismo usar Sleep(), para realizar una pausa, otro punto importante es usa libreria time.h que se usa para conocer la hora del sistema, aunque se haya realizado con if la seleccion del mes ya que asi es facil su comprension pero lo recomendable seria usar enum junto a un puntero para que sea mas frexible el programa, otra cosa es la funcion que genera el numeros en letras menciono otra vez que se hizo con if para que fuera rapido su compresion aunque se podia usar un un puntero y sobrecargar la funcion para que fuera mas rapido su funcionamiento,  para capturar el teclado se uso getch(); junto el codigo hex del teclado para capturar  interrupcion en este caso se uso el F1, F2, F3,f4, y ESC.

Esto fue probado en el editor de codeblocks 8.02 y 10.5 lo puedes bajar de www.codeblocks.org o aqui, y el compilador que fue usar es MinGW32 version 2 4.6.1 fue bajado de http://tdm-gcc.tdragon.net/download  en este caso yo selecione el paquete de tdm-gcc-4.6.1 que es de 32 bits con 64 bits cruzado(x86-64) deberia de funcionar en cualquier computadora, bueno tambien lo probe en visual++-2005, y borland 5.5(no funcioan con otro borlan inferior a 5.5), una vez descargado tdm-gcc-4.6.1 debemos de selecionarlo y al momento de instarlo debemos de hacerlo en el directorio de C:\MinGW32 , ahora lo puedes compilar.

Luego deberá mostrar en la parte inferior de la pantalla  el mensaje “Hacer otro  F1     Salir  Esc”,  en  el  cual  deberá  presionar  una  de  las  teclas  de  opción;  si  en  caso  presiona  otra  tecla  mostrará  el  mensaje  “Presione  una  de  las  teclas  indicadas.”,  y  deberá  seguir  esperando  que  presione la tecla de opción.  Si en caso se desea “Hacer otro”, le solicitará de nuevo los datos; si se  desea “Salir”, regresara al menú principal para que elija otra opción.   Después de tres veces que  no escoja una opción valida el sistema terminará.  Cuando seleccione una opción valida el sistema  almacenará los datos en un archivo llamado: “cheques.bin”.  Cuando el sistema almacene los  datos  deberá  también  almacenar  los  índices  para  el  campo  “No.  Cheque”,  que  será  utilizado  para  la  búsqueda.

OPCION 2, BUSQUEDA DE CHEQUE. (F2)

Al momento de presionar la tecla F2, el sistema deberá de solicitar el número de cheque a  buscar.  Cuando el usuario ingrese el número de cheque, el sistema lo buscará en el archivo de  índices, el cual estará ordenado de forma ascendente, y tendrá la referencia al registro almacenado  en  el  archivo  “cheques.bin”,  y  si  lo  encuentra  deberá  mostrar  el  contenido  del  mismo  en  una  pantalla  similar  a  la  opción  1,  si  no  encuentra  el  cheque  el  sistema  deberá  de  indicar  con  un mensaje que no se encontró el cheque.

Luego  deberá  mostrar  en  la  parte  inferior  de  la  pantalla    el  mensaje  “Buscar  otro    F1     Salir  Esc”, en el cual deberá presionar una de las teclas de opción; si en caso presiona otra tecla  mostrará  el  mensaje  “Presione  una  de  las  teclas  indicadas.”,  y  deberá  seguir  esperando  que  presione la tecla de opción.  Si en caso se desea “Buscar otro”, le solicitará de nuevo el número de  cheque a buscar; si se desea “Salir”, regresara al menú principal para que elija otra opción.

OPCION 3, ELIMINACIÓN DE CHEQUES. (F3)

Al momento de presionar la tecla F3, el sistema deberá de solicitar el número de cheque a  eliminar.    Cuando  el  usuario  ingrese  el  número  de  cheque,  el  sistema  lo  buscará  en  el   archivo  índice  y  obtendrá  la  referencia  al  registro  almacenado  “cheques.bin”,  y  si  lo  encuentra  deberá  mostrar el contenido del mismo en una pantalla similar a la opción 1.

Luego deberá mostrar en la parte inferior de la pantalla  el mensaje “Eliminar  F1     Salir   Esc”,  en  el  cual  deberá  presionar  una  de  las  teclas  de  opción;  si  en  caso  presiona  otra  tecla mostrará  el  mensaje  “Presione  una  de  las  teclas  indicadas.”,  y  deberá  seguir  esperando  que  presione la tecla de opción.  Si en caso se desea “Eliminar” lo pondrá eliminado (lógico carnet par,  físico carnet impar); si se desea “Salir”, regresara al menú principal para que elija otra opción.

OPCION 4, CARGAR ARCHIVO DE ENTRADA. (F4)

Al momento de presionar la tecla F4, el sistema deberá de buscar el archivo “cheques.bin”,  y deberá de crear el archivo indexado de registros “cheques.idx”, tome en cuenta que el archivo de  entrada puede tener cientos de registros.   Luego de crear el archivo de índice deberá de solicitar  un número de cheque, este número de cheque deberá de ser buscado en el archivo “cheques.bin” directamente, y deberá mostrar el tiempo que le tomo al sistema encontrarlo “Tiempo de búsqueda en archivo BIN: XXXX minutos”, en seguida el sistema empezará a buscar el cheque en el archivo  indexado  y  luego  deberá  mostrar  el  tiempo  de  búsqueda  por  medio  del  mensaje:  “Tiempo  de  búsqueda  en  archivo  IDX:  XXXX  minutos”.    Por  ultimo  mostrara  el  cheque  encontrado  con  el  formato presentado en la opción 1.

OPCION 5, SALIDA. (ESC)

Presionando ESC del menú principal se podrá salir del programa.

link para bajarlo: Proyecto Generar Cheque – ChocCac

pass: www.mynorrene.choccac.com

codigo:


/*
 Autor: Mynor Rene choc Cac
 01-Mayo-2012
 Guatemala, San Cristobal Verapaz.
 */

#include <windows.h>
 #include <conio.h>
 #include <time.h>
 #include <sstream>
 #include <string.h>
 #include <iostream>
 #include <stdio.h>

using namespace std;

typedef struct{
 char NumCheq[10];//numero de cheque
 char LugaFe[60];//lugar y fecha
 char nombrePag[60];//nombre paguese a:
 int Qtzl; //cantidad de que se va pagar
 char InsQtzl[255];// esto cantidad que se pago en letras
 char NomEstu[255];
 char NumCar[255];
 }ChIndex;

void F_1(void);
 void F_3(void);
 void F_2(void);
 std::string sistfech();
 std::string G_Nums(int x);
 void posicionxy(int x, int y);
 char nombre_fichero[] = "Cheques.bin";
 FILE *abrir_fichero_b(char cadena[], int metodo);

//int asd;

int main()
 {
 FILE *fp;
 int ch;
 fp = abrir_fichero_b(nombre_fichero,0);
 if( fp ){
 fclose(fp);
 }
 else
 {
 cout << "Error archivo no existe\n";
 cout << "Presiona cualquier tecla para continuar.... y Crear el Archivo";
 fp = abrir_fichero_b(nombre_fichero,1);
 fclose(fp);
 cin.get();cin.get();
 }

do{
 system("cls");
 system("color A0");
 cout << "1)Emision de cheque F1\n";
 cout << "2)Busqueda de cheque F2\n";
 cout << "3)Eliminacion de cheque F3\n";
 cout << "4)Cargar un archivo de Entrada F4\n";
 cout << "5)Para Salir Teclee ESC\n";
 cout << "Que opcion eliges." << endl;
 cin.clear();
 switch(ch = getch())
 {
 cin.clear();
 case '\x3b':
 {
 system("cls");
 system("color F0");
 F_1();
 posicionxy(1,20);cout <<"Presiona Cualquier Tecla para Regresar al Menu";
 cin.get();cin.get();
 }
 break;
 case '\x3c':
 {
 system("cls");
 system("color E0");
 F_2();
 posicionxy(1,20);cout <<"Presiona Cualquier Tecla para Regresar al Menu";
 cin.get();cin.get();
 }
 break;
 case '\x3d':
 {
 system("cls");
 system("color 30");
 F_3();
 posicionxy(1,20);cout <<"Presiona Cualquier Tecla para Regresar al Menu";
 cin.get();cin.get();
 }
 break;
 case '\x3e':
 {
 system("cls");
 system("color B0");
 posicionxy(1,20);cout <<"Presiona Cualquier Tecla para Regresar al Menu";
 cin.get();cin.get();
 }
 break;
 }
 }while (ch != '\x1b');
 return 0;
 }

void F_1(void)
 {
 FILE *fp;
 ChIndex aux;

char convertidor[255];
 char convertidor1[255];
 int temp,ays;
 std::string capturador;
 std::string capturador1;
 char cad[60];
 fp=abrir_fichero_b(nombre_fichero,2);
 if(!(fp))
 cout << "Error de apuertura del archivo Cheques.bin";
 else{

//formato de cheque:
 for(int x=0;x<67;x++)
 {
 posicionxy(x,1);cout << "=";
 }
 posicionxy(2,4);cout << "Cheque No.________";
 posicionxy(30,4);cout << "Fecha:_______________________________ ";
 posicionxy(2,7);cout << "Paguese a:_____________________________________ ";
 posicionxy(50,7);cout << "Q._______________";
 posicionxy(2,10);cout << "La Cantidad de:__________________________________________________";
 posicionxy(2,12);cout << "Nombre del Estudiante:________________________________";
 posicionxy(2,14);cout << "Numero de Carne:________________________________";
 posicionxy(50,12);cout << "Firma:___________";
 for(int x=0;x<67;x++)
 {
 posicionxy(x,16);cout << "=";
 }
 do{
 if(ays>999999)
 {
 posicionxy(2,4);cout << "Cheque No.________";
 posicionxy(2,4);cout << "Cheque No.ERROR!__";
 Sleep(3000);
 posicionxy(2,4);cout << "Cheque No.________";
 }
 posicionxy(12,4);gets(aux.NumCheq);
 ays = atoi(aux.NumCheq);
 }while(ays>999999);
 capturador1 = sistfech();
 for(int ix=0;ix<255;ix++)
 convertidor1[ix]=capturador1[ix];
 strcpy(aux.LugaFe,convertidor1);
 posicionxy(36,4);cout << aux.LugaFe;
 posicionxy(12,7);gets(aux.nombrePag);
 do{
 if(aux.Qtzl>999999)
 {
 posicionxy(50,7);cout << "Q.ERROR__________";
 posicionxy(50,7);cout << "Q._______________";
 Sleep(3000);
 posicionxy(50,7);cout << "Q._______________";
 posicionxy(2,10);cout << "La Cantidad de:__________________________________________________";
 }
 posicionxy(53,7);aux.Qtzl=atoi(gets(cad));
 temp = aux.Qtzl;
 capturador =G_Nums(temp);
 for(int i=0;i<255;i++)
 convertidor[i]=capturador[i];
 strcpy(aux.InsQtzl,convertidor);
 posicionxy(18,10);cout << aux.InsQtzl;
 }while(aux.Qtzl>999999);
 posicionxy(25,12);gets(aux.NomEstu);
 posicionxy(19,14);gets(aux.NumCar);
 fwrite(&aux, sizeof(aux), 1, fp);
 fclose(fp);
 }

}

void F_3(void){
 FILE *fp,*fd;
 ChIndex    aux;
 int encontrado=0;
 char cadena[25];

cout << "Introduce el Cheque a borrar: ";
 gets(cadena);
 cout << "\n BORRANDO REGISTROS  \n";
 fp=abrir_fichero_b(nombre_fichero,0);
 if(!(fp))
 cout << "\n Error de apuertura del archivo Cheques.bin\n";
 else{
 fd=abrir_fichero_b("IndexTemp.ibx",1);
 if(!(fd))
 cout << "\n Error Imposible crear archivo auxiliar\n";
 else{
 while ((fread(&aux, sizeof(aux), 1, fp))!=0)
 if(stricmp(aux.NumCheq,cadena)!=0)
 fwrite(&aux, sizeof(aux), 1, fd);
 else
 encontrado=1;
 fclose(fd);
 }
 fclose(fp);
 if(encontrado){
 system("del Cheques.bin");
 system("ren IndexTemp.ibx Cheques.bin");
 cout << "\nNo. Cheque BORRADO con Exito!!!\n";
 }
 else{
 system("del IndexTemp.ibx");
 cout << "\nEl No. Cheque NO SE ENCONTRO, no fue borrado!!!";
 }
 }
 fclose(fd);//esto lo puse
 }

void posicionxy(int x, int y)
 {
 COORD c;
 c.X = x - 1;
 c.Y = y - 1;
 //            SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
 SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), xc);
 }

void F_2(void)
 {
 FILE *fp;
 ChIndex    aux;
 int n;
 char cadena[25];

cout << "Introduce el Numero de Cheque: ";
 gets(cadena);

cout << "Buscando cheque\n";
 fp=abrir_fichero_b(nombre_fichero,0);
 if(!(fp))
 cout << "Error de apuertura del archivo Cheques.bin";
 else{
 while ((n=fread(&aux, sizeof(aux), 1, fp))!=0 && stricmp(aux.NumCheq,cadena)!=0);
 if (n==0)
 cout << "No existe el Cheque llamado: " << cadena;
 else
 {
 cout << "Cheque Encontrado encontrado....!!!\n";
 //formato de cheque:
 for(int x=0;x<67;x++)
 {
 posicionxy(x,4);cout << "=";
 }
 posicionxy(2,6);cout << "Cheque No.____";
 posicionxy(30,6);cout << "Fecha:_______________________________ ";
 posicionxy(2,9);cout << "Paguese a:_____________________________________ ";
 posicionxy(50,9);cout << "Q._______________";
 posicionxy(2,12);cout << "La Cantidad de:__________________________________________________";
 posicionxy(2,14);cout << "Nombre del Estudiante:________________________________";
 posicionxy(2,16);cout << "Numero de Carne:________________________________";
 posicionxy(50,14);cout << "Firma:___________\n";
 for(int x=0;x<67;x++)
 {
 posicionxy(x,17);cout << "=";
 }
 posicionxy(12,6);cout << aux.NumCheq;
 posicionxy(36,6);cout << aux.LugaFe;
 posicionxy(12,9);cout << aux.nombrePag;
 posicionxy(53,9);cout << aux.Qtzl;
 posicionxy(18,12);cout << aux.InsQtzl;
 posicionxy(25,14);cout << aux.NomEstu;
 posicionxy(19,16);cout << aux.NumCar;
 }
 }
 fclose(fp);//esto lo puse
 }

FILE *abrir_fichero_b(char cadena[], int metodo){
 FILE *x;
 switch(metodo){
 case 0:
 x = fopen(cadena,"rb");
 break;
 case 1:
 x = fopen(cadena,"wb");
 break;
 case 2:
 x = fopen(cadena,"ab");
 break;
 case 3:
 x = fopen(cadena,"r+b");
 break;
 }
 return x;
 }

std::string G_Nums(int x)
 {
 std::string acumula="";
 if((x<1)||(x>9999)){posicionxy(18,10);cout << "INGRESA UN NUMERO DEL 1 AL 999999";}
 else

{
 if(x>=9000)    {acumula += "NUEVE MIL "    ;x=x-9000;}
 if(x>=8000)    {acumula += "OCHO MIL "    ;x=x-8000;}
 if(x>=7000)    {acumula += "SIETE MIL "    ;x=x-7000;}
 if(x>=6000)    {acumula += "SEIS MIL "    ;x=x-6000;}
 if(x>=5000)    {acumula += "CINCO MIL "    ;x=x-5000;}
 if(x>=4000)    {acumula += "CUATRO MIL ";x=x-4000;}
 if(x>=3000)    {acumula += "TRES MIL "    ;x=x-3000;}
 if(x>=2000)    {acumula += "DOS MIL "    ;x=x-2000;}
 if(x>=1000)    {acumula += "MIL "        ;x=x-1000;}
 if(x>=900)    {acumula += "NOVECIENTOS "    ;x=x-900;}
 if(x>=800)    {acumula += "OCHOCIENTOS "    ;x=x-800;}
 if(x>=700)    {acumula += "SETECIENTOS "    ;x=x-700;}
 if(x>=600)    {acumula += "SEISCIENTOS "    ;x=x-600;}
 if(x>=500)    {acumula += "QUINIENTOS "    ;x=x-500;}
 if(x>=400)    {acumula += "CUATROCIENTOS "    ;x=x-400;}
 if(x>=300)    {acumula += "TRESCIENTOS "    ;x=x-300;}
 if(x>=200)    {acumula += "DOSCIENTOS "    ;x=x-200;}
 if(x>100)    {acumula += "CIENTO "    ;x=x-100;}
 if(x==100)    {acumula += "CIEN"        ;x=x-100;}
 if(x>90)    {acumula +"NOVENTA Y "    ;x=x-90; }
 if(x==90)    {acumula += "NOVENTA"    ;x=x-90; }
 if(x>80)    {acumula += "OCHENTA Y "    ;x=x-80; }
 if(x==80)    {acumula += "OCHENTA"    ;x=x-80; }
 if(x>70)    {acumula += "SETENTA Y "    ;x=x-70; }
 if(x==70)    {acumula += "SETENTA"    ;x=x-70; }
 if(x>60)    {acumula += "SESENTA Y "    ;x=x-60; }
 if(x==60)    {acumula += "SESENTA"    ;x=x-60; }
 if(x>50)    {acumula += "CINCUENTA Y "    ;x=x-50; }
 if(x==50)    {acumula += "CINCUENTA"    ;x=x-50; }
 if(x>40)    {acumula += "CUARENTA Y "    ;x=x-40; }
 if(x==40)    {acumula += "CUARENTA"    ;x=x-40; }
 if(x>30)    {acumula += "TREINTA Y "    ;x=x-30; }
 if(x==30)    {acumula += "TREINTA"    ;x=x-30; }
 if(x>20)    {acumula += "VEINTI"        ;x=x-20; }
 if(x==20)    {acumula += "VEINTE"        ;x=x-20; }
 if(x>=16)    {acumula += "DIECI"        ;x=x-10; }
 if(x==15)    {acumula += "QUINCE"        ;x=x-15; }
 if(x==14)    {acumula += "CATORCE"    ;x=x-14; }
 if(x==13)    {acumula += "TRECE"        ;x=x-13; }
 if(x==12)    {acumula += "DOCE"        ;x=x-12; }
 if(x==11)    {acumula += "ONCE"        ;x=x-11; }
 if(x==10)    {acumula += "DIEZ"        ;x=x-10; }
 if(x==9)    {acumula += "NUEVE"        ;x=x-9;  }
 if(x==8)    {acumula += "OCHO"        ;x=x-8;  }
 if(x==7)    {acumula += "SIETE"        ;x=x-7;  }
 if(x==6)    {acumula += "SEIS"        ;x=x-6;  }
 if(x==5)    {acumula += "CINCO"        ;x=x-5;  }
 if(x==4)    {acumula += "CUATRO"        ;x=x-4;     }
 if(x==3)    {acumula += "TRES"        ;x=x-3;     }
 if(x==2)    {acumula += "DOS"        ;x=x-2;     }
 if(x==1)    {acumula += "UNO"        ;x=x-1;     }
 }
 return acumula;
 }

std::string sistfech()
 {

struct tm *tiempo;
 int dia;
 int mes;
 int anio;
 std::string fecha;
 std::string convnum,convnum1;
 std::stringstream salida, salida1;
 char mes2[20];

time_t fecha_sistema;
 time(&fecha_sistema);
 tiempo=localtime(&fecha_sistema);

anio=tiempo->tm_year + 1900;
 mes=tiempo->tm_mon + 1;
 if(mes==1){strcpy(mes2,"Enero");}
 if(mes==2){strcpy(mes2,"Febrero");}
 if(mes==3){strcpy(mes2,"Marzo");}
 if(mes==4){strcpy(mes2,"Abril");}
 if(mes==5){strcpy(mes2,"Mayo");}
 if(mes==6){strcpy(mes2,"Junio");}
 if(mes==7){strcpy(mes2,"Julio");}
 if(mes==8){strcpy(mes2,"Agosto");}
 if(mes==9){strcpy(mes2,"Septiembre");}
 if(mes==10){strcpy(mes2,"Octubre");}
 if(mes==11){strcpy(mes2,"Noviembre");}
 if(mes==12){strcpy(mes2,"Diciembre");}
 dia=tiempo->tm_mday;

salida << dia;
 convnum = salida.str();
 fecha += convnum;
 fecha += " de ";

fecha += mes2;
 fecha += " del ";

salida1 << anio;
 convnum1 = salida1.str();
 fecha += convnum1;
 fecha +=".";

return fecha;
 }

para mas informacion o duda puedes escribirme a mi correo: mynorrene@choccac.com

nota: Bueno resultqueqye hay  preguntas por correo copie la pregunta tal cual como me lo hicieron;

¿Comoc puedeo agregar mas datos al cheque?

1.  typedef struct puedes agrear otros datos del tipo que deseas y llamargo en la funcion.

para la segunda pregunta.

¿Modificar datos o unos datos ?

2. para modificar un dato puedes buscar por el numero de cheque o por el nombre del usuario(aunque esto no te lo recomienddo ya que puede ser que exista dos personas con el mismo nombre, pero que sean diferentes), hacer una funcion que pregunte que dato modificar y seleciones con algun captura de tecla para modificar por que me imagino aunque no entendi tu pregunta bien, que quieres modificar todo o algun dato, puedes selecionar un dato con swicht() capturando el teclado y volver a guardar todo ahora usando struct aux.

respuesta a pregunta 3:

¿Puedo Compilarlo en Linux?

3. Resulta que hace como dos años yo use el ncurses.h en gnu/debiam para posicionar el cursor eje x oyy para usar Sleep() puedes usar stdio.h instales lo paquetes y puedes usarlo.

Esta entrada fue publicada en Programacion C++. Guarda el enlace permanente.

2 respuestas a Programa de C++ llenado de un cheque.

  1. choccac dijo:

    bueno esto funcional pero puedes pasarlo en visual c++, y borlan 5.5

  2. manuel veliz dijo:

    tengo que realizar un proyecto y es exactamente igual lo que me pidieron en la U, pero quiero aprender hacerlo.

Los comentarios están cerrados.