【asp源码栏目提醒】:网学会员asp源码为您提供第26章 投票模块设计(ASP NET开发大全) - 计算机理论参考,解决您在第26章 投票模块设计(ASP NET开发大全) - 计算机理论学习中工作中的难题,参考学习。
第26章 投票模块设计 在一些网站的应用中为了加强用户和网站之间的交互常常开发投票模块让用户能够参与到网站的活动中网站还能够通过投票模块进行用户信息的统计和调查使用投票模块能够更好的让网站与用户进行交互。
26.1 学习要点 投票模块需要涉及到一些
ASP.NET 3.5的基本知识如果要仔细学习投票模块的开发需要详细了解本书的一些章节知识这些章节如下所示 Web窗体基本控件。
数据库基础。
ADO.NET常用对象。
Web窗体数据控件。
ASP.NET内置对象。
生成静态的概念 自定义控件和用户控件。
基本了解了以上章节的知识点后就能够熟练学习和开发此模块。
26.2 系统设计 投票模块开发起来对技术的要求并不是很高但是投票的表设计和样式呈现都是有技巧的。
在网站应用中有些应用就需要使用投票模块例如网站信息统计和网站信息调查等投票模块还能够进行热点调查等。
26.2.1 模块功能描述 投票模块能够加强用户与网站之间的交互投票模块能够加强用户和网站信息之间的互动网站可以使用投票功能进行网站内容的调查例如调查用户是否满意网站的设计或者是否满意网站改版等等。
同时投票模块还能够进行热点事件的调查例如“你怎么看待XX事件”等等都可以使用投票模块进行统计。
投票模块在设计上来说比较的简单在后台的投票发布中只需要进行相应的投票项目的发布即可而在呈现时需要调用多个表进行投票的呈现。
例如在投票表的设计中不能够将一个投票和选项设计在一起那么一个投票有可能有单个选项或多个选项不同的投票之间可能选项不同如果将这些字段设计在一起那么就会造成很大的数据浪费。
投票模块的功能模块比较容易和简单模块图如图26-1所示。
626 图26-1 投票模块功能描述 正如图26-1所示投票模块的功能大概可以描述为投票管理和投票呈现管理员可以在后台进行投票管理包括投票发布、投票修改和投票删除。
投票发布或修改完毕后用户就能够在前台进行相应的操作包括投票和查看结果等。
在前台的用户投票页面中可以使用
ASP.NET 3.5 AJAX进行无刷新操作实现用户的无刷新进行投票和结果统计。
从上述模块功能描述中可以规划成以下几个页面和控件 登录页面管理员登录页面为管理员提供身份验证。
后台框架集用于管理员的管理操作。
投票发布页面管理员用于投票的发布。
投票删除页面管理员用于删除投票。
投票修改页面管理员用于投票的修改。
其中登录页面用于制作后台的登录窗口其作用同新闻模块中的登录一样。
框架集用于制作后台管理界面能够方便管理员在不同的页面和功能之间进行切换。
管理员首先需要进行身份验证当身份验证通过后管理员就能够在后台进行投票的发布、删除和修改管理员在后台进行投票操作后用户能够在前台查看相应的投票并进行操作投票控件可以用用户控件制作这样能够为用户投票提供操作。
而投票的查看可以使用自定义控件制作使用自定义控件能够呈现更多的投票效果这些效果包括统计、百分比等。
26.2.2 模块流程分析 虽然投票模块不是网站开发过程中最重要的模块但是投票模块在网站开发过程中也非常的实用。
现在可以看到在各个大型网站中都会有投票模块的存在因为投票模块可以提高用于和网站之间的交互也能够提高用户与用户之间的交互。
当出现了一个热门话题时例如“您对番茄花园作者被抓有什么看法”时使用新闻模块能够进行网站和用户之间的交流但是却很难明显的看出用户的意愿也无法统计用户的观点的信息。
使用投票功能能够良好的解决这个问题投票能够很好的进行统计非常直观的呈现百分比如图26-2所示。
627 图26-2 投票模块 从图26-2中可以看出不同的用户的不同的观点也能够快速的统计出大流的用户管理例如“喜欢读书还是工作”这个问题上可以看出很多人选择了“我现在工作了我想回到学校去读书”这一选项。
在新闻模块中虽然能够通过评论来进行用户交互但是很多时候的效果并没有投票好。
投票可以快速的统计群体对于某观点的意向但是在投票模块中管理员和用户进行的操作流程都是不同的投票模块相应的流程如图26-3和图26-4所示所示。
图26-3 用户操作流程图 图26-4 管理员操作流程图 对于用户而言用户需要访问投票模块在访问投票模块时可以查看投票数据然后进行投票操作当用户进行了投票操作就会更新投票数据和相应的统计信息系统在对数据进行重更新后再呈现在页面。
而对于管理员而言需要在后台进行投票发布和修改在发布和修改后系统根据投票进行数据的初始化或统计并呈现在相应的页面中。
628 26.3 数据库设计 在投票模块的数据库设计中需要多个表进行投票数据的描述。
同样为了系统运行的安全在后台同样需要登录操作只有管理员进行登录后才能够发布投票。
而对于用户进行不同的操作时还需要对数据库中的相应字段进行更新。
26.3.1 数据库设计 在投票模块中需要多个表进行投票模块的描述其中最重要的数据库就是投票问题表和投票选项表。
投票问题表用于存放和投票相关的问题的数据而投票选项表用于存放和投票选项相关的数据在对投票模块和流程分析后可以为几个表进行字段规划其中投票表字段可以归纳如下。
投票编号用于标识投票为自动增长的主键。
投票标题用于显示标题作为投票模块的标题。
投票内容用于解释投票信息的一些内容。
投票问题表的字段非常的少其主要是用于索引而投票选项表需要同投票问题表一起整合使用一同描述一个投票模块。
投票选项编号用于标识投票选项为自动增长的主键。
投票选项统计用于标识该投票被选择的次数。
投票描述用于描述投票中的一个选项。
投票选项ID用于标识该投票选项是隶属于哪个投票问题为投票问题表的外键。
管理员表用于管理员登录和验证操作其作用同登录模块和新闻模块中的登录模块基本相同其字段如下所示。
管理员编号用于标识管理员信息为自动增长的主键。
管理员用户名用于标识管理员用户名。
管理员密码用于标识管理员的密码通常情况下和管理员用户名一起进行身份验证。
其中投票问题表和投票选项表一同描述投票模块如图26-5所示。
图26-5 投票模块的形成 投票问题表和投票选项表一同描述投票模块在呈现一个投票项目时在投票问题表中只需要显示 629 投票的问题而投票的选项则需要通过投票问题的标识ID号来进行筛选在投票选项表中有一个投票选项ID字段该字段就是用于标识这个选项是属于哪个投票问题的。
只有将这两个表中的数据进行整合才能够完整的实现一个投票所需要的数据表。
投票模块的数据设计并不复杂而投票模块中将不同的表的数据进行呈现却比数据设计更加复杂的。
26.3.2 数据表的创建 创建表可以通过SQL Server Management Studio视图进行创建也可以通过SQL Server Management Studio 查询使用SQL语句进行创建。
在创建表之前首先需要创建数据库post在post数据库中只需要创建3个表就能够实现投票项目的描述其中投票表posttitle的字段如图26-6所示。
图26-6 投票表结构图 从投票表的结构图可以看出只需要创建三个字段就能够表述投票问题这三个字段的意义如下所示。
id用于标识投票为自动增长的主键。
title用于显示标题作为投票模块的标题显示。
content用于解释投票信息的一些内容。
创建表的SQL语句如下所示。
USE post GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE dbo.posttitle //创建posttitle表 id int IDENTITY11 NOT NULL title nvarchar50 COLLATE Chinese_PRC_CI_AS NULL content nvarcharmax COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT PK_posttitle 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 上述代码创建了投票表并创建了相应的字段为了配合投票问题表还需要创建投票选项表投票选项表的字段如下所示。
id用于标识投票选项为自动增长的主键。
hits用于标识该投票被选择的次数。
content用于标识投票项及其描述。
askid用于标识该投票选项是隶属于哪个投票问题为投票问题表的外键。
这里值得注意的是选项表中的askid字段同投票表一同描述投票项投票选项表创建的SQL语句 630 如下所示。
USE post GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE dbo.postchoose //创建postchookse表 id int IDENTITY11 NOT NULL hits int NULL content nvarcharmax COLLATE Chinese_PRC_CI_AS NULL askid int NULL CONSTRAINT PK_postchoose 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 上述代码创建了postchookse表用于描述投票的选项其中asdid为投票问题表的id该键为外键用于筛选和整合两个表中的数据。
在投票的发布中为了系统的安全性还需要创建系统表用于管理员登录admin表只需要保存管理员的用户名和密码即可则其字段可以描述为如下所示。
id用于标识管理员信息为自动增长的主键。
admin用于标识管理员用户名。
password用于标识管理员的密码通常情况下和管理员用户名一起进行身份验证。
上述字段描述了admin表中需要使用的字段可以使用SQL语句进行表和字段的创建创建newsclass表的SQL语句如下所示。
USE post GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE dbo.admin //创建admin表 id int IDENTITY11 NOT NULL admin nvarchar50 COLLATE Chinese_PRC_CI_AS NULL password nvarchar50 COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT PK_admin 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 上述代码创建了admin表用于进行管理员的身份验证在后台的管理员登录中需要使用到该表在表创建完成后需要向数据库中添加管理员添加管理员代码如下所示。
INSERT INTO admin adminpassword VALUES ‘guojing’’0123456’ 执行上述代码就能够进行admin表的数据插入插入一个新管理员之后就能够在后面的登录操作中使用该表的管理员信息进行登录和投票操作。
631 26.4 界面设计 投票模块包括众多的页面这些页面包括发布投票页面、修改投票页面和删除投票页面这其中还包括投票管理页面。
在投票模块中不适用进行
ASP.NET自带的控件进行操作在投票模块的页面设计中需要自行开发自定义页面。
26.4.1 后台框架集 在Microsoft Expression Web 2中选择菜单栏中的【文件】选项在下拉菜单中选择【新建】选项单击【新建】选项中的【网站】选项创建网站在弹出窗口中选择框架集如图26-7所示。
图26-7 创建框架集 框架集可以将多个页面放置在同一个页面在Microsoft Expression Web 2中可以创建框架集并为框架集中的页面进行指定或新建这里可以创建一个目录类型的框架集创建后框架集代码见光盘中源代码第26章26-126-1admindefault.aspx。
开发人员可以在框架集中创建网页或选择设置初始网页这里创建两个网页一个用于显示导航此页面为sidebar.aspx管理员能够在该页面进行导航处理。
另一个则是主工作区用于管理员操作导航栏初始化代码见光盘中源代码第26章26-126-1adminsidebar.aspx。
投票管理的操作并不多所以在后台中管理员导航的节点也并不多管理员在后台主要执行投票管理和添加投票两个操作投票管理操作包括了投票的修改和删除。
26.4.2 投票管理页面 投票管理页面的数据显示可以使用
ASP.NET 3.5提供的GridView控件由于投票模块其功能的复杂性这里并不能使用
ASP.NET 3.5自带的控件进行修改所以在投票管理页面只能够使用GridView控件进行数据罗列并添加相应的超链接示例代码见光盘中源代码第26章26-126-1adminmanage.aspx。
在管理页面中其代码使用了GridView控件进行数据罗列但在GridView控件中添加的是两个数 632 据绑定的超链接分别用于实现修改和删除功能如图26-8和图26-9所示。
图26-8 添加修改超链接 图26-9 添加删除超链接 可以看出修改和删除超链接都会通过参数传递跳转到另一个页面其中修改超链接跳转的是modi.aspxid编号而删除超链接跳转的是delete.aspxid编号。
通过参数的传递开发人员能够在相应的页面进行业务逻辑处理。
注意这种情况很像
ASP的开发过程为了能够让开发人员更好的理解控件的制作可以使用类似
ASP的开发流程进行过程开发。
由于页面只需要进行数据的呈现所以数据源并不需要支持数据操作数据源代码如下所示。
ltasp:SqlDataSource IDquotSqlDataSource1quot runatquotserverquot ConnectionStringquotlt ConnectionStrings:postConnectionString gtquot SelectCommandquotSELECT FROM posttitle ORDER BY id DESCquotgt lt/
asp:SqlDataSourcegt 从上述代码可以看出数据源中并没有自动支持插入、更新、删除等数据操作因为对于投票管理页面的GridView控件而言其作用只是用于数据的呈现而无需进行数据操作。
26.4.3 投票发布页面 投票发布页面用于管理员的投票发布管理员可以在投票发布页面进行投票信息的填写在投票发布页面管理员需要填写投票信息和投票选项信息这就涉及到多个表的数据操作。
在管理员填写投票选项信息时需要向投票选项表中重复插入数据因为投票选项往往是多项而投票问题只是一项。
投票发布页面涉及到两个表和程序筛选将在后面的章节中讲到而投票发布页面的设计只需要进行基础控件布局即可示例代码见光盘中源代码第26章26-126-1adminpost.aspx。
投票代码使用了TextBox控件用于管理员的信息输入管理员能够在相应的控件中填写投票信息并通过按钮控件提交数据。
在投票发布页面中投票选项同样使用的是TextBox控件。
再次回到流程分析中用户在前台进行投票。
投票同样包含多个选项有的投票包含1个或3个选项有的投票包含2个或4个选项那么在投票功能中就不能规定死投票选项的个数。
在投票发布时管理员需要按照投票的选项个数进行投票发布同时在投票中又需要降低数据库的使用率这里就需要智能筛选数据。
这里使用的是回车筛选即一个回车就是一个选项。
为投票功能设计页面以便管理员添加投票项目页面设计后如图26-10所示。
633 图26-10 投票页面设计 26.4.4 投票修改页面 投票修改页面同投票发布页面相同在投票页面被加载时投票的基本信息需要载入并存储在投票修改页面中的控件里当管理员单击【修改投票】按钮时就能够进行数据筛选和修改投票修改页面示例代码见光盘中源代码第26章26-126-1adminmodi.aspx。
投票修改页面在加载时接受传递过来的参数使用传递的参数获取数据库中投票的相应信息进行页面中控件的文本填充。
管理员可以通过修改页面中相应的信息进行数据更改当更改完毕后管理员可以进行数据操作更新相应的数据选项。
26.4.5 投票删除页面 投票删除页面可以不进行页面布局的处理因为投票删除页面主要作用为删除数据。
当管理员在投票管理页面进行投票删除选择时会跳转到投票删除页面投票删除页面通过获取传递过来的参数进行投票的删除删除完毕后再次返回投票管理页面所以在投票删除页面中只需要进行事务的处理而不需要进行页面布局和控件处理。
26.5 代码实现 投票模块的页面整体设计比较简单但是投票功能的实现还需要掌握一些难点。
投票模块的难点就在于一个投票的问题和多个投票选项是如何整合并且在发布投票时如何进行多项投票发布在修改投票时同样修改选项和筛选选项都是一个难题。
26.5.1 添加投票代码实现 添加投票时管理员在投票选项中可以用回车进行分割系统能够使用回车进行多个选项筛选和数据插入。
在代码实现中首先要将投票选项控件中的文本进行分割这里使用回车进行分割每个回车就会创建一个新的投票项。
添加投票的具体实现思路为 634 管理员在投票控件中按回车进行多个选项添加。
管理员单击按钮控件进行数据添加。
数据添加时按照回车进行选项分割当有多个回车时说明有多个选项。
添加投票问题表添加完成后获取刚刚添加的投票的编号。
循环添加投票选项并为选项添加相应的ID。
从上述实现思路可以编写相应的代码示例代码如下所示。
protected void Button1_Clickobject sender EventArgs e SqlConnection con new SqlConnectionquotData Sourcelocal Initial CatalogpostIntegrated SecurityTruequot //创建连接 con.Open //打开连接 string trim TextBox3.Text.Replacequotnquot quotquot //回车替换成字符 string count trim.Split //替换后分拆 string strsql quotinsert into posttitle titlecontent values quotTextBox1.TextquotquotTextBox2.Textquot SELECT IDENTITY as bh quot //编写SQL语句 SqlCommand cmd new SqlCommandstrsql con //创建执行对象 int idConvert.ToInt32cmd.ExecuteScalar //执行数据插入 for int i 0 i lt count.Length i //循环添加 string contentinsert quotinsert into postchoose hitscontentaskid values 0quot counti.ToString quotquot id quotquot //遍历插入项目 SqlCommand command new SqlCommandcontentinsert con //创建执行对象 command.ExecuteNonQuery //执行遍历 con.Close //关闭连接 上述代码中将管理员输入的投票选项通过回车分割添加选项方法如图26-11所示。
图26-11 输入投票选项 管理员输入投票选项时可以以回车的形式进行投票选项的分割如图26-11所示其中管理员添加了6个选项在数据插入前首先需要将不同的投票选项之间分割示例代码如下所示。
string trim TextBox3.Text.Replacequotnquot quotquot //替换字符 string count trim.Split //分割字符串 上述代码将回车字符串替换成为“”符号然后通过Split将字符串进行分割在图26-11中输入 635 的字符串会被分割为“投票选项1投票选项2投票选项3..”Split函数能够将这个字符串进行分割并放置在数组中如“count0投票选项1count1投票选项2”这样就能够通过数组循环进行数据插入示例代码如下所示。
for int i 0 i lt count.Length i //遍历执行 string contentinsert quotinsert into postchoose hitscontentaskid values 0quot counti.ToString quotquot id quotquot SqlCommand command new SqlCommandcontentinsert con //SQL语句 command.ExecuteNonQuery //执行SQL 使用ADO.NET中数据操作的ExecuteScalar方法和SQL语句的“SELECT IDENTITY as”语法能够返回刚才数据插入的值在进行选项遍历插入之.