باستخدام مفاهيم البرمجة الغرضية التوجه OOP in java اكتب برنامج الهدف منه تخزين مجموعة كتب و المؤلفين
- برمجة جافا
- 2022-02-20
- jannatmohammed
الأجوبة
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);
}
}
أسئلة مشابهة
القوائم الدراسية التي ينتمي لها السؤال