ایجاد فرم نظرسنجی در ASP.NET

دوشنبه 22 تیر 1394

در این مقاله به بررسی نحوه ایجاد یک فرم نظر سنجی در برنامه های کاربردی ASP.NET می پردازیم.

ایجاد فرم نظرسنجی در ASP.NET

شرکت های مختلف سرویس های متنوعی برای مشتریان خود درنظر گرفته اند تا از طریق آن ها مشتریان بتوانند هر گونه نظری را در رابطه با این شرکت ها بیان نمایند. در این مقاله به چگونگی ایجاد یک فرم نظرسنجی در ASP.NET می پردازیم.

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

شرکت ها راهکارهای مختلی را برای جمع آوری نظرات مشتریان مطرح نمودند.به موارد زیر توجه نمایید:

1- درصد کارآیی محصول در بین مردم.

2- اغلب مواقع مشتریان چگونه این محصول را خریداری می کنند.

3- ایجاد یک صفحه عمومی.

تمام این مواد در با توجه به موارد زیر کارآمد خواهند بود:

1- ترویج کسب و کار به سطوح دیگر

2- تجزیه تحلیل فروشگاه های آینده

3- تنظیم تولید محصولات با توجه به نیاز بازار

راه حل:

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

و در پایان برای اینکه افراد بتوانند نظرات خود را به اشتراک بگذارند، ما یک شبکه اجتماعی با ویژگی محدود برایشان درنظر گرفته ایم.

گزارش مشکلات:

ما نیازمند طراحی یک برنامه کاربردی ساده هستیم تا مدیران بتوانند یک صفحه نظرسنجی و سوال و جواب فراهم نمایند و آن را برای کاربران و افرادی که در وب سایت ثبت نام کرده اند به اشتراک بگذارند.

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

این مثال شامل الزامات زیر است:

فرض کنید که برنامه ای طراحی می کنیم که برای ارائه خدمات رزرو بلیط به صورت آنلاین است که توسط آژانس های مسافرتی ارائه شده است.

طراحی سطح بالا:

 

نقش ها:

1- مدیر سایت: شخصی که نظرسنجی ها را فراهم می کند و آن را توسط کاربرانی که با ایمیل ثبت نام کرده اند به اشتراک می گذارد.

2- مدیر: شخصی که گذارشات را بر روی نظرسنجی تجزیه تحلیل و فراهم مینماید.

3- کاربر: مصرف کنند های که فرم نظرسنجی را بعد از دریافت آن توسط ایمیل تکمیل می نماید.

فعالیت ها:

1- ثبت نام: کاربر در وب سایت ثبت نام می کند.

2- ایجاد نظرسنجی: مدیر سایت نظرسنجی را ایجاد می کند.

3- اشتراک گذاری نظرسنجی: به محض اینکه نظرسنجی انجام شد، مدیر سایت این نظرسنجی را برای مشتریان با اشتراک می گذارد.

4- تکمیل نظرسنجی: مشتری فرم را تکمیل کرده و ارسال می کند.

5- تجزیه تحلیل نظرسنجی: همین که نظرسنجی به مدیر رسید، مدیر می تواند آن را با استفاده از پارامترهای مختلف تجزیه تحلیل نماید.

نمودار کلاس ها:

 

نمودار پایگاه داده:

نمودار بالا یک رابطه ساده و قابل فهم بین جداول برای شما ارائه می دهد.

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

ایجاد پایگاه داده:

یک پایگاه داده با نام SurveyApp مانند شکل زیر طراحی نمایید.

با استفاده از دستورات زیر جداولی را در پایگاه داده ای ایجاد کردیم طراحی کنیم.


USE [SurveyApp]

GO

/****** Object:  Table [dbo].[Roles]    Script Date: 09/12/2012 15:46:11 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[Roles](

[ID] [int] IDENTITY(1,1) NOT NULL,

[Name] [varchar](200) NOT NULL,

 CONSTRAINT [PK_Roles] PRIMARY KEY CLUSTERED 

(

[ID] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

/****** Object:  Table [dbo].[Questions]    Script Date: 09/12/2012 15:46:10 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[Questions](

[ID] [int] IDENTITY(1,1) NOT NULL,

[Text] [varchar](200) NOT NULL,

[QuestionType] [varchar](200) NOT NULL,

[Options] [varchar](2000) NOT NULL,

 CONSTRAINT [PK_Questions] PRIMARY KEY CLUSTERED 

(

[ID] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

/****** Object:  Table [dbo].[Users]    Script Date: 09/12/2012 15:46:11 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[Users](

[ID] [int] IDENTITY(1,1) NOT NULL,

[FirstName] [varchar](200) NOT NULL,

[LastName] [varchar](200) NULL,

[UserName] [varchar](200) NOT NULL,

[Password] [varchar](200) NOT NULL,

[Role] [int] NOT NULL,

 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 

(

[ID] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

/****** Object:  Table [dbo].[Surveys]    Script Date: 09/12/2012 15:46:11 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[Surveys](

[ID] [int] IDENTITY(1,1) NOT NULL,

[Title] [varchar](200) NULL,

[Description] [varchar](200) NOT NULL,

[CreatedOn] [datetime] NOT NULL,

[ExpiresOn] [datetime] NULL,

[CreatedBy] [int] NOT NULL,

[Publish] [bit] NOT NULL,

 CONSTRAINT [PK_Surveys] PRIMARY KEY CLUSTERED 

(

[ID] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

/****** Object:  Table [dbo].[SurveyResponse]    Script Date: 09/12/2012 15:46:11 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[SurveyResponse](

[ID] [int] NOT NULL,

[SurveyID] [int] NOT NULL,

[QuestionID] [int] NOT NULL,

[Response] [varchar](200) NOT NULL,

[FilledBy] [int] NOT NULL

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

/****** Object:  Table [dbo].[Survey_Questions]    Script Date: 09/12/2012 15:46:11 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[Survey_Questions](

[ID] [int] NOT NULL,

[SurveyID] [int] NOT NULL,

[QuestionID] [int] NOT NULL,

[OrderId] [int] NULL

) ON [PRIMARY]

GO

/****** Object:  ForeignKey [FK_Survey_Questions_Questions]    Script Date: 09/12/2012 15:46:11 ******/

ALTER TABLE [dbo].[Survey_Questions]  WITH CHECK ADD  CONSTRAINT [FK_Survey_Questions_Questions] FOREIGN KEY([QuestionID])

REFERENCES [dbo].[Questions] ([ID])

GO

ALTER TABLE [dbo].[Survey_Questions] CHECK CONSTRAINT [FK_Survey_Questions_Questions]

GO

/****** Object:  ForeignKey [FK_Survey_Questions_Surveys]    Script Date: 09/12/2012 15:46:11 ******/

ALTER TABLE [dbo].[Survey_Questions]  WITH CHECK ADD  CONSTRAINT [FK_Survey_Questions_Surveys] FOREIGN KEY([SurveyID])

REFERENCES [dbo].[Surveys] ([ID])

GO

ALTER TABLE [dbo].[Survey_Questions] CHECK CONSTRAINT [FK_Survey_Questions_Surveys]

GO

/****** Object:  ForeignKey [FK_SurveyResponse_Questions]    Script Date: 09/12/2012 15:46:11 ******/

ALTER TABLE [dbo].[SurveyResponse]  WITH CHECK ADD  CONSTRAINT [FK_SurveyResponse_Questions] FOREIGN KEY([QuestionID])

REFERENCES [dbo].[Questions] ([ID])

GO

ALTER TABLE [dbo].[SurveyResponse] CHECK CONSTRAINT [FK_SurveyResponse_Questions]

GO

/****** Object:  ForeignKey [FK_SurveyResponse_Surveys]    Script Date: 09/12/2012 15:46:11 ******/

ALTER TABLE [dbo].[SurveyResponse]  WITH CHECK ADD  CONSTRAINT [FK_SurveyResponse_Surveys] FOREIGN KEY([SurveyID])

REFERENCES [dbo].[Surveys] ([ID])

GO

ALTER TABLE [dbo].[SurveyResponse] CHECK CONSTRAINT [FK_SurveyResponse_Surveys]

GO

/****** Object:  ForeignKey [FK_SurveyResponse_Users]    Script Date: 09/12/2012 15:46:11 ******/

ALTER TABLE [dbo].[SurveyResponse]  WITH CHECK ADD  CONSTRAINT [FK_SurveyResponse_Users] FOREIGN KEY([FilledBy])

REFERENCES [dbo].[Users] ([ID])

GO

ALTER TABLE [dbo].[SurveyResponse] CHECK CONSTRAINT [FK_SurveyResponse_Users]

GO

/****** Object:  ForeignKey [FK_Surveys_Users]    Script Date: 09/12/2012 15:46:11 ******/

ALTER TABLE [dbo].[Surveys]  WITH CHECK ADD  CONSTRAINT [FK_Surveys_Users] FOREIGN KEY([CreatedBy])

REFERENCES [dbo].[Users] ([ID])

GO

ALTER TABLE [dbo].[Surveys] CHECK CONSTRAINT [FK_Surveys_Users]

GO

/****** Object:  ForeignKey [FK_Users_Roles]    Script Date: 09/12/2012 15:46:11 ******/

ALTER TABLE [dbo].[Users]  WITH CHECK ADD  CONSTRAINT [FK_Users_Roles] FOREIGN KEY([Role])

REFERENCES [dbo].[Roles] ([ID])

GO

ALTER TABLE [dbo].[Users] CHECK CONSTRAINT [FK_Users_Roles]

GO

 

ایجاد پروژه جدید:

1- در Visual Studio یک برنامه کاربردی تحت وب ایجاد نمایید و آن را SimpleSurvey بنامید.

 

به برنامه یک Web Form اضافه نمایید و آن را SurveyForm.aspx بنامید.

طبق تصویر زیر یک کلاس با نام SurveysManager.cs به برنامه بیافزایید.

 

یک شمارنده (Enumeration) به برنامه اضافه نمایید تا بتوانیم به راحتی سوالات را دسته بندی کنیم.

Enumeration های زیر را به SurveysManager.cs اضافه نمایید.

 public enum QuestionTypes
    {
        SingleLineTextBox, // اجرا کردن TextBox 
        MultiLineTextBox, // اجرا کردن text area
        YesOrNo, //اجرا کردن یک checkbox
        SingleSelect, //اجرای یک dropdownlist
        MultiSelect //اجرای یک listbox
    }

 

Entity Framework برای رابط پایگاه داده:

در اینجا از Entity Framework برای عملکردهای مرتبط با پایگاه داده استفاده می کنیم. حال از گزینه افزودن آیتم جدید در برنامه به پنجره زیر رفته و یک ADO.NET Entity Model با نام SurveyAppContext.edmx به برنامه اضافه نمایید.

در تصویر زیر گزینه EF Designer from database را انتخاب کرده و با Next به صفحه جدید بروید.

در این صفحه یک رشته اتصال را مشخص کرده و با انتخاب Next به صفحه بعدی هدایت شوید.

در صفحه زیر با توجه به نیاز خود یکی از گزینه ها را انتخاب کرده و به صفحه جدید بروید.

جداول موردنیاز را انتخاب کرده و Finish را انتخاب کنید.

در پایان کار Entity Framework مانند شکال زیر یک مدل در Visual Studio ایجاد می کند و تمامی متدهای لازم برای اجرای عملکرد CURD در Entities تولید می کند.

در ادامه مدل موردنظر را ببینید.

مدل:

یک فرم جدید همانند تصویر زیر با نام ManageQuestions ایجاد کنید.

همچنین فرم دیگری با ظاهر تصویر زیر با نام ManageSurveys ایجاد نمایید.

 

با ایجاد فرم های زیر ما نیمی از فرایند برنامه را پیش برده ایم. این دو فرم راهی برای افزودن سوال و نظرسنجی فراهم می نمایند.

ما برای کاربر یک فرم ساده برای نظرسنجی برای هر محصول ایجاد کرده ایم.

این فرم نظرسنجی باید شامل سوالات زیر باشد.

1- نام

2- نام خانوادگی

3- ایمیل

4- تلفن همراه

5- دسته بندی (1 تا 5)

6- نظرات

یک عنوان به دلخواه برای فرم نظرسنجی ایجاد کنید.

تمام سوالات از صفحه Manage Questions اضافه نمایید.

بازخورد نظرسنجی را از صفحه Manage Survey اضافه نمایید.

همانند شکل زیر سوالات و نظرات به پایگاه داده افزوده می شوند.

عملکرد اجرایی نظرسنجی:

حال میخواهیم درباره بخش اصلی برنامه بحث کنیم.

مرحله اول:

تعاریف نظرسنجی های مربوطه را از پایگاه داده استخراج کنید.

صفحه اجرایی برنامه ما به شکل زیر خواهد بود که لیستی از نظرات درج شده را نمایش می دهد. برای اجرای فرم نظرسنجی ساده موردی را انتخاب کنید.

در پایان به محض اینکه یک نظر را لیست انتخاب کردید، بلافاصله این نظر ارسال می شود.

کدهای اصلی برنامه را در زیر ببینید:

  private void PopulateSurvey()

    {

        List<Question> questions = (from p in context.Questions

                                    join q in context.SurveyQuestionson p.ID equals q.QuestionID

                                    where q.SurveyID == surveyid

                                    select p).ToList();

        Table tbl =new Table();

        tbl.Width = Unit.Percentage(100);

        TableRow tr;

        TableCell tc;

        TextBox txt;

        CheckBox cbk;

        DropDownList ddl;

 

        foreach (Question qin questions)

        {

            tr = newTableRow();

            tc = newTableCell();

            tc.Width = Unit.Percentage(25);

            tc.Text = q.Text;

            tc.Attributes.Add("id", q.ID.ToString());

            tr.Cells.Add(tc);

            tc = newTableCell();

 

            if (q.QuestionType.ToLower() == "singlelinetextbox")

            {

                txt = newTextBox();

                txt.ID = "txt_" + q.ID;

                txt.Width = Unit.Percentage(40);

                tc.Controls.Add(txt);

            }

 

            if (q.QuestionType.ToLower() == "multilinetextbox")

            {

                txt = newTextBox();

                txt.ID = "txt_" + q.ID;

                txt.TextMode = TextBoxMode.MultiLine;

                txt.Width = Unit.Percentage(40);

                tc.Controls.Add(txt);

            }

 

            if (q.QuestionType.ToLower() == "singleselect")

            {

                ddl = newDropDownList();

                ddl.ID = "ddl_" + q.ID;

                ddl.Width = Unit.Percentage(41);

                if (!string.IsNullOrEmpty(q.Options))

                {

                    string[] values = q.Options.Split(',');

                    foreach (string v in values)

                        ddl.Items.Add(v.Trim());

                }

                tc.Controls.Add(ddl);

            }

            tc.Width = Unit.Percentage(80);

            tr.Cells.Add(tc);

            tbl.Rows.Add(tr);

        }

        pnlSurvey.Controls.Add(tbl);

    }

 

کدهای زیر جهت دریافت درخواست از سمت کنترل بعد از انتخاب دکمه ارسال استفاده می شوند.

 private List<Survey_Response> GetSurveyReponse()

    {

       List<Survey_Response> response =new List<Survey_Response>();

       foreach (Control ctr in pnlSurvey.Controls)

        {

           if (ctr isTable)

            {

               Table tbl = ctras Table;

               foreach (TableRow tr in tbl.Rows)

                {

                    Survey_Response sres = new Survey_Response();

                    sres.FilledBy = 2;

                    sres.SurveyID = surveyid;

                    sres.QuestionID = Convert.ToInt32(tr.Cells[0].Attributes["ID"]);

                    TableCell tc = tr.Cells[1];

                    foreach (Control ctrc in tc.Controls)

                    {

                        if (ctrc isTextBox)

                        {

                            sres.Response = (ctrcas TextBox).Text.Trim();

                        }

                        else if (ctrcis DropDownList)

                        {

                            sres.Response = (ctrcas DropDownList).SelectedValue;

                        }

                        else if (ctrcis CheckBox)

                        {

                            sres.Response = (ctrcas CheckBox).Checked.ToString();

                        }

                    }

                    response.Add(sres);

                }

 

 

            }

        }

       return response;

    }

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید