باستخدام مفاهيم البرمجة الغرضية التوجه OOP in java اكتب برنامج الهدف منه تخزين مجموعة كتب و المؤلفين

  • برمجة جافا

باستخدام مفاهيم البرمجة الغرضية التوجه object oriented programming in java

----------------------------------------

المطلوب إنشاء برنامج الهدف منه تخزين مجموعة كتب و من ثم عرضها بشكل مرتب.

البيانات التي نريد تخزينها هي التالية:

المؤلفين: بيانات كل مؤلف ستتضمن (رقم تعرفة, الإسم الكامل, الهاتف, البريد الإلكتروني).

الكتب: بيانات كل كتاب ستتضمن (رقم تعرفة, العنوان, تاريخ النشر, رقم الإصدار, مؤلف الكتاب).

ملاحظة: رقم التعرفة لكل من المؤلفين و الكتب يجب أن يتم إعطاؤه لهم بشكل تلقائي

شرح أقسام المشروع

Author يمثل أي مؤلف يتم إنشاؤه.

Book يمثل أي كتاب يتم إنشاؤه.

Library سيحتوي على كل المؤلفين و الكتب و الدوال التي تسمح بإضافة و حذف مؤلف و كتب.

add_author(): مهمتها إضافة مؤلف جديد.

remove_author(): مهمتها حذف مؤلف من خلال id المؤلف الذي نمرره لها عند استدعائها.

print_author_books(): مهمتها عرض إسم المؤلف و أسماء كتبه من خلال id المؤلف الذي نمرره لها عند استدعائها.

add_book(): مهمتها إضافة كتاب جديد.

remove_book(): مهمتها حذف كتاب من خلال id الكتاب الذي نمرره لها عند استدعائها.

print_book(): مهمتها عرض كل معلومات الكتاب و إسم مؤلفه من خلال id الكتاب الذي نمرره لها عند استدعائها.

قم بتحويل الرسم إلى كود.

 ثم قم بإنشاء مجموعة كتب و مؤلفين. 

و قم بتجربة جميع الدوال في البرنامج.

معلومة

لإعطاء رقم id موحد لكل كائن يتم إنشاؤه, يمكنك تعريف متغير ثابت ( static ) في الكلاس و جعله أيضاً private حتى لا يمكن تعديل قيمته بشكل يدوي من خارج هذا الكلاس. بعدها تقوم فقط بجعل قيمته تزيد 1 كلما قمت بإنشاء كائن من هذا الكلاس و من ثم تضع قيمته في المتغير id.

ملاحظة: سنقوم بإنشاء متغير نوعه private static إسمه idIncrementer في الكلاس Author و الكلاس Book من أجل هذا الهدف فقط

الأجوبة

public class Author {   
    // هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها المؤلف
    int id;
    String name;
    String phone;
    String email;
    // لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير
    // لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر
    private static int idIncrementer = 0;
    // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر
    // id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة
    // الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن
    public Author(String name, String phone, String email)
    {
        idIncrementer++;
        this.id = idIncrementer;
        this.name = name;
        this.phone = phone;
        this.email = email;
    }    
}public class Book {    
    // هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها الكتاب
    int id;
    String title;
    String publishingDate;
    int version;
    Author author;    
    // لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير
    // لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر
    private static int idIncrementer = 0;
    // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر
    // id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة
    // الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن
    public Book(String title, String publishingDate, int version, Author author)
    {
        idIncrementer++;
        this.id = idIncrementer;
        this.title = title;
        this.publishingDate = publishingDate;
        this.version = version;
        this.author = author;
    }
}

 

 

import java.util.ArrayList;
// يمثل كل ما تحتويه المكتبة من كتب و مؤلفين و الدوال التي يمكن استخدامها للتعامل معهم Library الكلاس
public class Library {    
    // سنضع فيه كل معلومات الكتب books سنضع فيه كل معلومات المؤلفين, و الكائن authors الكائن
    ArrayList authors = new ArrayList(); 
    ArrayList books = new ArrayList();    
    // authors بداخل المصفوفة Author يمكن استخدامها لإضافة كائن من الكلاس addAuthor() الدالة 
    public void addAuthor(Author author)
    {
        authors.add(author);
    }    
    // الخاص به id بالإعتماد على رقم الـ authors موضوع بداخل المصفوفة Author يمكن استخدامها لإلغاء كائن من الكلاس removeAuthor() الدالة 
    public void removeAuthor(int id)
    {
        // author و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن authors بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
        for (Author author: authors)
        {
            // الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ author في حال كان الكائن
            if (author.id == id)
            {
                authors.remove(author);
                return;
            }
        }        
        // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ authors في حال لم يتم إيجاد أي كائن في المصفوفة 
        System.out.println("Author with id " + id + " is not found!");
        System.out.println("----------------------");
    }    
    // الخاص به id بالإعتماد على رقم الـ authors يمكن استخدامها لطباعة كل المعلومات المتوفرة حول مؤلف موضوع بداخل المصفوفة printAuthor() الدالة 
    public void printAuthor(int id)
    {
        // author و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن authors بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
        for (Author author: authors)
        {
            // الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ author في حال كان الكائن
            if (author.id == id)
            {
                System.out.println("Author with id " + id + " info.");
                System.out.println("Name: " + author.name );
                System.out.println("Phone: " + author.phone);
                System.out.println("Email: " + author.email);
                System.out.println("----------------------");
                return;
            }
        }        
        // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ authors في حال لم يتم إيجاد أي كائن في المصفوفة 
        System.out.println("Author with id " + id + " is not found!");
        System.out.println("----------------------");
    }    
    // الخاص به id بالإعتماد على رقم الـ authors يمكن استخدامها لطباعة كل أسماء الكتب التي قام بتأليفها مؤلف موضوع بداخل المصفوفة printAuthorBooks() الدالة 
    public void printAuthorBooks(int id)
    {
        // الذي تم تمريره للدالة id يملك رقم الـ authors بهدف التأكد ما إن كان يوجد كاتب في المصفوفة isAuthorExist سنستخدم المتغير 
        // من إعداد هذا الكاتب لأن ذلك سيكون غير منطقي books لأنه إن لم يكن هناك كاتب أصلاً فلن نقوم بالبحث عن كتب في المصفوفة
        boolean isAuthorExist = false;
        String authorName = "";        
         // author و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن authors هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
        for (Author author: authors)
        {
            // authorName الذي مررناه للدالة سيتم تخزين إسم المؤلف في المتغير id يملك نفس رقم الـ author في حال كان الكائن
            // authors و إيقاف الحلقة لأننا تأكدنا أن هذا المؤلف موجود في المصفوفة true إلى isAuthorExist و من ثم تغيير قيمة
            if (author.id == id)
            {
                isAuthorExist = true;
                authorName = author.name;
                break;
            }
        }        
        // authors فهذا يعني أنه لم يتم إيجاد أي كائن في المصفوفة false تساوي isAuthorExist في حال بقيت قيمة
        // الذي تم تمريره للدالة سيتم طباعة الجملة التالية و الخروج من الدالة id يملك نفس رقم الـ 
        if (!isAuthorExist)
        {
            System.out.println("Author with id " + id + " is not found!");
            System.out.println("----------------------");
            return;
        }        
        // هنا سيتم طباعة إسم المؤلف
        System.out.println("Books of author " + authorName + ":");        
        // book و كل كائن نمر عليه ( و الذي يمثل كتاب ) سنضعه بشكل مؤقته بداخل الكائن books هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
        for (Book book: books)
        {
            // الذي تم تمريره id يملك نفس رقم الـ book ( أي المؤلف ) الموضوع في الكائن author في حال كان الكائن
            // و بالتالي سيتم طباعة إسم هذا الكتاب book للدالة فهذا يعني أنه هو مؤلف الكتاب الحالي المخزن في الكائن
            if (book.author.id == id)
            {
                System.out.println("- " + book.title);
            }
        }
        System.out.println("----------------------");
    }    
    // books بداخل المصفوفة Book يمكن استخدامها لإضافة كائن من الكلاس addBook() الدالة 
    public void addBook(Book book)
    {
        books.add(book);
    }
    // الخاص به id بالإعتماد على رقم الـ books موضوع بداخل المصفوفة Book يمكن استخدامها لإلغاء كائن من الكلاس removeBook() الدالة     
    public void removeBook(int id)
    {
        // book و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن books بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
        for (Book book: books)
        {
            // الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ book في حال كان الكائن
            if (book.id == id)
            {
                books.remove(book);
                return;
            }
        }        
        // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ books في حال لم يتم إيجاد أي كائن في المصفوفة 
        System.out.println("Book with id " + id + " is not found!");
        System.out.println("----------------------");
    }    
    // الخاص به id بالإعتماد على رقم الـ books يمكن استخدامها لطباعة كل المعلومات المتوفرة حول كتاب موضوع بداخل المصفوفة printBook() الدالة 
    public void printBook(int id)
    {
        // book و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن books بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
        for (Book book: books)
        {
            // الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ book في حال كان الكائن
            if (book.id == id)
            {
                System.out.println("Book with id " + id + " info.");
                System.out.println("Title: " + book.title);
                System.out.println("Version: " + book.version);
                System.out.println("Publishing date: " + book.publishingDate);
                System.out.println("Author: " + book.author.name);
                System.out.println("----------------------");
                return;
            }
        }        
        // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ books في حال لم يتم إيجاد أي كائن في المصفوفة 
        System.out.println("Book with id " + id + " is not found!");
        System.out.println("----------------------");
    }    
}public class Main {    
    public static void main(String[] args) {        
        // أي كأننا قمنا بإنشاء 3 مؤلفين Author هنا قمنا بإنشاء 3 كائنات من الكلاس
        Author author1 = new Author("Mhamad", "+96170123456", "mhamad@gmail.com");
        Author author2 = new Author("Salem",  "+9664021833",  "salem@gmail.com");
        Author author3 = new Author("Rola",   "+9631249392",  "rola@gmail.com");        
        // أي كأننا قمنا بإنشاء 4 كتب Book هنا قمنا بإنشاء 4 كائنات من الكلاس
        // Book وضعناه لكائنين من الكلاس author1 لاحظ أننا وضعنا الثلاث مؤلفين بداخل الكتب التي أنشأناها. و لاحظ أن الكائن
        // book2 و book1 يعتبر مؤلف الكتابين اللذين يمثلهما الكائنين author1 إذاً المؤلف الذي يمثله الكائن
        Book book1 = new Book("Learn Java", "12-20-2019", 1, author1);
        Book book2 = new Book("Learn HTML", "8-5-2018", 3, author1);
        Book book3 = new Book("PHP for beginners", "10-2-2019", 1, author2);
        Book book4 = new Book("C# for dummies", "12-20-2019", 1, author3);        
        // لأننا نريد تخزين الكتب و المؤلفين بشكل مرتب بداخله Library هنا قمنا بإنشاء كائن من الكلاس
        Library library = new Library();        
        // addAuthor() بواسطة الدالة library التي يمكلها الكائن authors هنا قمنا بإضافة المؤلفين في المصفوفة
        library.addAuthor(author1);
        library.addAuthor(author2);
        library.addAuthor(author3);        
        // addBook() بواسطة الدالة library التي يمكلها الكائن books هنا قمنا بإضافة الكتب في المصفوفة
        library.addBook(book1);
        library.addBook(book2);
        library.addBook(book3);
        library.addBook(book4);        
        // printAuthor() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة معلومات كل المؤلفين بالإعتماد على رقم التعرفة
        // تذكر: رقم التعرفة الخاص بكل مؤلف تم إنشاؤه بشكل تلقائي عند إنشاء كل مؤلف بداخل الكونستركتور
        library.printAuthor(1);
        library.printAuthor(2);
        library.printAuthor(3);        
        // printBook() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة معلومات كل الكتب بالإعتماد على رقم التعرفة
        // تذكر: رقم التعرفة الخاص بكل كتاب تم إنشاؤه بشكل تلقائي عند إنشاء كل كتاب بداخل الكونستركتور
        library.printBook(1);
        library.printBook(2);
        library.printBook(3);
        library.printBook(4);        
        // printAuthorBooks() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة الكتب التي يملكها كل مؤلف بالإعتماد على رقم التعرفة
        library.printAuthorBooks(1);
        library.printAuthorBooks(2);
        library.printAuthorBooks(3);
        // removeAuthor() هنا قمنا بحذف المؤلف الذي يملك رقم التعرفة 2 بواسطة الدالة
        // printAuthorBooks() و printAuthor() بعدها حاولنا طباعة معلوماته و الكتب التي قام بتأليفها بواسطة الدالة
        // لاحظ أنه لم يحدث أي خطأ عند محاولة طباعة معلومات مؤلف لم يعد موجوداً لأن الدوال مصممة للتأكد قبل المحاولة الحذف
        library.removeAuthor(2);
        library.printAuthor(2);
        library.printAuthorBooks(2);       
    }   
}
هل كان المحتوى مفيد؟

تبحث عن مدرس اونلاين؟

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