pour mes filles, je souhaite faire un logiciel de cuisine où elle pourront entrer leurs recettes qui seront sauvegardées dans une base de données *.JSON.
Le problème qui me fait venir vers vous pour solliciter votre aide, c'est que le nombre d'ingrédients n'est pas le même pour toutes les recettes, je les ai limités à 20, mais dois-je utiliser un tableau ou une liste ?
Pour le tableau, les entrées vides occupent la mémoire inutilement, mais je ne vois pas comment utiliser une liste dans mon cas, c'est pourquoi je vous propose de m'aider à trouver la solution et je vous en remercie par anticipation.
Voici mon code pour le moment:
Code : Tout sélectionner
;Recettes de cuisine
Enumeration Fenetres
#Fenetre_principale
EndEnumeration
Enumeration Menus
#Menu
EndEnumeration
Enumeration Elements_Menu
#Menu_ApplePie
#Menu_EntreeFraiche
#Menu_BlanquetteDeVeau_Maison
#Menu_BoeufBourguignon_Rapide
#Menu_BoeufBourguignon
EndEnumeration
Enumeration Gadgets
#Img
#Str_Ingredients
#Txt_Nbre_pers
#Str_Nbre_pers
#Txt_pers_recalculees
#Str_pers_recalculees
#Edt
#Str_Nom_recette
#Txt_Signature
EndEnumeration
Enumeration #PB_Compiler_EnumerationValue Step 20
#Str_Ing_Qt
EndEnumeration
Enumeration #PB_Compiler_EnumerationValue Step 20
#Str_Ing_Alim
EndEnumeration
Enumeration
#ID_Img
EndEnumeration
Enumeration Polices
#Police_1
#Police_2
EndEnumeration
Structure Composant
Quantite.f
Aliment.s
EndStructure
UseJPEGImageDecoder()
Global Evenement, Nb_Pers
Global.composant Dim Ing(19)
Global Titre$, Recette$, FichierImage$ = #PB_Compiler_FilePath + "Images\Cuisto.jpg"
LoadFont(#Police_1, "Arial", 12, #PB_Font_Bold)
LoadFont(#Police_2, "Arial", 25, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#Police_1))
Procedure.f CalculerProportion(NbRef.f, QteRef.f, NbChoisi.f)
Proportion.f = (NbChoisi * QteRef) / NbRef
ProcedureReturn Proportion
EndProcedure
Procedure Calculs()
Protected Resultat
;CalculerProportionEntiere(NbRef.f, QteRef.f, NbChoisi.f)
If Val(GetGadgetText(#Str_pers_recalculees)) > 0
For i = 0 To ArraySize(Ing())
SetGadgetText(#Str_Ing_Qt + i, StrF(CalculerProportion(Val(GetGadgetText(#Str_Nbre_pers)), Ing(i)\Quantite, Val(GetGadgetText(#Str_pers_recalculees)))))
Next i
EndIf
EndProcedure
Procedure Mise_a_jour_Gadgets()
SetGadgetText(#Str_Nom_recette, Titre$)
SetGadgetText(#Str_Nbre_pers, Str(Nb_Pers))
For i = 0 To ArraySize(Ing())
SetGadgetText(#Str_Ing_Qt + i, StrF(Ing(i)\Quantite))
SetGadgetText(#Str_Ing_Alim + i, Ing(i)\Aliment)
Next i
SetGadgetText(#Edt, Recette$)
For i = #Str_Ing_Qt To #Str_Ing_Qt + 19
If ValF(GetGadgetText(i)) < 0.1
HideGadget(i, 1)
EndIf
Next i
For i = #Str_Ing_Alim To #Str_Ing_Alim + 19
If GetGadgetText(i) = ""
HideGadget(i, 1)
EndIf
Next i
SetGadgetFont(#Str_Nom_recette, FontID(#Police_2))
EndProcedure
Procedure Programme_principal()
If OpenWindow(#Fenetre_principale, 0, 0, 1380, 810, "Recettes de cuisine par Micoute", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
;{ Menu
If CreateMenu(#Menu, WindowID(#Fenetre_principale))
MenuTitle("Recettes")
OpenSubMenu("Entrées")
MenuItem(#Menu_EntreeFraiche, "Entrée fraîche")
CloseSubMenu()
OpenSubMenu("Cocotte")
CloseSubMenu()
OpenSubMenu("Poisson")
CloseSubMenu()
OpenSubMenu("Plat traditionnel")
MenuItem(#Menu_BlanquetteDeVeau_Maison, "Blanquette de veau maison")
MenuItem(#Menu_BoeufBourguignon_Rapide, "Boeuf bourguignon rapide")
MenuItem(#Menu_BoeufBourguignon, "Boeuf bourguignon")
CloseSubMenu()
OpenSubMenu("Légumes")
CloseSubMenu()
OpenSubMenu("Cakes salés")
CloseSubMenu()
OpenSubMenu("Papillottes")
CloseSubMenu()
OpenSubMenu("Lapin")
CloseSubMenu()
OpenSubMenu("Gratins")
CloseSubMenu()
OpenSubMenu("Champignons")
CloseSubMenu()
OpenSubMenu("Poulet")
CloseSubMenu()
OpenSubMenu("Fromage")
CloseSubMenu()
OpenSubMenu("Pomme de terre")
CloseSubMenu()
OpenSubMenu("Cuisine à pas cher")
CloseSubMenu()
OpenSubMenu("Tartes et tartelettes")
MenuItem(#Menu_ApplePie, "American pie pomme cannelle")
CloseSubMenu()
MenuBar()
OpenSubMenu("Recettes sucrées")
CloseSubMenu()
OpenSubMenu("Desserts chocolatés")
CloseSubMenu()
OpenSubMenu("Cakes sucrés")
CloseSubMenu()
OpenSubMenu("Crèmes dessert")
CloseSubMenu()
OpenSubMenu("Desserts fruités")
CloseSubMenu()
OpenSubMenu("Pomme")
CloseSubMenu()
OpenSubMenu("Gâteaux")
CloseSubMenu()
OpenSubMenu("Petites faims")
CloseSubMenu()
OpenSubMenu("avec de la chicorée")
CloseSubMenu()
OpenSubMenu("Goûter")
CloseSubMenu()
OpenSubMenu("Dessetrs traditionnels")
CloseSubMenu()
OpenSubMenu("Moelleux")
CloseSubMenu()
OpenSubMenu("Clafoutis et gratins sucrés")
CloseSubMenu()
EndIf
;}
TextGadget(#Txt_Nbre_pers, 10, 10, 170, 20, "Nombre de personnes", #PB_Text_Right|#SS_CENTERIMAGE)
StringGadget(#Str_Nbre_pers, 190, 10, 30, 20, "") ;la recette est prévue pour X personnes
TextGadget(#Txt_pers_recalculees, 10, 35, 170, 20, "Nombre recalculé", #PB_Text_Right|#SS_CENTERIMAGE)
StringGadget(#Str_pers_recalculees, 190, 35, 30, 20, "") ;Je veux faire la recette pour Y personnes
;Partie à commenter s'il n'y a pas d'image
;LoadImage(#Img, FichierImage$)
;ResizeImage(#img, 345, 345)
;ImageGadget(#Img, 10, 60, 345, 345, ImageID(#ID_Img), #PB_Image_Raised)
;StringGadget(#Str_Nom_recette, ImageWidth(#img) + 20, 10, 935, 45, "", #PB_String_ReadOnly|#ES_CENTER)
;EditorGadget(#Edt, ImageWidth(#img) + 20, 60, 935, 350)
StringGadget(#Str_Nom_recette, 370, 10, 1000, 45, "", #ES_CENTER)
EditorGadget(#Edt, 370, 60, 1000, 350)
;ResizeWindow(#Fenetre_principale, #PB_Ignore, #PB_Ignore, ImageWidth(#img) + 20 + GadgetWidth(#Edt) + 10, #PB_Ignore)
;{ Ingrédients
StringGadget(#Str_Ingredients, 10, 420, 100, 25, "Ingrédients", #SS_CENTERIMAGE)
StringGadget(#Str_Ing_Qt, 10, 450, 70, 25, "")
StringGadget(#Str_Ing_Qt+ 1, 10, 480, 70, 25, "")
StringGadget(#Str_Ing_Qt+ 2, 10, 510, 70, 25, "")
StringGadget(#Str_Ing_Qt+ 3, 10, 540, 70, 25, "")
StringGadget(#Str_Ing_Qt+ 4, 10, 570, 70, 25, "")
StringGadget(#Str_Ing_Qt+ 5, 10, 600, 70, 25, "")
StringGadget(#Str_Ing_Qt+ 6, 10, 630, 70, 25, "")
StringGadget(#Str_Ing_Qt+ 7, 10, 660, 70, 25, "")
StringGadget(#Str_Ing_Qt+ 8, 10, 690, 70, 25, "")
StringGadget(#Str_Ing_Qt+ 9, 10, 720, 70, 25, "")
StringGadget(#Str_Ing_Qt+10, 660, 450, 70, 25, "")
StringGadget(#Str_Ing_Qt+11, 660, 480, 70, 25, "")
StringGadget(#Str_Ing_Qt+12, 660, 510, 70, 25, "")
StringGadget(#Str_Ing_Qt+13, 660, 540, 70, 25, "")
StringGadget(#Str_Ing_Qt+14, 660, 570, 70, 25, "")
StringGadget(#Str_Ing_Qt+15, 660, 600, 70, 25, "")
StringGadget(#Str_Ing_Qt+16, 660, 630, 70, 25, "")
StringGadget(#Str_Ing_Qt+17, 660, 660, 70, 25, "")
StringGadget(#Str_Ing_Qt+18, 660, 690, 70, 25, "")
StringGadget(#Str_Ing_Qt+19, 660, 720, 70, 25, "")
StringGadget(#Str_Ing_Alim, 90, 450, 560, 25, "")
StringGadget(#Str_Ing_Alim+1, 90, 480, 560, 25, "")
StringGadget(#Str_Ing_Alim+2, 90, 510, 560, 25, "")
StringGadget(#Str_Ing_Alim+3, 90, 540, 560, 25, "")
StringGadget(#Str_Ing_Alim+4, 90, 570, 560, 25, "")
StringGadget(#Str_Ing_Alim+5, 90, 600, 560, 25, "")
StringGadget(#Str_Ing_Alim+6, 90, 630, 560, 25, "")
StringGadget(#Str_Ing_Alim+7, 90, 660, 560, 25, "")
StringGadget(#Str_Ing_Alim+8, 90, 690, 560, 25, "")
StringGadget(#Str_Ing_Alim+9, 90, 720, 560, 25, "")
StringGadget(#Str_Ing_Alim+10, 740, 450, 560, 25, "")
StringGadget(#Str_Ing_Alim+11, 740, 480, 560, 25, "")
StringGadget(#Str_Ing_Alim+12, 740, 510, 560, 25, "")
StringGadget(#Str_Ing_Alim+13, 740, 540, 560, 25, "")
StringGadget(#Str_Ing_Alim+14, 740, 570, 560, 25, "")
StringGadget(#Str_Ing_Alim+15, 740, 600, 560, 25, "")
StringGadget(#Str_Ing_Alim+16, 740, 630, 560, 25, "")
StringGadget(#Str_Ing_Alim+17, 740, 660, 560, 25, "")
StringGadget(#Str_Ing_Alim+18, 740, 690, 560, 25, "")
StringGadget(#Str_Ing_Alim+19, 740, 720, 560, 25, "")
;}
TextGadget(#Txt_Signature, 10, 750, WindowWidth(#Fenetre_principale) - 20, 40, "Recettes de cuisines par Micoute © 2017", #PB_Text_Center|#SS_CENTERIMAGE)
;{ Polices et couleurs
SetGadgetFont(#Str_Nom_recette, FontID(#Police_2))
SetGadgetFont(#Txt_Signature, FontID(#Police_2))
SetWindowColor(#Fenetre_principale, $79F689)
SetGadgetColor(#Txt_Signature, #PB_Gadget_BackColor, $79F689)
;}
EndIf
EndProcedure
Programme_principal()
;- Boucle
Repeat
Evenement = WaitWindowEvent()
Select Evenement
Case #PB_Event_Gadget
Select EventGadget()
Case #Str_Nbre_pers
Mise_a_jour_Gadgets()
Case #Str_pers_recalculees
Calculs()
EndSelect
Case #PB_Event_Menu
Select EventMenu()
;- American pie
Case #Menu_ApplePie
Titre$ = "American pie pomme cannelle"
Nb_Pers = 4
Ing(0)\Quantite = 2 : ing(0)\Aliment = "pâtes feuilletées"
ing(1)\Quantite = 4 : ing(1)\Aliment = "pommes golden"
ing(2)\Quantite = 1 : ing(2)\Aliment = "c. à café de canelle en poudre"
ing(3)\Quantite = 120 : ing(3)\Aliment = "grammes de sucre"
ing(4)\Quantite = 1 : Ing(4)\Aliment = "jaune d'oeuf"
Recette$ = "Déroulez la pâte dans un moule à tarte en gardant le papier."+#CRLF$+
"Piquez-la avec une fourchette. Puis lavez, épluchez, coupez et épépinez les pommes. Râpez-les dans un saladier."+#CRLF$+#CRLF$+
"Ajoutez 120 grammes de sucre et une cuillère a café de cannelle et mélangez délicatement pour ne pas abimer les pommes."+#CRLF$+
"Laissez poser 5 à 10 mn jusqu'a ce qu'un sirop se forme au fond du saladier."+#CRLF$+#CRLF$+
"Pendant ce temps préchauffez le four thermostat 7"+#CRLF$+
"Répartissez le mélange sur la pâte avant de recouvrir le tout de la deuxième. N'oubliez pas de tracer des traits avec"+#CRLF$+
"la pointe du couteau sur le dessus. Le jaune d'œuf donnera un aspect plus doré. Enfournez une demi-heure."+#CRLF$+
"Sitôt la tarte sortie du four retirez le papier et laissez refroidir avant de ...déguster!"
;FichierImage$ = #PB_Compiler_FilePath + "Images\apple-pie.jpg"
Mise_a_jour_Gadgets()
;- Entrée fraiche
Case #Menu_EntreeFraiche
Titre$ = "Entrée fraîcheur"
Nb_Pers = 6
Ing(0)\Quantite = 3:Ing(0)\Aliment = "tomates"
Ing(1)\Quantite = 200:Ing(1)\Aliment = "g de fromage frais"
Ing(2)\Quantite = 4:Ing(2)\Aliment = "cuillères à soupe de crème fraîche épaisse"
Ing(3)\Quantite = 3:Ing(3)\Aliment = "tranches de jambon"
Ing(4)\Quantite = 6:Ing(4)\Aliment = "feuilles de basilic frais"
Recette$ = "Préparation :"+#CRLF$+#CRLF$+
"Disposez un morceau de jambon au fond de la tomate."+#CRLF$+#CRLF$+
"Mélangez la crème fraîche et le fromage dans un bol."+#CRLF$+#CRLF$+
"Mettez-en environ une cuiller à soupe dans chaque moitié de tomate."+#CRLF$+#CRLF$+
"Ajoutez un deuxième morceau de jambon au-dessus de la crème de fromage. Puis déposez une feuille de basilic."+#CRLF$+#CRLF$+
"Assaisonnez, puis dégustez !"
;FichierImage$ = #PB_Compiler_FilePath + "Images\Entrée fraicheur.jpg"
Mise_a_jour_Gadgets()
;- Blanquette de veau
Case #Menu_BlanquetteDeVeau_Maison
Titre$ = "Blanquette de veau maison"
Nb_Pers = 6 ;Ingrédients (pour 6 ou 7 personnes) :
Ing(0)\Quantite = 1.2 : Ing(0)\Aliment = "Kg d'épaule ou de tendron de veau coupé en morceaux"
Ing(1)\Quantite = 1 : Ing(1)\Aliment = "carotte"
Ing(2)\Quantite = 2 : Ing(2)\Aliment = "blancs de poireaux"
Ing(3)\Quantite = 1 : Ing(3)\Aliment = "gros oignon"
Ing(4)\Quantite = 1 : Ing(4)\Aliment = "gousse d'ail"
Ing(5)\Quantite = 2 : Ing(5)\Aliment = "échalotes"
Ing(6)\Quantite = 1 : Ing(6)\Aliment = "brin de céleri"
Ing(7)\Quantite = 1 : Ing(7)\Aliment = "bouquet garni"
Ing(8)\Quantite = 1 : Ing(8)\Aliment = "bouquet de persil"
Ing(9)\Quantite = 1 : Ing(9)\Aliment = "citron"
Ing(10)\Quantite = 300 : Ing(10)\Aliment = "g de champignons de Paris"
Ing(11)\Quantite = 3 : Ing(11)\Aliment = "cuillères à soupe de vin blanc sec"
Ing(12)\Quantite = 2 : Ing(12)\Aliment = "jaunes d'oeufs"
Ing(13)\Quantite = 1 : Ing(13)\Aliment = "dl de crème fraîche"
Ing(14)\Quantite = 1 : Ing(14)\Aliment = "cuillère à soupe de farine"
Ing(15)\Quantite = 70 : Ing(15)\Aliment = "g de beurre"
Recette$ = "Préparation :"+#CRLF$+#CRLF$+
"Pelez carotte, ail, échalotes et oignon."+#CRLF$+#CRLF$+
"Hachez ce dernier ainsi que les blancs de poireaux."+#CRLF$+#CRLF$+
"Coupez les échalotes et la carotte en deux."+#CRLF$+#CRLF$+
"Portez à ébullition 2 litres d'eau dans un grand faitout, plongez-y les morceaux de viande pendant environ une minute"+#CRLF$+
"pour les blanchir (blanchir la viande permet d'éliminer les éventuelles impuretés tout en la rendant plus ferme)."+#CRLF$+#CRLF$+
"Égouttez la viande, rincez-la sous l'eau froide et jetez l'eau de cuisson."+#CRLF$+#CRLF$+
"Replacez la viande dans le faitout rincé."+#CRLF$+#CRLF$+
"Ajoutez oignon et poireaux hachés, carottes, échalotes, ail, céleri et bouquet garni."+#CRLF$+#CRLF$+
"Salez, poivrez et mouillez avec le vin."+#CRLF$+#CRLF$+
"Ajoutez de l'eau pour que la viande et les légumes soient immergés."+#CRLF$+#CRLF$+
"Couvrez. Portez à ébullition et laissez cuire 1 h 30. Faites cuire dans une poêle, avec 30 g de beurre, les champignons"+#CRLF$+
"coupés et citronnés 10 min."+#CRLF$+#CRLF$+
"Préparez un roux blond : faites fondre le reste de beurre dans une casserole, saupoudrez-le avec la farine, mélangez"+#CRLF$+
"vivement au fouet, puis laissez refroidir."+#CRLF$+#CRLF$+
"Quand la viande est cuite, mettez-la dans une passoire avec les légumes et récupérez le bouillon de cuisson."+#CRLF$+#CRLF$+
"Délayez le roux avec ce bouillon et amenez à ébullition en fouettant."+#CRLF$+#CRLF$+
"Remettez la viande et tous les légumes dans le faitout après avoir retiré bouquet garni, ail, céleri et carotte."+#CRLF$+#CRLF$+
"Ajoutez les champignons,"+#CRLF$+
"versez la sauce et réchauffez le tout 10 à 15 min."+#CRLF$+#CRLF$+
"Juste avant de servir mélangez la crème et les jaunes d'œufs, incorporez-les à la sauce en tournant sans laisser bouillir."+#CRLF$+#CRLF$+
"Ajoutez quelques gouttes de jus de citron."+#CRLF$+#CRLF$+"Servez dans un plat creux avec du persil."
;FichierImage$ = #PB_Compiler_FilePath + "Images\Blanquette de veau.jpg"
Mise_a_jour_Gadgets()
;- Boeuf bourguignon rapide
Case #Menu_BoeufBourguignon_Rapide
Titre$ = "Boeuf bourguignon rapide"
Nb_Pers = 6
Ing(0)\Quantite = 800 : Ing(0)\Aliment = "g de boeuf"
Ing(1)\Quantite = 100 : Ing(1)\Aliment = "g de lardons"
Ing(2)\Quantite = 50 : Ing(2)\Aliment = "g de beurre"
Ing(3)\Quantite = 0.67 : Ing(3)\Aliment = "l de vin"
Ing(4)\Quantite = 2 : Ing(4)\Aliment = "oignons"
Ing(5)\Quantite = 1 : Ing(5)\Aliment = "gousse d'ail"
Ing(6)\Quantite = 2 : Ing(6)\Aliment = "c. à soupe de farine"
Ing(7)\Quantite = 1 : Ing(7)\Aliment = "bouquet garni"
Ing(8)\Quantite = 250 : Ing(8)\Aliment = "g de champignons"
Ing(9)\Aliment = "Set et poivre"
Recette$ = "Hacher les oignons. Peler l'ail"+#CRLF$+#CRLF$+
"Dans une cocotte minute, faire roussir la viande et les lardons dans le beurre"+#CRLF$+#CRLF$+
"Ajouter les oignons, les champignons égouttés et saupoudrer de farine"+#CRLF$+"Mélanger et laisser dorer un instant."+#CRLF$+#CRLF$+
"Mouiller avec le vin rouge qui doit recouvrir la viande."+#CRLF$+#CRLF$+
"Saler et poivrer."+#CRLF$+#CRLF$+
"Ajouter l'ail et le bouquet garni."+#CRLF$+#CRLF$+
"Fermer la cocotte minute."+#CRLF$+#CRLF$+
"Laisser cuire doucement 1 heure à partir de la mise en rotation de la soupape."+#CRLF$+#CRLF$+
"C'est encore meilleur réchauffé."
;FichierImage$ = #PB_Compiler_FilePath + "Images\Boeuf bourguignon.jpg"
Mise_a_jour_Gadgets()
;- Boeuf bourguignon
Case #Menu_BoeufBourguignon
Titre$ = "Boeuf bourguignon"
Nb_Pers = 4
Ing(0)\Quantite = 600 : Ing(0)\Aliment = "g de boeuf"
Ing(1)\Quantite = 200 : Ing(1)\Aliment = "g de lardons"
Ing(2)\Quantite = 0.5 : Ing(2)\Aliment = "l de vin"
Ing(3)\Quantite = 1 : Ing(3)\Aliment = "oignon"
Ing(4)\Quantite = 4 : Ing(4)\Aliment = "carottes"
Ing(5)\Quantite = 1 : Ing(5)\Aliment = "c. à soupe de farine"
Recette$ = "Peler et émincer l'oignon."+#CRLF$+#CRLF$+
"Fariner les morceaux de viandes et les faire dorer dans la cocotte avec un filet d'huile d'olive, puis les retirer."+#CRLF$+#CRLF$+
"Faire revenir l'oignon, puis ajouter les lardons, les débarrasser de la cocotte et remettre les morceaux de viande à la"+#CRLF$+
"place."+#CRLF$+#CRLF$+
"Verser le vin rouge. Porter à ébullition. Ajouter de l'eau pour couvrir la viande et fermer la cocotte de son couvercle"+#CRLF$+
"et laisser cuire 1 heure."+#CRLF$+#CRLF$+
"Éplucher et couper les carottes en rondelles."+#CRLF$+#CRLF$+
"Mélanger la viande, ajouter les carottes, l'oignon et les lardons, et recouvrir la cocotte et laisser cuire 1h à 1h30 en"+#CRLF$+
"mélangeant et en ajoutant en peu d'eau"+#CRLF$+"de temps en temps."+#CRLF$+#CRLF$+
"Quand la viande est cuite, laisser réduire le jus, prélever un peu de sauce et ajouter une c à s de farine, et délayer,"+#CRLF$+
"avant de l'ajouter dans la cocotte."+#CRLF$+
"Cela va épaissir la sauce pour qu'elle soit onctueuse."+#CRLF$+#CRLF$+
"Saler et poivrer."+#CRLF$+#CRLF$+
"Accompagner de frites par exemple !"
;FichierImage$ = #PB_Compiler_FilePath + "Images\Boeuf bourguignon.jpg"
Mise_a_jour_Gadgets()
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Fenetre_principale
CloseWindow(#Fenetre_principale)
Break
EndSelect
EndSelect
ForEver