访问链接:http://www.itbiyesheji.com/index.php/2019/07/28/基于asp-net的足球爱好者约战网站/ 可以获得更好的阅读体验
随着中国经济水平的发展,人们娱乐需求日益增长,足球这世界第一运动在中国变得
本系统依据开发要求基于B/S的体系结构,采用ASP.NET技术和MVC的思想开发。本系统可使足球爱好者登录网站约战,以及讨论交流足球,实现根据足球社交,使参与足球运动的过程中各项管理更加规范化。本系统主要应用于足球社交网站,其开发主要包括后台数据库的建立和前端应用程序的开发两个方面。实现了用户管理、网上留言、网上约战、足球评论等功能,可以完整的实现通过线上认识足球好友到约战到评论的全部过程,让客户可以更好地参与足球运动。
本系统是开发足球社交类网站,本文首先介绍了系统的开发背景以及系统的目标和意义,接着介绍了开发过程中运用的相关技术,最后重点阐述了本系统的关键模块的实现过程。
关键词:信息化,社交
随着Internet的普及和发展,计算机互联网与人们的日常生活联接的越来越密不可分,尤其是SNS(Social Networking Services)社会化网络服务,也可称其为社交网络服务,成为了是近几年互联网新媒体中一类重要的应用服务,其有如火山喷发般的发展速度将全世界人的目光汇集到了一点。互联网和SNS的出现,将这个星球上人与人之间的距离拉短,让人随时随地都可以与自己的家人好友甚至是陌生人沟通交流,分享感兴趣的相关信息,诗仙李太白曾经因为孤单而感叹“举杯邀明月,对影成三人”,而如今你只需要一台电脑或者是手机便可以通过社交网络与世界上的任何一个地方的人举杯邀明月了。现如今伴随着中国经济水平的发展,人们在追逐功利的过程中累了,想停下脚步来歇一歇,舒缓一下日益紧绷的神经,增强一下与经济实力成反比的身体素质,那么足球,这个世界体坛排行第一的运动便在中国越来越受欢迎和重视,在2016年中国超级足球联赛的引援投入稳居世界前五,越来越多的大牌球星登陆中国,掀起了人们对足球运动的极大参与热情,而足球运动是一项需要一定数量的人数参与才可以进行的体育运动,根据这一特性决定了开发一个基于足球的社交网站可以更好的满足日益增长的需求。因为足球社交网站不仅可以分享交流,而且可以收集整理各自组球队信息、添加好友,让活动人员能够更快更好的使用网站信息资源参与到足球运动中。足球社交网站还可以帮助参与者认识志同道合的好友,这对于参与缺少朋友而难以参加足球运动的人来讲是很有帮助的。
本系统基于B/S的体系结构,采用ASP.NET技术和MVC的思想开发。本系统可使足球爱好者登录网站约战,以及讨论交流足球,实现根据足球社交,让足球爱好者在参与足球运动中的各项管理更加规范化。该网站实现了用户管理、网上留言、网上约战、足球评论等功能,可以完整的实现通过线上认识足球好友到约战到评论的全部过程,让客户可以更好地参与足球运动。该足球社交网站还提供很多的实用功能,该社区网站可以为广大球迷获取各种活动信息,寻找用户自己喜欢的活动,或者浏览他人的挑战以及踢球趣事。该网站能给用户提供一个分享及社交的一个平台,让用户在网站发布活动信息、或寻找感兴趣的活动,用户可以从中寻找到自己喜欢的活动,一起参与。该网站还具备分享模块,用户可以分享活动成果和经历。
第一章 对本系统足球社交网站的开发背景和系统进行了简明的介绍,并分析了开发该系统应的目标和意义。
第二章 对开发该系统所用的技术及相关知识的介绍,包括Asp.Net、CSS、JavaScript、ADO.NET相关技术的介绍。
第三章 分析了足球社交网站的应用需求,得出功能模块图、数据库实体E-R图、数据字典等。
第四章 阐述了足球社交网站系统各个功能模块的具体程序设计及实现。
第五章 对开发该系统足球社交网站的过程的心得和总结。
随着IT技术的高速发展, 互联网几乎已经渗透到人们生活的每一个角落。而网络技术与数据库技术的应用,则从根本上彻底改变和颠覆了人们的学习、生活与工作的方式,提高并丰富了人类生活。互联网的发展应用促使网页技术的产生。随着技术日新月异的发展,相断出现了ASP,PHP,JSP等网站开发技术,它们给网站开发带来了一阵狂潮。ASP是一个Web服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的Web服务应用程序,ASP支持VBScript,JavaScript等多种脚本语言。
在推出ASP之后,1998年微软又发布了ASP2.0,其与ASP1.0的主要区别是它并不像ASP1.0一样必须要去实例化外部组件。之后,微软又一次重磅出击推出了ASP.Net,它并不是在ASP基础上的简单升级,而是全新的一个动态网页实现体系。ASP.Net是微软开发的新的体系结构.NET当中的一部分,其策略是把互联网本身当作一个构建新一代操作系统的基础,对互联网和操作系统的设计思想进行合理延伸,这样开发便可以创建出摆脱设备硬件束缚的应用程序,从而轻轻松松实现互联网连接。
但是由于ASP的核心编辑语言是VB Script和JavaScript等脚本语言,这一点从很大程度上决定了ASP的先天不足,它完全没有办法进行像传统编程语言那样的底层操作,所以如果需要进行一些诸如socket操作时不得不借助于其它传统语言来实现。而 PHP则存在着缺乏规模支持,缺乏多层结构和提供的数据库接口支持不统一等缺点,只适合应用于一些小型商务网站或者业务处理系统。另外,ASP和PHP这两种语言都属于解释型的编辑结构,它们的运行是边解释边执行的,因此在运行效率上会有极大的损失。所以,在开发本系统的时候,我选择了微软新一代的Web开发技术――ASP.Net。
下面我将着重叙述一下ASP.Net的几个重要优点:
(1) 强大的动态Web支持,ASP虽有较大的灵活性,但效率不高,且缺乏面向对象的设计,从页导致ASP代码比较凌乱,开发维护都相对困难。ASP.Net为Web页面提供了一种集成式的支持。使用ASP.Net,可以编译页面中的代码,而这些代码可以运用高级语言来编写,因此易于实现并有较高的运行效率。
(2)高效的数据访问技术,ASP.Net中可以运用ADO.NET。ADO.NET提供了对关系数据库和各种数据源的高效访问。这些组件甚至可以访问文件系统和目录。另外,.Net内置了XML的支持,可以处理从非Windows平台导入或者导出的数据。
(3)代码共享,ASP.Net沿用.Net中引入的程序集概念,替代了传统的DLL,可较好的实现代码在应用程序之间的共享方式。
(4)面向对象的编程:ASP.Net处于.NET Framework中,.NET Framework及其推荐采用的语言C#是完全基于面向对象的。
(5)语言的无关性:在.NET中,VB.Net,C#,J#和Managed C++等语言都可以编译为通用的中间语言(IL)。这说明语言可以用从前未有的方式交互操作。
(6)增强的安全性:每个程序集可以包含内置的安全信息,这样就可以非常准确的控制程序集的使用方式。
(7)可运用C#:C#是.Net的一种面向对象的新语言。这种企业编程语言带有下一代编程语言服务运行时( NGWS Runtime ): NGWS Runtime 是一个不仅管理执行代码、同时也提供使编程更加容易的动态环境.编译器产生受管代码以指向这种受管理执行环境.你获得跨平台语言集成、跨平台语言异常处理、增强安全性、版本控制、安排支持和查错服务.支持NGWS Runtime 的主要语言是C#.支持NGWS框架的很多程序是用C#写的, C#语言借鉴了C++,但是具备现代化和新增的类型安全——使C#成为企业解决方案的首选语言.在企业计算领域,C#将会变成为用于编写”下一代窗口服务”( Next Generation Windows Services,简写为NGWS)应用程序的主要语言.
基于,而且又是.net开发的首选语言,因此,在开发本系统。
Asp.net三层模式是在两层模式的基础上,增加了新的一级。这种模式在逻辑上将应用功能分为三层:客户显示层、业务逻辑层、数据层。客户显示层是为客户提供应用服务的图形界面,有助于用户理解和高效的定位应用服务,负责处理用户的输入和向用户的输出,但并不负责解释其含义(出于效率的考虑,它可能在向上传输用户输入前进行合法性验证),这一层通常用前端工具(VB,VC,ASP等)开发;业务逻辑层位于显示层和数据层之间,专门为实现企业的业务逻辑提供了一个明确的层次,在这个层次封装了与系统关联的应用模型,并把用户表示层和数据库代码分开 。其主要功能是执行应用策略和封装应用模式,并将封装的模式呈现给客户应用程序,它是上下两层的纽带,它建立实际的数据库连接,根据用户的请求生成SQL语句检索或更新数据库,并把结果返回给客户端,这一层通常以动态链接库的形式存在并注册到服务器的注册簿(Registry)中,它与客户端通讯的接口符合某一特定的组件标准(如COM,CORBA),可以用任何支持这种标准的工具开发;数据层是三层模式中最底层,他用来定义、维护、访问和更新数据并管理和满足应用服务对数据的请求。
ASP.Net的运用可以轻松地使用近年流行的三层结构模式开发WEB站点或基于B/S结构的应用程序。它可以使程序具有更好的扩展性,灵活性,安全性,平台无关性以及可维护性。ASP.Net的三层结构开发方法思想与Java类似:Java中的三层架构为前端的HTML,JSP,Serverlet,中间层为JavaBean,EJB,后面为数据器库服务器。而在ASP.Net中,前端为HTML,asp,aspx等,中间层为扩展名是.vb,.cs等文件编译而成的.dll控件,后面为数据库服务器。
多层结构的应用正是在对C/S 结构的总结基础上产生的,并且也已经扩展到了B/S应用开发领域。
在开发工具上,选择Visual Studio .NET。Visual Studio .NET 是一套完整的开发工具,用于生成 ASP Web 应用程序、XML Web services、桌面应用程序和移动应用程序。Visual Basic .NET、Visual C++ .NET、Visual C# .NET 和 Visual J# .NET 全都使用相同的集成开发环境 (IDE),该环境允许它们共享工具并有助于创建混合语言解决方案。另外,这些语言利用了 .NET Framework 的功能,此框架提供对简化 ASP Web 应用程序和 XML Web services 开发的关键技术的访问。
Visual Studio .NET 是用于快速生成企业级 ASP.NET Web 应用程序和高性能桌面应用程序的工具。Visual Studio 包含基于组件的开发工具(如 Visual C#、Visual J#、Visual Basic 和 Visual C++),以及许多用于简化基于小组的解决方案的设计、开发和部署的其他技术。
Visual Studio 支持 Microsoft .NET Framework,该框架提供公共语言运行库和统一编程类;ASP.NET 使用这些组件来创建 ASP.NET Web 应用程序和 XML Web services。
ASP.net不仅仅是 Active Server Page (ASP) 的下一个版本,而且是一种建立在通用语言上的程序构架,能被用于一台Web服务器来建立强大的Web应用程序。ASP.net提供许多比现在的Web开发模式强大的的优势。
执行效率的大幅提高
ASP.net是把基于通用语言的程序在服务器上运行。不像以前的ASP即时解释程序,而是将程序在服务器端首次运行时进行编译,这样的执行效果,当然比一条一条的解释强很多。
因为ASP.net是基于通用语言的编译运行的程序,所以它的强大性和适应性,可以使它运行在Web应用软件开发者的几乎全部的平台上(笔者到现在为止只知道它只能用在Windows 2000 Server上)。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到ASP.net的Web应用中。ASP.net同时也是language-independent语言独立化的,所以,你可以选择一种最适合你的语言来编写你的程序,或者把你的程序用很多种语言来写,现在已经支持的有C#(C++和Java的结合体),VB,Jscript。将来,这样的多种程序语言协同工作的能力保护您现在的基于COM+开发的程序,能够完整的移植向ASP.net。
简单性和易学性
ASP.net是运行一些很平常的任务如表单的提交客户端的身份验证、分布系统和网站配置变得非常简单。例如ASP.net页面构架允许你建立你自己的用户分界面,使其不同于常见的VB-Like界面。另外,通用语言简化开发使把代码结合成软件简单的就像装配电脑。
高效可管理性
ASP.net使用一种字符基础的,分级的配置系统,使你服务器环境和应用程序的设置更加简单。因为配置信息都保存在简单文本中,新的设置有可能都不需要启动本地的管理员工具就可以实现。这种被称为”Zero Local Administration”的哲学观念使Asp.net的基于应用的开发更加具体,和快捷。一个ASP.net的应用程序在一台服务器系统的安装只需要简单的拷贝一些必须得文件,不需要系统的重新启动,一切就是这么简单。
多处理器环境的可靠性
ASP.net已经被刻意设计成为一种可以用于多处理器的开发工具,它在多处理器的环境下用特殊的无缝连接技术,将很大的提高运行速度。即使你现在的ASP.net应用软件是为一个处理器开发的,将来多处理器运行时不需要任何改变都能提高他们的效能,但现在的ASP确做不到这一点。
自定义性,和可扩展性
ASP.net设计时考虑了让网站开发人员可以在自己的代码中自己定义”plug-in”的模块。这与原来的包含关系不同,ASP.net可以加入自己定义的如何组件。网站程序的开发从来没有这么简单过。
安全性
基于Windows认证技术和每应用程序配置,你可以确性你的原程序时绝对安全的。ASP.NET 的语法在很大程度上与 ASP 兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。可以通过在现有 ASP 应用程序中逐渐添加 ASP.NET 功能,随时增强 ASP 应用程序的功能。
ASP.NET 是一个已编译的、基于 .NET 的环境,把基于通用语言的程序在服务器上运行。将程序在服务器端首次运行时进行编译,比ASP即时解释程序速度上要快很多.而且是可以用任何与 .NET 兼容的语言(包括 Visual Basic .NET、C# 和 JScript .NET.)创作应用程序。另外,任何 ASP.NET 应用程序都可以使用整个 .NET Framework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
ASP.NET 可以无缝地与 WYSIWYG HTML 编辑器和其他编程工具(包括 Microsoft Visual Studio .NET)一起工作。这不仅使得 Web 开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到 Web 页的 GUI 和完全集成的调试支持。
当创建 ASP.NET 应用程序时,开发人员可以使用 Web 窗体或 XML Web services,或以他们认为合适的任何方式进行组合。每个功能都能得到同一结构的支持,使您能够使用身份验证方案,缓存经常使用的数据,或者对应用程序的配置进行自定义.
本系统将采用Microsoft SQL Server2012作为系统的DBMS支撑,SQL Server 2012 提供对企业基础架构最高级别的支持—专门针对关键业务应用的多种功能与解决方案可以提供最高级别的可用性及性能。在业界领先的商业智能领域,SQL Server 2012 提供了更多更全面的功能以满足不同人群对数据以及信息的需求,包括支持来自于不同网络环境的数据的交互,全面的自助分析等创新功能。针对大数据以及数据仓库,SQL Server 2012 提供从数 TB 到数百 TB 全面端到端的解决方案。作为微软的信息平台解决方案,SQL Server 2012 的发布,可以帮助数以千计的企业用户突破性地快速实现各种数据体验,完全释放对企业的洞察力。
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。JavaScript是在1995年时,由互联网发展初期的网景公司创建,“JavaScript”是Sun公司的注册商标,用于特指Mozilla对这门语言的实现。在最近10年间,所有的Web浏览器都实现了第3版ECMAScript标准;JavaScript语言标准已经很稳定了,并且被几乎所有浏览器实现了。
3.1.1 数据字典
1数据流条目
(1)数据流名:注册信息
别名:无
组成:姓名+账号+密码+住址+联系方式
(2)数据流名:信息资源
别名:上传信息
组成:来源+ 类型+共享时间
2数据存储条目
别名:无
描述: 判断用户的服务需求,用户需要的服务
定义:服务信息=服务请求+请求响应
(2) 文件名:浏览记录
别名:人气值
描述: 判断用户的喜好和监控网站热点
定义: 浏览记录=浏览记录+点击记录+互动记录
3数据项条目
数据类型: 字符型
定义: 姓名=1{汉字}10|1{字母}20
(2) 账号:
数据类型: 整型
定义: 学号=10{数字}10
(3) 密码:
数据类型: 整型
定义: 密码=6{数字}12
(4) 身份证号:
数据类型: 整型
定义: 身份证号=18{数字}18
本系统主要涉及三个实体:用户,网站,管理员。用户和网站之间是多对一关系,管理员和网站之间同样也是多对一关系。如图3-2所示:
图
系统前台功能模块主要实现了用户管理,挑战管理和评论以及分享信息的功能。
图
经过对系统所需实现功能的分析,以及对系统进行管理的需要,为保证系统的完整性和信息的准确性,系统一共有十一个表,具体如下:
表3.1 用户信息表
用户信息表
userinfo |
||||
字段 | 说明 | 类型 | 约束 | 描述 |
userNo | 用户编号 | int | 主键 | 自动增长,唯一标识每个用户 |
Name | 用户名 | varchar | 非空 | |
NickName | 昵称 | varchar | 非空 | |
Password | 密码 | varchar | 非空 | |
sex | 性别 | varchar | 非空 | |
phone | 电话 | varchar | 非空 | |
age | 年龄 | int | 非空 | |
birth | 生日 | datetime | 非空 | |
邮箱 | varchar | |||
Address | 地址 | varchar | ||
Register_time | 注册时间 | datetime | 非空 |
表3.2 挑战信息表
挑战信息表
Challenges |
||||
字段 | 说明 | 类型 | 约束 | 描述 |
cha_no | 挑战ID | int | 主键 | 自增字段,唯一 |
chat_type | 挑战类型 | int | 非空 | |
cha_time | 挑战时间 | datetime | 非空 | |
cha_address | 挑战地点 | varchar | 非空 | |
cha_cotent | 挑战内容 | text | ||
cha_image | 图片路径 | varchar | ||
phone-number | 手机号码 | varchar | 非空 | |
publish
-time |
发布时间 | datetime | 非空 | |
deadline | 最后时间 | datetime | 非空 | |
phone | 手机号码 | varchar | 非空 |
表3.3 分享信息表
分享信息表
Share |
||||
字段 | 说明 | 类型 | 约束 | 描述 |
Sha_no | 编号 | int | 主键 | 自动增长,唯一 |
Sha_con | 分享内容 | Text | 非空 | |
Sha_image | 分享图片 | varchar | 非空 | |
Sha_time | 分享时间 | Datetime | 非空 | |
phone | 手机号 | varchar | 外键 | userinfo的phone字段 |
表3.4 接受挑战信息表
朋友信息表
Friend_Information |
||||
字段 | 说明 | 类型 | 约束 | 描述 |
acc_no | 编号 | int | 主键 | 自增字段,唯一 |
phone | 手机号 | varchar | 外键 | userinfo的phone字段 |
who_id | 手机号 | varchar | 非空 | 挑战者id |
Cha_no | 挑战ID | varchar | 外键 | 挑战ID |
reg_time | 添加时间 | Datetime | 非空 | |
Phone_number | 手机号码 | Varchar | 非空 | |
Remark | 备注 | varchar | 非空 |
表3.5 朋友信息表
朋友信息表
Friend_Information |
||||
字段 | 说明 | 类型 | 约束 | 描述 |
Friends_no | 编号 | int | 主键 | 自增字段,唯一 |
phone | 手机号 | varchar | 外键 | userinfo的phone字段 |
Friend_id | 手机号 | varchar | 外键 | userinfo的phone字段 |
Friend_Nickname | 朋友昵称 | varchar | 非空 | |
Friend_time | 添加时间 | Datetime | 非空 | |
Friend_YesOrNo | 是否朋友 | Varchar | 非空 | |
Remark | 备注 | varchar | 非空 |
表3.6 信息表
订单详细信息表
Message |
||||
字段 | 说明 | 类型 | 约束 | 描述 |
Message | 编号 | int | 主键 | 自增字段,唯一 |
phone | 手机号 | varchar | 外键 | userinfo的phone字段 |
Mes_classes | 信息类型 | int | 非空 | |
Accept_time | 接收时间 | Datetime | 非空 | |
Send_id | 手机号 | varchar | 外键 | userinfo的phone字段 |
Mes_con | 信息内容 | Text | 非空 |
表3.7 评价信息表
评价信息表
comment |
||||
字段 | 说明 | 类型 | 约束 | 描述 |
com_no | 编号 | int | 主键 | 自增字段,唯一 |
com_id | 编号 | varchar | 外键 | userinfo的phone字段 |
com_activityNo | 评论的ID | varchar | 非空 | |
com_classes | 评论类型 | int | 非空 | |
phone | 手机号 | varchar | 外键 | userinfo的phone字段 |
com_time | 评论时间 | Datatime | 非空 | |
com_con | 评论内容 | varchar | 非空 |
表3.8 回复表
回复表
Reply |
||||
字段 | 说明 | 类型 | 约束 | 描述 |
rep_no | 编号 | int | 主键 | 自增字段,唯一 |
rep_Id | 编号 | varchar | 外键 | userinfo的phone字段 |
rep_classes | 回复类型 | int | ||
rep_time | 回复时间 | datetime | ||
rep_con | 回复内容 | text | ||
phone | 手机号 | varchar | 外键 | userinfo的phone字段 |
表3.9 点赞表
点赞表
Praises |
||||
字段 | 说明 | 类型 | 约束 | 描述 |
pra_no | 编号 | int | 主键 | 自增字段,唯一 |
pra_Id | 编号 | varchar | 外键 | userinfo的phone字段 |
pra_activityNo | 信息编号 | varchar | ||
pra_time | 点赞时间 | datetime | ||
phone | 手机号 | varchar | 外键 | userinfo的phone字段 |
表3.10 管理员信息表
管理员信息表
Administrator |
||||
字段 | 说明 | 类型 | 约束 | 描述 |
admin_no | 编号 | int | 主键 | 自增字段,唯一 |
admin_Id | 编号 | varchar | ||
Name | 姓名 | varchar | ||
sex | 性别 | nchar | ||
password | 密码 | varchar | ||
joinTime | 添加日期 | datetime |
表3.11 留言表
留言表
Leave_Message |
||||
字段 | 说明 | 类型 | 约束 | 描述 |
leave_no | 编号 | int | 主键 | 自增字段,唯一 |
leave_Id | 编号 | varchar | 外键 | UserInfo的Phone |
Name | 姓名 | varchar | ||
leave_con | 留言内容 | text | ||
phone | 手机号码 | varchar | 外键 | UserInfo的Phone |
leave_time | 添加日期 | datetime |
已注册的用户可以将要发布的活动信息发布到网站上。指定活动的时间、地点,报名的人数上限,截止时间以及上传图片等信息。挑战又分成全场挑战、半场挑战,在数据库Challenges 表中用c ha_type字段区分,1是全场挑战,2是半场挑战。
超过截止时间的活动会被系统自动逻辑删除。
原理是:用户输入发布挑战的必要信息之后,点击发布挑战按钮,触发后台事件。
第一步,是验证用户所填写信息的准确性,例如,挑战时间和截止时间的先后顺序,截止时间必须保证大于挑战时间;用户手机号码填写的正确性等。
第二步,判断用户是否选择了上传图片,如果用户上传了图片,则将图片转化成byte[]流数据,写入到系统的@”~\images\challenges\”目录下,记录下图片所在的相对路径,以便写入数据库。
第三步,验证通过后,打开数据库连接,将用户发布的挑战的信息,如挑战时间、比赛地址、详细内容、图片路径、手机号码、截止时间、用户ID、发布时间等信息写入数据库中Challenges 表。
前台代码:
挑战时间: |
|
|
比赛地址: |
||
详细内容: |
|
|
图片: |
|
|
|
||
手机号码: |
|
|
截止时间: |
|
|
后台代码:
private void OnchangeHandle(string ctrl, string args)
{
if (ctrl == this.ImageUpload.UniqueID && args == “onchange”)
{
//删除预览文件夹里所有图片,避免网站无用数据冗杂
System.IO.DirectoryInfo path = new System.IO.DirectoryInfo(Server.MapPath(“~/images/preview”));
deletefile(path);
if (ImageUpload.HasFile)
{
string filePath = ImageUpload.PostedFile.FileName;
string filename = filePath.Substring(filePath.LastIndexOf(“\\”) + 1);
string serverpath = Server.MapPath(@”~\images\preview\”) + filename; //Response.Write(serverpath);
string relativepath = @”~\images\preview\” + filename;
string ImgExtend = filePath.Substring(filePath.LastIndexOf(“.”) + 1);
if (!(ImgExtend == “bmp” || ImgExtend == “jpg” || ImgExtend == “png” || ImgExtend == “jpeg” || ImgExtend == “gif”))
{
this.imagePreview.Visible = false;
Session[“filePath”] = null;
Session[“UploadBytes”] = null;
Response.Write(“”);
return;
}
else
{
//保存图片文件的文件名和数据源,用以后面上传
Session[“filePath”] = this.ImageUpload.PostedFile.FileName;
Session[“UploadBytes”] = this.ImageUpload.FileBytes;
//将图片文件保存到serverpath路径下
ImageUpload.PostedFile.SaveAs(serverpath);
this.imagePreview.Visible = true;
this.imagePreview.ImageUrl = relativepath;
this.ImageButtonCancel.Visible = true;
}
}
}
}
private void deletefile(System.IO.DirectoryInfo path)
{
foreach (System.IO.DirectoryInfo d in path.GetDirectories())
{
deletefile(d);
}
foreach (System.IO.FileInfo f in path.GetFiles())
{
f.Delete();
}
}
protected void btnPublish_Click(object sender, EventArgs e)
{
//使用ExecuteNonQuery方法增加数据库数据
if (this.IsValid)//页面验证通过
{
if (DateTime.Parse(txtTime.Text.Trim()) > DateTime.Parse(txtDeadTime.Text.Trim()))
{
Response.Write(“”);
return;
}
else
{
string photo = null;
if ((Session[“filePath”]) != null && (Session[“UploadBytes”]) != null)
{
string newFile = Server.MapPath(@”~\images\challenges\” + Session[“filePath”]);
photo = @”~\images\challenges\” + Session[“filePath”];
byte[] buffer = (byte[])(Session[“UploadBytes”]);
File.WriteAllBytes(newFile, buffer);
}
//从web.config中读取连接字符串
string strCnn = ConfigurationManager.ConnectionStrings[“BasketballCnnString”].ConnectionString;
//创建连接对象
SqlConnection cnn = new SqlConnection(strCnn);
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
string phone = null;
phone = Session[“UserPhone”].ToString();
//把insert语句赋给命令对象
cmd.CommandText = “insert into Challenges(cha_type,cha_time,cha_address,cha_content,cha_image,phone_number,Publish_time,deadline,phone) values (‘” + 1 + “‘,'” + txtTime.Text.Trim() + “‘,'” + txtAdress.Text.Trim() + “‘,'” + txtContent.Text.Trim() + “‘,'” + photo + “‘,'” + txtPhone.Text.Trim() + “‘,'” + DateTime.Now.ToString() + “‘,'” + txtDeadTime.Text.Trim() + “‘,'” + phone + “‘)”;
try
{
cnn.Open();
cmd.ExecuteNonQuery();//执行SQL命令
Session[“filePath”] = null;
Session[“UploadBytes”] = null;
Response.Write(“”);
}
catch (Exception ex)
{
Response.Write(“” + ex.Message);
}
finally
{
if (cnn.State == ConnectionState.Open)
cnn.Close();
}
}
}
}
用户可以对他人的分享进行点赞、评论等操作
protected static DataTable dtChallenges = null;
protected static int pagesize = 10;
string strCnn = ConfigurationManager.ConnectionStrings[“BasketballCnnString”].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
if (Session[“UserPhone”] == null)
Response.Redirect(“../Logoin.aspx”);//未登入用户,则跳转到登陆页面
if (!IsPostBack)
{
ViewState[“pageindex”] = “0”;
string CommandText = “select Challenges.*,UserInfo.Portrai,UserInfo.Nickname from Challenges,UserInfo where (Challenges.cha_type=1 and Challenges.deadline >= getdate()) and Challenges.phone=UserInfo.Phone Order By Challenges.publish_time Desc”;
dtChallenges = ReadImage(CommandText, strCnn);
BindDataChallenges();
if (dtChallenges != null && dtChallenges.Rows.Count != 0)
{
int size = pagesize;
if (size > dtChallenges.Rows.Count)
size = dtChallenges.Rows.Count;
for (int i = 0; i < size; i++)
{
praisesCount(i, dtChallenges.Rows[i][0].ToString());
if (dtChallenges.Rows[i][5].ToString() == “”)
DataList1.Items[i].FindControl(“cha_image”).Visible = false;
}
}
}
}
protected void IndexChanging(object sender, CommandEventArgs e)
{
string strCommand = ((LinkButton)sender).CommandArgument.ToString();
int pageindex = int.Parse(ViewState[“pageindex”].ToString());
if (strCommand == “pre”)
pageindex = pageindex – 1;
else
if (strCommand == “next”)
pageindex = pageindex + 1;
else
Response.Redirect(“challenge_view.aspx”);
//pageindex = 0;
ViewState[“pageindex”] = pageindex;
BindDataChallenges();
}
private void BindDataChallenges()
{
DataTable objTable = dtChallenges;
if (objTable != null && objTable.Rows.Count > 0)
{
DataView objView = objTable.DefaultView;
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = objView;
objPds.AllowPaging = true;
objPds.PageSize = pagesize;
objPds.CurrentPageIndex = int.Parse(ViewState[“pageindex”].ToString());
if (!objPds.IsFirstPage)
{
lkFirst.Visible = true;
lkPre.Visible = true;
}
else
{
lkFirst.Visible = false;
lkPre.Visible = false;
}
if (!objPds.IsLastPage)
{
lkNext.Visible = true;
}
else
{
lkNext.Visible = false;
}
for (int i = 0; i < objTable.Rows.Count; i++)
{
DataList1.DataSource = objPds;
DataList1.DataBind();
}
}
else
{
Response.Write(“”);
}
}
public static DataTable ReadImage(string CommandText, string strCnn)
{
using (SqlConnection cnn = new SqlConnection(strCnn))
{
SqlDataAdapter daUser = new SqlDataAdapter(CommandText, cnn);
DataSet dsUser = new DataSet();
//调用Fill方法填充DataSet的数据表UserInfo
daUser.Fill(dsUser, “TableInfo”);
DataTable dt = dsUser.Tables[“TableInfo”];
return dt;
}
}
用户登入之后,可以看到网站内的挑战信息。用户可以进行点赞、评论等操作。
点赞原理是,当用户进行点赞操作时,后台向数据库表Praise中插入一条点赞数据,内容包括:被赞挑战的ID,点赞时间,点赞人,被赞ID记录挑战发布人的ID。以此来通知被赞用户;此外,当用户对同一条信息再次进行点赞时,会取消点赞。
评论原理是,向数据库表Comments评论表中插入一条评论数据,存储评论内容、评论时间、评论的挑战ID,评论ID,被评论ID等内容,被评论ID记录被评论人的ID,建立层级关系,显示在前台。
protected void btnComment_Click(object sender, EventArgs e)
{
Button btnComment = sender as Button;
int count = Convert.ToInt32(btnComment.ValidationGroup); //这个是点击的行的索引 也就是行数
TextBox txtComment = DataList1.Items[count].FindControl(“txtComment”) as TextBox;
Label lblMsg = DataList1.Items[count].FindControl(“lblMsg”) as Label;
string cha_no = dtChallenges.Rows[pagesize * int.Parse(ViewState[“pageindex”].ToString()) + count][0].ToString();//挑战编号
setVisible(count, 2);//设置接受挑战栏不可见
if (txtComment.Text.Trim() != “”)
{
string phone = Convert.ToString(btnComment.CommandArgument); //这个是点击的行的ID
//创建连接对象
SqlConnection cnn = new SqlConnection(strCnn);
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
string com_id = Session[“UserPhone”].ToString();
//把insert语句赋给命令对象
cmd.CommandText = “insert into Comments(com_activityNo,com_id,com_classes,com_time,com_con,phone) values (‘” + cha_no + “‘,'” + com_id + “‘,'” + 1 + “‘,'” + DateTime.Now.ToString() + “‘,'” + txtComment.Text.Trim() + “‘,'” + phone + “‘)”;
try
{
cnn.Open();
cmd.ExecuteNonQuery();//执行SQL命令
txtComment.Text = null;
lblMsg.Text = “评论成功!”;
}
catch (Exception ex)
{
lblMsg.Text = “评论失败!” + ex.Message;
}
finally
{
if (cnn.State == ConnectionState.Open)
cnn.Close();
}
}
else
{
lblMsg.Text = “请输入内容!”;
}
}
protected void btnPraise_Click(object sender, EventArgs e)
{
Button btnPraise = sender as Button;
int count = Convert.ToInt32(btnPraise.ValidationGroup); //这个是点击的行的索引 也就是行数
Label lblPraise = DataList1.Items[count].FindControl(“lblPraise”) as Label;
Label lblMsg = DataList1.Items[count].FindControl(“lblMsg”) as Label;
lblMsg.Text = null;//清空提示
setVisible(count, 2);//设置接受挑战栏不可见
string cha_no = dtChallenges.Rows[pagesize * int.Parse(ViewState[“pageindex”].ToString()) + count][0].ToString();
//使用ExecuteNonQuery方法增加数据库数据
//创建连接对象
SqlConnection cnn = new SqlConnection(strCnn);
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
string pra_id = Session[“UserPhone”].ToString();
string phone = Convert.ToString(btnPraise.CommandArgument);
cmd.CommandText = “select pra_id from Praises where (pra_activityNo='” + cha_no + “‘ and pra_id='” + pra_id + “‘)”;
//执行SQL命令
cnn.Open();
if (cmd.ExecuteScalar() == null)//用户没有赞过该条分享
{
//把insert语句赋给命令对象
cmd.CommandText = “insert into Praises(pra_activityNo,phone,pra_id,pra_time) values (‘” + cha_no + “‘,'” + phone + “‘,'” + pra_id + “‘,'” + DateTime.Now.ToString() + “‘)”;
try
{
cmd.ExecuteNonQuery();//执行SQL命令
}
catch (Exception ex)
{
lblMsg.Text = “出错!” + ex.Message;
}
finally
{
if (cnn.State == ConnectionState.Open)
cnn.Close();
}
}
else
{
lblMsg.Text = “手下留情,你已经赞过!”;
}
//更新点赞人数
praisesCount(count, cha_no);
}
4.2 ListView控件数据绑定
ListView是一个显示项集合的控件。一次可以显示ListView中的多个项。是继承自Items Control,可以使用Items或者ItemsSource设置其内容。我们可以通过两个步骤在ListView中显示:首先直接在前端代码中内嵌ListViewItem(或其他UIElement,如TextBlock等);然后在后台代码中进行数据绑定(该项目使用的就是数据绑定的方式将数据绑定到ItemSource)。
实现步骤如下:
1.前端直接内嵌ListView示例代码如下:
2.后台绑定数据源
if (Request[“ChallengeNo”] != null)
{
if (!IsPostBack)
{
dtChallengeInfo = ReadImage(“select Challenges.*,UserInfo.Portrai,UserInfo.Nickname from Challenges,UserInfo where Challenges.cha_no='” + Request[“ChallengeNo”].ToString() + “‘ and Challenges.phone=UserInfo.Phone collate Chinese_PRC_CS_AI”, strCnn);
if (dtChallengeInfo == null && dtChallengeInfo.Rows.Count == 0)
Response.Write(“”);
else
{
Page.Title = dtChallengeInfo.Rows[0][11] + “的个人主页”;
ListView1.DataSource = dtChallengeInfo;
ListView1.DataBind();
if (dtChallengeInfo.Rows[0][5].ToString() == “”)
ListView1.Items[0].FindControl(“cha_image”).Visible = false;
praisesCount(dtChallengeInfo.Rows[0][0].ToString());
//显示有关该条分享评论内容
CommentInfo();
}
}
}
通过长达几个月时间的对本系统的开发工作,本人在实践能力和学习能力方面都有了极大的提高。在开发过程中,经常发现自己所学知识有限,去图书馆和通过网络查找和学习各种知识技能是必然的过程,期间,我不断的完善本系统在设计上和实现上的具体功能。开发一个系统,是一个不断学习不断充实自己不断进步的过程,需要很多的耐心和细心,同时信心和毅力是完成系统必备的两大心理素质。最后,在此感谢老师的悉心指导和不断的鼓励支持!
[1]安德森.ASP NET高级编程[M]北京:清华大学出版社,2002
[2]赵耀宏,游冠宇.基于web的图书馆图书信息查询系统 [J] 数字技术与应用,2016,1. [3] 单继周,马红,刘树林.计算机编程语言的发展与应用[J]科技经济市场 2016,01. [4] 章伟.分析分层技术在计算机软件开发中的应用[J] 科技与创新,2016,4. [5]廖新彦ASP NET交互式Web数据库设计[M]北京:中国铁道出版社,2004 [6]Jeffrey Richter Applied Microsoft NET Framework Programming[M].北京:清华大学出版社,2004 [7]Daniel Cazzulino等C#Web应用程序入门经典[M]北京:清华大学出版社,2003 [8]蒋秀英SQL Server 2000数据库与应用[M]北京:清华大学出版社,2006 [9]龚小勇关系数据库与SQL Server 2000[M]北京:机械工业出版社,2007 [10]萨师煊,王珊数据库系统概论(第三版)[M]北京:高等教育出版社,2000
|
光阴似箭,岁月如梭。