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

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

تم تعديل هذه المشاركة بواسطة blacklove في 11 مايو 2011 في 23:09
--------------------
uP
--------------------
blacklove كتب:السلام عليكم إخوتي الكرام
أردت فقط أن أسئلكم عن كيفية تصميم جدول عدد أعمدته وخاناته يطلب من المستخدم إدخالهم بـ C
السلام عليكم
تقريباً مجرد إنشاء مصفوفة ديناميكية ذات بعدين
الكيفية الفعلية تتطلب مثال او إنشاء كود
تابع هالموضوع
او اعمل بحت بجوجل بالجملة التالية
dynamic 2d arrays in C
أطيب المُنى
[وسط]
♥ Countess ♥

♥
[/وسط]
أـ ختي حورية بارك الله فيك |~
لكن ليس هذا هو المطلوب لقد قمت بتحديث الموضوع أرجو أن تنظري إلى الشكل كيف أريده |~
بارك الله فيك |~
blacklove كتب:أـ ختي حورية بارك الله فيك |~
لكن ليس هذا هو المطلوب لقد قمت بتحديث الموضوع أرجو أن تنظري إلى الشكل كيف أريده |~
بارك الله فيك |~
وبارك الله فيك أخي
والله الشاهد قد شو نعسانة
ولكن لو كانت الفكرة بواسطة ادخال المستخدم اثناء تنفيد البرنامج قبل التحديث للموضوع
فيجب إنشاء مصفوفات دايناميكية ووو شغلة مطولة
بكل الحالات الشغلة رسم واستعمال تحسينات نصية متل tab موجودة بقلب جملة تكرارية for loop ع المصفوفة وايضاً بنستعمل record يعني struct
بالنسبة إلي الشغلة محتاجة مجموعة من مكونات اللغة لعمل الرسمة والبرنامج بالكامل
آسفة اخي ليست بمجرد مشاركة عابرة بسرعة
ربما هناك اجابات اخرى من البعض
وبكل الأحوال لقانون المنتدى يجب وضع المحاولة والإشارة إلى الجزء الصعب
والله أعلم
يحرسك ويرعاك
[وسط]
♥ Countess ♥

♥
[/وسط]
أظن أن مصفوفة المؤشرات تفي بالغرض :wink: يمكنك فعل ما تريد بهذه المصفوفة :
char* name[7][4];
بالتوفيق.
تم تعديل هذه المشاركة بواسطة khaled_prg في 12 مايو 2011 في 02:02
كنت من قبل صنعت تصميم مشابه و لكن بإستخدام الـ 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: هو النص الذى سيتم إضافته داخل اول خليه داخل الصف، باقي المعاملات مثل هذا المعامل مع العلم ان عدد المعاملات الباقيه بالإضافه لهذا المعامل لابد ألا يقلوا عن عدد الأعمده التى تم تحديد مساحتهم داخل بيانات الجدول.
سأترك لكم قرائة الكود و الإستفسار عن اى شئ تريده.
و الله ولي التوفيق
تم تعديل هذه المشاركة بواسطة محمد علاء الدين في 12 مايو 2011 في 08:32
مدونتي: C++ Tips and Tricks
السلام عليكم أخي علاء
بارك الله فيك أخي جزاك الله كل خير على مافعلته بوركة
شكرا لك .........
الكلمات عجزة عن التعبير بالفعل