Un mini-tableur en mode texte (dev-c++ 5)

Contenu du snippet

Ce petit tableur permet d'éditer des caractères dans un tableau de 6 colonnes par 6 lignes. Dans cette version, il n'est pas encore possible d'enregistrer mais ça reste à venir.

Source / Exemple :

#include <iostream>
#include <stdlib.h>
#include <string>
#include <stdio.h>
#include <conio.c>
/*codes des touches:
Echap=27;F1 à F10 59 à 68 précédé de 0;F11=-123 précédé de -32;F12=-122 précédé de -32;
Tab=9;Retour arrière=8;ENTREE=13;Haut=72 précédé de -32;Bas=80 précédé de -32;Droite=77 précédé de -32;Gauche=75 précédé de -32;Espace=32;
touches non pavé numérique:
 carré=-3;0=48;°=-8;+=43;
1à9 : 49 à 57;&=38;é=-126;"=34;'=39;(=40;-=45;è=-118;_=95;ç=-121;à=-123;)=41;==61;
~=121;#=35;{=123;[=91;|=124;`=126;\=92;^=94;@=64;]=93;}=125;
Touches pavé numérique:
/=47; *=42; -=45; +=43; 0 à 9: 48 à 57;
.:46;Suppr (Maj+ .)=83;
Caractères:
a à z=97 à 122; A à Z=65 à 90; $=36; ?=-49; £=-100; ù=-105; %=37; µ=-26; ,=44;
?=63; ;=59; :=58; !=33; §=-11; ä=-124;ï=-117;ë=-119;ö=-108;ü=-127;â=-125;ê=-120;î=-116;ô=-109;û=-106;
*/
using namespace std;

 char ea=130;/*é=(char)130*/
 char aa=133;/*à=(char)133*/
 char eacc=136;/*ê=(char)136*/
 char trh=196; /* t="T", tr=trait, c=coin, g=gauche, d=droite, h ou hor=horizontal, v ou ver=vertical,
 cross=croix, b=bas ,h=haut ou horizontal*/
char cgh=218; 
char cgb=192; 
char cdh=191;
char cdb=217;
char trv=179;
char thorb=194;
char thorh=193;
char tverg=195;
char tverd=180;
char cross=197;

void tab10f10()
{

int x,y;
 x=1;y=1;
 gotoxy(x,y);
 printf("%c",cgh);
 int i=1;
 while (i<=6)/*7 colonnes */
 {
 printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,thorb);
 i++;
 }
  printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,cdh);

 x=1;y=2;
 gotoxy(x,y);
 int j=1;
 while (j<=8)/*7 colonnes :8 bords*/
 {
 printf("%c               ",trv);
 j++;
 }
 x=1;y=3;
 int k=1;
 while (k<=6)/*Nombes de lignes-1*/
 {
  gotoxy(x,y);
  printf("%c",tverg);
  int l=1;
   while (l<=6)/*Nombre de colonnes-1*/
   {
    printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,cross);
   l++;
   }
   printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,tverd);
   y++;
   gotoxy(x,y);
   int m=1;
   while (m<=8)/*Les bords*/
   {
    printf("%c               ",trv);
    m++;
    }
    y++;
    k++;
  }
  
  gotoxy(1,y);
  printf("%c",cgb);
  int n=1;
  while (n<=6)/*Les 7 colonnes de bas de tableau*/
 {
 printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,thorh);
 n++;
 }
  printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,trh,cdb);
  printf("\n\n");
  printf("Tab,Entree:Valider, Haut:Ligne precedente(efface le caractere courant),Bas:Ligne suivante(efface le caractere courant),\nDroite: caractere suivant;Retour arriere,gauche:revenir au caractere precedent");
  printf(" Espace:efface le caractere suivant; Echap=Quitter");
  char touche;/*Va recevoir le code décimal de la touche frappée*/
  char carac;/*Sera utilisé pour convertir l'entier en char et afficher la touche frappée*/
  x=2;y=2;
  gotoxy(x,y);
  
  while (touche!=27)
    {
  
     /*Les codes des touches sont détaillés au début de la source*/
     touche=getch();
     if (touche==-32) goto next;/*Si l'on appuie sur l'une des touches directionnelles deux codes sont successivement attribués à "touche" (-32 puis 80 pour bas,72 pour haut,75 pour gauche,77 pour droite*/
     if ( touche==13) {x=x+17; gotoxy(x,y);}
     if (touche==8) { x--; gotoxy(x,y);}
     if (touche==32) x++;
     next:/*Capture du deuxième code dans les touches directionnelles*/
     if (touche==72) {y=y-2;  gotoxy(x,y); if (y<=0) y=20;}
     if (touche==80) {y=y+2;  gotoxy(x,y); if (y>=22) y=2;}
     if (touche==77) {x++; gotoxy(x,y); if (x>=160) x=2;}
     if (touche==75) {x--;  gotoxy(x,y); if (x<=1) x=159;}
     
     
     if ( touche!=13 && touche!=8 && touche!=72 && touche!=80 && touche!=77 && touche!=75 && touche!=-32)
     { carac=(char)touche; x++; printf("%c",carac);} /*Affiche le caractère tapé si la touche est différente de celles du dessus*/ 
     }   
       
       
        
      
 }
       

 




int main()
{
  
 printf("Bienvenue sur le Tableur version 1.0. Dans cette version\n");
 printf("Il n'est pas possible de charger ni d'enregistrer les donn%ces\n",ea);
 printf("En revanche vous pouvez modifier le contenu d%cj%c %ccrit\n",ea,aa,ea);
 printf("Servez-vous des touches mentionn%ces au bas de la fen%ctre\n",ea,eacc);
 printf("quand vous aurez le tableau sous les yeux.\n\n\n\n");
 printf("REMARQUE: *Utilisateurs de Windows XP: Elargir la fenetre au maximum\n");
 printf("*Windows 98/Me et autres: Passer a l'affichage plein ecran (vous taperez Echap pour quitter)\n");
  
 system("pause");
 system("cls");
  
 tab10f10();
 
 
 
 
  
  
  return 0;
}

Conclusion :

Il est possible d'effacer les cases latérales du tableau; il y a quelques bugs au niveau des coordonnées mais dans l'ensemble c'est convenable. Je prépare une meilleure version. ça marche sous XP; sous 98 et Me je n'ai pas testé.

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.