سلام
مراحل ساخت سیستم آزمون گیر تحت ویندوز رو میشه بفرمایید .
مثلا در یک صفحه چطور 10 سوال نمایش داده بشه هر سوال 4گزینه و بعد از زدن تمام 10 سوال یک صفحه خودش صفحه بعد رو نمایش بده تا حدود مثلا 100 سوال .
سپاس
Printable View
سلام
مراحل ساخت سیستم آزمون گیر تحت ویندوز رو میشه بفرمایید .
مثلا در یک صفحه چطور 10 سوال نمایش داده بشه هر سوال 4گزینه و بعد از زدن تمام 10 سوال یک صفحه خودش صفحه بعد رو نمایش بده تا حدود مثلا 100 سوال .
سپاس
سلام ببینید این مثال کمکتان میکنه
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace ExamSystem
{
public partial class MainForm : Form
{
private List<Question> questions;
private int currentQuestionIndex;
public MainForm()
{
InitializeComponent();
questions = new List<Question>
{
new Question("سوال 1", new List<string> { "گزینه الف", "گزینه ب", "گزینه ج", "گزینه د" }),
new Question("سوال 2", new List<string> { "گزینه الف", "گزینه ب", "گزینه ج", "گزینه د" }),
// و سایر سوالات
};
currentQuestionIndex = 0;
ShowQuestion();
}
private void ShowQuestion()
{
if (currentQuestionIndex < questions.Count)
{
Question currentQuestion = questions[currentQuestionIndex];
lblQuestion.Text = currentQuestion.Text;
rbOption1.Text = currentQuestion.Options[0];
rbOption2.Text = currentQuestion.Options[1];
rbOption3.Text = currentQuestion.Options[2];
rbOption4.Text = currentQuestion.Options[3];
}
else
{
// نمایش صفحه بعدی
MessageBox.Show("شما به صفحه بعدی رفتید!");
}
}
private void btnNext_Click(object sender, EventArgs e)
{
// ذخیره پاسخ کاربر
currentQuestionIndex++;
ShowQuestion();
}
}
public class Question
{
public string Text { get; set; }
public List<string> Options { get; set; }
public Question(string text, List<string> options)
{
Text = text;
Options = options;
}
}
}
ممنون .برای ساخت صفحه نمایش سوالات از لیست استفاده می کنید ؟ برای اتصال به دیتابیس چکارمیکنید ؟
در btnNext میتونید دستورات ذخیره در دیتابیس را اعمال کنید . اطلاعات کافی در مورد دیتابیس خودتان ندادید . با این حال این نمونه با اسکیوال اکسپرس هست امیدوارم مفید واقع بشه
using System;using System.Collections.Generic;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace ExamSystem
{
public partial class MainForm : Form
{
private List<Question> questions;
private int currentQuestionIndex;
private SqlConnection connection;
public MainForm()
{
InitializeComponent();
// ایجاد اتصال به بانک اطلاعاتی
string connectionString = "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=YourDatabaseName;Integrated Security=True";
connection = new SqlConnection(connectionString);
questions = new List<Question>
{
new Question("سوال 1", new List<string> { "گزینه الف", "گزینه ب", "گزینه ج", "گزینه د" }),
new Question("سوال 2", new List<string> { "گزینه الف", "گزینه ب", "گزینه ج", "گزینه د" }),
// و سایر سوالات
};
currentQuestionIndex = 0;
ShowQuestion();
}
private void ShowQuestion()
{
if (currentQuestionIndex < questions.Count)
{
Question currentQuestion = questions[currentQuestionIndex];
lblQuestion.Text = currentQuestion.Text;
rbOption1.Text = currentQuestion.Options[0];
rbOption2.Text = currentQuestion.Options[1];
rbOption3.Text = currentQuestion.Options[2];
rbOption4.Text = currentQuestion.Options[3];
}
else
{
// نمایش صفحه بعدی
MessageBox.Show("شما به صفحه بعدی رفتید!");
}
}
private void btnNext_Click(object sender, EventArgs e)
{
// ذخیره پاسخ کاربر
SaveUserAnswer();
currentQuestionIndex++;
ShowQuestion();
}
private void SaveUserAnswer()
{
// بررسی کدام گزینه انتخاب شده است و ذخیره در بانک اطلاعاتی
string selectedOption = "";
if (rbOption1.Checked)
selectedOption = rbOption1.Text;
else if (rbOption2.Checked)
selectedOption = rbOption2.Text;
else if (rbOption3.Checked)
selectedOption = rbOption3.Text;
else if (rbOption4.Checked)
selectedOption = rbOption4.Text;
// اجرای دستور INSERT به منظور ذخیره پاسخ کاربر در بانک اطلاعاتی
string query = "INSERT INTO UserAnswers (Question, Answer) VALUES (@Question, @Answer)";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Question", lblQuestion.Text);
command.Parameters.AddWithValue("@Answer", selectedOption);
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show("خطا در ذخیره پاسخ کاربر: " + ex.Message);
}
finally
{
connection.Close();
}
}
}
public class Question
{
public string Text { get; set; }
public List<string> Options { get; set; }
public Question(string text, List<string> options)
{
Text = text;
Options = options;
}
}
}
هر بار که کاربر پاسخی را انتخاب می کنه، پاسخ ذخیره می شه. دستور INSERT برای ذخیره پاسخ کاربر در بانک اطلاعاتی اجرا می شه. نیاز به ایجاد جدول UserAnswers در بانک اطلاعاتی و تنظیمات اتصال به بانک اطلاعاتی خودتان هست که به کد اضافه کنید
ممنون از توجه شما به سوال .
الان اگه بخواهیم در هر صفحه مثلا ۴سوال نمایش داده بشه چکاری میکنید ؟
برای نمایش 4 سوال در هر صفحه، میتونید از متغیرهای startIndex و endIndex استفاده کنید. مقدار اولیه startIndex را برابر با صفر قرار بدید و مقدار endIndex را برابر با 3 (تعداد سوالات در هر صفحه) قرار بدید. سپس در هر بار فراخوانی متد ShowQuestion()، سوالات از startIndex تا endIndex نمایش داده میشن و مقادیر startIndex و endIndex با 4 افزایش مییابند. اگر endIndex بزرگتر از تعداد کل سوالات باشه، به جای نمایش صفحه بعدی، پیامی نمایش داده میشه که به کاربر اطلاع میده که به انتهای سوالات رسیده .
متغیرهای startIndex و endIndex تعیین میکنن که کدام سوالات در هر صفحه نمایش داده بشن. همچنین در هر بار کلیک بر روی دکمه "بعدی"، startIndex با 4 افزایش مییابد و endIndex برابر startIndex + 3 قرار میگیره. این مقادیر با استفاده از Math.Min() با تعداد کل سوالات و اندازه صفحه مقایسه میشن تا از ایجاد خطای خارج از محدوده جلوگیری بشه.
اینهم کد اصلاح شدش:
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace ExamSystem
{
public partial class MainForm : Form
{
private List<Question> questions;
private int startIndex;
private int endIndex;
private SqlConnection connection;
public MainForm()
{
InitializeComponent();
// ایجاد اتصال به بانک اطلاعاتی
string connectionString = "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=YourDatabaseName;Integrated Security=True";
connection = new SqlConnection(connectionString);
questions = new List<Question>
{
new Question("سوال 1", new List<string> { "گزینه الف", "گزینه ب", "گزینه ج", "گزینه د" }),
new Question("سوال 2", new List<string> { "گزینه الف", "گزینه ب", "گزینه ج", "گزینه د" }),
// و سایر سوالات
};
startIndex = 0;
endIndex = Math.Min(3, questions.Count - 1);
ShowQuestions();
}
private void ShowQuestions()
{
for (int i = startIndex; i <= endIndex; i++)
{
Question currentQuestion = questions[i];
// نمایش سوالات در تکست باکس یا لیبلهای مورد نظر
// ...
}
if (endIndex == questions.Count - 1)
{
// نمایش پیام به کاربر که به انتهای سوالات رسیده است
MessageBox.Show("شما به انتهای سوالات رسیدهاید!");
}
}
private void btnNext_Click(object sender, EventArgs e)
{
// ذخیره پاسخ کاربر
SaveUserAnswers();
startIndex += 4;
endIndex = Math.Min(startIndex + 3, questions.Count - 1);
ShowQuestions();
}
private void SaveUserAnswers()
{
// ذخیره پاسخهای کاربر در بانک اطلاعاتی
// ...
}
}
public class Question
{
public string Text { get; set; }
public List<string> Options { get; set; }
public Question(string text, List<string> options)
{
Text = text;
Options = options;
}
}
}
ممنون از زحمات شما
سلام
من نتونستم انجام بدم . فقط میتونم اطلاعات رو مانند سوال و جواب از دیتابیس بیارم نشون بدم اونم تکی تکی . امکان داره یک نمونه کد کامل بگذارید . این کد اجرا نمیشه !
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
public class Program : Form
{
// لیستی از سوالات
private List<string> questions = new List<string>()
{
"سوال ۱",
"سوال ۲",
"سوال ۳",
"سوال ۴"
};
// لیستی از گزینههای هر سوال
private List<List<string>> options = new List<List<string>>()
{
new List<string>() { "گزینه ۱.۱", "گزینه ۱.۲", "گزینه ۱.۳", "گزینه ۱.۴" },
new List<string>() { "گزینه ۲.۱", "گزینه ۲.۲", "گزینه ۲.۳", "گزینه ۲.۴" },
new List<string>() { "گزینه ۳.۱", "گزینه ۳.۲", "گزینه ۳.۳", "گزینه ۳.۴" },
new List<string>() { "گزینه ۴.۱", "گزینه ۴.۲", "گزینه ۴.۳", "گزینه ۴.۴" }
};
// شاخص سوال فعلی
private int currentQuestionIndex = 0;
// لیستی از لیبلها
private List<Label> labels = new List<Label>();
// لیستی از گروههای رادیو باتنها
private List<List<RadioButton>> radioButtons = new List<List<RadioButton>>();
public Program()
{
// اضافه کردن رویداد Load به فرم
this.Load += Program_Load;
}
private void Program_Load(object sender, EventArgs e)
{
// برای هر سوال، یک لیبل و چهار رادیو باتن ایجاد میکنیم و آنها را به فرم اضافه میکنیم
for (int i = 0; i < 4; i++)
{
Label label = new Label();
label.Text = questions[i];
label.Location = new Point(10, 10 + i * 50);
labels.Add(label);
this.Controls.Add(label);
List<RadioButton> radioButtonGroup = new List<RadioButton>();
for (int j = 0; j < 4; j++)
{
RadioButton radioButton = new RadioButton();
radioButton.Text = options[i][j];
radioButton.Location = new Point(10, 30 + i * 50 + j * 20);
radioButtonGroup.Add(radioButton);
this.Controls.Add(radioButton);
}
radioButtons.Add(radioButtonGroup);
}
// ایجاد و اضافه کردن دکمه Next
Button nextButton = new Button();
nextButton.Text = "بعدی";
nextButton.Location = new Point(10, 230);
// اضافه کردن رویداد Click به دکمه Next
nextButton.Click += NextButton_Click;
this.Controls.Add(nextButton);
}
private void NextButton_Click(object sender, EventArgs e)
{
// در صورتی که هنوز به آخرین سوال نرسیدهایم، سوال بعدی را نمایش میدهیم
if (currentQuestionIndex < 3)
{
currentQuestionIndex++;
for (int i = 0; i < 4; i++)
{
// تغییر متن لیبلها و گزینهها بر اساس سوال بعدی
labels[i].Text = questions[currentQuestionIndex];
for (int j = 0; j < 4; j++)
{
// تغییر متن رادیو باتنها بر اساس گزینههای سوال بعدی و عدم انتخاب آنها
radioButtons[i][j].Text = options[currentQuestionIndex][j];
radioButtons[i][j].Checked = false;
}
}
}
else
{
MessageBox.Show("شما به آخرین سوال رسیدهاید.");
}
}
public static void Main()
{
Application.Run(new Program());
}
}
از این کد ایده بگیرید امیدوارم مفید واقع بشه
لود سوالات از دیتابیس به چه نحو است ؟ هر صفحه ۴یا ۵ سوال لود بشه . با زدن کلیک ۴ سوال بعدی لود بشه و همینطور تا آخر
سلام
سالها پیش یکی از دوستان در این لینک بطور مفصل آموزش دادن