viernes, 15 de junio de 2012

Sistema completo: Modular, manejo de archivos y estructura de datos version 3

/*
  Claudio Enrique Alpizar Romero
  05/06/2012, 07/06/2012
  Control de Plazas Version 3.0
  Fundamentos de Programacion (lenguaje C)
  Compilador borland 5.02
*/

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <dos.h>
#include <alloc.h>
#include <iostream.h>
#include <iomanip.h>
#include <windows.h>

// define algunas constantes
#define LightFont 7        // ilumina letra blanco opcion menu
#define LightBack 12        // ilumina fondo rojo opcion menu
#define StdFont 0         // normal letra negro menu
#define StdBack 7          // normal fondo blanco menu
#define ColM 30            // columna para posicion del menu
#define FileNm "CLAR.dsc"    // archivo de datos
#define FileSp "CLAR.tmp"    // archivo de datos temporal

// define estructura de datos
typedef struct
{
   char m_ficha[8];    // ficha
   char m_nombre[30];    // nombre
   char m_numero[15];    // numero de plaza
   char m_nivel[3];    // nivel
   char m_regimen[2];    // regimen (S)inndicalizado (C)onfianza
   char m_status[2];    // status (A)ctivo, (C)ancelada
}recordset;

// define modulos
void SetScreenP();    // pantalla de presentacion
void SetScreenF();    // pantalla de salida
void ver_ges();        // verifica si existe archivo de gestion
void SetMenu();        // menu de opciones
void add_rec();        // modulo agragar registro
void con_rec();        // modulo consulta individual
void edi_rec();        // modulo editar registro
void del_rec();        // modulo eliminar registro
void viw_rec();        // modulo consulta general
void inf_sis();        // mensaje acerca del sistema

// define funciones soporte
void SetColor(int f,int l);    // color de fondo y letra
void SetMarco(int X1,int Y1,int X2,int Y2, int C1);    // crea marco de pantalla version A
void SetMarcoB(int X1,int Y1,int X2,int Y2, int FC1, int BC1);    // crea marco de pantalla version B
void msgb(int ci,int ri, int nmsg);        // mensajes multiples

void main()
 {
   SetScreenP();
   ver_ges();
   SetMenu();
   SetScreenF();
 }

void SetMenu()
{
      int tecla,f;
   char t1=24,t2=25;
     char opciones[9][70];
     do
     {
       strcpy(opciones[1], " Agregar                 ");
       strcpy(opciones[2], " Consulta especifica     ");
       strcpy(opciones[3], " Consulta secuencial     ");
       strcpy(opciones[4], " Editar                  ");
       strcpy(opciones[5], " Eliminar                ");
       strcpy(opciones[6], " Acerca del sistema      ");
       strcpy(opciones[7], " Salir                   ");

       clrscr();
       SetColor(StdBack,StdFont);
       SetMarco(1,1,80,24,12);
       gotoxy(20,3);cout<<"       Gerencia de Recursos Materiales";
       gotoxy(20,4);cout<<"              Control de Plazas";
       gotoxy(20,5);cout<<"                MENU PRINCIPAL ";
       gotoxy(13,22); cout<<"Para despalzarse entre las opciones utilice las teclas "<<t1<<t2<<" y ";
       gotoxy(13,23); cout<<"      pulse [ENTER] para ejecutar la opcion seleccionada";
       SetMarco(ColM-1,7,ColM+25,15,4);         // cuadro del menu
       SetColor(StdBack,StdFont);

       for(f=1;f<=7;f++) {gotoxy(ColM,f+7);cprintf("%s",opciones[f]);}
       f=1;
       SetColor(LightBack,LightFont);        // ilumina opcion
       gotoxy(ColM,f+7);cprintf("%s",opciones[f]);
        SetColor(StdBack,StdFont);

              do
              {
                 do
                 {
                     tecla=getch();
                  }while((tecla==80)&&(tecla==72)&&(tecla==13));

                if(tecla==80) // tecla abajo
                {
                SetColor(StdBack,StdFont);
                    gotoxy(ColM,f+7);cprintf("%s",opciones[f]);
                   if (f!=7)
                  {
                   f++;
                  SetColor(LightBack,LightFont);
                        gotoxy(ColM,f+7);  cprintf("%s",opciones[f]);
                        SetColor(StdBack,StdFont);
                   }
                    else
                   {
                      f=1;
                  SetColor(LightBack,LightFont);
                      gotoxy(ColM,f+7);cprintf("%s",opciones[f]);
                  SetColor(StdBack,StdFont);
                   }
            }

                if(tecla == 72) // tecla arriba
                 {
                SetColor(StdBack,StdFont);
                    gotoxy(ColM,f+7);cprintf("%s",opciones[f]);
                   if (f!=1)
                     {
                   f--;
                  SetColor(LightBack,LightFont);
                         gotoxy(ColM,f+7); cprintf("%s",opciones[f]);
                         SetColor(StdBack,StdFont);
                  }
                   else
                  {
                   f=7;
                  SetColor(LightBack,LightFont);
                         gotoxy(ColM,f+7); cprintf("%s",opciones[f]);
                         SetColor(StdBack,StdFont);
                   }
                  }
            }while(tecla!=13);

          switch(f)
            {
              case 1: add_rec();break;
                case 2: con_rec();break;
                case 3: viw_rec();break;
                case 4: edi_rec();break;
                case 5: del_rec();break;
                case 6: inf_sis();break;
              }
    }while(f!=7);
}

void add_rec(void) // Agregar registro
{
   FILE *fp;
   recordset aux;
   int pregunta;
   textbackground(0);// fondo negro
   do
   {
       clrscr();
      SetMarco(1,1,80,24,14);
       gotoxy(15,5);cprintf("                 Modulo: Alta de registros ");
       gotoxy(15,6);cprintf("-----------------------------------------------------");
       fp=fopen(FileNm,"ab");
       if(!(fp))
      {
         msgb(14,11,1);
         return;
      }
       else
      {
          gotoxy(20,10);cprintf("Ficha........................");        gets(aux.m_ficha);
            gotoxy(20,11);cprintf("Nombre.......................");        gets(aux.m_nombre);
            gotoxy(20,12);cprintf("Numero de plaza..............");        gets(aux.m_numero);
            gotoxy(20,13);cprintf("Nivel........................");        gets(aux.m_nivel);
          gotoxy(20,14);cprintf("(S)indicalizado,(C)onfianza..");        gets(aux.m_regimen);
          gotoxy(20,15);cprintf("(A)ctiva,(C)ancelada.........");        gets(aux.m_status);
            fwrite(&aux, sizeof(aux), 1, fp);
            fclose(fp);
         textcolor(7);
         gotoxy(15,17);cprintf("-----------------------------------------------------");
         gotoxy(20,18);cprintf("Desea adicionar otro registro (S/N): ");
         pregunta=toupper(getche());
       }
    }while(pregunta=='S');
}

void con_rec(void) // Consultar registro especifico
{
    FILE *fp;
    recordset    aux;
    int localiza,pregunta;
    char cadena[6];
   textbackground(0);// fondo negro
   do
   {
       clrscr();
      SetMarco(1,1,80,24,9);
      textcolor(7);
       gotoxy(15,5);cprintf("       Modulo: Consulta individual de registro ");
       gotoxy(15,6);cprintf("-----------------------------------------------------");
        gotoxy(15,7);cprintf("Introduce la ficha que buscas: ");     gets(cadena);

       fp=fopen(FileNm,"rb");
        if(!(fp))
       {

         msgb(14,11,1);
         return;
       }
        else
       {
            while ((localiza=fread(&aux, sizeof(aux), 1, fp))!=0 && stricmp(aux.m_ficha,cadena)!=0);
          if (localiza==0)
          {
            msgb(14,11,3);
          }
          else
          {
            textcolor(14);
             gotoxy(15,8);cprintf("                Informacion localizada!!! :) ");
             gotoxy(15,9);cprintf("-----------------------------------------------------");
            textcolor(7);
               gotoxy(20,10);cprintf("Ficha....................................%s ",aux.m_ficha);
             gotoxy(20,11);cprintf("Nombre...................................%s ",aux.m_nombre);
             gotoxy(20,12);cprintf("Numero de plaza..........................%s ",aux.m_numero);
                gotoxy(20,13);cprintf("Nivel....................................%s ",aux.m_nivel);
             gotoxy(20,14);cprintf("Regimen:(S)indicalizado,(C)onfianza......%s ",aux.m_regimen);
             gotoxy(20,15);cprintf("Status:(A)ctiva,(C)ancelada..............%s ",aux.m_status);
             gotoxy(15,17);cprintf("-----------------------------------------------------");
            textcolor(14);
               gotoxy(20,18);cprintf("Desea consultar otro registro (S/N): ");
             pregunta=toupper(getche());
            }
        }
    }while(pregunta=='S');
}


void edi_rec(void) // Editar registro
{
   FILE *fp;
   recordset aux;
   int localiza,pregunta,preguntam,ciclo;
   char cadena[6];

   textbackground(0);// fondo negro
    fp=fopen(FileNm,"r+b");

   if(!(fp))
   {
      msgb(14,11,1);
      return;
   }
   else
   {
     do
     {
      fp=fopen(FileNm,"r+b");
      clrscr();
      SetMarco(1,1,80,24,3);
      textcolor(7);
       gotoxy(15,5);cprintf("             Modulo: Editar registro ");
       gotoxy(15,6);cprintf("-----------------------------------------------------");
        gotoxy(15,7);cprintf("Introduce la ficha que buscas: ");     gets(cadena);


      while ((localiza=fread(&aux, sizeof(aux), 1, fp))!=0 && stricmp(aux.m_ficha,cadena)!=0);
      if (localiza==0)
      {
         msgb(14,11,3);
      }
      else
      {

         textcolor(14);
            gotoxy(15,8);cprintf("                Informacion localizada!!! :) ");
         gotoxy(3,9);cprintf("-------------------------------------------------------------------------");
         textcolor(7);
         gotoxy(3,10);cprintf(" Ficha |           Nombre            | No. de plaza | Nivel | RC | Status");
         gotoxy(3,11);cprintf("-------------------------------------------------------------------------");
         textcolor(14);
         gotoxy(3,12);cprintf("%s",aux.m_ficha);
         gotoxy(11,12);cprintf("%s",aux.m_nombre);
         gotoxy(42,12);cprintf("%s",aux.m_numero);
            gotoxy(57,12);cprintf("%s",aux.m_nivel);
         gotoxy(66,12);cprintf("%s",aux.m_regimen);
         gotoxy(71,12);cprintf("%s",aux.m_status);

         textcolor(14);
           gotoxy(15,18);cprintf("Desea modificar todos los datos de este registro (S/N): ");
         pregunta=toupper(getch());
         if (pregunta=='S')
         {
            clrscr();
            SetMarco(1,1,80,24,3);
            textcolor(7);
            gotoxy(3,4);cprintf(" Ficha |           Nombre            | No. de plaza | Nivel | RC | Status");
             gotoxy(3,5);cprintf("-------------------------------------------------------------------------");
             textcolor(14);
             gotoxy(3,6);cprintf("%s",aux.m_ficha);
             gotoxy(11,6);cprintf("%s",aux.m_nombre);
             gotoxy(42,6);cprintf("%s",aux.m_numero);
                gotoxy(57,6);cprintf("%s",aux.m_nivel);
             gotoxy(66,6);cprintf("%s",aux.m_regimen);
             gotoxy(71,6);cprintf("%s",aux.m_status);
           
              textcolor(7);
               gotoxy(15,8);cprintf("   Introduzca los nuevos valores para el registro ");
               gotoxy(15,9);cprintf("-----------------------------------------------------");
            textcolor(14);
            gotoxy(20,10);cprintf("Ficha........................%s ",aux.m_ficha);
                gotoxy(20,11);cprintf("Nombre.......................");gets(aux.m_nombre);
                gotoxy(20,12);cprintf("Numero de plaza..............");gets(aux.m_numero);
                gotoxy(20,13);cprintf("Nivel........................");gets(aux.m_nivel);
              gotoxy(20,14);cprintf("(S)indicalizado,(C)onfianza..");gets(aux.m_regimen);
              gotoxy(20,15);cprintf("(A)ctiva,(C)ancelada.........");gets(aux.m_status);
            gotoxy(15,17);cprintf("-----------------------------------------------------\n");
            textcolor(7);
            gotoxy(15,18);cprintf("Desea salvar los cambios (S/N):                         ");
            preguntam=toupper(getch());
            if (preguntam=='S')
            {
                fseek(fp,-1*sizeof(aux),SEEK_CUR);
                 fwrite(&aux, sizeof(aux), 1, fp);
               textcolor(2);
               gotoxy(15,19);cprintf("  ***Registro actualizado***  ");
               //msg5();
            }
            else
            {
               textcolor(4);
               gotoxy(15,19);cprintf("***No se actualizo registro***");
               //msg6();
            }
            fclose(fp);
         }
      }
     textcolor(14);
     gotoxy(15,18);cprintf("Desea editar otro registro? (S/N):                      ");
     ciclo=toupper(getche());
     }while(ciclo=='S');
   }
}


void del_rec(void) // Borrar registro
{
     FILE *fp,*fd;
     recordset    aux;
     int encontrado=0;
     int pregunta,preguntac;
      char cadena[6];

     textbackground(0);// fondo negro
     do
     {
      clrscr();
      SetMarco(1,1,80,24,12);
      textcolor(7);
       gotoxy(15,5);cprintf("           Modulo: Eliminar registro ");
       gotoxy(15,6);cprintf("-----------------------------------------------------");
        gotoxy(15,7);cprintf("Introduce la ficha que buscas: ");     gets(cadena);


       fp=fopen(FileNm,"rb");
       if(!(fp))
       {
         msgb(14,11,1);
          return;
       }
       else
       {
            fd=fopen(FileSp,"wb");
          if(!(fd))
          {
             msgb(14,11,2);
             return;
          }
          else
          {
             while ((fread(&aux, sizeof(aux), 1, fp))!=0)
                if(stricmp(aux.m_ficha,cadena)!=0)
                {
                      fwrite(&aux, sizeof(aux), 1, fd);
                }
                else
                {
                      encontrado=1;
                }
             fclose(fd);
          }
          fclose(fp);
          fcloseall();
          if(encontrado)
          {
            textcolor(2);
              gotoxy(20,10);cprintf("Ficha....................................%s ",aux.m_ficha);
            gotoxy(20,11);cprintf("Nombre...................................%s ",aux.m_nombre);
            gotoxy(20,12);cprintf("Numero de plaza..........................%s ",aux.m_numero);
               gotoxy(20,13);cprintf("Nivel....................................%s ",aux.m_nivel);
            gotoxy(20,14);cprintf("Regimen:(S)indicalizado,(C)onfianza......%s ",aux.m_regimen);
            gotoxy(20,15);cprintf("Status:(A)ctiva,(C)ancelada..............%s ",aux.m_status);
            gotoxy(15,17);cprintf("-----------------------------------------------------");
            textcolor(14);
              gotoxy(15,18);cprintf("Esta seguro que desea eliminar este registro? (S/N): ");
             pregunta=toupper(getche());
             if (pregunta=='S')
             {
                 system("del CLAR.dsc");
                 system("ren CLAR.tmp CLAR.dsc");
               textcolor(12);
                 gotoxy(15,19);cprintf("Registro eliminado con Exito!!! :) ");
               textcolor(7);
             }
          }
          else
          {
             system("del CLAR.tmp");
            msgb(14,11,3);
          }
       }
      gotoxy(15,20);cprintf("Buscar otro registro para eliminarlo? (S/N): ");
      preguntac=toupper(getche());
     }while(preguntac=='S');
     fcloseall();
}


void viw_rec()  // Consulta todos los registros del archivo
{
    FILE *fp;
   recordset aux;
   textbackground(0);// fondo negro
    fp=fopen(FileNm,"rb");
   if(!(fp))
    {
      msgb(14,11,1);
      return;
    }
    fp=fopen(FileNm,"rb");
    while((fread(&aux, sizeof(aux), 1, fp))==1)
    {
      clrscr();
      SetMarco(1,1,80,24,15);
       gotoxy(15,5);cprintf("           Modulo: Consulta todos los registros ");
       gotoxy(15,6);cprintf("-----------------------------------------------------");
      textcolor(11);
      gotoxy(20,10);cprintf("Ficha....................................%s ",aux.m_ficha);
      gotoxy(20,11);cprintf("Nombre...................................%s ",aux.m_nombre);
      gotoxy(20,12);cprintf("Numero de plaza..........................%s ",aux.m_numero);
        gotoxy(20,13);cprintf("Nivel....................................%s ",aux.m_nivel);
      gotoxy(20,14);cprintf("Regimen:(S)indicalizado,(C)onfianza......%s ",aux.m_regimen);
      gotoxy(20,15);cprintf("Status:(A)ctiva,(C)ancelada..............%s ",aux.m_status);
      gotoxy(15,17);cprintf("-----------------------------------------------------");
      textcolor(14);
      gotoxy(15,18);cprintf("Pulse cualquier tecla para ver registro siguiente...");getch();
    }
    fclose(fp);
   textcolor(12);
   gotoxy(15,19);cprintf("***Fin de archivo ***                               ");
   gotoxy(15,20);cprintf("Pulse cualquier tecla para regresar al Menu...");getch();
}

void inf_sis() // Acerca del sistema
{
    int ri, ci;
   ci=16;
   ri=7;
   SetMarcoB(ci,ri,ci+51,ri+9,7,1);
   textcolor(14);
    gotoxy(ci+1,ri+1);cprintf("           Fundamentos de programacion            ");
   textcolor(7);
   gotoxy(ci+1,ri+2);cprintf(" ------------------------------------------------ ");
   gotoxy(ci+1,ri+3);cprintf("    Lenguaje C, Compilador Borland C++ 5.02       ");
   textcolor(14);
   gotoxy(ci+1,ri+4);cprintf("          Sistema de Control de Plazas            ");
   gotoxy(ci+1,ri+5);cprintf("                   Version 3.0                    ");
   gotoxy(ci+1,ri+6);cprintf("          Claudio Enrique Alpizar Romero          ");
   textcolor(7);
   gotoxy(ci+1,ri+7);cprintf("                   Junio 2012                     ");
   gotoxy(ci+1,ri+8);cprintf("    Presione cualquier tecla para continuar...    ");getch();
   textbackground(0);// fondo negro
   return;
}

void SetMarco(int X1,int Y1,int X2,int Y2, int C1) // construye marco A
{
    int i;
   textcolor(C1);
   textbackground(0);
     for(i=X1+1;i<X2;i++)
   {
         gotoxy(i,Y1);cprintf("Í");   // LINEA ARRIBA HORIZONTAL
         gotoxy(i,Y2);cprintf("Í");   // LINEA ABAJO HORIZONTAL
   }
     for(i=Y1+1;i<Y2;i++)
   {
         gotoxy(X1,i);cprintf("º");    // LINEA IZQUIERDA VERTICAL
         gotoxy(X2,i);cprintf("º");    // LINEA DERECHA VERTICAL
   }
       // esquinas
         gotoxy(X1,Y1);cprintf("É");
         gotoxy(X1,Y2); cprintf("È");
         gotoxy(X2,Y1);cprintf("»");
         gotoxy(X2,Y2); cprintf("¼");
}

void SetColor(int f,int l)  // FONDO_LETRA
{
    textbackground(f);
   textcolor(l);
}

void SetMarcoB(int X1,int Y1,int X2,int Y2, int FC1, int BC1) // construye marco version B
{
   // BC1 1-azul , 2 verde, 3 cian, 4 rojo, 5 magenta , 8 negro
    int i;
   textcolor(FC1);
   textbackground(BC1);
     for(i=X1+1;i<X2;i++)
   {
         gotoxy(i,Y1);cprintf("Í");   // LINEA ARRIBA HORIZONTAL
         gotoxy(i,Y2);cprintf("Í");   // LINEA ABAJO HORIZONTAL
   }
     for(i=Y1+1;i<Y2;i++)
   {
         gotoxy(X1,i);cprintf("º");    // LINEA IZQUIERDA VERTICAL
         gotoxy(X2,i);cprintf("º");    // LINEA DERECHA VERTICAL
   }
       // esquinas
         gotoxy(X1,Y1);cprintf("É");
         gotoxy(X1,Y2); cprintf("È");
         gotoxy(X2,Y1);cprintf("»");
         gotoxy(X2,Y2); cprintf("¼");
}

void SetScreenP()        // pantalla de inicio
{
  int x,y;
  for(x=2;x<=79;x++)
  {
       gotoxy(x,2);cout<<"Û";
       gotoxy(x,24);cout<<"Û";
       Sleep(5);
  }
  for(y=2;y<=24;y++)
  {
       gotoxy(2,y);cout<<"Û";
       gotoxy(79,y);cout<<"Û";
       Sleep(5);
  }
  textcolor(7);
  gotoxy(20,4);cprintf("         Evidencia de Aprendizaje");
  gotoxy(20,5);cprintf("  Unidad 6. Programa en C Version Modular");
  gotoxy(20,8);cprintf("               Facilitador:");
  gotoxy(20,9);cprintf("           Andrea Jaques Chavez");
  gotoxy(20,12);cprintf("             Presentado por:");
  textcolor(14);
  gotoxy(20,13);cprintf("      Claudio Enrique Alpizar Romero");
  textcolor(7);
  gotoxy(20,22);cprintf("Presione cualquier tecla para continuar...");getch();
}

void SetScreenF()        // Pantalla de salida
{
  textbackground(0);// fondo negro
  clrscr();
  int x,y;
  for(x=2;x<=79;x++)
  {
       gotoxy(x,2);cout<<"Û";
       gotoxy(x,24);cout<<"Û";
       Sleep(5);
  }
  for(y=2;y<=24;y++)
  {
       gotoxy(2,y);cout<<"Û";
       gotoxy(79,y);cout<<"Û";
       Sleep(5);
  }
  textcolor(7);
  gotoxy(20,8);cprintf("                 Gracias!!!!");
  gotoxy(20,9);cprintf("               por utilizar el");
  textcolor(14);
  gotoxy(20,12);cprintf("        Sistema de Control de Plazas");
  textcolor(7);
  gotoxy(20,13);cprintf("             Desarrollado por:");
  gotoxy(20,14);cprintf("      Claudio Enrique Alpizar Romero");
  textcolor(14);
  gotoxy(20,16);cprintf("               Hasta luego...");
  gotoxy(20,22);cprintf("Presione cualquier tecla para continuar...");getch();
}

void msgb(int ci,int ri, int nmsg) // mensajes
{
    //ci- columna inicial, ri- renglon inicial, nmsg- numero de mensaje
   char *txtmsg;
   int txtlen,fc,bc;
   switch(nmsg)
   {
       case 1:
                  txtmsg="  No existe archivo o hay una falla al abrirlo!!! ";
               fc=7;
               bc=4;
               break;
      case 2:
                  txtmsg="     No se puede crear archivo temporal!!! :(     ";
               fc=7;
               bc=4;
               break;
      case 3:
               txtmsg="      No existe la ficha que introdujo!!! :(      ";
               fc=7;
               bc=4;
               break;
      case 4:
               txtmsg="  No existe el archivo de getion de datos !!! :(  ";
               fc=7;
               bc=4;
               break;
      case 5:
               txtmsg=" El sistema genero el archivo de gestion de datos ";
               fc=7;
               bc=1;
               break;
      default:
               txtmsg="  No ha sido definido mensaje para el usuario!!!  ";
               fc=7;
               bc=4;
               break;
   }
   txtlen=strlen(txtmsg);
   SetMarcoB(ci,ri,ci+txtlen+1,ri+3,fc,bc);
    gotoxy(ci+1,ri+1);cprintf("%s",txtmsg);
   gotoxy(ci+1,ri+2);cprintf("    Presione cualquier tecla para continuar...    ");getch();
   textbackground(0);            // fondo negro
   return;
}

void ver_ges()        // verifica al entrar al sistema si existe el archvo para gestionar datos
{
    FILE *fp;
    fp=fopen(FileNm,"rb");
    if(fp)
    {
        fclose(fp);
    }
    else
    {
       clrscr();
      msgb(14,11,4);
      fp=fopen(FileNm,"ab");
        fclose(fp);
      msgb(14,11,5);
    }
    return;

No hay comentarios:

Publicar un comentario