01.04.2010 Umeå Universitet Applikationsprogrammering i python 7,5 hp Sara Vilhelmsson kv08 Daniel Rodén kv08 Simon Hultin kv08 Labbrapport Svantes Bageri
Inledning Det är aldrig enkelt för ett företag att hålla reda på hur råvaruåtgång och tillverkning av produkter ser ut utan att ha ett program att använda sig av. Svantes Bageri har hört av sig till oss med just detta problem och vår uppgift är att skapa ett program som uppfyller deras önskemål. Det Svante vill kunna göra med programmet är: Lägg till nya recept, varje recept ska bestå av de ingredienser som behövs för proceduren för själva bakandet På kvällen ska man kunna ange vilka bakverk som ska bakas - och hur många - och systemet ska skriva ut en lista över de råvaror som behövs samt instruktioner för hur man bakar dem. Om det inte finns tillräckligt med råvaror för bakningen ska systemet tala om det. Det ska vara möjligt att ange vilka miniminivåer av de olika råvarorna det får finnas på lagret. Om nivån är för låg ska systemet skicka en beställning via email till rätt leverantör. Detta specificeras av användaren. Syfte Vi har fått i uppdrag av Svantes Bageri att skapa ett program för att strukturera deras tillverkning och förenkla beställning av varor samt hålla reda på hur många bakverk som ska bakas, vilka recept de innehåller och åtgång av råvaror. Detta skrivs i pythons programspråk och presenteras som ett lättanvänt program. Syftet med detta är att förbättra deras produkttillverkning och förenkla översikten av produktionen. System och algoritmbeskrivning Verktyg: Python Vi började genom att skapa dictionaries för att definiera de huvudsakliga variablerna vilka är råvaror, recept och "baklista". Dessa sparas i separata filer för att undvika att irrelevant informations sparas upprepade gånger. De olika kommandona kommer att utföras utifrån en eller flera funktioner som anropas i ett program. Programmet presenteras genom en huvudmeny där användaren kan navigera i de olika funktionerna. Råvaror De olika råvarorna kontrolleras i ett dictionary där råvaran är nyckeln till en lista innehållande mängden av råvaran samt i vilken enhet denna sparas (kg, g, liter osv). Detta är inte förprogrammerat utan användaren själv fyller i och specificerar denna lista i det öppnade programmet. Användaren kan lägga till nya råvaror genom att skriva in namnet på råvaran, hur mycket det finns av den samt vilken enhet den lagras i. Detta genomförs med hjälp av en while-loop som loopar tills användaren avbryter med ett specifikt kommando. De kan även ta bort lagrade råvaror genom att gå in i en huvudmeny och gå in i funktionen delete. Därefter skrivs råvaran in och ett varningsmeddelande skrivs ut på skärmen. Programmet sparar vid varje ändring. Om råvarumängden når en kritisk förprogrammerad mängd skickas ett mail för en ny beställning till leverantören. Detta genomförs enbart en gång och genom
Råvaror = {"Morot":[100,"kg"]} Kontroll av råvarumängd: for key in råvaror: if råvaror[key]<50: lista.append(key) sendemail() En separat funktion som anropas Ta bort råvara: del Baklista Baklistan består av en loop där användaren fyller i vilket recept denne vill baka och mängden av dessa. Detta fortgår tills bagaren avslutar det specifika kommandot. Om ett kommando som inte går at genomföra, till exempel.4 bullar, skrivs ett felmeddelaned ut som säger att detta går inte att genomföra, skrivs in ett nytt recept. Detta gäller även om ett recept inte finns. Baklista = {"Bulle":10} Kolla recept för bakning Används genom att anropa dictionary recept och nyckeln, till exempel bulle, för att kolla om det användaren skriver in återfinns i variabeln. lägg till Loopen beskriven ovan lägger till i baklistan samt kollar om receptet redan existerar. Där skriver användaren in hur mycket som ska bakas genom att skriva in baklista, namnet och antalet som ska bakas. Ta bort Används på samma sätt som att ta bort råvaror reset baklista -Vad vill du baka? namn - Hur många vill du baka? antal Recept Recept= {"Bulle": [{"Morot":[1,kg]"Bakmetod"}]} Användaren kan skriva in en nyckel till ett recept för att specificera det recept denne vill titta på. Detta presenteras i en lista i en meny. Man kan lägga till recept genom att först be
användaren skriva in namnet på receptet, sedan specificera innehållsförteckning på samma sätt som man skriver in råvaror. När man nämnt en råvara i receptet om programmet att söka efter den i råvarulistan. Om den inte finns skrivs ett meddelande ut på skärmen. Skriv ut receptet Genom att gå in i menyn och välja skriva ut recept kommer alla recept att skrivas ut på skärmen. print Recept["Bulle"] Lägg till recept Användaren anger receptet. Därefter kommer innehållsförteckning som första elementet i en lista. Det andra elementet i listan är bakmetoden. Innehållsförteckningen läggs till på samma som man lägger till element i råvarulistan. När man skriver in enheten på de olika råvarorna kommer de att jämföra med råvarulistan för at kontrollera om det är angivet i samma mått. Om enheten inte är densamma, tex liter, kommer programmet att säga att råvarumåttet anges i liter. Ta bort recept del Recept[namn] Stäng programmet Programmet stängs genom en funktion, quit, som finns i en huvudmeny. sys.exit(0) Diskussion och Analys Detta program kommer att fungera mycket bra i de sammanhang för de problem som bageriet bett oss lösa. Det kommer dock eventuellt kunna dyka upp problem i samband med när man gjort en baklista som använder mer råvaror än vad det finns i lager. Detta kontrolleras dock genom en funktion som helt enkelt jämför den totala mängden råvaror som kommer att gå åt med det nuvarande beståndet. Den funktionen skriver ut vad man har för lite av och hur mycket av allt som kommer att finnas kvar efter bakning. I samband med det skickas ett mail för att undvika att det finns för få råvaror. Genom att använda dictionaries när vi lätt de olika delarna som finns lagrade i det. Istället för att behöva gå igenom en lång lista varje gång man vill komma åt till exempel ett recept, anger man nyckeln och kommer direkt till det lagrade angivna värdet. Ett annat problem som kan dyka upp är att om en enhet anges fel av användaren kommer ett fel att uppstå. Detta kan fångas upp och skrivas ut som ett felmeddelande eller att programmet konverterar och tolkar enheten i rätt format. if not recept["bulle"][0]["morot"][1]==råvaror["morot"][1]: print "Råvaran mäts med enheten %% Råvaror ["Morot"][1]
Sammanfattning Sammanfattningsvis kommer vi att skriva detta program med tanke på alla de problem som vis stött på under skrivandets gång. Genom detta kommer detta program att tillfredställa Svantes Bageri.