#include <stdio.
h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void creer_caissiere() {
char nom[50], mdp[50];
printf("Nom de la caissière: ");
scanf("%s", nom);
printf("Mot de passe: ");
scanf("%s", mdp);
FILE *f = fopen("caissieres.txt", "a");
if (f == NULL) {
printf("Erreur d'ouverture du fichier.\n");
return;
}
fprintf(f, "%s,%s\n", nom, mdp);
fclose(f);
printf("Caissière créée avec succès.\n\n");
}
void ajouter_produit() {
char nom[50];
int quantite;
float prix;
printf("Nom du produit: ");
scanf("%s", nom);
printf("Quantité: ");
scanf("%d", &quantite);
printf("Prix unitaire: ");
scanf("%f", &prix);
FILE *f = fopen("stock.txt", "a");
if (f == NULL) {
printf("Erreur d'ouverture du fichier.\n");
return;
}
fprintf(f, "%s,%d,%.2f\n", nom, quantite, prix);
fclose(f);
printf("Produit ajouté avec succès.\n\n");
}
void afficher_stock() {
FILE *f = fopen("stock.txt", "r");
if (f == NULL) {
printf("Stock vide ou fichier introuvable.\n");
return;
}
char ligne[100];
printf("\n--- STOCK ACTUEL ---\n");
while (fgets(ligne, sizeof(ligne), f)) {
char nom[50];
int quantite;
float prix;
sscanf(ligne, "%[^,],%d,%f", nom, &quantite, &prix);
printf("%s - %d unités - %.2f FCFA\n", nom, quantite, prix);
}
fclose(f);
printf("\n");
}
void effectuer_vente() {
char nomClient[50], prenom[50], contact[50];
printf("Nom client: ");
scanf("%s", nomClient);
printf("Prénom client: ");
scanf("%s", prenom);
printf("Contact client: ");
scanf("%s", contact);
FILE *stock = fopen("stock.txt", "r");
if (stock == NULL) {
printf("Aucun produit en stock.\n");
return;
}
FILE *temp = fopen("temp.txt", "w");
if (temp == NULL) {
printf("Erreur d'ouverture du fichier temporaire.\n");
fclose(stock);
return;
}
char nomFichier[100];
sprintf(nomFichier, "facture_%s_%s.txt", nomClient, prenom);
FILE *facture = fopen(nomFichier, "w");
if (facture == NULL) {
printf("Erreur d'ouverture du fichier de facture.\n");
fclose(stock);
fclose(temp);
return;
}
char produit[50];
int qteDemandee;
float total = 0;
char ligne[100];
time_t now = time(NULL);
struct tm *t = localtime(&now);
fprintf(facture, "Client: %s %s\nContact: %s\nDate: %02d-%02d-%d %02d:%02d:%02d\nProduits:\n",
nomClient, prenom, contact,
t->tm_mday, t->tm_mon + 1, t->tm_year + 1900,
t->tm_hour, t->tm_min, t->tm_sec);
while (1) {
printf("Produit à acheter (ou 'fin' pour terminer): ");
scanf("%s", produit);
if (strcmp(produit, "fin") == 0) break;
printf("Quantité: ");
scanf("%d", &qteDemandee);
rewind(stock);
int trouve = 0;
while (fgets(ligne, sizeof(ligne), stock)) {
char nom[50];
int quantite;
float prix;
sscanf(ligne, "%[^,],%d,%f", nom, &quantite, &prix);
if (strcmp(nom, produit) == 0 && quantite>= qteDemandee) {
quantite -= qteDemandee;
total += qteDemandee * prix;
fprintf(temp, "%s,%d,%.2f\n", nom, quantite, prix);
fprintf(facture, " - %s x %d = %.2f FCFA\n", nom, qteDemandee, qteDemandee * prix);
trouve = 1;
} else {
fprintf(temp, "%s,%d,%.2f\n", nom, quantite, prix);
}
}
if (!trouve) {
printf("Produit introuvable ou quantité insuffisante.\n");
}
}
fprintf(facture, "TOTAL: %.2f FCFA\n", total);
fflush(facture); // s'assurer que les données sont bien écrites
fclose(stock);
fclose(temp);
fclose(facture);
remove("stock.txt");
rename("temp.txt", "stock.txt");
printf("Vente enregistrée avec succès.\n");
printf("Facture générée: %s\n\n", nomFichier);
}
int main() {
int choix;
do {
printf("\n=== MENU PRINCIPAL ===\n");
printf("1. Créer une caissière\n");
printf("2. Ajouter un produit\n");
printf("3. Afficher le stock\n");
printf("4. Effectuer une vente\n");
printf("5. Quitter\n");
printf("Choix: ");
scanf("%d", &choix);
switch (choix) {
case 1: creer_caissiere(); break;
case 2: ajouter_produit(); break;
case 3: afficher_stock(); break;
case 4: effectuer_vente(); break;
case 5: printf("Au revoir!\n"); break;
default: printf("Choix invalide.\n"); break;
}
} while (choix!= 5);
return 0;
}