La structure Article
représente chaque article en stock.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAILLE_INITIALE 2
#define TAILLE_CODE 20
#define TAILLE_NOM 50
typedef struct {
char nom[TAILLE_NOM];
char code_barres[TAILLE_CODE];
float prix;
int quantite;
} Article;
Les prototypes des fonctions nécessaires au programme :
void afficher_menu();
void ajouter_article(Article** stock, int* nb_articles, int* taille_max);
void vendre_article(Article* stock, int* nb_articles);
void acheter_article(Article* stock, int nb_articles);
void consulter_article(Article* stock, int nb_articles);
void afficher_resume(Article* stock, int nb_articles);
void sauvegarder_stock(Article* stock, int nb_articles);
void charger_stock(Article** stock, int* nb_articles, int* taille_max);
void trier_stock_par_nom(Article* stock, int nb_articles);
void trier_stock_par_quantite(Article* stock, int nb_articles);
La fonction principale gère le menu et les options.
int main() {
int choix;
int nb_articles = 0;
int taille_max = TAILLE_INITIALE;
Article* stock = malloc(taille_max * sizeof(Article));
if (stock == NULL) {
printf("Erreur d'allocation mémoire\n");
return 1;
}
do {
afficher_menu();
printf("Choisissez une option: ");
scanf("%d", &choix);
getchar(); // Pour consommer le '\n' restant dans le buffer
switch (choix) {
case 1:
ajouter_article(&stock, &nb_articles, &taille_max);
break;
case 2:
vendre_article(stock, &nb_articles);
break;
case 3:
acheter_article(stock, nb_articles);
break;
case 4:
consulter_article(stock, nb_articles);
break;
case 5:
afficher_resume(stock, nb_articles);
break;
case 6:
sauvegarder_stock(stock, nb_articles);
break;
case 7:
charger_stock(&stock, &nb_articles, &taille_max);
break;
case 0:
printf("Au revoir !\n");
break;
default:
printf("Option invalide\n");
break;
}
} while (choix != 0);
free(stock);
return 0;
}
Affiche le menu principal du programme.
void afficher_menu() {
printf("\n------------------MENU------------------\n");
printf("1: Ajouter un nouvel article\n");
printf("2: Vendre un article\n");
printf("3: Acheter de nouveaux stocks\n");
printf("4: Consulter les informations d'un article\n");
printf("5: Afficher le résumé du stock\n");
printf("6: Sauvegarder l'état des stocks\n");
printf("7: Charger l'état des stocks depuis un fichier\n");
printf("0: Quitter le programme\n");
printf("-----------------------------------------\n");
}
Ajoute un nouvel article au stock.
void ajouter_article(Article** stock, int* nb_articles, int* taille_max) {
if (*nb_articles == *taille_max) {
*taille_max *= 2;
*stock = realloc(*stock, *taille_max * sizeof(Article));
if (*stock == NULL) {
printf("Erreur de réallocation mémoire\n");
exit(1);
}
}
Article nouvel_article;
printf("Nom de l'article : ");
fgets(nouvel_article.nom, TAILLE_NOM, stdin);
nouvel_article.nom[strcspn(nouvel_article.nom, "\n")] = 0;
printf("Code-barres : ");
fgets(nouvel_article.code_barres, TAILLE_CODE, stdin);
nouvel_article.code_barres[strcspn(nouvel_article.code_barres, "\n")] = 0;
printf("Prix unitaire : ");
scanf("%f", &nouvel_article.prix);
getchar();
printf("Quantité initiale : ");
scanf("%d", &nouvel_article.quantite);
getchar();
for (int i = 0; i < *nb_articles; i++) {
if (strcmp((*stock)[i].code_barres, nouvel_article.code_barres) == 0) {
printf("Erreur : l'article existe déjà.\n");
return;
}
}
(*stock)[*nb_articles] = nouvel_article;
(*nb_articles)++;
printf("Article ajouté avec succès !\n");
}
Gère la vente d'un article en vérifiant la quantité disponible.
void vendre_article(Article* stock, int* nb_articles) {
char code_barres[TAILLE_CODE];
printf("Code-barres de l'article à vendre : ");
fgets(code_barres, TAILLE_CODE, stdin);
code_barres[strcspn(code_barres, "\n")] = 0;
int quantite_vendre;
printf("Quantité à vendre : ");
scanf("%d", &quantite_vendre);
getchar();
for (int i = 0; i < *nb_articles; i++) {
if (strcmp(stock[i].code_barres, code_barres) == 0) {
if (stock[i].quantite >= quantite_vendre) {
stock[i].quantite -= quantite_vendre;
printf("Vente réussie. Quantité restante : %d\n", stock[i].quantite);
return;
} else {
printf("Quantité insuffisante en stock.\n");
return;
}
}
}
printf("Article non trouvé.\n");
}
Augmente la quantité d'un article existant.
void acheter_article(Article* stock, int nb_articles) {
char code_barres[TAILLE_CODE];
printf("Code-barres de l'article à acheter : ");
fgets(code_barres, TAILLE_CODE, stdin);
code_barres[strcspn(code_barres, "\n")] = 0;
int quantite_acheter;
printf("Quantité à acheter : ");
scanf("%d", &quantite_acheter);
getchar();
for (int i = 0; i < nb_articles; i++) {
if (strcmp(stock[i].code_barres, code_barres) == 0) {
stock[i].quantite += quantite_acheter;
printf("Achats réussis. Quantité actuelle : %d\n", stock[i].quantite);
return;
}
}
printf("Article non trouvé.\n");
}
Affiche les informations d'un article spécifique.
void consulter_article(Article* stock, int nb_articles) {
char code_barres[TAILLE_CODE];
printf("Code-barres de l'article à consulter : ");
fgets(code_barres, TAILLE_CODE, stdin);
code_barres[strcspn(code_barres, "\n")] = 0;
for (int i = 0; i < nb_articles; i++) {
if (strcmp(stock[i].code_barres, code_barres) == 0) {
printf("Nom : %s\nPrix unitaire : %.2f\nQuantité restante : %d\n",
stock[i].nom, stock[i].prix, stock[i].quantite);
return;
}
}
printf("Article non trouvé.\n");
}
Affiche un résumé des articles en stock.
void afficher_resume(Article* stock, int nb_articles) {
int total_articles = 0;
int quantite_totale = 0;
float valeur_totale = 0.0;
printf("\nRésumé du stock :\n");
for (int i = 0; i < nb_articles; i++) {
total_articles++;
quantite_totale += stock[i].quantite;
valeur_totale += stock[i].quantite * stock[i].prix;
if (stock[i].quantite == 0) {
printf("Article en rupture de stock : %s (Code-barres: %s)\n", stock[i].nom, stock[i].code_barres);
}
}
printf("Nombre total d'articles différents : %d\n", total_articles);
printf("Quantité totale d'articles : %d\n", quantite_totale);
printf("Valeur totale du stock : %.2f\n", valeur_totale);
}
Sauvegarde les stocks dans un fichier binaire.
void sauvegarder_stock(Article* stock, int nb_articles) {
char nom_fichier[100];
printf("Nom du fichier de sauvegarde : ");
fgets(nom_fichier, 100, stdin);
nom_fichier[strcspn(nom_fichier, "\n")] = 0;
FILE* fichier = fopen(nom_fichier, "wb");
if (fichier == NULL) {
printf("Erreur d'ouverture du fichier\n");
return;
}
fwrite(&nb_articles, sizeof(int), 1, fichier);
fwrite(stock, sizeof(Article), nb_articles, fichier);
fclose(fichier);
printf("État des stocks sauvegardé avec succès.\n");
}
Charge les stocks depuis un fichier binaire.
void charger_stock(Article** stock, int* nb_articles, int* taille_max) {
char nom_fichier[100];
printf("Nom du fichier de chargement : ");
fgets(nom_fichier, 100, stdin);
nom_fichier[strcspn(nom_fichier, "\n")] = 0;
FILE* fichier = fopen(nom_fichier, "rb");
if (fichier == NULL) {
printf("Erreur d'ouverture du fichier\n");
return;
}
fread(nb_articles, sizeof(int), 1, fichier);
*taille_max = *nb_articles;
*stock = realloc(*stock, *taille_max * sizeof(Article));
if (*stock == NULL) {
printf("Erreur de réallocation mémoire\n");
fclose(fichier);
exit(1);
}
fread(*stock, sizeof(Article), *nb_articles, fichier);
fclose(fichier);
printf("État des stocks chargé avec succès.\n");
}
Implémente des algorithmes de tri pour trier les articles par nom et par quantité.
void trier_stock_par_nom(Article* stock, int nb_articles) {
for (int i = 0; i < nb_articles - 1; i++) {
for (int j = i + 1; j < nb_articles; j++) {
if (strcmp(stock[i].nom, stock[j].nom) > 0) {
Article temp = stock[i];
stock[i] = stock[j];
stock[j] = temp;
}
}
}
}
void trier_stock_par_quantite(Article* stock, int nb_articles) {
for (int i = 0; i < nb_articles - 1; i++) {
for (int j = i + 1; j < nb_articles; j++) {
if (stock[i].quantite < stock[j].quantite) {
Article temp = stock[i];
stock[i] = stock[j];
stock[j] = temp;
}
}
}
}
Ajouter un commentaire
Veuillez vous connecter pour ajouter un commentaire.
Pas encore de commentaires.