2894.A运动爱好者社区网站设计 论文.doc
详细源代码及数据库请联系本人 理工大学 毕业设计(论文)题 目: 运动爱好者社区 学 院: 计算机科学与技术 专 业: 计算机科学与技术 学生姓名: 指导教师: 毕业设计(论文)时间:二一 年 三 月 一 日 六 月 十二 日 共 十七 周摘 要随着计算机的广泛应用以及网络的深入普及,网络已经成为人们生活中的重要组成部分。建设运动爱好者社区网站目的在于:倡导全民运动增强体质,以及促进人们的相互交流。本运动社区采用模块化设计,运用MVC设计模式,并且采用针对接口编程思想,降低了系统的耦合度,提高了系统的可重用性,可维护性以及可扩展性。在技术上,运用了Strugs2,Hibernate,Servlet,Jsp等。具备数据的增、删、改、查等功能,实现了个人信息管理,短信管理,好友管理,社区论坛,在线交流,后台管理等六大模块的所有功能。本系统实现了人们的网上交流与互动,在体会运动乐趣的同时,广大运动爱好者可以通过系统的论坛以及在线聊天等功能相互交流心的与经验。关键词:运动爱好者社区,MVC模式,Struts框架,Hibernate,JspAbstract With the wide application of computer and network depth popularity, the Internet has become an important part of life. Construction of sports enthusiasts community site aimed at: National Campaign to promote physical fitness, and promote mutual exchanges.Modular design of the sports community, the use of MVC design pattern, and using ideas for interface programming, reducing the coupling system, improve system reusability, maintainability and scalability. Technically, the use of the Strugs2, Hibernate, Servlet, Jsp, etc. Have the data add, delete, change, check function, achieving a personal information management, messaging management, friends management, community forums, online communication, the background and management all the features of the six modules.The system has realized that people's online communication and interaction, while the experience of sport enjoyment, the majority of sports fans through the system of forums and online chat capabilities and experience exchange center.Key words: The Community of Sports Enthusiasts , The mode of MVC, The frame of Struts , Hibernate,Jsp目 录摘 要IABSTRACTI目 录II引 言1第1章 系统开发背景及可行性分析21.1 课题的背景和意义21.1.1社会背景21.1.2 技术背景21.2可行性分析31.2.1理论可行性31.2.2技术可行性分析31.2.3经济可行性分析31.3开发环境3第2章 系统总体设计42.1系统功能分析42.2系统总体设计框架6第3章 系统数据库设计83.1 E-R图83.1.1 各实体的属性关系图83.1.2 各实体间的对应关系图103.2 数据库结构分析103.3 数据库具体表结构的设计11第4章 系统的实现144.1总体框架设计144.2 详细设计154.2.1模型层设计164.2.2 视图层设计234.2.3 控制层设计26第5章 系统接口定义335.1 Dao模式简介335.1.1 用户基本信息操作的Dao接口声明335.2 用户端Service服务的接口声明345.2.1 Service层的用户基本信息操作的接口声明34结 论35参考文献36致谢及声明37引 言生命在于运动,健康的身体是我们工作、学习、生活的保障。现代社会每个人都面临挑战。升学压力、职业竞争、人际关系、健康问题,种种心理冲突常常引发机体的异常疲劳。有规律性的体育运动可以缓解人们身心压力,提高我们的生活质量。随着科学技术的不断发展,特别是信息技术的高速发展,网络应经广泛应用于各个领域。通过网络我们可以看新闻,查资料,聊天交友,网络已经是我们日常生活中必不可少的组成部分。本运动社区把网络这一虚拟世界和人们的日常运动以及人际关系结合在了一起。通过本系统,广大运动爱好者可以了解运动保健常识,通过论坛发表日常生活中对运动的体会及建议,更可以和广大网友实时聊天交友,使人们在锻炼身体的同时增进人际关系。本系统主要采用的是MyEclipse开发工具开发的,采用的是JAVA程序设计语言,由于JAVA语言的跨平台性使得系统的可重用性增强, JAVA系统自动对内存进行扫描,对长期不用的空间作为”垃圾”进行收集,使得系统资源得到更充分地利用,并且避免了了由于内存管理方面的差错而导致系统出问题。使用Struts框架更是提高了开发效率,使得模块化更加简洁,设计更加方便。论文的主要内容介绍如下:第1章主要是系统开发背景及对系统的可行性分析。第2章主要系统的总体设计。第3章对本系统的数据库设计。第4章主要是系统的实现,以及部分代码的展现。第5章主要对系统用到的关键技术及系统安全性能做了阐述。第1章 系统开发背景及可行性分析1.1 课题的背景和意义1.1.1社会背景随着社会信息化水平的不断提高,网络已经成为人们生活中必不可少的组成部分。通过网络我们可以查询资料,了解事实,网上购物,聊天交友等。越来越多的人已经融入了网络这一虚拟世界。但是对网络在给人们提供方便的同时也影响着我们的健康,的过度依赖网络,长时间的上网对人们的身体健康产生不利影响。运动爱好者社区网站建设的目的在于:一方面呼吁人们积极参加体育锻炼,倡导全民运动。参与者可以在论坛发表与体育、运动、健身相关的帖子,参与话题讨论。其意义在于让爱好者相互交流分享运动的经验和乐趣,唤起人们对运动的激情与热爱,使人们增强体质。另一方面,运动爱好者社区网站还可以为一些运动产品做广告宣传,不仅可以建议运动爱好者合理搭配运动装备,使运动更加安全舒适。对商家来说,它可以通过这个平台宣传自己的产品,展现自己公司的形象,更重要的一点是商家可以通过这个平台,及时的获取自己的需求,以便对自己的产品结构做出调整,提高自己的竞争实力。实现双赢。1.1.2 技术背景在技术上Java语言的跨平台性,“一次编写,随处运行”,Java系统可以运行在不同的操作系统和硬件上。随着Linux的持续增长以及Mac OSX完全支持Java技术,跨平台的特性变得越来越有分量。 Java提供了垃圾回收机制。以往C+的开发中,最容易出错误的地方便是内存管理,申请的内存用完以后必须释放,否则可使用的内存资源越来越少,直至耗尽系统资源而造成死机。而Java系统中,可以任意申请内存,Java系统会在适当的时候自动释放无用的内存资源。这个机制叫做“垃圾回收”,节约了许多调试错误的时间。 而Struts框架是一个比较成熟的框架,可以快速构建整个软件系统的框架结构, 并且适合中小型项目的开发。所以在技术选型上我采用了Struts技术。Struts2基于MVC架构,框架结构清晰,开发流程一目了然。Struts2的拦截器是一个Action级别的AOP,Struts2中的许多特性都是通过拦截器来实现的,拦截器是可配置与重用的,可以将一些通用的功能如:登录验证,权限验证等置于拦截器中以完成一些Java Web项目中比较通用的功能。1.2可行性分析1.2.1理论可行性该系统是网上的一个虚拟平台,能够模拟现实中的交流过程,并且展示个人的风采,满足广大运动爱好者的需求。同时也为商家展示自己的产品,获取用户需求提供了方便。不管对那个用户群体来说都起了很好的桥梁作用,一旦推出必将受到商家与个人的追捧。1.2.2技术可行性分析运用MyEclipse开发工具,该开发工具是Eclipse的一个插件。Eclipse本身就是一个功能非常强大的开发工具,而MyEclipse在功能上与Tomcat进行了集成,并且能做到自动打包,并将包自动部署到服务器上。这从很大程度上提高了开发的效率,节约了开发的时间。1.2.3经济可行性分析众多的网民为网站的流量提供了可靠的保证,而稳定的流量又是网站的广告宣传的必备条件,生产商可以通过运动爱好者社区网站宣传推广自己的产品,降低了商家成本,扩大了客户资源,同时也为网站的开发与维护提供了资金保障。使网站走向成熟。1.3开发环境采用B/S架构;服务器操作系统:Windows XP;数据库服务器:oracle10g;Web服务器:Tomcat;开发工具:MyEclipse软件开发技术:JSP, Hibernate, Struts, Servlet, Html, JavaScript ,Jquery, CSS。第2章 系统总体设计2.1系统功能分析运动爱好者社区为用户提供了基本的功能,如用户的注册,登陆,个人信息修改等基本功能。为了更好的体现用户的运动习惯,对运动的观点等信息,本系统还提供了个人空间管理功能,用户可以查看自己或者他人的空间,更好的展示用户的个人特征。具体的用户管理信息用例图如下:图2-1用户信息管理对于运动爱好者来说,和其他用户间的交流是必不可少的,本系统为用户提供了一个信息交流平台,包括信息的创建,对已收信息和已发信息的查看和删除等功能。具体用例图如下:图2-2 短信管理运动爱好者社区是集运动交友交流为一体的综合系统,系统为用户提供交友功能。通过此功能用户可以随机或者按照条件匹配好友,同时也可以对好友或者黑名单进行查看、删除。联系人管理模块的用例图如下:图2-3联系人管理为了方便广大运动爱好者对运动话题的深入探讨,系统提供了社区论坛模块,用户可以浏览社区论坛中的帖子,可以发表帖子,对于他人的问题用户可以进行评论回复。论坛管理模块用例如下所示:图2-4论坛管理对于广大用户来说仅仅拥有短信和论坛功能交流是不够的,因为这种交流不具有实时性。为此本系统提供了在线聊天室模块,所有在线的用户都可以实时交流。为了保障社区论坛内容的积极向上,以及对用户的及时监督,系统添加了后台管理模块。具有管理员权限的用户可以对进行监督,查看用户的得分记录,可以授予其他用户管理员权限,如果用户有违反规定的操作管理员可以收回管理员权限,甚至是注销该用户。管理员可以查看用户发表的帖子,如果内容违反规定,可以及时删除内容。后台管理模块的用例图如下所示:图2-5后台管理以上六大模块实现了在系统中功能各异,侧重点各有不同:个人信息以及个人空间模块可以很好的体现用个的个人基本资料,个人观点主张;联系人管理模块是把社区中的所有用户紧密的联系起来,用户可以按照条件添加好友,增加了社区的互动性;短信模块和论坛模块以及在线聊天室则是用户很好的交流媒介,用户可以通过收发短信进行私密交流,通过论坛发帖发表对运动的见解与经验,更能借助在线聊天功能和其他用户实时的交流,这些交流媒介为社区增添了活力;后台管理模块可使管理员很好的管理运动爱好者社区,保障系统有序的运行;同时各个模块也相辅相成,不同模块实现功能互补,使系统功能更全面更强大。2.2系统总体设计框架为了提高系统的安全性,本系统使用多用户的密码登陆方式登陆系统,并对登陆用户进行验证,已达到增加系统数据的安全性、保密性的目的。系统结构总流程设计如图以上就是根据需求对系统的整体框架做出的设计。设计思路如下,先找出一个个的用例,并画出用例图。根据他们之间的关系,对系统做出整合,把一个个的用例整合到一个大的系统模块下。最后设计出整体的框架。第3章 系统数据库设计3.1 E-R图在需求分析之后,数据库设计的第一步就是对系统的概念结构进行设计,设计的目标是产生反映全组织信息需求的整体数据库的概念结构,描述概念结构的工具就是ER图。3.1.1 各实体的属性关系图在需求分析之后,数据库设计的第一步就是对系统的概念结构进行设计,设计的目标是产生反映整个系统信息需求的整体数据库的概念结构,描述概念结构的工具就是ER图。各实体详细信息的概念描述是第一步工作,各实体属性关系图如下所示:图 3-1 用户属性关系图图 3-2 短信属性关系图图 3-3 得分纪录属性关系图图 3-4 个人空间属性关系图图 3-5 社区论坛属性关系图3.1.2 各实体间的对应关系图在确认了实体具体信息后,下一步是确认各实体之间的对应关系图,各实体之间的关系图如下所示:3.2 数据库结构分析各数据表之间的对应关系,特别是主外键对应关系对数据库的持久化操作有直接影响,涉及到数据表之间的级联操作,为了更好的体现各数据表之间的对应关系,下图对所有表之间的主外键关系进行应描述:3.3 数据库具体表结构的设计在确定了各实体详细信息后,下一步就是各实体在数据库中的具体实现,依据E-R图中实体的具体信息,各表的字段信息,约束信息和描述如下:MemberInfo存放会员信息字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号NickNameVarchar2(20)Not Null用户昵称PasswordVarchar2(50)Not NullMD5加密口令,页面上限制为16字节GenderVarchar2(1)Not Null性别,男或女AgeNumberNot Null年龄EmailVarchar2(100)Not Null电子邮件PasswordQuestionVarchar2(200)密码提示问题PasswordAnswerVarchar2(200)密码提示问题答案ProvinceCityVarchar2(20)所在省市AddressVarchar2(200)地址PhoneVarchar2(50)联系电话PointNumberDefault=0当前积分RecommenderVarchar2(20)推荐人RegisterDateDate注册时间LatestDateDate上次上线时间StatusNumberDefault=00-正常 1-注销 IsOnlineNumberDefault=00-下线 1-在线GradeIdNumber等级ID 外键MemberSpace存放会员的个性化的信息字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号SportplaceVarchar2(20)运动地点SporttimeVarchar2(20)运动时间SprothabitVarchar2(20)运动习惯SprotStarVarchar2(20)喜欢的运动明星CellphoneVarchar2(20)正在使用的手机OpinionVarchar2(200)个人对运动的看法IconVarchar2(50)个人空间头像图片存在的路径MemberidNumber会员id( reference MemberInfo)GradeRecord存放会员级别的评判规则字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号MinpointNumberNot Null积分的上限MaxpointNumberNot Null积分的下限GradenameVarchar2(20)Not Null级别名称IconPathVarchar2(50)Not Null每个级别分别对应不同的头像PointRecord存放会员获取积分的流水记录字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号NicknameVarchar2(20)Not Null获取积分的会员ReceiveDateDateNot Null获得积分的日期PointactionIdNumberNot Null所获积分PointAction存放积分动作,即执行某个操作对应可以获得多少积分字段名字段类型约束或索引描述IDNumber(Sequence)PKActionNameVarchar2(20)标示积分操作名称,比如”Register”表示会员注册。PointNumberNot Null可获积分DescriptionVarchar(200)描述MessageRecord存放短信信息字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号SenderVarchar2(20)Not Null发件人登录名ReceiverVarchar2(20)Not Null收件人登录名SendDateDateDefault=当前时间, Not Null发送日期TitleVarchar2(100)Not Null短信标题,页面上最多100字Contentvarchar2(300)Not Null短信内容,页面上最多300字StatusNumberDefault=00-未阅读 1-已阅读SenderStatusNumberDefault=00-表示未删除 1-表示已删除(发送者)ReceiverStatusNumberDefault=00-表示未删除 1-表示已删除(接收者)FriendList存放好友名单字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号SelfNameVarchar2(20)Not Null 会员登录名FriendNameVarchar2(20)Not Null 好友登录名BlackList存放黑名单字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号SelfNameVarchar2(20)Not Null 会员登录名BlackNameVarchar2(20)Not Null 被加入黑名单者登录名Atricle存放帖子信息字段名字段类型约束或索引描述IDNumber(Sequence)PK记录流水号PIDNumber父帖流水号MemberinfoIdNumberNot Null 会员流水号TitleVarchar2(255)帖子标题ContentVarchar2(500)Not Null 帖子内容Pdatedate发布日期IsLeafNumberDefault=1是否是叶子节点ViewNumNumberDefault=0浏览数量AnswerNumNumberDefault=0回复数量第4章 系统的实现4.1总体框架设计该系统采用MVC(Model-View-Controller)设计模式进行设计,每一个应用都可以被分成三个层模型层、视图层、控制层。在进行各层设计前,我们需要对整个系统的功能结构进行设计,在确认系统功能结构的基础上将各个功能块进行模块化,进行相对独立的设计。结合前面的需求分析所描述的系统功能,我们可以将该系统划分为如下几个模块:l 用户注册模块l 用户登录模块l 用户个人空间操作模块l 用户个人信息修改模块l 用户信息浏览模块l 用户好友匹配模块l 用户好友及黑名单管理模块l 用户短信操作模块l 用户论坛管理模块l 用户在线交流模块l 管理员后台管理模块以上所划分的各个模块逻辑功能完全相互独立,每个模块可以单独设计实现,各个模块的功能实现互不影响,符合软件设计思想。每个模块设计过程按照MVC设计模式,便于又快又好地开发Web应用程序,也提高了代码的维护性将各模块划分为模型层(Model)、视图层(View)和控制层(Controller)三个层次。View处于Web Tier或者说是Client Tier,通常是JSP/Servlet,即页面显示部分。Controller也处于Web Tier,过去通常用Servlet、Struts来实现,Model处于Middle Tier,通常用服务端的javaBean或者EJB实现,即业务逻辑部分的实现,本系统采用javaBean。4.2 详细设计上述的总体设计部分已经将该系统的模块进行了详细划分,但鉴于模块过多,在这里不对所有模块的详细设计过程进行累述,只把其中具有代表意义的用户注册模块的详细设计过程进行介绍,其它模块设计原理和过程与此模块类似,都是根据MVC模式设计原理,将模块分为三个部分:模型层、视图层和控制层进行独立设计。这里先对整个系统的模型层作一些简单介绍。根据数据库设计中的表的详细信息,系统创建10个具体的POJO类,类名与表名相对应,分别为:Memberinfo、Memberspace、Pointaction、Pointrecord、Blackrecord、Friendrecord、Messagerecord、Province、Graderecord和Article,为了体现真的借口编程的思想,所有的POJO类都继承了BaseBean这一基类。由于采用了hibernate技术来进行数据库持久化操作,所以在模型层设计中POJO类和相对应的数据库表的映射关系是重点。该系统所有的映射文件都以“.hbm.xml”结尾,为了方便管理,所有的POJO类和相对应的映射文件统一放在一个包中。4.2.1 模型层设计 用户注册模块涉及到三个POJO类:Memberinfo、Pointaction和Pointrecord,相对应的映射文件也有三个:Memberinfo.hbm.xml、Pointaction.hbm.xml和Pointrecord.hbm.xml,下面对每个类及其对应的映射文件内容进行描述:1. Memberinfo和Memberinfo.hbm.xml(1)Memberinfo:public class Memberinfo extends BaseBean private static final long serialVersionUID = -9131116922705375165L;private Long id;private Graderecord graderecord;private String nickname;private String password;private String gender;private Long age;private String email;private String provincecity;private String address;private String phone;private String passwordquestion;private String passwordanswer;private String recommender;private Long point;private Date registerdate;private Date latestdate;private Long status;private Long isonline;private Long adminFlag;private Integer memberNum;private Memberspace memberSpace;SuppressWarnings("unchecked")private Set articles = new HashSet(0);public Memberinfo() public Long getId() return this.id;public void setId(Long id) this.id = id;/省略了其他属性的get,set方法(2)Memberinfo.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-/Hibernate/Hibernate Mapping DTD 3.0/EN""<hibernate-mapping package="com.xxl.sport.dao.bean"> <class name="Memberinfo" table="MEMBERINFO" lazy="true"> <id name="id" type="java.lang.Long"> <column name="ID" precision="22" scale="0" /><generator class="sequence"><param name="sequence">SEQ_COMMON</param></generator> </id> <many-to-one name="graderecord" class="Graderecord" fetch="select"> <column name="GRADEID" precision="22" scale="0" /> </many-to-one><property name="nickname" type="java.lang.String"> <column name="NICKNAME" length="20" not-null="true" unique="true" /></property><property name="password" type="java.lang.String"> <column name="PASSWORD" length="50" not-null="true" /></property><property name="gender" type="java.lang.String"> <column name="GENDER" length="10" not-null="true" /></property><property name="age" type="java.lang.Long"> <column name="AGE" precision="22" scale="0" not-null="true" /></property><property name="email" type="java.lang.String"> <column name="EMAIL" length="100" not-null="true" /></property><property name="provincecity" type="java.lang.String"> <column name="PROVINCECITY" length="20" /></property><property name="address" type="java.lang.String"> <column name="ADDRESS" length="200" /></property><property name="phone" type="java.lang.String"> <column name="PHONE" length="50" /></property><property name="passwordquestion" type="java.lang.String"> <column name="PASSWORDQUESTION" length="200" /></property><property name="passwordanswer" type="java.lang.String"> <column name="PASSWORDANSWER" length="200" /></property><property name="recommender" type="java.lang.String"><column name="RECOMMENDER" length="20" /></property><property name="point" type="java.lang.Long"> <column name="POINT" precision="22" scale="0" /></property><property name="registerdate" type="java.util.Date"> <column name="REGISTERDATE" length="7" /></property><property name="latestdate" type="java.util.Date"> <column name="LATESTDATE" length="7" /></property> <property name="status" type="java.lang.Long"> <column name="STATUS" precision="22" scale="0" /></property><property name="isonline" type="java.lang.Long"> <column name="ISONLINE" precision="22" scale="0" /></property><set name="articles" inverse="true"> <key><column name="MEMBERINFOID" precision="22" scale="0" not-null="true" /> </key> <one-to-many class="Article" /></set><one-to-one name="memberSpace" cascade="" outer-join="true" property-ref="memberinfo" class="Memberspace"></one-to-one></class></hibernate-mapping>2. Pointaction和Pointaction.hbm.xml(1)Pointactionpublic class PointAction extends BaseBean private static final long serialVersionUID = -6922422749705967179L;private Long id; private String actionname; private Long point; private String description; SuppressWarnings("unchecked")private Set pointrecords = new HashSet(0); public PointAction() public PointAction(Long point) this.point = point; public PointAction(String actionname, Long point, String description, Set pointrecords) this.actionname = actionname;