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
2 - fichier fonctions.hCode:
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);
3 - fichier main.cCode:
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); }
Code:
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; }