Application en langage C sur la gestion de stock
Application en langage C sur la gestion de stock
Cet article propose en détaille un programme en langage C sur la gestion de stock. Il permet de voir le stock en cours des produits, et aussi de voir l'historiques des entrées et des sorties jour par jour sur le mois, puis mois par mois. Il garde ensuite en archive les historiques.
Il contient également la gestion d'une base de données, ainsi que l'utilisation du TAB control.
Vous pourrez télécharger le fichier au format zip il contient le code sources complet.
Extrait du code :
#include "main.h"
#import "C:\\Program Files\\Fichiers communs\\System\\ADO\\msado15.dll" no_namespace rename("EOF", "EndOfFile") rename("BOF", "BeginOfFile")
//Variables
HINSTANCE hInstance;
HWND hCtrl;
HWND MainDlg;
static HWND m_aChildTab[5]; // dialogues enfants pour les onglets du TabCtrl
static HINSTANCE m_hInstance; // instance de l'application
void DisplayLastError(HWND hOwner);
// Pointeur connexion et recordset
_ConnectionPtr pConn = NULL;
_RecordsetPtr pRs = NULL;
// Chaine de connexion
PCHAR szChaineConnexion1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Donnees.mdb";
PCHAR szChaine = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
char szChaineConnexion[128];
char BaseFileName[128];
char BaseDirectoryName[128];
char buf[256];
char name[64];
int sortie=1;
int menu=1;
char requete[256];
int day;
int month;
int year;
char date[50];
char mois[10];
bool baseOpen=false;
float TabLeft, TabTop;
struct RequeteData data[4];
struct InitOle
{
InitOle(){CoInitialize(NULL);}
~InitOle(){CoUninitialize();}
}_init_InitOle_;
static void UpdateChildTab(HWND);
bool SetIconApp(const char *szAppName,const char *szPathIcon)
{
HKEY hKey=NULL;
long ret;
// Création de la racine szAppName
if(RegCreateKey(HKEY_CLASSES_ROOT, szAppName, &hKey)!=ERROR_SUCCESS) return false;
ret = RegSetValue(hKey, "DefaultIcon", REG_SZ,szPathIcon,MAX_PATH);
if(ret==ERROR_SUCCESS) RegCloseKey(hKey);
return (ret==ERROR_SUCCESS);
}
//**************************************************************************//Initialisation de fenêtre windows
//**************************************************************************
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
m_hInstance = hInstance;
InitCommonControls();
//Pour afficher la date
time_t t;
struct tm * pdh;
t = time(NULL);
pdh = localtime(&t);
day=pdh->tm_mday; /* jour du mois, en chiffres */
month=pdh->tm_mon+1; /* mois */
year=1900+pdh->tm_year; /*année*/;
sprintf(date,"%d-%d-%d",day,month,year);
if (month==1) strcpy(mois,"janvier");
if (month==2) strcpy(mois,"février");
if (month==3) strcpy(mois,"mars");
if (month==4) strcpy(mois,"avril");
if (month==5) strcpy(mois,"mai");
if (month==6) strcpy(mois,"juin");
if (month==7) strcpy(mois,"juillet");
if (month==8) strcpy(mois,"août");
if (month==9) strcpy(mois,"septembre");
if (month==10) strcpy(mois,"octobre");
if (month==11) strcpy(mois,"novembre");
if (month==12) strcpy(mois,"décembre");
//Icone du prgramme
SetIconApp ("Gestion stock","C:\\Documents and Settings\\Propriétaire\\Bureau\\programmation\\perso\\projet perso\\gestion stock\\icone.ico");
do
{
if (menu==1)
{
DialogBox(hInstance,(LPCTSTR)IDD_MENU,NULL,(DLGPROC)MainProc); //menu princip
menu=0;
}
}while (sortie==1);
return 0;
}
//**************************************************************************
//MENU PRINCIPAL
//**************************************************************************
// Procédure de gestion de la boite de dialogue
LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
{
int Select;
int line, bilan;
HANDLE file;
switch(message)
{
case WM_INITDIALOG:
MainDlg=Dlg;
// Initialisation de la boite de dialogue en plein écran
ShowWindow(Dlg, SW_MAXIMIZE);
RECT rect;
float x, y, sizeX, sizeY;
GetWindowRect(Dlg, &rect);
//Le tabcontrol
hCtrl = GetDlgItem(Dlg, IDC_TABCTRL);
x = (rect.right-rect.left)*0.33;
y = (rect.bottom-rect.top)*0.1;
sizeX = 2*x;
sizeY = rect.bottom*0.75;
MoveWindow(hCtrl,x, y, sizeX, sizeY, TRUE);
//Texte "Nom de la base ouverte"
hCtrl = GetDlgItem(Dlg, IDC_TEXT1);
x = (rect.right-rect.left)*0.5;
y = rect.top+30;
sizeX = 200;
sizeY = 30;
MoveWindow(hCtrl,x, y, sizeX, sizeY, TRUE);
//Listbox du nom de la base ouverte
hCtrl = GetDlgItem(Dlg, IDC_NOM_BASE);
x+= sizeX;
y = rect.top+30;
sizeX = 160;
sizeY = 30;
MoveWindow(hCtrl,x, y, sizeX, sizeY, TRUE);
//Listbox de la liste des produits
hCtrl = GetDlgItem(Dlg, IDC_LIST);
x= (rect.right-rect.left)*0.05;
y = (rect.bottom-rect.top)*0.1;
sizeX = (rect.right-rect.left)*0.2;
sizeY = (rect.bottom-rect.top)*0.6;
MoveWindow(hCtrl,x, y, sizeX, sizeY, TRUE);
//editbox de la recherche de produit
hCtrl = GetDlgItem(Dlg, IDC_SEARCH);
y = (rect.bottom-rect.top)*0.78;
sizeY = 30;
MoveWindow(hCtrl,x, y, sizeX, sizeY, TRUE);
//Texte "Liste des produits"
hCtrl = GetDlgItem(Dlg, IDC_TEXT2);
x+= sizeX/8;
y= (rect.bottom-rect.top)*0.05;
sizeX *= 0.75;
sizeY = 25;
MoveWindow(hCtrl,x, y, sizeX, sizeY, TRUE);
//Texte "Nom recherché"
hCtrl = GetDlgItem(Dlg, IDC_TEXT3);
y= (rect.bottom-rect.top)*0.735;
MoveWindow(hCtrl,x, y, sizeX, sizeY, TRUE);
//boutton de la recherche des produits
hCtrl = GetDlgItem(Dlg, IDC_SEARCHBTN);
y= (rect.bottom-rect.top)*0.84;
sizeY = 30;
MoveWindow(hCtrl,x, y, sizeX, sizeY, TRUE);
//Boutton Quitter
hCtrl = GetDlgItem(Dlg, IDCANCEL);
x= (rect.right-rect.left)*0.85;
y= (rect.bottom-rect.top)*0.87;
sizeX = 100;
sizeY = 30;
MoveWindow(hCtrl,x, y, sizeX, sizeY, TRUE);
//On met la menu au 1er plan(important pour quand on vient du prog MAJ stock auto)
SetForegroundWindow(Dlg);
// création des dialogues enfants
m_aChildTab[0] = CreateDialog(m_hInstance, MAKEINTRESOURCE(IDD_STOCK), Dlg, StockProc);
m_aChildTab[1] = CreateDialog(m_hInstance, MAKEINTRESOURCE(IDD_HISTORIQUE), Dlg, HistoriqueProc);
m_aChildTab[2] = CreateDialog(m_hInstance, MAKEINTRESOURCE(IDD_HISTORIQUE_MOIS), Dlg, HistoriqueMoisProc);
m_aChildTab[3] = CreateDialog(m_hInstance, MAKEINTRESOURCE(IDD_ARCHIVES), Dlg, ArchivesProc);
m_aChildTab[4] = CreateDialog(m_hInstance, MAKEINTRESOURCE(IDD_NEWPRODUIT), Dlg, NewProduitProc);
// ajout des onglets
HWND hTabCtrl;
hTabCtrl = GetDlgItem(Dlg, IDC_TABCTRL);
TCITEM tci;
tci.mask = TCIF_TEXT;
tci.pszText = "Stock";
SendMessage(hTabCtrl, TCM_INSERTITEM, 0, (LPARAM) &tci);
tci.pszText = "Historique";
SendMessage(hTabCtrl, TCM_INSERTITEM, 1, (LPARAM) &tci);
tci.pszText = "Historique mois";
SendMessage(hTabCtrl, TCM_INSERTITEM, 2, (LPARAM) &tci);
tci.pszText = "Archives";
SendMessage(hTabCtrl, TCM_INSERTITEM, 3, (LPARAM) &tci);
tci.pszText = "Ajouter un produit";
SendMessage(hTabCtrl, TCM_INSERTITEM, 4, (LPARAM) &tci);
// détermination du rectangle où placer les dialogues enfants à partir du rectangle
// du tabctrl, conversion dans le systemde coordonnée de la boîte de dialogue parente
RECT rcTabCtrl;
GetWindowRect(hTabCtrl, &rcTabCtrl);
TabLeft=rcTabCtrl.left;
TabTop=rcTabCtrl.top;
SendMessage(hTabCtrl, TCM_ADJUSTRECT, FALSE, (LPARAM) &rcTabCtrl);
MapWindowPoints(NULL, Dlg, (LPPOINT) &rcTabCtrl, 2);