في جوهره، يتيح لغة البرمجة C# مرونة كبيرة في تنفيذ أنواع مختلفة من البرامج، بما في ذلك تلك التي تتعامل مع استفسارات المستخدم. عند كتابة برنامج يقوم بقراءة وعرض أسئلة مع إمكانية الانتظار للإجابة، يمكن أن تكون العملية تحتاج إلى بعض التفكير الإبداعي والاستراتيجي.
في البداية، يمكنك استخدام هيكل التحكم التسلسلي لتنظيم تسلسل عرض الأسئلة وانتظار الإجابة. يمكن أن يكون لديك مصفوفة أو هيكل بيانات آخر يحمل الأسئلة والإجابات، ويمكنك استخدام حلقة تكرار لعرض كل سؤال بالتسلسل وانتظار الإجابة.
لنفترض أن لديك كلاس يحمل معلومات السؤال والإجابات كالتالي:
public class Question
{
public string Type { get; set; }
public string Content { get; set; }
public List<string> Answers { get; set; }
public string CorrectAnswer { get; set; }
}
وفيما يلي جزء من الشيفرة التي يمكنك استخدامها كنقطة انطلاق:
class Program
{
static void Main()
{
List questions = LoadQuestions();
foreach (var question in questions)
{
DisplayQuestion(question);
string userAnswer = Console.ReadLine();
bool isCorrect = CheckAnswer(question, userAnswer);
if (isCorrect)
{
Console.WriteLine("إجابة صحيحة!");
}
else
{
Console.WriteLine("إجابة خاطئة. الإجابة الصحيحة هي: " + question.CorrectAnswer);
}
Console.WriteLine("اضغط على Enter للانتقال إلى السؤال التالي...");
Console.ReadLine();
}
}
static void DisplayQuestion(Question question)
{
switch (question.Type)
{
case "MultipleChoice":
DisplayMultipleChoice(question);
break;
case "TextboxAnswer":
DisplayTextboxAnswer(question);
break;
case "WebpageQuestion":
DisplayWebpageQuestion(question);
break;
default:
Console.WriteLine("نوع سؤال غير معروف");
break;
}
}
static void DisplayMultipleChoice(Question question)
{
Console.WriteLine("سؤال اختيار من متعدد:");
Console.WriteLine(question.Content);
for (int i = 0; i < question.Answers.Count; i++)
{
Console.WriteLine($"{i + 1}. {question.Answers[i]}");
}
}
static void DisplayTextboxAnswer(Question question)
{
Console.WriteLine("سؤال بإجابة نصية:");
Console.WriteLine(question.Content);
}
static void DisplayWebpageQuestion(Question question)
{
Console.WriteLine("سؤال عبر صفحة ويب:");
Console.WriteLine(question.Content);
Console.WriteLine("رابط الصفحة: " + question.Answers[0]);
}
static bool CheckAnswer(Question question, string userAnswer)
{
return userAnswer.Trim().Equals(question.CorrectAnswer.Trim(), StringComparison.OrdinalIgnoreCase);
}
static List LoadQuestions()
{
return new List
{
new Question
{
Type = "MultipleChoice",
Content = "ما هي لغة البرمجة الرئيسية في مشروعك؟",
Answers = new List<string> { "C#", "Java", "Python", "JavaScript" },
CorrectAnswer = "C#"
},
new Question
{
Type = "TextboxAnswer",
Content = "ما هو مصطلح يستخدم لوصف لغة البرمجة التي تعمل على جمع النفايات بشكل تلقائي؟"
CorrectAnswer = "Garbage Collection"
},
new Question
{
Type = "WebpageQuestion",
Content = "ما هو محتوى الصفحة التي تم وضعها باللغة العربية؟",
Answers = new List<string> { "https://example.com/arabic-page" },
CorrectAnswer = "https://example.com/arabic-page"
}
};
}
}
هذا هو نموذج بسيط لبرنامج C# يقوم بعرض أسئلة متعددة الأنواع وينتظر إجابة المستخدم قبل الانتقال إلى السؤال التالي. يمكنك تكييفه وتوسيعه وفقًا لاحتياجات مشروعك الخاص.
بالطبع، دعونا نقوم بتوسيع المزيد عن البرنامج وتوفير مزيد من المعلومات حول بعض النقاط الهامة.
1. تحسين هيكل السؤال:
يمكنك تحسين هيكل السؤال ليكون أكثر تنظيمًا وسهولة في الفهم. يمكنك إضافة خصائص إضافية للسؤال مثل “الصفحة المصدر” للأسئلة من نوع “WebpageQuestion”، وهكذا.
public class Question
{
public string Type { get; set; }
public string Content { get; set; }
public List<string> Answers { get; set; }
public string CorrectAnswer { get; set; }
public string SourcePage { get; set; }
}
2. تحسين إجراء فحص الإجابة:
يمكنك تحسين إجراء فحص الإجابة ليكون أكثر دقة، ومن الممكن أن تقوم بتحسين معالجة الإجابات بحيث تتناسب مع نوع السؤال.
static bool CheckAnswer(Question question, string userAnswer)
{
switch (question.Type)
{
case "MultipleChoice":
int selectedOption;
if (int.TryParse(userAnswer, out selectedOption) && selectedOption >= 1 && selectedOption <= question.Answers.Count)
{
return question.Answers[selectedOption - 1].Equals(question.CorrectAnswer, StringComparison.OrdinalIgnoreCase);
}
break;
case "TextboxAnswer":
return userAnswer.Trim().Equals(question.CorrectAnswer.Trim(), StringComparison.OrdinalIgnoreCase);
case "WebpageQuestion":
return userAnswer.Trim().Equals(question.CorrectAnswer.Trim(), StringComparison.OrdinalIgnoreCase);
}
return false;
}
3. إدارة الأخطاء والاستثناءات:
قد تكون هناك حالات استثناء يجب التعامل معها، مثل إذا كان هناك خطأ في تحميل الأسئلة أو في عملية قراءة الإجابة من المستخدم.
try
{
List questions = LoadQuestions();
}
catch (Exception ex)
{
Console.WriteLine("حدث خطأ: " + ex.Message);
}
4. توسيع نطاق البرنامج:
يمكنك توسيع نطاق البرنامج لدعم ميزات إضافية، مثل تحميل الأسئلة من مصدر خارجي أو إمكانية إضافة أسئلة جديدة أثناء تشغيل البرنامج.
الختام:
هذا البرنامج هو مجرد نقطة انطلاق، ويمكنك دائماً تحسينه وتكييفه حسب احتياجات مشروعك الفعلية. يمكنك أيضًا إضافة واجهة المستخدم الرسومية (GUI) لتحسين تجربة المستخدم وجعل البرنامج أكثر تفاعلية.