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

سؤال بسيط حول السي إنشاء جدول

بدأه blacklove في 11 مايو 2011 · 7 رد · 590 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|

السلام عليكم

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

xbcvfc.jpg

تم تعديل هذه المشاركة بواسطة blacklove في 11 مايو 2011 في 23:09

#2

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

uP

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

#3
blacklove كتب:

السلام عليكم إخوتي الكرام

أردت فقط أن أسئلكم عن كيفية تصميم جدول عدد أعمدته وخاناته يطلب من المستخدم إدخالهم بـ C

السلام عليكم

تقريباً مجرد إنشاء مصفوفة ديناميكية ذات بعدين

الكيفية الفعلية تتطلب مثال او إنشاء كود

تابع هالموضوع

هـ;ـا

او اعمل بحت بجوجل بالجملة التالية

dynamic 2d arrays in C

أطيب المُنى

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#4

أـ ختي حورية بارك الله فيك |~

لكن ليس هذا هو المطلوب لقد قمت بتحديث الموضوع أرجو أن تنظري إلى الشكل كيف أريده |~

بارك الله فيك |~

#5
blacklove كتب:

أـ ختي حورية بارك الله فيك |~

لكن ليس هذا هو المطلوب لقد قمت بتحديث الموضوع أرجو أن تنظري إلى الشكل كيف أريده |~

بارك الله فيك |~

وبارك الله فيك أخي

والله الشاهد قد شو نعسانة

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

فيجب إنشاء مصفوفات دايناميكية ووو شغلة مطولة

بكل الحالات الشغلة رسم واستعمال تحسينات نصية متل tab موجودة بقلب جملة تكرارية for loop ع المصفوفة وايضاً بنستعمل record يعني struct

بالنسبة إلي الشغلة محتاجة مجموعة من مكونات اللغة لعمل الرسمة والبرنامج بالكامل

آسفة اخي ليست بمجرد مشاركة عابرة بسرعة

ربما هناك اجابات اخرى من البعض

وبكل الأحوال لقانون المنتدى يجب وضع المحاولة والإشارة إلى الجزء الصعب

والله أعلم

يحرسك ويرعاك

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#6

أظن أن مصفوفة المؤشرات تفي بالغرض :wink: يمكنك فعل ما تريد بهذه المصفوفة :

char* name[7][4];

بالتوفيق.

تم تعديل هذه المشاركة بواسطة khaled_prg في 12 مايو 2011 في 02:02

#7

كنت من قبل صنعت تصميم مشابه و لكن بإستخدام الـ Box drawing الخاصه بالدوس و اليونيكود، المثال الذى كتبته وقتها يستخدم فئات عديده و قد بحثت عنه داخل جهازي و لم اجده لذا كتبت لك مثال بسيط يوضح لك العمليه.

الداله التى ستستخدمها إسمها addRow و نتيجتها عند تنفيذ الكود التالي:

int main()
{
    Table t = { vector<uint8>(), 0 };

    t.ColumnsSizes.push_back(10);
    t.ColumnsSizes.push_back(11);
    t.ColumnsSizes.push_back(12);

    cout << "Names in Table:";

    t.Start.X = 1;
    t.Start.Y = 1;

    addRow(Header, &t, "First Name", "Middle Name", "Last Name" );
    addRow(Normal, &t, "Muhammad", "alaa", "al-Din");
    addRow(Normal, &t, "Yasser", "abd allah", "kamel");
    addRow(Footer, &t, "Ali", "Maged", "Khalil");
}

هي :

Names in Table:
 ┌──────────┬───────────┬────────────┐
 │First Name│Middle Name│   Last Name│
 ├──────────┼───────────┼────────────┤
 │  Muhammad│       alaa│      al-Din│
 ├──────────┼───────────┼────────────┤
 │    Yasser│  abd allah│       kamel│
 ├──────────┼───────────┼────────────┤
 │       Ali│      Maged│      Khalil│
 └──────────┴───────────┴────────────┘
Press any key to continue . . .

ملف الكود بالمرفقات و إليك شرح سريع له:

الكود يبدأ بإعادة تسمية بعض الأنواع الأساسيه :

typedef unsigned char uint8, uchar;
typedef char* astr;

**************************************************

التركيب Table و شكله كالتالي:

struct Table
{
	vector<uint8> ColumnsSizes;
	COORD Start, Current;

	void toNextLine()
	{
		Current.X = Start.X;
		Current.Y++;

		SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Current);
	}
};

العنصر ColumnsSizes يمثل vector حيث عدد عناصره هو عدد الأعمده التى سيتم رسمها و قيمة كل عنصر داخل الـ vector هو عدد الحروف الذى يتم تخزينها فى ذلك العمود، هذا العدد هو أقصي عدد من الحروف و إن تم تخطيها سيتم رمي الإستثناء length_error.

النوع COORD تم تعريفه داخل الملف Windows.h و يمثل موقع المؤشر داخل شاشة الكونسول و يحتوي على العنصرين X و Y و لدي عنصرين و هو Start و هو نقطة بداية رسم الجدول و Current هي نقطة بداية رسم الصف الجديد، لاحظ ان العنصر Current يتم تحديثه تلقائيا و لا دخل لك به.

الداله toNextLine تقوم بتحريك مؤشر الكونسول لأول مكان سيتم رسم الصف الجديد به.

**************************************************

الـ enum RowType:

enum RowType { Header, Normal, Footer };

سيتم استخدامه لاحقا لتحديد نوع الصف الذى تريد إضافته داخل الجدول حيث:

Header: تعني أن الصف الذى سيتم إضافته هو صف تعريفي بعناصر الجدول (و يعني أيضا ان حواف الجدول غير مرتبطه بأي شي أعلاها).

Normal: تعني أن الصف الذى سيتم إضافته يحتوي على بيانات عاديه (و يعني أيضا أن حواف هذا الصف مرتبطه بما قبلها و ما بعدها).

Footer: تعني أن الصف الذى سيتم إضافته يحتوي على بيانات عاديه و ان هذا الصف هو الأخير داخل الجدول (و يعني أيضا أن حواف هذا الصف مرتبطه بما قبلها فقط).

**************************************************

الداله addRow التصريح الخاص بها يأخذ الشكل التالي:

void addRow(RowType type, Table* table, const char* firstValue, ...);

حيث:

type: هو نوع الصف الذى سيتم إضافته.

Table: هو الجدول الذى سيتم إضافة الصف داخله.

firstValue: هو النص الذى سيتم إضافته داخل اول خليه داخل الصف، باقي المعاملات مثل هذا المعامل مع العلم ان عدد المعاملات الباقيه بالإضافه لهذا المعامل لابد ألا يقلوا عن عدد الأعمده التى تم تحديد مساحتهم داخل بيانات الجدول.

سأترك لكم قرائة الكود و الإستفسار عن اى شئ تريده.

mainp.zip

و الله ولي التوفيق

تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 12 مايو 2011 في 08:32

مدونتي: C++ Tips and Tricks

#8

السلام عليكم أخي علاء

بارك الله فيك أخي جزاك الله كل خير على مافعلته بوركة

شكرا لك .........

الكلمات عجزة عن التعبير بالفعل

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