PDA

View Full Version : سوال: بهترین روش برای طراحی یک پرسشنامه



sara.mahdavi
پنج شنبه 10 مرداد 1392, 15:05 عصر
با سلام:لبخندساده:

:متفکر: فرض کنید یک فرم می خواهید طراحی کنید که کاربر توی اون مثل یک پرسشنامه به تعدادی سوال جواب بده
بهترین روش طراحی و ساخت این فرم چه روشیه

من خودم برای یک پرسشنامه 30 سوالی از 120 Lable استفاده کردم که اگه تعداد سوالات مثلا 500 تا باشه اون موقع کار درستی نیست که باز هم از همین روش برم.

لطفا تمامی دوستان نظرات و راه کارهای خودشون مطرح کنند
با تشکر فراوان:قلب:

یوسف زالی
پنج شنبه 10 مرداد 1392, 15:31 عصر
لطفا تمامی دوستان نظرات و راه کارهای خودشون مطرح کنند

تمامی دوستان؟!! :کف:
بابا اگر این طور باشه که شونصد نفر باید کتاب بنویسند!

به نظر من راه خوبی نیست که اومدید همه چیز رو استاتیک کردید. یک کلاس بنویسید برای فقط یک تست که به صورت جنرال تمام کارهاش رو انجام می ده. از جمله این که خودش دارای لیبل های مرتبط با خودش باشه، رویداد های خودش رو داشته باشه، با دادن مختصات بره اون جایی قرار بگیره که ما می گیم، بعد با یک حلقه به تعداد مورد نیاز از روش شی بسازید.
به همین خوشمزگی ;)

sara.mahdavi
پنج شنبه 10 مرداد 1392, 15:58 عصر
ممنون

اگه بتونید یک مثال کوچیک یا یک راهنمایی بیشتر بکنید ممنون میشم :لبخندساده:

یوسف زالی
پنج شنبه 10 مرداد 1392, 16:24 عصر
TTest = class(TCustomControl)
private
FCorrect: integer;
protected
Lbl: TLabel;
R1, R2, R3, R4: TRadioButton;
public
constructor Create(AOwner: TComponent; TestCaption, Item1, Item2, Item3,
Item4: string; CorrectItem: integer);
destructor Destroy; override;
function SelectedItem: integer;
function IsCorrect: boolean;
end;


.
.



{ TTest }

constructor TTest.Create(AOwner: TComponent; TestCaption, Item1, Item2, Item3,
Item4: string; CorrectItem: integer);
begin
inherited Create(AOwner);
SetBounds(0, 0, 273, 65);

FCorrect := CorrectItem;

Lbl := TLabel.Create(Self);
with Lbl do
begin
Parent := Self;
SetBounds(232, 8, 32, 13);
Caption := TestCaption;
end;

R1 := TRadioButton.Create(Self);
with R1 do
begin
Parent := Self;
SetBounds(136, 24, 121, 17);
Caption := Item1;
end;

R2 := TRadioButton.Create(Self);
with R2 do
begin
Parent := Self;
SetBounds(136, 40, 121, 17);
Caption := Item2;
end;

R3 := TRadioButton.Create(Self);
with R3 do
begin
Parent := Self;
SetBounds(8, 24, 121, 17);
Caption := Item3;
end;

R4 := TRadioButton.Create(Self);
with R4 do
begin
Parent := Self;
SetBounds(8, 40, 121, 17);
Caption := Item4;
end;
end;

destructor TTest.Destroy;
begin

inherited;
end;

function TTest.IsCorrect: boolean;
begin
Result := SelectedItem = FCorrect;
end;

function TTest.SelectedItem: integer;
begin
Result :=
integer(R1.Checked) * 1 +
integer(R2.Checked) * 2 +
integer(R3.Checked) * 3 +
integer(R4.Checked) * 4;
end;



مثال:


var
X, Y: TTest;

procedure TForm1.Button1Click(Sender: TObject);
begin
X := TTest.Create(Self, 'first test', 'One', 'Two', 'Three', 'Four', 2);
X.Parent := Self;
X.Color := clYellow;
X.Top := 10;
X.Left := 10;

Y := TTest.Create(Self, 'second test', 'One', 'Two', 'Three', 'Four', 3);
Y.Parent := Self;
Y.Color := clLime;
Y.Top := 80;
Y.Left := 10;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Score: integer;
begin
Score := integer(X.IsCorrect) + integer(Y.IsCorrect);

ShowMessage('your score: ' + IntToStr(Score));
end;



البته خیلی سرسری نوشتم، می تونید خیلی بهتر ار این حرف ها درش بیارید.

sara.mahdavi
پنج شنبه 10 مرداد 1392, 19:16 عصر
روش خیلی جالبیه

1- میشه توی همین تابع از رویداد های اشیاء هم استفاده کرد؟
مثلا رویداد OnClick برای lable
2- CorrectItem برای چی تعریف شده است؟

fahimi
پنج شنبه 10 مرداد 1392, 21:54 عصر
با سلام خدمت دوستان گرامی
به نظر من برای تعداد سولات محدود قابل اجرا می باشد و برای یک پروژه بزرگ با روش بالا دچار بن بست میشود
من تجربه چنین برنامه ای با 10 هزار سوال را دارم - برنامه به این صورت بود کاربر می توانست کل سولات را مرور کند یا اینکه سوالات بصورت رندم با گروه بندی مشخص انتخاب جواب آن را در یک بازده زمانی پاسخ دهد و نرم افزار پس آزمون برای او کارنامه صادر می کرد
روش کار من به این صورت بود که ابتدا کل سوالات (گروه درسی -گزینه ها و جواب صیحیح) در تیبل ذخیره شد و مابقی ماجرا کار با تیبل ها و کوئری ها بود

یوسف زالی
جمعه 11 مرداد 1392, 00:35 صبح
به راحتی می شه رویداد هم اضافه کرد.
در خصوص تعداد بالا به هیچ عنوان نباید مشکلی پیش بیاد. دو هزار تا سه هزار تا فقط زمان لود رو بالاتر می بره.
این رو هم می شه به راحتی حل کرد، در هر صفحه مثلا بیست تا تست رو نمایش می دیم و همین بیست تا رو برای صفحه بعد ریلود می کنیم.
این که سوالات در یک جا مجتمع باشه تا در دسترس باشه فکر نمی کنم فرقی به حال لود اولیه داشته باشه.
به عنوان مثال برای 10 هزار تا سوال لازم نیست که 10 هزار تا آبجکت تولید بشه.
در ضمن اگر از روش کلاس استفاده نکنید و تک تک آیتم ها رو بسازید که اوضاع بدتر می شه. لااقل حسن کلاس کردن اینه که دقیقا مثل کامپوننت باهاش رقتار می شه و کدهای مجتمعی تولید می شه، فایل خروجی حجم کمتری خواهد داشت، مدیریت و کنترل برنامه راحت تره، چیزهایی مثل "جواب سوال 23" به راحتی در دسترسه و ...
برای ساخت 10000 آیتم هم زیر 20 خط کد لازمه. همین!

شاید من متوجه کار شما نشدم. در این صورت کمی بیشتر توضیح بدید.

CorrectItem مشخص می کنه که گزینه صحیح کدوم هست، این برای تصحیح نهایی بسیار کار راه انداز خواهد بود.

sara.mahdavi
جمعه 11 مرداد 1392, 06:28 صبح
به راحتی می شه رویداد هم اضافه کرد.
میشه در این مورد بفرمایید که چطوری ؟

یوسف زالی
جمعه 11 مرداد 1392, 19:28 عصر
مثلا این جوری:


Lbl1.OnClick := MyClick

sara.mahdavi
جمعه 11 مرداد 1392, 20:33 عصر
ممنونم بابت راهنمایی ولی من نمیدونم چطوری از این دستور استفاده کنم:افسرده:
اگه میشه یکم بیشتر توضیح بدید:لبخندساده:

یوسف زالی
جمعه 11 مرداد 1392, 21:15 عصر
ببینید به طور کلی یک رویداد چیزی نیست مگر یک Address Holder
یعنی فقط یک اشاره گره.
حالا بسته به این که این رویداد به چجور متدی اشاره می کنه متدهای متنوعی استفاده می شه که اصلی ترینش TNotifyEvent هست.
مثلا:


Procedure MyMethod(Sender: TObject);
.
.
Button1.OnClick := MyMethod;

اون متد می باید یک متد از یک شی باشه.
اینجا رو ببینید:
http://barnamenevis.org/showthread.php?396089-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-VCL-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%B3%D8%A7%D8%AF%D9%87&p=1763074&viewfull=1#post1763074

Valadi
جمعه 11 مرداد 1392, 22:12 عصر
با سلام
نمي دانم شما دنبال چي هستيد كه هر روز يك تاپيك و موضوعات گنگ و مبهم مطرح مي كنيد شما بهتر پرو‍‍ژه تون در يك تاپيك شفاف و روشن توضيح دهيد (قابل توجه مديران محترم انجمن)

بهر حال

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

شما مي توانيد در يك بانك اطلاعاتي سوالات و پاسخ را درج كنيد و در يك اينترفيس و قالب كلي پياده سازي و اجرا كنيد

بطوريكه خيلي از نرم افزارهاي آزمون الكترونيكي محور بدين صورت كارمي كنند

یوسف زالی
جمعه 11 مرداد 1392, 22:41 عصر
شما مي توانيد در يك بانك اطلاعاتي سوالات و پاسخ را درج كنيد و در يك اينترفيس و قالب كلي پياده سازي و اجرا كنيد

این رو توضیح می دید؟
تمام محور سوال روی این مطلبه که آیا ایحاد چندین کنترل روی یک فرم در زمان طراحی درست هست با نه، اگر نه، دنبال روشی مناسب هستیم.
روش پیشنهادی شما برای اینترفیس چیه؟

از نظر من توضیح پروژه در یک تاپیک مخالفت با قانون سایته.
به شخصه ابدا نسبت به چنین تاپیک هایی علاقه مند نیستم.

در مورد روشتون برای طراحی اینترفیس کمی توضیح بدید.

sara.mahdavi
جمعه 11 مرداد 1392, 22:57 عصر
تیتر پاسخ شما رو توی یک تاپیک دیگه دیدم و جواب دادم لازم نیست اون رو تکرار کنید

از مدیران انجمن هم درخواست میکنم که اگه کار من ایرادی داره خودشون به من بگن و اگه اینطور نیست ایشون Valadi (http://barnamenevis.org/member.php?18939-Valadi) رو متقاعد کنن

با تشکر

mehran6764
شنبه 12 مرداد 1392, 00:46 صبح
نمی دونم مجازم این سوال رو اینجا مطرح کنم یا نه
ولی این سوال برام پیش اومد
الان جواب هایی که برای طراحی پرسش نامه گفته شده مختص برنامه های تحت ویندوز هستند - یا وب رو هم شامل می شوند

یوسف زالی
شنبه 12 مرداد 1392, 00:48 صبح
بستگی داره به این که با چی دارید وب می نویسید و اون زبان کلاس ها رو پشتیبانی می کنه یا نه. بهتره در فروم خود اون زبان مطرح بشه.

gholami146
جمعه 18 مرداد 1392, 00:46 صبح
من قبلا برنامه ای رو درست کردم با نام جی 5 اکا کمی مشکل داره و هنوز کاملش نکردم حقیقتا دیکه دلو دماغ شونداشتم
اما برنامه رو میزارم ببینید من توش یک بخشی رو برای آزمون لغات در نظر گرفته بودم که خودش بصورت رندوم از بانکی که داشت سئوال مطرح میکرد و ازمون رو اجرا میکرد
ولی کم مشکل داره که به راحتی میتونید برطرفش کنید
download (http://gholami.persiangig.com/Application/G5.rar)

sara.mahdavi
چهارشنبه 23 مرداد 1392, 20:36 عصر
با سلام

من برای آزمونی ک خودم درنظر دارم با توجه به راهنمایی های دوستان بخصوص آقای You-See (http://barnamenevis.org/member.php?70247-You-See) یک کلاس ساده نوشتم
http://wdl.persiangig.com/pages/download/?dl=http://mahdavisara.persiangig.com/other/Test_Class.rar

توی کلاسی ک ایجاد کردم با یکبار ایجاد شدن 15 سوال رو اجرا میکنه
حالا میخوام بصورت صفحه ای (مثلا با پنل) با کلیک کردن روی یک دکمه 15 سوال بعدی رو اجرا کنه و این 15 سوال اول رو مخفی کنه

ممنون میشم کمکم کنید
اگه منظورم رو نفهمیدید بفرمایید تا بیشتر توضیح بدم :لبخندساده:
با تشکر

یوسف زالی
چهارشنبه 23 مرداد 1392, 21:32 عصر
آفرین، خوب کار کردید. پیشرفتتون رو تحسین می کنم.

راههای پیشنهادی:

1- همه سوال ها رو روی یک ScrollBox ایجاد کنید. خود کاربر اسکرول می کنه می ره سوالهای پایینی.
2- 15 تا سوال اول رو ایجاد کنید، نتایج رو در یک آرایه بریزید و 15 تا سوال بعدی رو روی همین سوال های موجود با ست کردن مقادیر، رفرش کنید.
3- روش دو، با این تفاوت که اشیای قبلی رو مخفی کنید و با Visible کار کنید.

خود من روش اول رو توصیه می کنم.
اما اگر اصرار در مخفی کردن سوالات دارید، روش دو رو پیشنهاد می کنم.

persia_hrn
چهارشنبه 23 مرداد 1392, 21:37 عصر
سلام ،

من دارم یه برنامه در همین رابطه مینویسم .

فایل اجراییشو میذارم یه نگاه بندازین ، البته برنامه هنوز ناقصه ولی شاید فرمش یه کمک یا ایده واستون باشه .

http://wdl.persiangig.com/pages/download/?dl=http://persia1365.persiangig.com/Test.rar

فونتاشم گذاشتم

109094109093

sara.mahdavi
پنج شنبه 24 مرداد 1392, 07:26 صبح
ممنون از نظرتون:لبخندساده:


2- 15 تا سوال اول رو ایجاد کنید، نتایج رو در یک آرایه بریزید و 15 تا سوال بعدی رو روی همین سوال های موجود با ست کردن مقادیر، رفرش کنید.
منم باهاتون موافقم این روش بهتره اما برای اجرای این روش درحال حاضر دوتا مشکل دارم
1-چطوری سوالاتم رو روی ScrollBox یا Panel بذارم ؟؟
2-برای این موردی که گفتید "ست کردن مقادیر و رفرش کردن" چطوری باید عمل کنم؟؟

sara.mahdavi
پنج شنبه 24 مرداد 1392, 07:31 صبح
persia_hrn (http://barnamenevis.org/member.php?237738-persia_hrn) عزیز

ممنونم ازتون
برنامه جالبی داشتید ولی من میخوام بدونم بهترین روش چ روشیه و چطوری انجامش بدم

اگه امکان داره درباره اینکه چطوری آزمونهایی با تعداد سوال بالا رو اجرا میکنید توضیح بدید
با تشکر

persia_hrn
پنج شنبه 24 مرداد 1392, 07:50 صبح
خانم مهدوی گرامی ،

همونطور که ملاحظه میکنید کنار فایل اجرایی برنامه یک پوشه با نام Sys وجود داره که من کل سوال هارو توی اون پوشه ها با یه نظم خاص و قابل کنترل ذخیره کردم و هروقت توی برنامه نیاز باشه به سادگی اون فایل رو باز میکنم و اطلاعاتش رو نمایش میدم .

توی این روش فرقی نمیکنه شما یک سوال داشته باشید یا n سوال چون در هر لحظه شما فقط یک سوال رو می بینید و همین باعث میشه شما فضای بیشتری از فرم رو برای طرح سوال در اختیار داشته باشید و همچنین کسی که میخواد آزمون بده با ازدحام سوال ها گیج نمیشه ، شما توی این سریال هر تعداد سوال که بخواید میتونید لود کنید و البته برای نمایش اطلاعات نیاز به ابزار های متعدد هم نیست ، به عنوان مثال من برای نمایش متن سوال یک لیبل گذاشتم و هر بار با ارجاء به سوال بعدی Caption اون عوض میشه .

این روش خیلی راحته فقط کافیه راهش رو یاد بگیرید .

اگه راهنمایی بیشتری در مورد نوع برنامه من خواستید ، میتونم سورس هاشو در اختیارتون بذارم .

یوسف زالی
پنج شنبه 24 مرداد 1392, 19:44 عصر
برای گذاشتن یک کامپوننت روی یکی دیگه در زمان اجرا کافیه که Parent اون رو به کامپوننتی که دوست دارید ست کنید.