Gestion graphique d'une file

Description

Ce code sert a montrer la gestion d'une file graphiquement avec une interface trés élégante.

Source / Exemple :


/********************************************************/
/*El Antri Abdellah                                                                        */
/*Djillali Liabes university, Informatic departement (Algeria)              */
/*Email: El_Emir_2002@yahoo.fr                                                    */
/*Compiled with TC3 ++                                                               */
/********************************************************/

#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include<stdio.h>
#include<graphics.h>
#include<dos.h>
#include<conio.h>

typedef struct {int queu; long tab[22];}file;
file F;
int y_cur = 460 - 20;

void init_graph()
{
int grdrv=DETECT, grmode,err;

initgraph(&grdrv,&grmode,"..\\tc\\bgi");
if( (err = graphresult()) != grOk)
   {
   printf("\n\rErreur: %s\n\r",grapherrormsg(err));
   getch();
   exit(1);
   }
}

void contenant()
{
setcolor(YELLOW);
setlinestyle(SOLID_LINE,0,3);
rectangle(400,59,520,460);
setcolor(RED);
}

void ouvrir(int x,int y)
{
for(int i = 1; i <= 59; i++)
   {
   putpixel(461-i,y,BLACK);putpixel(461-i,y-1,BLACK);putpixel(461-i,y+1,BLACK);
   putpixel(459+i,y,BLACK);putpixel(459+i,y-1,BLACK);putpixel(459+i,y+1,BLACK);
   delay(10);
   }
delay(100);
}

void fermer(int x,int y)
{
for(int i = 1; i <= 60; i++)
   {
   putpixel(400+i,y,YELLOW);putpixel(400+i,y-1,YELLOW);putpixel(400+i,y+1,YELLOW);
   putpixel(520-i,y,YELLOW);putpixel(520-i,y-1,YELLOW);putpixel(520-i,y+1,YELLOW);
   delay(10);
   }
delay(100);
}

int enfiler(file *F,long val)
{
char msg[10];

if(F->queu < 20)
 {
  ouvrir(400,59);
  F->tab[F->queu++] = val;
  for(int y = 0; y <= y_cur + 8; y++)
     {
     ltoa(val,msg,10);
     setcolor(GREEN);
     outtextxy(420,y,msg);
     delay(2);
     setcolor(BLACK);
     outtextxy(420,y,msg);
     }
  setcolor(GREEN);
  outtextxy(420,y-1,msg);
  setcolor(YELLOW);
  line(400,y_cur,520,y_cur);
  y_cur = y_cur - 20;
  return 1;
  }
  else return 0;
}

int defiler(file *F,long *val)
{
long temp,i,ftab0;
char msg[10];

if(F->queu > 0)
  {
  ftab0=F->tab[0];
  temp = 460;
  ouvrir(400,temp);
  for(i = 0; i < F->queu; i++)
      {
      flushall();
      ltoa(F->tab[i],msg,10);
      setcolor(BLACK);
      outtextxy(420, temp - 12, msg);
      setcolor(GREEN);
      outtextxy(420, temp + 8, msg);
      fermer(401,temp);
      temp = temp - 20;
      ouvrir(401,temp);
      F->tab[i] = F->tab[i+1];
      }
  setcolor(BLACK);
  ltoa(ftab0,msg,10);
  outtextxy(420, 468,msg);

  • val = F->tab[--F->queu];
y_cur = y_cur + 20; return 1; } else return 0; } void boitemsg() { long i, input, output, signe; char rep, entrer[10],sortie[10] ; entrer[0] = 0 ; do { setfillstyle(0, 0) ; bar(0, 0, 399, 480) ; setcolor(RED); flushall(); outtextxy(10, 20, "Que voulez vous(E/D/ESC)?") ; while( (rep = toupper(getch())) != 'E' && rep != 'D' && rep != 27) { sound(1000) ; delay(100) ; nosound() ; } if(rep == 27)break; rep = toupper(rep) ; setfillstyle(0, 0) ; bar(0, 0, 399, 480) ; switch(rep) { case 'E': outtextxy(10, 20, "Entrer une valeur: ?") ; i = 0; signe = 0; flushall(); while((entrer[i] = getch()) != 13 && i < 9) { if( isdigit(entrer[i]) ) i++; else if(entrer[i] == 8 && i > 0) i--; else if(!signe && i == 0 && (entrer[i] == '-' || entrer[i] == '+')) { i++; signe = 1; } } if(i == 0)break; entrer[i] = '\0'; input = atol(entrer); outtextxy(10, 30, entrer); if(!enfiler(&F, input)) { setcolor(BLUE); outtextxy(200, 265, "FILE PLEINE"); sound(1000); delay(2000); nosound(); setcolor(BLACK); outtextxy(200, 265, "FILE PLEINE"); } fermer(400, 59); break; case 'D': if(!defiler(&F, &output)) { setcolor(BLUE); outtextxy(200, 265, "FILE VIDE"); sound(1000); delay(2000); nosound(); setcolor(BLACK); outtextxy(200, 265, "FILE VIDE"); ltoa(output,sortie,10); }else outtextxy(10, 30,sortie); fermer(400, 460); break; } }while(1); } void main() { F.queu = 0; init_graph(); cleardevice(); contenant(); boitemsg(); closegraph(); }

Conclusion :


Pour toute explication vous pouvez me contactez sur: el_emir_2002@yahoo.fr

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.