Bonjour,

j'ai un projet C a faire , le but est de mettre en oeuvre un interpreteur de commandes SQL de sorte qu'on puisse gerer ma base de donnee depuis les lignes de commandes . Je viens de creer 2 fonctions une pour creer une table et l'autre pour afficher les tables . Je ne sais pas d'ou vient mon probleme mais quand je met dans la main les deux fonctions j'arrive plus a rajouter des tables par contre si je met dans le main juste une des des fonctions ça marche, aussi un autre probleme, quand je rajoute une table la premiere lettre du nom de la table n'est pas affiché et le nbr max des colonnes non plus

Voila mon code source :

1- fichier struc.h

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
typedef struct
{
    char NomColonne[32];// nom de la colonne dans la table
    char TypeColonne; // type de la colonne 'C'= char, 'E'=entier, 'F'=réel, B= booléen
    int TailleColonne ;// taille en octet
} COL;
 
 
typedef struct
{
    char NomTable[32];
    short YY, MM,DD; // date de modification année, mois, jour
    int NbRecord ; // n o m b r e d ' e n r e g is t r e m e n t s
    int LengthHeader ; // t a ille e n o c t e t s d e l' e n-tête (à calculer)
    int LengthRecord ; // t a ille e n o c t e t s d e l' e n r e g is t r e m e n t ( à c a lc u le r )
    COL TabCol[16] ; // description des colonnes de la table
    int NbMaxCol; // No m b re e ffe c t if d e c o lo n n e s d a n s la t a b le
}EN_TETE;
 
 
struct tm* localtime (const time_t *secondes);
2 - fichier fonctions.h

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "struc.h"
#include <time.h>
#define TAILLE_MAX_nomtable 3
 
 
void ajouter_table(FILE *btable){
 
 
 
    EN_TETE table;
    int i;
    char ntb[32];
    int nb;
    nb=fread(&table, sizeof(table),1,btable);
 
 
    getchar();
    printf("saisir le nom de la table : ");//nom de la table
    gets(ntb, 32, stdin);
    //enlever les espaces
    for(i=0;i<=strlen(ntb);i++){
        if(ntb[i]==' '){
            ntb[i]='_';
 
        }
    }
 
    //verification si une autre table du meme nom existe
    while(nb!=NULL && table.NomTable==ntb){
 
        printf("Ce nom existe deja choisissez un autre :");//nom de la table
        fgets(ntb, 32, stdin);
        //enlever les espaces
        for(i=0;i<=strlen(ntb);i++){
            if(ntb[i]==' '){
                ntb[i]='_';
            }
        }
 
    }
 
    strcpy(table.NomTable, ntb);
    printf("saisir le nombre total des colonnes :");//nbr des col
    scanf("%d",table.NbMaxCol);
 
 
    table.NbRecord=0;
    table.LengthHeader=sizeof(table);
    table.LengthRecord=0;
 
 
 
 
 
    // generer la date
 
 time_t secondes;
    struct tm instant;
    time(&secondes);
    instant=*localtime(&secondes);
 
    table.YY=instant.tm_year-100;
    table.MM=instant.tm_mon+1;
    table.DD=instant.tm_mday;
 
 
 
 
    //remplir l'entete&creer fichier table
 
    fwrite(&table,sizeof(table),1,btable);
 
 
 
}
 
 
void afficher_table(FILE *btable){
    EN_TETE table;
    int nb;
    nb=fread(&table, sizeof(table),1,btable);
    fseek(btable,0,SEEK_SET);
    printf("\n\n\t=== Tables ===\n");
 
    do
    {
        nb=fread(&table, sizeof(table),1,btable);
    if (nb!=0)
        {
        printf("*** %s", table.NomTable);
        printf("*** %d",table.NbMaxCol);
        printf("*** %d/%d/%d\n", table.DD,table.MM,table.YY);
        }
    }
    while(nb!=0);
 
 
 
 
}
3 - fichier main.c


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fonctions.h"
#include "struc.h"
#include <time.h>
 
int main(){
 
    char quite='n';
    int choix;
    FILE *btable;
    btable=fopen("tables.txt","a+");
 
while(quite!='o'){
        printf("**********Choix Menu****************\nTapez:\n1 pour afficher les table\n2 pour ajouter une table");
        scanf("%d",&choix);
        switch (choix)
        {
        case 1:
        afficher_table(btable);
        choix =0;
 
        break;
 
        case 2:
 
        ajouter_table(btable);
        choix =0;
        break;
 
        }
 
 
 
}
 
fclose(btable);
    return 0;
 
}