C# Günlük hasılatı hesaplayan programı nasıl yazarım ?

Bir tablo olur, bu tablo tarihe göre dükkanın açılma ve kapanma zamanını tutar. Formun load fonksiyonun içinde acıkma saatini yazdırırsın. Buttonun bir tanesine günlük rapor al gibi bir button yaparsın o yine kapanma saatini tabloya yükler. Sonra bu tarihler arasında sorgu yaparsın. Örnek olarak Select sum(Selling) As bugunki_satıs from selling_Table where satıs_tarihi =>(Select acılma_zamanı from çalışmassaati where acılma_zamanı = (Bugün acılma zamanına) ) and bugunki_satis =<(Select kapanma_zamanı from calılma_saati where kapanma zamanı=kapanma saati)
 
Size yapmanız gerekenleri basitçe hazırladım. Kodun tamamına buradan erişebilirsiniz.
Giriş ve çıkış saatleri için 2 tane kriter belirledim. Birincisi çıkış zamanı, giriş zamanından önce olamaz. İkincisi çıkış zamanı, giriş zamanından 2 gün sonra olamaz.
Örnekte sadece bir gün için giriş ve çıkış zamanları girilebiliyor. Eğer bütün günleri saklamak istiyorsanız basitçe List değişkeninde saklayabilirsiniz veya veritabanına yükleyebilirsiniz. Eğer bütün günleri tutarsanız o zaman bugünün giriş zamanı bir önceki günün çıkış zamanından sonra olmalıdır gibi kontrolleri de yapabilirsiniz.

Kod:
    public class İşGünü
    {
        #region Özellikler
        public DateTime GirişSaati { get; set; }
        public DateTime ÇıkışSaati { get; set; }

        public TimeSpan ÇalışmaSüresi
        {
            get
            {
                return ÇalışmaSüresiHesapla();
            }
        }
        #endregion

        private İşGünü(DateTime girişsaati, DateTime çıkışsaati)
        {
            GirişSaati = girişsaati;
            ÇıkışSaati = çıkışsaati;
        }

        public static İşGünü Oluştur(DateTime girişsaati, DateTime çıkışsaati)
        {

            if (çıkışsaati < girişsaati) // Çıkış Saati Giriş Saatinden Önce olamaz koşulu.
                return null;
            else if (çıkışsaati - girişsaati >= TimeSpan.FromDays(2)) // Çıkış Saati Giriş Saatinden 2 gün sonra olamaz koşulu.
                return null;
            //Buraya istediğiniz koşulları eklersiniz.

            //Koşullar sorun çıkartmazsa İşGünü Nesnesi oluşturulur.
            return new İşGünü(girişsaati, çıkışsaati);
        }

        public TimeSpan ÇalışmaSüresiHesapla()
        {
            return ÇıkışSaati - GirişSaati;
        }
    }
Kod:
        static void Main(string[] args)
        {
            DateTime girişsaati = DateTime.Parse("06.04.2015 13:00");
            DateTime çıkışsaati = DateTime.Parse("07.04.2015 03:00");
            İşGünü işgünü1 = İşGünü.Oluştur(girişsaati, çıkışsaati);

            if (işgünü1 != null)
                Console.WriteLine(işgünü1.ÇalışmaSüresi);
            else
                Console.WriteLine("Yanlış Çalışma Saatleri Seçildi.");

            Console.ReadKey();
        }
 
@AhmetAksoy Dostum sana çok teşekkür ediyorum. Senden son olarak ufak bir ricam olabilir mi ? Bu uygulama bana aslen Form ekranında, Sql veritabanında lazım. Programın mantığı azcıkta olsa anladım. Bana senden başkası yardım edemez şuan :) Çok çok çok çok çok çok teşekkür ediyorum sana ayrıyetten :) Adamın dibisin :)
 
Ben WPF'de hazırlayacaktım kafanız karışmasın diye konsol uygulaması olarak yazdım. İsterseniz WPF'de hazırlarım. Winforms ile uğraşmak istemiyorum.
 
@AhmetAksoy Vallahi form ekranında olsa olmazmı ya sınavda senin yazdıklarının birebir aynısını yazacağım kağıdıma kafam karışmasın form ekranında olması benim için çok çok çok çok çok iyi olur :) Ahmet sen adamın dibisin ya vallahi sormadığım adam kalmamıştı :)
 
Sınavda aynı soruyu soracağı belli mi? Ayrıca hocanız ne bilgi öğretti bilmiyorum. Verdiği bilgiler doğrultusunda bilgi isteyebilir.
Benim yazdıklarımın aynısını yazmak yerine, benim yazdığım kodu irdeleyerek ulaştığınız bilgiyi kendi anladığınız çerçevede sınav kağıdına yansıtsanız daha iyi olur.
 
Aynı soruyu soracağı belli evet %100 soracağım dedi. Sen c# Form ekranında benm sorduğum sorunun cevabını en kısa biçimde yani konsol'da yaptığın gibi yaparsan birebir aynısını yazacağım kağıda ve sınavdan geçeceğim. 60 puan olması gerekiyor bu sorunun :) İnşallah olur ya kaç haftadır uğraşıyoruz soruyorz istediğimiz sonuca varamadık :)
 
Sql'den veri çekilecek malesef :( Kullanıcı tarihi girecek ve hesap yapılacak. O saat mevzusunu biliyorsun sen zaten okadar sadece :)

@AhmetAksoy Hocam tek umudum sensin vallahi. Senden haber bekliyorum. Uğraşların için çok teşekkür ederim. Allah razı olsun.
 
Hazırladım. Koda buradan erişebilirsin. Çalışma saati niye eksik yazıyor diye sorma. SQL kodu karmaşık anlaman zorlaşır diye eklemedim.

Kod:
    public partial class Form1 : Form
    {
        string sqlbaglantıyolu = ÇalışmaSaatiWinForms.Properties.Settings.Default.VeritabanıConnectionString;
       
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DataGridDoldur();
        }

        private void ButtonÇalışmaOluştur_Click(object sender, EventArgs e)
        {
            if (dateTimePickerÇıkış.Value <= dateTimePickerGiriş.Value)
            {
                MessageBox.Show("Çıkış saati giriş saatinden önce olamaz.");
                return;
            }
            else if (dateTimePickerÇıkış.Value - dateTimePickerGiriş.Value >= TimeSpan.FromDays(2))
            {
                MessageBox.Show("Çıkış saati giriş saatinden 2 gün sonra olamaz.");
                return;
            }

            VeritabanınaYaz(dateTimePickerGiriş.Value, dateTimePickerÇıkış.Value);
        }
    }

Kod:
        private void VeritabanınaYaz(DateTime girişsaati, DateTime çıkışsaati)
        {
            try
            {
                using (SqlConnection sqlbaglantı = new System.Data.SqlClient.SqlConnection(sqlbaglantıyolu))
                {
                    SqlCommand sqlkomutu = new SqlCommand(@"INSERT INTO 
ÇalışmaTablosu (GirişSaati, ÇıkışSaati) VALUES (@GirişSaati, @ÇıkışSaati)", sqlbaglantı);
                    sqlkomutu.Parameters.AddWithValue("@GirişSaati", girişsaati);
                    sqlkomutu.Parameters.AddWithValue("@ÇıkışSaati", çıkışsaati);

                    sqlbaglantı.Open();
                    sqlkomutu.ExecuteNonQuery();
                    sqlbaglantı.Close();
                }
                DataGridDoldur();
            }
            catch (Exception ex)
            {
                throw new Exception("Hata", ex);
            }
        }

Kod:
        private void DataGridDoldur()
        {
            try
            {
                using (SqlConnection sqlbaglantı = new System.Data.SqlClient.SqlConnection(sqlbaglantıyolu))
                {
                    SqlDataAdapter sqldataadapter = new SqlDataAdapter("SELECT GirişSaati, ÇıkışSaati,
DATEDIFF(hh,GirişSaati,ÇıkışSaati) as ÇalışmaSaat From ÇalışmaTablosu", sqlbaglantı);

                    DataSet ds = new DataSet();
                    DataTable dt = new DataTable();
                    dt.TableName = "ÇalışmaTablosu";
                    dt.Columns.Add("GirişSaati");
                    dt.Columns.Add("ÇıkışSaati");
                    dt.Columns.Add("ÇalışmaSaat");
                    ds.Tables.Add(dt);

                    sqlbaglantı.Open();
                    sqldataadapter.Fill(ds, "ÇalışmaTablosu");
                    sqlbaglantı.Close();

                    dataGridViewÇalışmaTablosu.DataSource = ds.Tables[0];
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Hata", ex);
            }
        }
 
Uyarı! Bu konu 10 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Yeni konular

Geri
Yukarı