Merhaba,
Bugün cuma bereketine, daha önce başladığım bir uygulamayı geliştirmeyi hedefledim. Ancak şirketimiz iflas ediyor! Çünkü gelen siparişleri henüz değerlendiremediği gibi çırağın hazırladığı deneme hamuru fırına verilmeden gaz bitiyor ve fırın soğuyor. Sonuçta çırağa 1 TL maaş kalıyor...:)
'siparişVar_mı()' işlevi kısmen hazır ama sanırım sistemi tam iyi otutturamadım. Yani çeşitli hileler ile JSON dosyasını değiştirdiğimde uyanmasını ve sipariş föyünü doldurmasını sağlıyorum. Ancak bu işlev o kadar hevesli ki HEDEF = 100'ü tutturmak için başlangıçtaki tüm siparişleri işlemek istiyor. Tabi bir de 'malzemeDiz()' ve 'fırınaVer()' işlevlerine ihtiyacı var. Ayrıca 'malzemeAl()' ve 'teslimEt()' işlevleri de çok önemli. Çünkü:
- Siparişi teslim edemezsek para kazanamayız,
- Para kazanmazsak yeni malzeme alamayız,
- Yeni malzeme alamazsak siparişlere cevap veremeyiz ve
'İFLAS:' şirketi kapatırız...
/*
pizzaDlang2.d (06.04.2012)
*/
import std.datetime, std.stdio;
import std.conv, std.file, std.json;
import std.concurrency, core.thread;
immutable _x_HIZ = 16; // xKat
immutable SERMAYE = 1000; // Türk Lirası
immutable HEDEF = 100; // adet sipariş
immutable veriDosyası = "pizzaDlang.json";
immutable kaynakDüğüm = "Siparişler";
JSONValue[] dosyadanJSONdizi(string dosya, string dizi)
{
string veriyiOku = to!string(read(dosya));
JSONValue[] JSON = parseJSON(veriyiOku).object[dizi].array;
return JSON;
}
enum Hamuru { ince, orta, kalın }
enum Malzemesi { peynir, sucuk, mantar }
shared struct SİPARİŞLER {
static size_t numarası;
static int[HEDEF] bilgileri;
}
shared struct VARLIKLAR {
int un, su, yağ, ketçap, peynir, sucuk, mantar;
int gaz, ısı, kasa = SERMAYE;
this (int m1, int m2, int m3, int m4, int m5, int m6, int m7,
int gaz, int ısı, int masraf) {
this.un += m1;
this.su += m2;
this.yağ += m3;
this.ketçap += m4;
this.peynir += m5;
this.sucuk += m6;
this.mantar += m7;
this.gaz += gaz;
this.ısı += ısı;
this.kasa -= masraf;
}
void Durumu() {
writef("\tUn %d, Su %d, Yağ %d, Gaz %d, Fırın %d °C\n", un, su, yağ,
gaz, ısı);
}
void malzemeAl(int xMalzeme) { kasa -= xMalzeme * 10; }
void teslimEt(int xSipariş) { kasa += 15; }
}
.
void hamuraBaşla(Tid durum, shared(VARLIKLAR) * malzeme, Hamuru kalınlık) {
for(auto i=0;
i < 10 + kalınlık;
i++, malzeme.un -= 3, malzeme.su -= 2, malzeme.yağ -= 1)
{
if(malzeme.un < 1 || malzeme.su < 1 || malzeme.yağ < 1)
{
durum.send(0);
break;
}
durum.send(4); // boşta
Thread.sleep(dur!"seconds"(i*i/_x_HIZ));
durum.send(1);
}
durum.send(3); // hamur hazır
}
void fırınıYak(Tid durum, shared(VARLIKLAR) * malzeme, ubyte derece) {
uint soğumaZamanı = 6;
while (true)
{
if(malzeme.gaz > 0 && malzeme.ısı != derece)
{
malzeme.gaz--;
malzeme.ısı++;
} else durum.send(5);
Thread.sleep(dur!"msecs"(soğumaZamanı/_x_HIZ));
durum.send(6); // boşta
if(++soğumaZamanı % 6 == 0)
{
if(malzeme.ısı > 19) malzeme.ısı -= 5; else
{
durum.send(0);
break;
}
}
}
}
void siparişVar_mı(Tid durum, shared(VARLIKLAR) * malzeme, int performans) {
JSONValue[] siparişler;
size_t siparişNumarası, müşteriNumarası, xSipariş = 0;
SİPARİŞLER[HEDEF] sipariş; // auto sipariş = new SİPARİŞLER();
sipariş[xSipariş].numarası = size_t.max;
//* TEST 1
writefln("t-> %d/%d", sipariş[xSipariş].numarası, siparişNumarası); //*/
do {
siparişler = dosyadanJSONdizi(veriDosyası, kaynakDüğüm);
siparişNumarası = siparişler[xSipariş + 1].object["nm"].integer;
müşteriNumarası = siparişler[xSipariş + 1].object["ad"].integer;
//* TEST 2
writefln("t-> %d-%d", sipariş[xSipariş].numarası, siparişNumarası); //*/
if(sipariş[xSipariş].numarası != siparişNumarası)
{
sipariş[++xSipariş].numarası = siparişNumarası;
sipariş[xSipariş].bilgileri[0] = cast(int)müşteriNumarası;
//* TEST 3
writefln("t-> %d\\%d", sipariş[xSipariş].numarası, siparişNumarası); //*/
foreach (i, ml; siparişler[xSipariş].object["ml"].array)
{
sipariş[xSipariş].bilgileri[i + 1] = cast(int) ml.integer;
//* TEST 4
writefln("t-> ml[%d][%d]", xSipariş, ml.integer); //*/
}
durum.send(2); // siparişler var
} else durum.send(1); // sipariş yok
// Sipariş sorumlusunun ve/veya şirketin performansı:
Thread.sleep(dur!"msecs"(performans));
durum.send(1); // sipariş yok
} while (xSipariş < HEDEF);
durum.send(0);
}
void main() {
writeln("pizza Dlang (kuruluş 2012)");
writeln("==========================");
// un, su, yağ, ketçap, peynir, sucuk, mantar
shared auto malzeme = VARLIKLAR (100, 100, 100, 100, 100, 100, 100,
999, 45, 999);
size_t xDurum = 1; // gaz, ısı, kasa (-masraf)
writefln("Şirket %d sermayeyle kuruldu...", SERMAYE);
spawn(&hamuraBaşla, thisTid, &malzeme, Hamuru.kalın);
spawn(&fırınıYak, thisTid, &malzeme, cast(ubyte)180);
spawn(&siparişVar_mı, thisTid, &malzeme, 100); // ÜZERİNDE ÇALIŞILACAK !!!
writeln("\nVARLIKLAR:");
while(xDurum)
{
xDurum = receiveOnly!size_t();
if(xDurum == 1) malzeme.Durumu();
else if(xDurum == 3) writefln("\t\t(HAMUR HAZIR)");
else if(xDurum == 5) writefln("\t\t(FIRIN HAZIR) Gaz %d, Fırın %d °C",
malzeme.gaz, malzeme.ısı);
}
writefln("Malzeme bitti !!! (Kasada %d TL var)", malzeme.kasa);
writefln("İflas ettik...:)");
}/*
- sipariş[x].bilgileri[0] => xDurum (durum.send)
- sipariş[x].bilgileri[1] => xMüşteri (müşteriNumarası)
- sipariş[x].bilgileri[2] => Malzemesi.peynir
- sipariş[x].bilgileri[3] => Malzemesi.sucuk
- sipariş[x].bilgileri[4] => Malzemesi.mantar
- Un 67, Su 78, Yağ 89 (kalın hamurlu pizza)
- Un 70, Su 80, Yağ 90 (orta hamurlu pizza)
- Un 73, Su 82, Yağ 91 (ince hamurlu pizza)
- xDurum > 0 (kontrollü çalışmaya devam et)
- xDurum 1 => sipariş yok
- xDurum 2 => siparişler var
- xDurum 3 => hamur hazır
- xDurum 4 => boşta
- xDurum 5 => fırın hazır
- xDurum 6 => boşta
string pizzaDlang.json = '
{
"belge" : "Pizza Siparişleri",
"türü" : "ham-UTF8",
"Siparişler" : [{
"nm" : 1,
"ad" : 1,
"ml" : [90, 100]
}, {
"nm" : 2,
"ad" : 1,
"ml" : [90, 100]
}, {
"nm" : 3,
"ad" : 2,
"ml" : [50, 60, 70]
}]
}';
*/
Başarılar...
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]