Problemes avec un projet(langage C)

Fermé
walid - 3 mai 2004 à 23:39
walid524 Messages postés 20 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 12 avril 2007 - 7 juin 2004 à 23:02
salut, j ai un gros probleme avec ce projet et je doit le rendre dans 2 semaines .aidez moi svp.

On se propose de développer un système de génération de rapports en format HTML.
Il s’agit de formater des données stockées dans un fichier texte pour éditer un rapport en format HTML accessible à travers l’explorateur Windows, et ce pour améliorer la qualité de l’affichage, gérer les données images du rapport.

Pour un fichier de donnée (avec extension .dat) le systeme devra disposer de :
- un fichier de description (avec une extension .dsc) définit les types des donnes.
- Un ou plusieurs fichiers format (avec extension .frm) décrivant les types des informations retenues pour l’édition du rapport.

La structure du fichier de description étant la suivante :
- le titre de la colonne (20caracteres)
- le type de la colonne (1 caractère) ,1 : texte 2 : image
- la position de la colonne sur la ligne du fichier de données ( 4 caractères)
- la longueur en nombre de caractères de la colonne (2 caractères)

Rq : une colonne correspond à une information qui se trouve dans le fichier de données.
La structure du fichier format étant la suivante :
- le titre de la colonne (20caracteres).
- la police d’écriture de la donnée ( 2 caractères).

Pour chaque fichier de données on associe donc un fichier de description. Le lien entre les deux fichiers se fait par le biais du nom du fichier. Par exemple, si on a un fichier de données (etudiant.dat) le fichier de description associe est alors (etudiant.dsc).
Toutefois, on peut définir un ou plusieurs fichiers format afin de disposer d’un ou plusieurs rapports en format HTML.

Le fichier de données contient des informations organisées en lignes de longueur fixe.La description de ces informations est donnée dans le fichier de description associe. On distingue deux types d’information :
- des informations texte
- des informations image

Une information de type image correspond au nom du fichier qui contient l’image.

Travail à faire :

Développer un système offrant à l’utilisateur les fonctionnalités suivantes :

1) Création d’un fichier de données.
2) Génération d’un fichier de description.Ce module devait mettre à la disposition de l’utilisateur les opérations suivantes:
- Ajouter une colonne.
- Modifier une colonne.
- Visualiser sur écran le contenu d’un fichier de description page par page.
3) Génération d’un fichier format. Ce module comprendra les opérations suivantes :
- Ajouter une ligne.
- Modifier une ligne.
- Supprimer une ligne.Le caractère # sera alors place en début de la ligne dans le fichier format.
- Visualiser sur écran le contenu d’un fichier format page par page.
4) Génération d’un rapport en format HTML
Il s’agit d’éditer un rapport en format HTML dont le contenu correspond à un fichier de données et un fichier de format spécifie.
Pour la génération d’un rapport en format HTML le système accepte les données suivantes :
- Le nom du fichier de données.
- Le nom du fichier format.
- Le critère de sélection d’une ligne de donnees.ce critère doit être l’une des colonnes spécifiées dans le fichier de description associe au fichier de données.
- La valeur associe au critère de sélection (une chaîne de caractères qui servira pour retenir ou non une ligne dans le rapport de sortie)
- La colonne de tri (le rapport de sortie sera trie relativement a une colonne qui doit nécessairement figurer dans le fichier de format).
A voir également:

5 réponses

blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
4 mai 2004 à 11:21
pas mal comme cahier des charges.
c'est qui le chef de projet ?
c'est pour une équipe de combien?
c'est bien payé ? ;-)
0
salut,pour repondre a vos questions c est un projet qu on nous a donne a la fac pour remplacer l exam,et c est pour une seule personne, je vous envoi mon travail mais il est comlique et il y a pas mal d erreurs,alors si vous pouvez le corriger ca serai tres gentil de votre part..

//---------------------------------------------------------------
// Conversion texte vers HTML
//---------------------------------------------------------------
// Projet ...
//
// PremiŠre version le 30-04-2004
//---------------------------------------------------------------

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

#include "\PROGRA~1\TC\PROJET~1\TXTBOX.C"

#define FILEPATH "C:\\PROGRA~1\\TC\\PROJET~1\\"
#define NB_SCREEN_LINES 49 // Taille de l'‚cran DOS sous windows !
#define MAX_LINES 200 // Nb max de lignes dans le fichier
#define MAX_COLS 74 // Nb mac de colonnes ‚ditables
#define LINE_INCREMENT 20 // Incr‚ment page pr‚c‚dente/suivante

char KeyPressed;
char memfile[MAX_LINES*MAX_COLS+1];
int filesize;

/*-------------------------------------------------------------
Affichage de la page d'aide
-------------------------------------------------------------*/
void display_help(void)
{
char key;

clrscr();
printf("\n\n\t? : Affiche cette page\n");
printf("\tD nnn : Efface la ligne 'nnn'\n");
printf("\tI nnn : InsŠre une ligne avant la ligne 'nnn'\n");
printf("\tE nnn : Edite la ligne 'nnn'\n");
printf("\tP: Page pr‚c‚dente\n");
printf("\tN: Page suivante\n");
printf("\tW: Sauvegarde le fichier\n");
printf("\tQ: Quitte avec ou sans sauvegarder\n");
printf("\n\tTapez une touche pour revenir … l'‚diteur");
key = getch();
}


/*-------------------------------------------------------------
Chargement du fichier en m‚moire
-------------------------------------------------------------*/
int load_file(FILE *file)

{
char buffer[80];
int nblines;

nblines = 0;
while ((fgets(buffer, MAX_COLS+1, file) != NULL) &&
(++nblines <= MAX_LINES))
strcpy(memfile+(nblines-1)*(MAX_COLS+1),buffer);
filesize = nblines; //nombre de lignes dans le fichier
if (nblines >= MAX_LINES)
return(0); // D‚bordement de buffer
else
return(1); // Lecture OK
}

/*-------------------------------------------------------------
Sauvegarde du fichier sur disque
-------------------------------------------------------------*/
int savefile(FILE *file)

{
char buffer[80];
int nblines;

printf("sauvegarde en cours");
delay(2000);
/*
nblines = 0;
while ((fgets(buffer, MAX_COLS+1, file) != NULL) &&
(++nblines <= MAX_LINES))
strcpy(memfile+(nblines-1)*(MAX_COLS+1),buffer);
filesize = nblines; //nombre de lignes dans le fichier
if (nblines >= MAX_LINES)
return(0); // D‚bordement de buffer
else
return(1); // Lecture OK
*/
}


/*-------------------------------------------------------------
Affichage d'une page de l'‚diteur
-------------------------------------------------------------*/
void display_memfile(char *filename , int firstline)

{
int nblines;

clrscr();
printf(" Edition de %s \n\n",filename);
nblines = 0;
// Affiche NB_SCREEN_LINES-5 lignes sur l'‚cran
while ( (*(memfile+(firstline+nblines)*(MAX_COLS+1))!='\0') &&
(nblines < NB_SCREEN_LINES-5)){
printf("%3d: %s",firstline+nblines+1,memfile+(firstline+nblines)*(MAX_COLS+1));
nblines++;
}
// Si pas assez, complŠte avec des lignes vides
if (nblines < NB_SCREEN_LINES-5)
while (nblines++<NB_SCREEN_LINES-5)
printf("\n");
}
/*-------------------------------------------------------------
Suppression d'une ligne dans l'‚diteur
-------------------------------------------------------------*/
void deleteline(int numlinetodelete)

{
int i,j;

numlinetodelete--; // car tableau d‚marre a 0 et la premiere ligne edit‚e est num‚rot‚e 1
if ( numlinetodelete < filesize ) {
// D‚cale toutes les lignes de -1 … partir de la ligne … effacer (‚crase)
for (i = numlinetodelete ; i <= filesize ; i++)
for (j = 0 ; j <= MAX_COLS+1 ; j++)
*(memfile+i*(MAX_COLS+1)+j) = *(memfile+(i+1)*(MAX_COLS+1)+j);
filesize--;
}
}

/*-------------------------------------------------------------
Ajout d'une ligne dans l'‚diteur (… la fin)
-------------------------------------------------------------*/
void appendline(void)

{
int i,j;
char linebuffer[MAX_COLS+2];

linebuffer[0] = '\0';
gotoxy(1,NB_SCREEN_LINES-2);
printf("%3d: ",filesize+1);
txtbox(MAX_COLS,linebuffer);
strcat(linebuffer,"\n");
strcpy(memfile+filesize*(MAX_COLS+1),linebuffer);
filesize++; // Taille du fichier
}

/*-------------------------------------------------------------
Insertion d'une ligne dans l'‚diteur (avant la ligne d‚sign‚e)
-------------------------------------------------------------*/
void insertline(int numlinetoinsert)

{
int i,j;
char linebuffer[MAX_COLS+2];

// Saisie de la nouvelle ligne
numlinetoinsert--;
linebuffer[0] = '\0';
gotoxy(1,NB_SCREEN_LINES-2);
printf("%3d: ",numlinetoinsert+1);
txtbox(MAX_COLS,linebuffer);
strcat(linebuffer,"\n");
// D‚cale les lignes suivantes
for (i = filesize-1 ; i >= numlinetoinsert ; i--)
for (j = 0 ; j < MAX_COLS+1 ; j++)
*(memfile+(i+1)*(MAX_COLS+1)+j) = *(memfile+i*(MAX_COLS+1)+j);
// Ajoute la ligne saisie
strcpy(memfile+numlinetoinsert*(MAX_COLS+1),linebuffer);
filesize++;
}

/*-------------------------------------------------------------
Edition d'une ligne
-------------------------------------------------------------*/
void editline(int numlinetoedit)

{
int i,j;
char linebuffer[MAX_COLS+2];

// Initialise
numlinetoedit--;
strcpy(linebuffer,memfile+numlinetoedit*(MAX_COLS+1));
i=strlen(linebuffer);
linebuffer[i-1]='\0'; // Supprime le '\n' a la fin de la ligne
// Edition de la ligne
gotoxy(1,NB_SCREEN_LINES-2);
printf("%3d: ",numlinetoedit+1);
txtbox(MAX_COLS,linebuffer);
strcat(linebuffer,"\n");
// Remplacement par la nouvelle ligne
strcpy(memfile+numlinetoedit*(MAX_COLS+1),linebuffer);
}

/*-------------------------------------------------------------
Parsing d'une ligne de commande dans l'‚diteur
-------------------------------------------------------------*/

int parseline(char *cmdline, char *cmd, int *param1)
{
int offset1=0;
int offset2=0;
int i;
char param[50], ch, cmdtoken;

// supprime les espaces de d‚but
while (*(cmdline+offset1)==' ')
offset1++;
cmdtoken = toupper(*(cmdline+offset1));
if (cmdtoken == 'P' || // Commande valide sans paramŠtre
cmdtoken == 'N' ||
cmdtoken == 'A' ||
cmdtoken == 'Q' ||
cmdtoken == '?' ) {
*cmd = cmdtoken;
*param1 = 0;
return(1); // Renvoie OK
}
if (cmdtoken == 'I' || // Commande valide avec paramŠtre
cmdtoken == 'D' ||
cmdtoken == 'E' ) {
*cmd = cmdtoken;
while (!isdigit(*(cmdline+offset1))) // Cherche le d‚but du paramŠtre
offset1++;
offset2 = offset1;
while (isdigit(*(cmdline+offset2))) // Cherche la fin du paramŠtre
offset2++;
for(i=offset1 ; i <= offset2 ; i++) // Extrait le paramŠtre
param[i-offset1] = *(cmdline+i);
param[i] = '\0';
*param1 = atoi(param); // ParamŠtre entier (toujours un nø de ligne)
if (*param1)
return(1);
}
// Si erreur d'interpr‚tation de la commande
*cmd = '\0';
*param1 = 0;
gotoxy(1,NB_SCREEN_LINES-2);
printf(" Erreur de syntaxe (? pour de l'aide) <Pressez une touche> ");
ch=getch();
gotoxy(1,NB_SCREEN_LINES-2);
printf(" ");
return(0);
}

/*-------------------------------------------------------------
Cr‚ation du fichier de donn‚es (.dat)
-------------------------------------------------------------*/

void makedatafile(void)

{
char line[80],filename[80],buffer[255],keypressed;
char commande;
int parametre;
int numline, nblines, firstline, i, startline;
FILE *datafile;

for(i=0;i<=MAX_LINES;i++)
*(memfile+i*(MAX_COLS+1))='\0'; // Init

printf ( "\nEdition d'un fichier de donn‚es\n\n" );
printf ( "Nom du fichier : " );
line[0] = '\0';
strcpy(line,"toto.dat");
txtbox ( 60, line );
strcpy(filename, FILEPATH);
strcat(filename,line);
if ((datafile = fopen(filename, "rt")) == NULL) {
printf("\n\nCr‚ation du fichier %s \n",line);
datafile = fopen(filename, "wt");
}
else
load_file(datafile);

startline = 0;
while (1) {
/* Affichage du contenu du fichier */
display_memfile(filename,startline);
/* Attente commande */
gotoxy(1,NB_SCREEN_LINES-3);
printf(" cmd: ");
line[0]='\0';
txtbox(10,line);
parseline(line,&commande,¶metre);

if (commande == 'D') { // Efface une ligne (Delete)
deleteline(parametre);
}
if (commande == 'I') { // Insere une ligne (Insert)
insertline(parametre);
}
if (commande == 'E') { // Edite une ligne (Edit)
editline(parametre);
}
if (commande == 'A') { // Ajoute une ligne … la fin (Append)
appendline();
}
if (commande == 'P') { // Page pr‚c‚dente
startline=startline-LINE_INCREMENT;
if (startline < 0) startline = 0;
}
if (commande == 'S') { // Page suivante
startline=startline+LINE_INCREMENT;
if (startline>=filesize) startline = filesize-LINE_INCREMENT;
if (startline < 0) startline = 0;
}
if (commande == '?') // Affiche la page d'aide
display_help();
if (commande == 'Q') { // Quitte
gotoxy(1,NB_SCREEN_LINES-2);
printf(" Voulez vous sauvegarder le fichier ? (O/N)");
while (1) {
keypressed = getch();
if (toupper(keypressed) == 'O') {
savefile(datafile);
break;
}
if (toupper(keypressed) == 'N')
break;
}
break;
}
}


/* Fermeture et retour au menu principal */
fclose(datafile);


// keypressed = getch();
fflush ( stdin );
/*restore_ui();*/
}


//-------------------------------------------------------------------
// Programme principal
//-------------------------------------------------------------------
main()
{
while (1) {
clrscr();
printf("\n\n********** Menu principal **********\n");
printf("[1] Cr‚er un fichier de donn‚es\n");
printf("[2] Cr‚er un fichier de format\n");
printf("[3] Cr‚er un fichier de s‚lection\n");
printf("\n[0] Quitter\n");
do
KeyPressed = getch();
while ((KeyPressed < '0') || (KeyPressed > '3'));
switch (KeyPressed) {
case '1' : makedatafile();
break;
case '2' : break;
case '3' : break;
case '0' :
printf("\n\nVoulez vous vraiment quitter ? (O/N) ");
KeyPressed = getch();
if (KeyPressed == 'O' || KeyPressed == 'o') {
printf("Fin de l'application\n");
exit(1);
}
}
}
}




et voici la bibliotheque TXTBOX que j ai trouve sur le net


/****************************************************************************
* *
* TXTBOX.C - This textbox works like the normal textbox found in Windows. *
* You can use this textbox function in your applications or *
* projects without any modifications at all. The keys *
* available are arrow keys, DEL, Insert, Backspace, Home, End. *
* A very useful and a must addon for u'r progs !! *
* *
* ------------------------------------------------------------------------ *
* Author : Mithun John Jacob *
* Kerala.INDIA *
* email : mithunjohn@jacobsmail.com *
* WWW : http://www.mithunjj.cjb.net *
* ------------------------------------------------------------------------ *

// ---------------------------------- SoC -----------------------------------

/* ..ASCII and Scan Codes of Keys.. */

# define ESC 27
# define ENTER 13
# define RIGHT 77
# define LEFT 75
# define HOME 71
# define END 79
# define INSERT 82
# define DEL 83

/*-------------------------------------
..Checks the status of Insert Key..
..Returns..
..1 if ON..
..0 if OFF..
--------------------------------------*/
int ins_state ( void )
{
unsigned char far *stat =(char far*)0x417 ;

char status ;

status = *stat ;

if ( ( status & 128 ) == 128 )
return 1;
else
return 0;
}

/*----------------------------------
..Changes the shape of cursor..
------------------------------------*/
void cursor_shape ( int y , int x )
{
union REGS i, o ;
i.h.ah = 1 ;
i.h.ch = y ;
i.h.cl = x ;
int86 ( 16, &i, &o ) ;
}

/*-----------------------------------------------
..Restores the screen to the orginal state..
-------------------------------------------------*/
void restore_ui(void)
{
int i;
char far *vidmem=(char far*)0xB8000000;

window(1,1,80,25);
clrscr();

for (i=1;i<4000;i+=2)
*(vidmem+i)=7;

_setcursortype(_NORMALCURSOR);
}

/*-------------------------------------------
..Function for drawing horizontal line..
---------------------------------------------*/
void horiz_draw(int start_x,int end_x,int y,char symbol)
{
int i,len;
len=end_x-start_x;

for (i=1;i<=len+1;++i,++start_x)
{
gotoxy(start_x,y);
cprintf("%c",symbol);
}
}

/*
-----------------------------------
..The important fuction..
..Just include in your programs..
-----------------------------------

+------------------------- Available Keys -----------------------------------+
| ~ Right Arrow --> For moving the cursor to the right |
| ~ Left Arrow --> For moving the cursor to the left |
| ~ DEL --> For deleting characters |
| ~ Backspace --> For deleting characters |
| ~ Insert --> For inserting charcters |
| ~ Home --> For going to the beginning of the text |
| ~ End --> For going to the end of the text |
| ~ ESC --> For clearing the textbox |
+----------------------------------------------------------------------------+

*/
void txtbox ( int length, char *str)
{
/* char *str
..Array into which characters are being stored,
*/

char key;

int startx, /* ..For storing the starting position.. */
x,
y,
i,
j,
currentpos,
lastpos = 0,
len; /* ..Length of the string.. */

startx = wherex();
y = wherey();

/*--------------------------------------------------------------------
..I have used the colors which I like, you are free to use your
own colors..
----------------------------------------------------------------------*/

textcolor ( WHITE );
textbackground ( BLUE );

/* ..Just for drawing the cute blue box.. */
horiz_draw ( startx , startx + length , y , ' ');

gotoxy ( startx , y );
// str[0] = '\0'; Pour permettre l'utilisation d'une chaine non video
len = strlen ( str );
for ( i = 0 ; i < len ; i++ )
putch ( str[i] );

while ( 1 ) {
if ( ins_state() == 1 ) /* ..If the Insert is ON change the cursor.. */
cursor_shape ( 4 , 8 );
else
_setcursortype( _NORMALCURSOR );

key = getch();
x = wherex();
len = strlen ( str );

if ( key == ENTER )
break;

if ( key == ESC ) { /* ..For clearing the characters in the textbox.. */
textbackground ( BLUE );
horiz_draw ( startx , startx + length , y , ' ');
gotoxy ( startx , y );
str[0] = '\0';
lastpos = 0;
continue;
}

/* ..For storing the typed characters into the array.. */
if ( key > 31 && key < 127 && x < ( startx + length ) ) {
if ( len == length && ins_state() == 1 ) {
printf ( "\a" );
continue;
}

if ( ins_state() == 1 ) { /* ..Insert.. */
currentpos = x - startx;
str[len + 1] = '\0';
for ( i = len ; i >= currentpos ; i-- )
str[i] = str[i - 1];
str[currentpos] = key;
len = strlen ( str );
gotoxy ( startx , y );
horiz_draw ( startx , startx + len , y , ' ');
gotoxy ( startx , y );
for ( i = 0 ; i < len ; i++ )
putch ( str[i] );
gotoxy ( ++x , y );
}
else {
i = x - startx;
putch ( key );
str[i] = key;
if ( i >= lastpos ) {
lastpos = i;
str[++i] = '\0';
}
}
}

if ( key == 8 && x <= startx + len && x != startx ) { /* ..Backspace.. */
x = wherex();
currentpos = x - startx;
for ( i = currentpos - 1 ; str[i] != '\0' ; i++ )
str[i] = str[i + 1];
gotoxy ( startx , y );
horiz_draw ( startx , startx + len , y , ' ');
gotoxy ( startx , y );
for ( i = 0 ; i < len ; i++ )
putch ( str[i] );
gotoxy ( --x , y );
continue;
}

if ( key == 0 ) { /* ..If the keys are Scan Keys.. */
key = getch();

if ( key == END ) {
gotoxy ( startx + len , y );
continue;
}
if ( key == HOME ) {
gotoxy ( startx , y );
continue;
}
if ( key == LEFT && x > startx ) {
gotoxy ( --x , y );
continue;
}
if ( key == RIGHT && x < startx + len ) {
gotoxy ( ++x , y );
continue;
}
x = wherex();
if ( key == DEL && x != startx + len ) {
x = wherex();
currentpos = x - startx;
for ( i = currentpos ; str[i] != '\0' ; i++ )
str[i] = str[i + 1];
gotoxy ( startx , y );
horiz_draw ( startx , startx + len , y , ' ');
gotoxy ( startx , y );
for ( i = 0 ; i < len ; i++ )
putch ( str[i] );
gotoxy ( x , y );
continue;
}
}
} /* ..End of while loop.. */

i = strlen ( str );

/* ..Truncates the useless spaces found at the end of string.. */
for ( j = i - 1 ; j >= 0 ; --j ) {
if ( str[j] != ' ' ) {
str[++j] = '\0';
break;
}
}
/* Restores text and background default colors */
textcolor ( WHITE );
textbackground ( BLACK );
}
// ---------------------------------- EOF -----------------------------------
0
Le probleme, c'est l'ensemble du projet ???

> j ai un gros probleme avec ce projet et je doit le rendre dans 2 semaines
0
Salut Walid,

t'as toujours besoin d'aide sur ce projet ?

chatbotté
0
walid524 Messages postés 20 Date d'inscription lundi 3 mai 2004 Statut Membre Dernière intervention 12 avril 2007
7 juin 2004 à 23:02
slt chatbotte ,j ai toujours besoin d aide et a vrai dire je ne sais pas si je pourrai le faire parceque j ai d autres exams a passer,si tu peux me donner un coup de main ca sera tres gentil.a bientot...
0
projet
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sympa2004 Messages postés 1 Date d'inscription jeudi 3 juin 2004 Statut Membre Dernière intervention 3 juin 2004
3 juin 2004 à 15:34
j'ais besoin de la reponse du walid svp c'est à dire la reponse au projet svp.
0