إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

pyDMS

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • pyDMS

    صباح الخير

    ازيكم ياجماعة؟ يارب بخير :D
    ندخل فى الموضوع

    النهاردة الصبح لاقيت الموضوع دا المطلوب فيه تصميم DMS -Database Management System
    بحيث إن يتم إنشاء قاعدة بينات وجداول وعواميد وانا عن نفسى المشروع عجبنى والفكرة نفسها دمها خفيف :D

    الموضوع كله زى ماقلت فى توظيف ال OOP فهنعمل class لل DB و class لل Table وclass لل Column ونحدد فيه كل اللى احنا عايزينه "سهولة مفرطة"

    بالمناسبة تقدر تextend البروجكت لأكتر من كدا زى تدعيم دوال او حتى تعمل Querying System
    على كل حال المشروع كامل
    كود:
    #!bin/python
    
    ###############################
    # Author: Ahmed Youssef
    # Site  : Programming-Fr34ks.NET
    # Date  : 1-8-07
    ###############################
    
    
    #-Imports-#
    import sys, os, os.path
    import cPickle
    #-Imports-#
    
    #
    #creating a table, columns
    #CREATE tblName of (int, string, int)
    #supported types are int, string
    #CREATE student of (id as int, name as string, level as int)  
    #
    
    class TableNotFoundException(Exception):
        pass
    
    
    class ColumnNotFoundException(Exception):
        pass
    
    
    class NonValidDataException(Exception):
        pass
    
    
    class Column(object):
    
        def __init__(self, columnName, _type):
            self.__columnName=columnName
            self.__columnType=_type #(int or string)
            self.__values=[]
    
        def __getType(self):
            return self.__columnType
    
        def __setType(self, newType):
            self.__columnType=newType
    
        ColumnType=property(fget=__getType, fset=__setType)
    
        def getValues(self):
            return self.__values
        def addValue(self, val):
            try:
                #assert isinstance(val, self.__getType)
                self.__values +=[val] #in order..
            except AssertionError, e:
                pass
    
        def changeVal(self, index, to):
            self.__values[index]=to
    
        def changeType(self, newType):
            if not isinstance(newType, self.__columnType):
                self.__columnType=newType
                self.__values=[]
            else:
                self.__columnType=newType
    
        def clearVals(self):
            self.__values=[]
        
    
    
    class Table(object):
    
        def __init__(self, tblName, columns=[]):
            self.__tblName=tblName
    
            self.__colsTbl={} 
    
    
        def __getColumnByName(self, colName):
            if not colName in self.__columns:
                raise ColumnNotFoundException
            
            return self.__columns[self.__columns.index(colName)]
            
              
        def createColumns(self, cols=[], types=[]):
            try:
                assert len(cols)==len(types) #don't insert missin' data
                index=0
                while index<len(cols):
                     self.__colsTbl[cols[index]]= Column(cols[index], types[index])
                     index += 1
            except AssertionError, e:
                print "Error: ", e
    
        def insertIntoColumns(self, cols=[], vals=[]):
            assert len(cols)==len(vals)
            index=0
            while index<len(cols):
                self.__colsTbl[cols[index]].addValue(vals[index])
                index += 1
    
    
    
        def showMe(self):
            s=""
            index=0
            cols=self.__colsTbl.keys()
            objs=self.__colsTbl.values()
    
            s += "-"*30
            s +="\n"
            for col in cols:
                s += col + "\t"
    
            s +="\n"
            s += "-"*30
            s += "\n"
            length=len(objs[0].getValues())
            while index<length:
                s +="\n"
                for obj in objs:
                    s += str(obj.getValues()[index]) +"\t"
                index += 1
            s += "\n"+"-"*30
            return s
    
        def getRowAtIndex(self, index):
            cols=self.__colsTbl.keys()
            objs=self.__colsTbl.values()
    
            s=""
            for obj in objs:
                s += str(obj.getValues()[index]) + "\t"
            return s
        
        def selectWith(self, colName, value):
            cols=self.__colsTbl.keys()
            objs=self.__colsTbl.values()
    
            s = ""
            s += "\nQuerying DB...\n"
            
            index=0
            cols=self.__colsTbl.keys()
            objs=self.__colsTbl.values()
    
            s += "-"*30
            s +="\n"
            for col in cols:
                s += col + "\t"
    
            s +="\n"
            s += "-"*30
            s += "\n"
    
            who_has_it=[]
            for obj in objs:
                if value in obj.getValues():
                    numOfOcc=obj.getValues().count(value)
                    who_has_it +=[obj]
    
            obj=who_has_it[0]
            vals=obj.getValues()
            indxS=[]
            index=0
            while index<len(vals):
                if vals[index]==value:
                    indxS +=[index]
                index += 1
                
     
            for index in indxS:
                s += self.getRowAtIndex(index) + "\n"
    
            return s
    
    
    
             
            
    class Database(object):
    
        def __init__(self, dbName, ext="pySQL"):
            self.dbName=dbName
            #mkdir for the db..
            if not os.path.exists(dbName):
               os.mkdir(dbName)
            self.tbl=None
            self.__ext=ext
    
        def openTable(self, tblName): #create or open
            os.chdir( self.dbName)
            self.tblName=tblName+"."+self.__ext
            if os.path.exists(self.tblName):
                self.tbl=cPickle.load(file(self.tblName))
            else:
                self.tbl=Table(self.tblName)
    
                               
        def saveTable(self):
            if not os.path.exists(self.tblName):
                f=file(self.tblName, "wb")
                cPickle.dump(self.tbl, f)
                f.close()
            else:
                os.remove(self.tblName)
                f=file(self.tblName, "wb")
                cPickle.dump(self.tbl, f)
                f.close()
        
                
        def close(self):
            self.saveTable()
                
                               
                               
        def deleteTable(self, tblName):
            if not tblName in os.listdir(self.dbName):
                raise TableNotFoundException("No such a table")
            os.remove(tblName)
            
        def close(self):
            pass
        
    if __name__=="__main__":
        
        db=Database("students")
        db.openTable("st2")
        print db.tbl.showMe()
        print db.tbl.selectWith("name", "tina")
    ##    db.tbl.insertIntoColumns(cols=["id", "name"], vals=[9, "hanna"])
    ##    db.saveTable()
        print db.tbl.selectWith("name", "hanna")
        db.close()
    ##    db.tbl.createColumns(cols=["id","name"], types=[int, str])
    ##    db.tbl.insertIntoColumns(cols=["id", "name"], vals=[0, "ahmed"])
    ##    db.tbl.insertIntoColumns(cols=["id", "name"], vals=[1, "tina"])
    ##    db.tbl.insertIntoColumns(cols=["id", "name"], vals=[2, "gina"])
    ##    db.tbl.insertIntoColumns(cols=["id", "name"], vals=[3, "youssef"])
    ##    db.tbl.insertIntoColumns(cols=["id", "name"], vals=[4, "guru"])
    ##    db.tbl.insertIntoColumns(cols=["id", "name"], vals=[5, "ahmed"])
    ##    db.tbl.insertIntoColumns(cols=["id", "name"], vals=[6, "tina"])
    ##    db.tbl.insertIntoColumns(cols=["id", "name"], vals=[7, "tina"]) 
    ##    db.tbl.insertIntoColumns(cols=["id", "name"], vals=[8, "gina"]) 
    ##    db.saveTable()
    ##    db.close()
    يلا بالتوفيق :D
    التعديل الأخير تم بواسطة StrikerX; الساعة 09-01-2008, 04:08 AM.
    Programming-Fr34ks[dot]NET
    Ma Weblog
    ابدأ بتعلم Python | Ruby
    كتاب البايثون متوافر الآن
    لا اتواجد بهذا المنتدى ... للإتصال

  • #2
    شكرا أخ StrikerX على المشروع
    رغم أني مش فاهم منه شيء !!! لاتعليق

    سؤال محيرني كثير من أول ما شفت مواضيعك
    أنت ليه مصر على الـ Python ؟؟؟

    تعليق


    • #3
      مشـروع جميـل يا ابو حميـد ومتالق دائمـا

      تعليق


      • #4
        أنت ليه مصر على الـ Python ؟؟؟
        i didn't want to expose his relationship with python

        ولا في سبب تاني ياسترايكييييي
        ههههههههههههههههه
        BOOOF , I AM GONE
        Still , you gotta wait for my PRESENT :D
        C programming arabic Tutorial|Programming-fr34ks

        تعليق


        • #5
          هههههههههههههههههههه
          @Brave Heart: مممم اعتقد ليا مواضيع فيها لغات تانية .. لكن الواقع انى لما ببدأ اى حاجة بحب اخليها بالبيثون لأنها بتكون Cleaner شوية وبتخلينى اجمع افكارى اسرع. وبالمناسبة الموضوع دا عملى مشاكل لأن فى حاجات المفروض اكتبها بال C# وعملتها بال بيثون وكسلت اعيد كتابتها بال C#

          @Mutati0N : شكرا على مرورك ياكريم ^_^

          @St0rM: اركننن يابنى وخلي الكرنل تنفعك
          Programming-Fr34ks[dot]NET
          Ma Weblog
          ابدأ بتعلم Python | Ruby
          كتاب البايثون متوافر الآن
          لا اتواجد بهذا المنتدى ... للإتصال

          تعليق


          • #6
            بخصوص المشروع نفسه تابع معايا التطبيق التالى
            كود:
              db=Database("students")
            هنا تم إنشاء داتا بيز بإسم students .. وفى حال لو موجودة هيتم الدخول فى الخطوة اللى بعدها ..
            الخطوة اللى بعدها بكل تأكيد هى إختيار جدول مثلا..
            كود:
                db.openTable("st2")
            openTable هى ميثود بتفتح ال Table اذا كان موجود وإذا لأ بيتم إنشاءه

            كود:
                print db.tbl.showMe()
            showMe هى ميثود بتعرضلك الtable

            على فرض إن الجدول نفسه لسه منشأ فأكيد لازم تحدد الcolumns اللى هتكون فيه + الData Types -انا إستخدمت 2 types بس وهما ال int, str

            كود:
            db.tbl.createColumns(cols=["id","name"], types=[int, str])
            بيتم إنشاء Column بإسم id وال type بتاعه int
            وColumn تانى بإسم name وال type بتاعه str

            نزود ال جدول بالداتا
            كود:
            db.tbl.insertIntoColumns(cols=["id", "name"], vals=[0, "ahmed"])
            كود:
            db.tbl.insertIntoColumns(cols=["id", "name"], vals=[1, "tina"])
            .... etc

            بعد كل دا لازم نسيف الشغل
            كود:
            db.saveTable()
            بإستخدام saveTable method

            وبعد كدا نقفل الداتا بيز
            كود:
            db.close()
            جميل .. إذا حبيت تستعلم عن حاجة فى ال DB ؟
            بكل بساطة اختار الColumn + الValue اللى انت عايزها وهو هيعيدلك ال ROW كله
            على فرض إن فى hanna مسجلة فى ال table لكننا عايزين ال id مثلا بتاعها فبالتالى هنعمل ال بحث بإستخدام ال name column
            كود:
                print db.tbl.selectWith("name", "hanna")
            بالمناسبة بردو إذا فى اكتر من واحد بنفس الإسم هيعيدلك list بكل ال rows بتاعته ..

            واخيرا شوية افكار عندى إذا هكمل ال DMS دا او لو حد عايز يكمله بردو مش مشكلة:
            تقدر تعمل Querying language للتعامل مع ال DMS دا بكل سهولة
            تقدر تدعم فيها حاجة زى ال Regular Expression ربنا يخلى ال RE Engine :D
            تقدر تدعم methods إضافة بال DMS لحساب حاجات زى المتوسط وكدا
            تقدر تدعم حاجة زى AUTO INC
            تقدر تدعم حاجة زى Primary Key

            وادى صورة لل output بتاع البرنامج التجريبى الموجود فى البروجكت

            بالتوفيق
            Programming-Fr34ks[dot]NET
            Ma Weblog
            ابدأ بتعلم Python | Ruby
            كتاب البايثون متوافر الآن
            لا اتواجد بهذا المنتدى ... للإتصال

            تعليق


            • #7
              تشكرات يالغالي وإن شاء الله نتوفق ونتعرف على اللي تقوله

              شكرا أخ StrikerX على المشروع
              رغم أني مش فاهم منه شيء !!! لاتعليق

              سؤال محيرني كثير من أول ما شفت مواضيعك
              أنت ليه مصر على الـ Python ؟؟؟
              <--- ذكرتني في واحد لوول
              سبحان الله وبحمده ... سبحان الله العظيم

              تعليق


              • #8
                السلام عليكم
                فكرة رائعة جدا
                لكن لو تم تغليف قاعدة بيانات بها لكانت الفائدة اكبر
                انا ان شاء الله تاوى اغلف sqlite بيها

                تعليق


                • #9
                  شكرا على مروركم.. حاليا انا وستورم شغالين فى مشروع متكامل مشابه ل SQLite واعتقد هتعجبك يا sayedall ^_^
                  Programming-Fr34ks[dot]NET
                  Ma Weblog
                  ابدأ بتعلم Python | Ruby
                  كتاب البايثون متوافر الآن
                  لا اتواجد بهذا المنتدى ... للإتصال

                  تعليق


                  • #10
                    يعطيك العافيه استاذ : محمد .... واطال الله فى عمرك .. ونفع بك ارجاء البلاد الينكساويه

                    Twitter
                    : @Linux4SA

                    تعليق


                    • #11
                      شكرا يابدر على مرورك بس
                      مين محمد دا
                      شكلك معلى النهاردة :d
                      Programming-Fr34ks[dot]NET
                      Ma Weblog
                      ابدأ بتعلم Python | Ruby
                      كتاب البايثون متوافر الآن
                      لا اتواجد بهذا المنتدى ... للإتصال

                      تعليق


                      • #12
                        رائع جدا يا احمد ،،

                        سأقرا الكود اولا ،، واذا ما فهمت حاجة ،، رجعتلك

                        تحياتي ،، وبانتظار ال StrikerXSQL ،،

                        تعليق


                        • #13
                          المشاركة الأصلية بواسطة StrikerX مشاهدة المشاركة
                          شكرا على مروركم.. حاليا انا وستورم شغالين فى مشروع متكامل مشابه ل SQLite واعتقد هتعجبك يا sayedall ^_^
                          السلام عليكم
                          ده هيكون شىء رائع وجود مشاريع عربية ولكن لو كان لديك اى كتب او معلومات تفصيلية عن بناء نظم قواعد االبيانات وبالتحديد كيفية الكتابة فى الملفات ديه اعتقد من اهم الخطوات

                          تعليق


                          • #14
                            شكرا SudaNix على مرورك بس لسه مش حددنا اسم

                            sayedall: ال DBMS مش Design Pattern معين الناس بتشتغل عليه ولكن مجموعة اجزاء بتختلف ال implementation بتاعتها ولكن كل المطلوب من الواحد معرفة كويسة ب اللغة نفسها و SQL Syntax و ال Data Structures وال Searching & Sorting و ال Serialization و Transaction + شوية حاجات اضافية ويبقة عندك خلفية عن ال DB API Specification بردو "هتلاقيها فى موقع اللغة اللى بتستخدمها"

                            بخصوص الكتب وكدا فجرب
                            Database Design: The Semantic Modeling Approach.
                            و هنا

                            على كل حال موقع SourceForge فيه امثلة كتير على ال DBMS فخدلك جولة
                            Programming-Fr34ks[dot]NET
                            Ma Weblog
                            ابدأ بتعلم Python | Ruby
                            كتاب البايثون متوافر الآن
                            لا اتواجد بهذا المنتدى ... للإتصال

                            تعليق

                            يعمل...
                            X