begin process at 2012 02 12 08:52:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications Linux

 > CALENDAR [CODE C] [GCC]

CALENDAR [CODE C] [GCC]


 Information sur la source

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Applications Linux Niveau :Initié Date de création :08/11/2001 Vu :10 237

Auteur : Jo

Ecrire un message privé
Site perso
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Ce petit programme de clendrier est un clone de la  
celebre application cal des systeme Unix, pour le moment calendar est moins performant car il faut lui indiquer le mois et l'annee que l'on veut, et aussi les annees sont restreintes de 1800 a 3000 ni plus ni moins.

Source

  • /*
  • Programme: calendar.c
  • Auteur: Joel Matteotti <joel.matteotti@free.fr>
  • Version: 1.0
  • Description: Ce petit programme de calendrier est un clone de la celebre application cal des systeme Unix
  • pour le moment il n'est pas aussi performent car il faut lui indiquer le mois et l'annee dont les annees sont
  • restreinte de 1800 a 3000 ni plus ni moins
  • */
  • #include <stdio.h>
  • void usage(void);
  • int isBissextile(unsigned);
  • static unsigned month_to_days(unsigned);
  • static long years_to_days(unsigned);
  • long ymd_to_scalar(unsigned, unsigned, unsigned);
  • int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  • char *month[12] = {"Janvier", "Fevrier", "Mars", "Avril", "Mais", "Juin",
  • "Juillet", "Aout", "Septembre", "Octembre", "Novembre", "Decembre"};
  • char *daynames[8] = {"Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"};
  • const char *line = "";
  • int main(int argc, char *argv[])
  • {
  • int day, day_1, numdays, i, j;
  • unsigned yr, mo;
  • /*si les argument passer en parametre sont incorrect ou pas assez nombreux
  • pour eviter d'avoir des fichier core on affihe un message d'aide plutot
  • que de continuer le reste du programme*/
  • if (argc < 3 && argc > 1)
  • usage();
  • if (argc < 3)
  • usage();
  • //si le nombre d'argument est correct
  • if (argc >= 3)
  • {
  • yr = atoi(argv[2]);
  • mo = atoi(argv[1]);
  • }
  • //verification si le mois de fevrier est a 28 jours ou 29 jours
  • numdays = days[mo - 1];
  • if (2 == mo && isBissextile(yr))
  • ++numdays;
  • //Cela sert a faire demarrer le calendrier par le Lundi
  • day_1 = (int)((ymd_to_scalar(yr, mo, 1) - (long)1) % 7L);
  • fputs(line, stdout); //on affiche la valeur de line dnas la sortie stndard
  • printf("\nMois de %s de l'annee %d\n\n", month[mo - 1], yr);
  • //On affiche tous les jours (lundi, mardi, mercredi, ect...)
  • for (j = 0; j < 7; )
  • {
  • fputs(daynames[1 + j], stdout); //verifie la norme ISO pour savoir ou commencer
  • if (7 != ++j) //on veriifie pas que notre semaine fait plus de 7 jours :o)
  • fputc(' ', stdout); //affiche un espace entre chacque jours
  • }
  • printf("\n%s", line); //on vas a la ligne
  • //on affiche un espace jusqu'a ce que l'on tombe sur le premier jour du mois
  • for (day = 0; day < day_1; ++day)
  • fputs(" ", stdout);
  • //t bein ici on affiche les jours tous simplment :-)
  • for (day = 1; day <= numdays; ++day, ++day_1, day_1 %= 7)
  • {
  • if (!day_1 && 1 != day)
  • printf("\b%s\n%s", line, line);
  • printf("%3d ", day);
  • }
  • /*on met des epasce dans les jorus de la semaine si par exemple le 31 est un jeudi
  • et bien le vendredi, samedi et dimanche seront remplacer par des espace*/
  • for ( ; day_1; ++day_1, day_1 %= 7)
  • fputs(" ", stdout);
  • fputc('\n', stdout);
  • return 0;
  • }
  • //Fonction affichant une petite aide :-p
  • void usage(void)
  • {
  • puts("Usage: ./cal [m y]");
  • puts("where: m = mois (1 - 12)");
  • puts(" y = annee (1800 - 3000)");
  • exit(-1);
  • }
  • //Fonction calculant la probailite que ce soint uen annee bissextile ou non
  • int isBissextile (unsigned annee)
  • {
  • return annee % 400 == 0 || (annee % 4 == 0 && annee % 100 != 0); //c'est vrai que les 2 sont super util enssemble mais au moins ca evite certains de problemes
  • }
  • //Bon et bien pour la suite je ne pense pas qu'il y est besoin d'explication ?
  • static unsigned months_to_days (unsigned mois)
  • {
  • return (mois * 3057 - 3007) / 100;
  • }
  • static long years_to_days (unsigned annee)
  • {
  • return annee * 365L + annee / 4 - annee / 100 + annee / 400;
  • }
  • long ymd_to_scalar (unsigned annee, unsigned mois, unsigned jour)
  • {
  • long scalaire;
  • scalaire = jour + months_to_days(mois);
  • if ( mois > 2 ) /* Verification si c'est uen annee bissextile ou non*/
  • scalaire -= isBissextile(annee) ? 1 : 2;
  • annee--;
  • scalaire += years_to_days(annee);
  • return scalaire;
  • }
/*
 Programme: calendar.c
 Auteur: Joel Matteotti <joel.matteotti@free.fr>
 Version: 1.0
 Description: Ce petit programme de calendrier est un clone de la celebre application cal des systeme Unix
 pour le moment il n'est pas aussi performent car il faut lui indiquer le mois et l'annee dont les annees sont
 restreinte de 1800 a 3000 ni plus ni moins
*/

#include <stdio.h>

void usage(void);
int isBissextile(unsigned);
static unsigned month_to_days(unsigned);
static long years_to_days(unsigned);
long ymd_to_scalar(unsigned, unsigned, unsigned);


int days[12]    = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char *month[12] = {"Janvier", "Fevrier", "Mars", "Avril", "Mais", "Juin",
                   "Juillet", "Aout", "Septembre", "Octembre", "Novembre", "Decembre"};
char *daynames[8] = {"Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"};

const char *line = "";

int main(int argc, char *argv[])
{
  int day, day_1, numdays, i, j;
  unsigned yr, mo;

  /*si les argument passer en parametre sont incorrect ou pas assez nombreux
    pour eviter d'avoir des fichier core on affihe un message d'aide plutot 
    que de continuer le reste du programme*/
  if (argc < 3 && argc > 1)
    usage();

  if (argc < 3)
    usage();


  //si le nombre d'argument est correct
  if (argc >= 3)
  {
    yr = atoi(argv[2]);
    mo = atoi(argv[1]);
  }
  

  //verification si le mois de fevrier est a 28 jours ou 29 jours 
  numdays = days[mo - 1];
  if (2 == mo && isBissextile(yr))
    ++numdays;

  //Cela sert a faire demarrer le calendrier par le Lundi
  day_1 = (int)((ymd_to_scalar(yr, mo, 1) - (long)1) % 7L);


  fputs(line, stdout); //on affiche la valeur de line dnas la sortie stndard


  printf("\nMois de %s de l'annee %d\n\n", month[mo - 1], yr); 


  //On affiche tous les jours (lundi, mardi, mercredi, ect...)
  for (j = 0; j < 7; )
  {
    fputs(daynames[1 + j], stdout); //verifie la norme ISO pour savoir ou commencer
    if (7 != ++j) //on veriifie pas que notre semaine fait plus de 7 jours :o)
      fputc(' ', stdout); //affiche un espace entre chacque jours
  }
  

  printf("\n%s", line); //on vas a la ligne

  //on affiche un espace jusqu'a ce que l'on tombe sur le premier jour du mois
  for (day = 0; day < day_1; ++day)
    fputs("    ", stdout);


  //t bein ici on affiche les jours tous simplment :-)
  for (day = 1; day <= numdays; ++day, ++day_1, day_1 %= 7)
  {
    if (!day_1 && 1 != day)
      printf("\b%s\n%s", line, line);
  
    printf("%3d ", day);
  }

  /*on met des epasce dans les jorus de la semaine si par exemple le 31 est un jeudi
    et bien le vendredi, samedi et dimanche seront remplacer par des espace*/
  for ( ; day_1; ++day_1, day_1 %= 7)
    fputs("    ", stdout);


  fputc('\n', stdout); 

  return 0;

}

//Fonction affichant une petite aide :-p
void usage(void)
{
      puts("Usage: ./cal [m y]");
      puts("where: m = mois (1 - 12)");
      puts("       y = annee (1800 - 3000)");
      exit(-1);
}

//Fonction calculant la probailite que ce soint uen annee bissextile ou non
int isBissextile (unsigned annee)
{
  return annee % 400 == 0 || (annee % 4 == 0 && annee % 100 != 0); //c'est vrai que les 2 sont super util enssemble mais au moins ca evite certains de problemes
}


//Bon et bien pour la suite je ne pense pas qu'il y est besoin d'explication ?

static unsigned months_to_days (unsigned mois)
{
  return (mois * 3057 - 3007) / 100;
}


static long years_to_days (unsigned annee)
{
  return annee * 365L + annee / 4 - annee / 100 + annee / 400;
}


long ymd_to_scalar (unsigned annee, unsigned mois, unsigned jour)
{
  long scalaire;
  scalaire = jour + months_to_days(mois);
  if ( mois > 2 )                         /* Verification si c'est uen annee bissextile ou non*/
    scalaire -= isBissextile(annee) ? 1 : 2;
  annee--;
  scalaire += years_to_days(annee);
  return scalaire;
}
 

 Conclusion

Ensuite il n'y a plus qu'a compiler:
gcc calendar.c -o calendar

Voila un exemple d'utilisation:
./calendard 12 1999

cela donnera le calendrier du mois de decembre de 1999


 Sources du même auteur

Source avec Zip [G++] [CODE C++] BOTBATTLE
Source avec Zip [G++] [CODE C++] SERVER.CFG GENERATOR POUR COUNTER-STRIKE
LA CARTE AU TRESOR VERSION 0.3 [CODE EN C++] [G++]
Source avec une capture CLIENT/SERVER [CODE EN C] [GCC]
CREATION DE CLASSE [CODE EN C++] [G++]

 Sources de la même categorie

Source avec une capture COLORIMÈTRE NUMÉRIQUE LINUX par valchek
Source avec Zip TRAITEMENTS D'IMAGES AU FORMAT PGM AVEC LES ALGORITHMES DE C... par lemout
Source avec Zip ALGORITHME ACO INTERFACE GTK par RyBeN
Source avec Zip COMPRESSER SES SAUVEGARDES SMSBACKUPRESTORE (ANDROID) EN C A... par ThalLab
SIMPLE SCANNER DE PORTS par Vb6Malade

Commentaires et avis

Commentaire de gaya le 08/08/2002 03:09:28

Tout d'abord, bon travail,

Je signalerai toute fois quelque petites choses à propos du code:

   - le type unsigned est autorisé, cependant par soucis de lisibilité et de compréhension du code, je te conseillerai de spécifier le type (ici je suppose unsigned int)

   - la déclaration de la fonction exit se trouve dans le header &lt;stdlib.h&gt;, je sais bien que même sans l'inclure cela marche, je pense que c'est dû au fait que de nombreuses fonctions standard sont linkées au binary par defaut). il est cependant important même pour toi, de te souvenir d'où sont issues chacune des fonctions que tu utilise, on ne sait jamais, si tu passe sous windows (VC++), cela ne marchera pas.

   - en effet le code fonctionne sous windows :)

Bonne continuation Jo, @+

Commentaire de ipfixe le 30/12/2004 19:40:50

dans quel editeur je dois coller le CS suivant pour ne pas avoir d'erreur /240 qui correspondent au espace html sous les editeur ... ?

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales