Programmation C

Fermé
Dedel_209 Messages postés 32 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 28 septembre 2011 - 31 janv. 2009 à 12:28
Dedel_209 Messages postés 32 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 28 septembre 2011 - 31 janv. 2009 à 18:32
Bonjour,

Voilà j'aurais besoin de votre aide. Si quelqu'un pourrait mettre un début de code pour l'exercice suivant parce que je ne sais pas par quoi commencer... Merci d'avance

Gestion des stocks d’une société.

Nous travaillons encore avec la structure produit, la structure Stockage et avec les structures suivantes :
struct ind { char NomProduit[30] ;
long NumProduit ;
long Posi ;
struct ind * psvt ;
};
struct numero { long NumProduit ;
struct numero * psvt ;
};
Dès que l’application est lancée, le fichier NumProduit.dat ( se trouvant sur disquette) est ouvert en lecture seule et une liste triée (llu triée) est créée. La liste est triée par ordre croissant des numéros de produits. On ferme ensuite le fichier (si le fichier n’a pu être ouvert, c’est qu’il n’existe pas, il n’y a donc pas de numéro de produit).
Dans la fonction main(), nous aurons notamment les variables suivantes :
int nproduit ; /* nombre de produits encodés */
struct numero * numprod;
FILE * fnumero=NULL ;

Le menu suivant apparaît ensuite : 1. Produits
2. Stockages
3. Quitter (avec enregistrement des numéros de produits présents dans la liste pointée par numprod dans le fichier NumProduit.dat. Le fichier est ouvert en ″wb″ et donc écrasé si il existe et puis fermé après enregistrement des numéros)
1. Produits

Dans la fonction main(), nous aurons notamment les variables et les fonctions suivantes :
struct produit produit ;
struct ind * index ;
FILE * fproduits=NULL ;
Le fichier Produits.dat est créé ou ouvert et l’index est créé. L’index (liste triée de struct ind) est construit de manière à être trié par ordre alphabétique sur le nom du produit.

Nouvelles fonctions :

InsertionInd: Cette fonction permet d’insérer un élément de type struct ind de manière triée dans l’index.
InsertionNumero : Cette fonction permet d’insérer un élément de type struct numero de manière triée dans la liste pointée par numprod.
SuppressionInd : Cette fonction permet de supprimer un élément de l’index.
SuppressionNumero : Cette fonction permet de supprimer un élément de la liste pointée par numprod.

Nous utilisons un menu.
1) Ajouter des produis en fin de fichier. On contrôle à chaque fois si le n° de produit n’est pas déjà utilisé. Si c’est le cas, on demande de réencoder le n° de produit. Il faut donc, lors de l’ajout d’un nouveau produit, mettre à jour l’index et la liste pointée par numprod. L’encodage est interrompu en appuyant sur la touche ENTER lors de l’encodage du n° de poduit d’un produit. Si le numéro de produit est erroné, on demande à l’utilisateur de réencoder un autre numéro.

2) Afficher les caractéristiques des produits suivant l’ordre contenu dans l’index, avec arrêt prématuré si souhaité.

3) Rechercher un produit à partir de son nom (utiliser l’index ) et afficher les caractéristiques du produit correspondant si celui-ci existe. Permettre ensuite à l’utilisateur de modifier les caractéristiques du produit ou de supprimer le produit.
Modification : toutes les caractéristiques sont réencodées (hormis peut-être le numéro de produit). On ne sélectionne pas une caractéristique (un champ) en particulier. Le numéro de produit ne peut être modifié (plus simple à programmer sinon il faut mettre à jour le vecteur numprod et le fichier Stockages.dat ( voir le point 2. Stockages)). Attention, si le nom du produit a été modifié, il faut mettre à jour l’index (supprimer l’ancien élément et insérer le nouvel élément en bonne position).
Suppression : il faut supprimer l’élément correspondant de l’index et de la liste pointée par numprod et écrire -1 comme numéro de produit du produit supprimé dans le fichier Produits.dat. Mais attention, vous ne pouvez pas supprimer un produit qui est stocké dans un dépôt. Il faut donc parcourir le fichier Stockages.dat afin de rechercher si le numéro de produit du produit que vous voulez supprimer est présent. Si le numéro de produit est présent, il faut refuser la suppression. Le fichier Stockages.dat sera donc ouvert en lecture seul et puis refermer avant de revenir au menu.

4) Quitter (fermeture du fichier Produits.dat).

2. Stockages

Dans cette partie, nous devrons gérer le stockage des produits dans les différents dépôts.
Nous travaillerons avec la structure Stockage.

struct Stockage{
long NumProduit;
long NumDepot ;
long QuantiteStockee ;
} ;
Dans la fonction main(), nous aurons notamment la variable suivante :
FILE * fstockages=NULL ;
Le fichier Stockages.dat est créé ou ouvert.
Nous utilisons un menu.
1) Ajout des stockages
2) Affichage séquentiel du fichier
3) Quitter (fermeture du fichier Stockages.dat).

Tout stockage d’un produit dans un dépôt sera enregistrée dans le fichier Stockages.dat et l’organisation de celui-ci sera séquentielle physique.

Deux précautions à prendre :
1) Ne pas autoriser deux fois le même enregistrement càd deux structures avec le même NumProduit et le même NumDepot. Il faut donc parcourir le fichier Stockages.dat (plus simple à programmer).
2) Le produit doit exister. Il faut donc vérifier que le numéro de produit est présent dans la liste pointée par numprod

6 réponses

On n'est pas des pigeons.
0
Dedel_209 Messages postés 32 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 28 septembre 2011 3
31 janv. 2009 à 13:47
Non je sais bien c'est un forum d'entraide...Je suis pas un pigeon non plus :P
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
31 janv. 2009 à 13:55
Salut,

Si quelqu'un pourrait mettre un début de code pour l'exercice suivant parce que je ne sais pas par quoi commencer...

Voyons les choses dans l'autre sens.
Si tu as comme devoir un tel exercice alors je suppose que tes cours contient beaucoup des choses (structures, pointeurs, etc.). Si après tout ça tu ne sais pas par quoi commencer alors tu doit reprendre tes cours.

C'est plutôt à toi de montrer ce que tu as fait avec l'espoir que tu vas trouver de l'aide.

Dans la FAQ CCM tu trouves des exemples en C qui utilisent des menus par exemple.
0
Oh vous pourriez l'aider un peu... il veut juste un début de code.
Je propose:
#include <stdio.h>
int main (int argc, char* argv[])
{
  return 0;
}
Voilà, maintenant c'est à ton tour! ;=)
0
akuma06 Messages postés 48 Date d'inscription dimanche 10 août 2008 Statut Membre Dernière intervention 12 juin 2010 4
31 janv. 2009 à 15:46
LOl louplus !! XD
0

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

Posez votre question
Dedel_209 Messages postés 32 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 28 septembre 2011 3
31 janv. 2009 à 18:31
Voilà ce que j'ai mais il me met tellement d'erreur que je ne sais pas...

int pere(int i)
{
return (i-1)/2;
}

int droit(int i)
{
return 2*i+2;
}

int gauche(int i)
{
return 2*i+1;
}

bool existeFilsGauche(int n, int i)
{
return gauche(i)<n;
}

bool existeFilsDroit(int n, int i)
{
return droit(i)<n;
}

void entasser (int t[], int n, int i)
{
int max;
int fin=0;

while(existeFilsGauche(n,i) && !fin)
{
max = gauche(i);
if(existeFilsDroit(n, i))
if(t[max]<t[droit(i)])
max = droit(i);

if(t[max] < t[i])
fin=1;
else
{
echange(t,i,max);
i=max;
}
}
}

void construireTas (int t[], int n)
{
for(int i=n/2-1;i>=0;i--)
entasser(t,n,i);
}

void heapSort(int t[], int n);

int i
{
construireTas(t,n);
for(int i=n-1 ; i>0 ; i--);
{
echange(t,0,i);
entasser(t,i,0);
}
}
0
Dedel_209 Messages postés 32 Date d'inscription mercredi 30 janvier 2008 Statut Membre Dernière intervention 28 septembre 2011 3
31 janv. 2009 à 18:32
Pourriez-vous supprimer ce topic parce que enfaite je me suis trompé LOL
0