الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعده في عمليه التحديث الاوتماتيكي

بدأه altae13 في 8 أغسطس 2011 · 21 رد · 1,298 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

ورمضان كريم عليكم ان شاء الله وصيام مقبول والفوز بالجنه ان شاء الله

ارجو من حضرتكم مساعدتي او تقدم النصائح في طريقة عمل التالي

لديا ثلاث جدول (جدول الطلبه - جدول المواد الدراسية- جدول الدراجات للطلبه )

اريد الطالب عندما بودي كل الامتحانات ودرجه الامتحان للماده الدراسية اكبر او تساوي 50 ينتقل الى المرحله التاليه مثلا اذا كان بالاول ينتقل الى الثاني وهكذا واذا كان المرحله الاخيرة ينتقل الى جدول المتخرجين

اي الانتقال يعتمد على الدرجات ويكون اتماتيكنيا بدون عمل اي تحديث للجدول الطالب

وجزاكم الله خيرا

#2

السلام عليكم ورحمه الله وبركاته

اخي ببساطه بعد عملية احتساب نتيجة الامتحان قم بعمل شرط النجاح وعلى اساسه قم بجملة تحديث لمستواه, جرب الكود التالي

Dim conn As New SqlConnection("ConnectionString")
Dim cmd As New SqlCommand("Select * From Students Where mark>=50 AND ID=@ID",conn)
cmd.Parameters.AddWithValue("ID",12)
conn.Open()
Dim reader As SqlDataReader=cmd.ExecuteReader()
If reader.HasRows Then
cmd = New SqlCommand("Update Students Set Level=Level+1 Where ID=@ID",conn)
cmd.Parameters.AddWithValue("ID",12)
cmd.ExecuteNonQuery()
End If
conn.Close()

على افتراض رقم الطالب هو 12 وان مستواه هو رقم 1 يمثل المستوى الاول وهكذا ..

.:: Wish to become better and better ::.

#3

السلام عليكم

اشكرك عى الرد

هنا في هذا الكود نحتاج الى ادخل رقم طالب وبهذا العمليه نحتاج الى ادخل كل ارقام الطلبه واحدا بعد الاخر

انا اريد بلغه سي شارب اولا

وثانيا عندما ندخل الدرجات للطالب ونضغط على اضافه الدرجات يبداء بعمليه الجيك مع جدول الطالب ويبدا نتحويله الى المرحله القادمه في حاله توفر الشرط

وجزالك الله

#4

السلام عليكم ورحمه الله وبركاته

اخي جرب الرابط التالي للتحويل http://www.developerfusion.com/tools/convert/vb-to-csharp/

.:: Wish to become better and better ::.

#5
VB Helper كتب:

السلام عليكم ورحمه الله وبركاته

اخي ببساطه بعد عملية احتساب نتيجة الامتحان قم بعمل شرط النجاح وعلى اساسه قم بجملة تحديث لمستواه, جرب الكود التالي

Dim conn As New SqlConnection("ConnectionString")
Dim cmd As New SqlCommand("Select * From Students Where mark>=50 AND ID=@ID",conn)
cmd.Parameters.AddWithValue("ID",12)
conn.Open()
Dim reader As SqlDataReader=cmd.ExecuteReader()
If reader.HasRows Then
cmd = New SqlCommand("Update Students Set Level=Level+1 Where ID=@ID",conn)
cmd.Parameters.AddWithValue("ID",12)
cmd.ExecuteNonQuery()
End If
conn.Close()

على افتراض رقم الطالب هو 12 وان مستواه هو رقم 1 يمثل المستوى الاول وهكذا ..

السلام عليكم

اخي في هاي الحاله امرر كل طالب وهي عمليه صعبه لكثرة الطلبه لذلك اريد مع ادخال الدرجات يتم التجيك ارجو بان تفهم قصدي مع العلم بان لكل طالب مجموعه من الدرجات ليس درجه واحده

تم تعديل هذه المشاركة بواسطة altae13 في 9 أغسطس 2011 في 11:55

#6
اقتباس
اي الانتقال يعتمد على الدرجات ويكون اتماتيكنيا بدون عمل اي تحديث للجدول الطالب

بما أنك تريد أن يحدث ذلك أوتوماتيكياً فطريقة أخرى أن يتم ذلك ليس من خلال برنامجك بل في قاعدة البيانات. معظم قواعد البيانات تدعم الTrigger وهو مرتبط بجدول معين. ان حدث CREATE أو Update أو DELETE ينطلق الTrigger وينفذ محتواه. في حالتك يمكن أن تضع Trigger على جدول العلامات بحث انه عند تسجيل علامة لطالب معين أو تحديثها ينفذ stored procedure أوتوماتيكياً لنقل ملف الطالب الى جدول آخر. بذلك يحصل الأمر مباشرة في قاعدة البيانات ولا تحتاج لتعديل أي شيء في برنامجك الذي يقوم فقد بادخال علامات جديدة أو تعديل علامات.

هنا مقال عن استخدام Triggers.

#7

شباب ممكن مساعده مازلت المشكله موجوده ؟؟؟؟

#8
اقتباس
شباب ممكن مساعده مازلت المشكله موجوده ؟؟؟؟

نصيحة مني جرب الTriggers كما قلت لك أعلاه.

#9
cljneophyte كتب:

نصيحة مني جرب الTriggers كما قلت لك أعلاه.

السلام عليكم

اخي ماعندي خبره في استخدام الTriggers

#10
اقتباس
اخي ماعندي خبره في استخدام الTriggers

وكذلك لم يكن لديك خبرة في C# يوماً ولكنك الآن تملك خبرة فيهما، كيف حصلت عليها؟ اقرأ المقالين أعلاه وجرب الفكرة وستصبح خبيراً بالTriggers. ان لم تعجبك عد وفكر بالمشكلة بالطريقة التي كنت تفكر فيها.

#11

السلام عليكم ورحمه الله وبركاته

لقد اطلعت على المقاليين واستفدت منهما الكثير ان شاء الله بخصوص ال TIRGGERS,والحمد الله وهذا الطريقه في تصوري لا تحل مشكلتي

لكن مشكلتي هي

انا لكل طالب مجموعه درجات اي لكل ماده درجه فرضنا لدينا الطالب 1 ولدينا الدرجات التاليه (40 - 60 - 90- 70) وهو في المرحله الاولى فاعندما نعمل الشرط التالي

SELECT ID_STUDENT FROM MARK WHERE MARK_STUDENT >= 50

فسوف يظهر لنا الطالب 1 لانه يملك دراجات فوق الخمسين ويهمل الدرجه التي تحت الخمسين

سوالي وارجو المساعده

هو كيف يمكن قراء درجات الطالب لكل طالب بحيث يتم بالبدابه معرفه هل يملك درجه اقل الخمسين فاذا كان يملك تحت الخمسين لا يتم تحويله الى المرحله القادمه ووالعكس يتم التحويل

عاوز هذا الكلام يتحول الى كود

وشكرا جزبل على كل الردود والمشاركات

#12

السلام عليكم ورحمه الله وبركاته

اخي يمكنك استخدام الـ Cursor لقراءة جميع درجات الطالب

.:: Wish to become better and better ::.

#13
VB Helper كتب:

السلام عليكم ورحمه الله وبركاته

اخي يمكنك استخدام الـ Cursor لقراءة جميع درجات الطالب

بارك الله فيك

اخي كيف يمكن استخدام الموشرات في ASP.net ومع العلم انا استخدم لغد سي شارب

ارجو الرد لان الموضوع اتعبني جدا ؟

#15
VB Helper كتب:

السلام عليكم ورحمه الله وبركاته

اخي قصدي المؤشرات في السيكول سيرفر, شوف الروابط التاليه

http://www.mssqltips.com/tip.asp?tip=1599

http://msdn.microsoft.com/en-us/library/ms180169.aspx

اخي مفهوم عليك بال Sql Server انا اعرف بان الموشرات تستخدم في ال Sql

لكن كيف يتم استخدام الموشرات في ال Asp.net

#16

السلام عليكم ورحمه الله وبركاته

اخي يمكنك استخدامها داخل اجراء مخزن ومن ثم استدعائه من الـ ASP.NET

.:: Wish to become better and better ::.

#17

وضعت مثال للي بدك ياه مع مراعات بعض الاشياء لاني عملته بسرعه مثل المعدلات حسبتهم كصحيحه

افحص مسار قاعدة البيانات في dla

تقدر تحط كود التحديث وين دالة upd بيعمل لحال تحديث بدل الضغط على تحديث نهاية الفصل لكن لا ارى ان هذا سيكون صحيح

بنسبه لعلامة النجاح انت تحددها في كل موضوع وحسبها يرفع الطالب

هذا مثال بس لتوضيح ما يزعلو المبرمجين الكبار يعني كل الملاحظات على لازم هيك وهيك انا عارفتها بس عامله شي سريع عشان اخونا يفهم هذا

4altae13.rar

1
#18

السلام عليكم

التعديل بعد ادخال الدرجات لاينصح به على الاطلاق وستحدث مشاكل كثيرة بسببه (مثلا اذا اردت تعديل علامة طالب فيما بعد فسيتم ترفيعه مرة اخرى)

لذا انصح بعمل جزء خاص بالترفيغ مثل زر ووضع الكود التالي به :

   using  (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("yourconnectionstring"))

               {
                        string sql = "update students set level=level+1 where m1>=50 and m2>=50 and m3>=50 and ...";
                        using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, con))
                        {
                            cmd.ExecuteNonQuery();
                        }

            }

حيث يتم ترفيع جميع الطلاب مرة واحدة وطبعا يمكن التعديل بحيث يرفع حسب الصف .

#19

السلام عليكم

اشكركم جميعع على المشاركات والردود

وبارك الله فيكم

الى الاخوه انا لا توجد عندي مشكله في عمليه ادخال البيانات وتحدثها انا عامل اليا جيده في هذا الخصوص

لكن مشكلتي هو كييفه فرز درجات كل طالب في نهايه السنه فاذا كانت كلها اكبر من 50 او تساوي ينتقل الى الصف التالي

وجربت اكثر من طريق لكن مازلت المشكله قائمه ومازلتوا احاول

ومن الله التوفيق !!!

#20
جودي1 كتب:

وضعت مثال للي بدك ياه مع مراعات بعض الاشياء لاني عملته بسرعه مثل المعدلات حسبتهم كصحيحه

افحص مسار قاعدة البيانات في dla

تقدر تحط كود التحديث وين دالة upd بيعمل لحال تحديث بدل الضغط على تحديث نهاية الفصل لكن لا ارى ان هذا سيكون صحيح

بنسبه لعلامة النجاح انت تحددها في كل موضوع وحسبها يرفع الطالب

هذا مثال بس لتوضيح ما يزعلو المبرمجين الكبار يعني كل الملاحظات على لازم هيك وهيك انا عارفتها بس عامله شي سريع عشان اخونا يفهم هذا

اشكرك على البرنامج لكن مع الاسف لم يفتح معي البرنامج

#21

هذا بضبط ما عملته في المثال عند ضغط زر نهاية الفصل يقوم بفرز علامات الطالب ويفحص اذا كان ناجح في جميع المواضيع يرفعه ولكل موضوع انت تحدد علامة النجاح واذا عملت كلهم 50 فسيرفع الى الصف التالي اذا كانت علاماته اكثر من 50 وبالتالي معدله اكبر من 50 اذا حسبت فقط المعدل قد يكون رسب في ماده ما ويرفع صف واهذا غير صحيح منطقيا

هذا كلاس السحب والادخال

public class Dla
{

    public SqlDataReader reader;

    //وصلت الداتا
    public SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\jodie\Documents\std.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
    public SqlCommand command = new SqlCommand();

	public Dla()
	{
        command.Connection = conn;
	}



    // stud #####################################################################

    private std Getstd(SqlDataReader data)
    {

        std obj = new std();

        obj.stdid = Convert.ToInt32(data["stdid"]);
        obj.stdname = Convert.ToString(data["stdname"]);
        obj.Class = Convert.ToInt32(data["Class"]);

        return obj;
    }



    private void Fillstd(SqlDataReader data, Collection<std> list)
    {
        while (data.Read())
        {
            std obj = Getstd(data);
            list.Add(obj);
        }
    }


    public Collection<std> Getallstd()
    {

        command.CommandText = "Getallstd";
        command.CommandType = CommandType.StoredProcedure;
        conn.Open();
        reader = command.ExecuteReader();

        Collection<std> cate_List = new Collection<std>();
        Fillstd(reader, cate_List);

        conn.Close();
        return cate_List;





    }

    public void Addstd(std prd)
    {

        command.Parameters.Clear();
        command.CommandText = "Addstd";
        command.CommandType = CommandType.StoredProcedure;


        command.Parameters.AddWithValue("@stdname", prd.stdname);
        command.Parameters.AddWithValue("@Class", prd.Class);

        conn.Open();
        command.ExecuteNonQuery();

        conn.Close();

    }








    //#######################################################################################


    //exam ###############################################################################
    private exam Getexam(SqlDataReader data)
    {

        exam obj = new exam();

        obj.Exid = Convert.ToInt32(data["Exid"]);
        obj.Exname = Convert.ToString(data["Exname"]);
        obj.Subid = Convert.ToInt32(data["Subid"]);
        obj.Expoint = Convert.ToInt32(data["Expoint"]);

        return obj;
    }



    private void Fillexam(SqlDataReader data, Collection<exam> list)
    {
        while (data.Read())
        {
            exam obj = Getexam(data);
            list.Add(obj);
        }
    }

    public Collection<exam> Getallexam()
    {
        command.Parameters.Clear();
        command.CommandText = "Getallexam";
        command.CommandType = CommandType.StoredProcedure;
        conn.Open();
        reader = command.ExecuteReader();

        Collection<exam> cate_List = new Collection<exam>();
        Fillexam(reader, cate_List);

        conn.Close();
        return cate_List;





    }

    public void Addexam(exam prd)
    {

        command.Parameters.Clear();
        command.CommandText = "Addexam";
        command.CommandType = CommandType.StoredProcedure;


        command.Parameters.AddWithValue("@Exname", prd.Exname);
        command.Parameters.AddWithValue("@Expoint", prd.Expoint);
        command.Parameters.AddWithValue("@Subid", prd.Subid);

        conn.Open();
        command.ExecuteNonQuery();

        conn.Close();

    }

    //#########################################################################


    //sub

    private sub Getsub(SqlDataReader data)
    {

        sub obj = new sub();

        obj.Subid = Convert.ToInt32(data["Subid"]);
        obj.Subname = Convert.ToString(data["Subname"]);
        obj.Minsucc = Convert.ToInt32(data["Minsucc"]);
        obj.stdid = Convert.ToInt32(data["stdid"]);

        return obj;
    }



    private void Fillsub(SqlDataReader data, Collection<sub> list)
    {
        while (data.Read())
        {
            sub obj = Getsub(data);
            list.Add(obj);
        }
    }



    public Collection<sub> Getallsub()
    {
        command.Parameters.Clear();
        command.CommandText = "Getallsub";
        command.CommandType = CommandType.StoredProcedure;
        conn.Open();
        reader = command.ExecuteReader();

        Collection<sub> cate_List = new Collection<sub>();
        Fillsub(reader, cate_List);

        conn.Close();
        return cate_List;





    }


    public Collection<sub> Getallsubbystdid(int stdid)
    {
        command.Parameters.Clear();
        command.CommandText = "Getallsubbystdid";
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.AddWithValue("@stdid", stdid);
        conn.Open();
        reader = command.ExecuteReader();

        Collection<sub> cate_List = new Collection<sub>();
        Fillsub(reader, cate_List);

        conn.Close();
        return cate_List;





    }



    public void updatestudstatus(int stdid,int oldstat)
    {

        command.Parameters.Clear();
        command.CommandText = "updatestudstatus";
        command.CommandType = CommandType.StoredProcedure;


        command.Parameters.AddWithValue("@stdid", stdid);
        command.Parameters.AddWithValue("@oldstat", oldstat);

        conn.Open();
        command.ExecuteNonQuery();

        conn.Close();

    }




    public void Addsub(sub prd)
    {

        command.Parameters.Clear();
        command.CommandText = "Addsub";
        command.CommandType = CommandType.StoredProcedure;


        command.Parameters.AddWithValue("@stdid", prd.stdid);
        command.Parameters.AddWithValue("@Subname", prd.Subname);
        command.Parameters.AddWithValue("@Minsucc", prd.Minsucc);

        conn.Open();
        command.ExecuteNonQuery();

        conn.Close();

    }

    //حسابات





    public int avrpointbysubid(int subid)
    {

        int avr=0;
        command.Parameters.Clear();
        command.CommandText = "avrpointbysubid";
        command.CommandType = CommandType.StoredProcedure;

        command.Parameters.AddWithValue("@subid", subid);
        conn.Open();
        reader = command.ExecuteReader();
        if (reader.Read())
        {

            avr = Getavr(reader);
        }

        conn.Close();

        return avr;


    }

    private int Getavr(SqlDataReader data)
    {

        int avr = 0;
        int c = 1;
        while (data.Read())
        {
            avr += Convert.ToInt32(data["Expoint"]);
            c++;
        }

        return avr/c;
    }

وهذا جنب السيرفر في الصفحه اظن باقي الاشياء مثل الاجراءات والخصائص رح تعملها لحالك

public partial class _Default : System.Web.UI.Page
{
   public Dla addnewstd = new Dla();
    protected void Page_Load(object sender, EventArgs e)
    {
        for (int i = 0; i <101; i++)
        {
            droppoint.Items.Add(i.ToString());
            dropexam.Items.Add(i.ToString());
        }





    }
    protected void upd()
    {
        ObjectDataSource1.DataBind();
        ObjectDataSource2.DataBind();
        ObjectDataSource3.DataBind();
        GridView1.DataBind();
        GridView2.DataBind();
        GridView3.DataBind();
        DropDownList2.DataBind();

        DropDownList3.DataBind();





    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        std addstd = new std();
        Dla addnewstd = new Dla();
        addstd.stdname = TextBox1.Text;
        addstd.Class = int.Parse(DropDownList1.SelectedValue);
        addnewstd.Addstd(addstd);
        upd();
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        sub newsub = new sub();
        newsub.stdid = int.Parse(DropDownList2.SelectedValue);
        newsub.Subname = TextBox2.Text;
        newsub.Minsucc = int.Parse(droppoint.SelectedItem.Text);
        upd();
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        exam newexam = new exam();
        newexam.Subid=int.Parse( DropDownList3.SelectedValue);
        newexam.Exname = TextBox3.Text;
        newexam.Expoint = int.Parse(dropexam.SelectedItem.Text);
        addnewstd.Addexam(newexam);
        upd();
    }
    protected void Button4_Click(object sender, EventArgs e)
    {
        Collection<std> std_List = new Collection<std>();
        Collection<sub> sub_List = new Collection<sub>();

        std_List = addnewstd.Getallstd();
        int grad = 0;
        for (int i = 0; i < std_List.Count; i++)
        {
            grad = 0;
            sub_List = addnewstd.Getallsubbystdid(std_List.stdid);
            bool flag = true;
            for (int j = 0; j < sub_List.Count; j++)
            {
                grad = addnewstd.avrpointbysubid(sub_List[j].Subid);
                if (grad < sub_List[j].Minsucc) flag = false;


            }

            if (flag == true)
            {
                addnewstd.updatestudstatus(std_List.stdid, (std_List.Class + 1));
            }
        }

        upd();


    }
}

تم تعديل هذه المشاركة بواسطة جودي1 في 14 أغسطس 2011 في 02:59

#22

السلام عليكم ورحمه الله وبركاته

اسف انا اتاخرت بالرد عليك لاني كنت مشغول

بارك الله فبك على المجهود الرائع وان شاء الله يكون في ميزان حسناتك

جاري التجربة وان شاء الله تضبط معي

الف شكر

مواضيع مشابهة