用SSM框架设计跑步社区项目

qq_37921842 2017-06-22 06:55:35
一 功能需求说明
1.1.1 跑步社区积分规则
1.1.1.1 i米的定义
在此社区我们将积分称之为积米,i米是此社区上唯一的通用的积分单位。i米可以通过以下途径积累,作为每一个会员(RUNNER)的级别限定,也可以用于线上抽奖活动和线下实物奖励。每个会员的积米,也可以从后台管理系统中进行修改。
1.1.1.2 积米的获取途径
注册:注册成功,给此会员加50米。
推荐:当你注册时,填写推荐人,如果此推荐人存在,则给此推荐人加20米。
登录:每次登陆加3米,在同一天中,多次登陆只算一次。
个人空间:创建个人空间加25米。
论坛:发贴加5米,回贴加1米,精华贴加30米,成为超级精华贴加60米,成为版主加200米,每10个回复楼主加5米。
参加跑步活动:当会员参加社区举办的一些业余跑步活动并获取名次加500米。
1.1.1.3 会员级别的定义规则
在此社区,会员共分为5个级别:
业余爱好者:积米(0—300)
跑步小将:积米(300---700)
跑步健将:积米(700---1200)
专业运动员:积米(1200—1800)
顶级运动员:积米(1800—2500)
1.1.2 跑步社区部分功能分析
1.1.2.1 注册:SSH,SSM
在register.jsp页面用户可以注册一个会员帐号,昵称作为以后登陆社区的唯一标识。如果有推荐人的话,可以输入推荐人的昵称。当注册成功的话,除了给新注册会员加50米(对应的积分动作想应的积分数)的积米以外,还需要给推荐会员加20米的积米。并且需要将这次获取积分的过程记录下来,密码需要用MD5算法加密。
详细描述:1.需要判断注册的用户名是否已经在数据库中存在,用户昵称不能重复。
2.取到注册可以获取的积米数。推荐
3.通过MD5加密密码
4.获取会员的初始等级
5.将获取积米的信息记录下来
6.判断注册的用户有无推荐人,如果有的话,判断推荐人是否存在,则需要给推荐人加上相应的积米,并将获取积米的信息记录下来。
7.最后将注册信息保存到数据库

具体步骤:1。实现IMemberDao接口中注册需要用到的方法
3.实现接口IMemberService中的业务逻辑方法register
4.创建action
5.创建register.jsp
6.修改register.jsp,然后写js对页面上数据格式进行验证
1.1.2.2 登录
在login.jsp页面上用户可以输入昵称和密码进行登陆,如果用户名和密码都正确,则登陆成功。如果不正确,需要提示用户。
在login.jsp页面上还有一个checkbox,如果用户登陆的时候选上的话,则下次用户再访问index.jsp的时候,则自动登陆。
详细描述:首先,用户在访问index.jsp页面的时候,系统要检测是否需要自动登陆,那如何检测呢,就是检查浏览器的cookie中有没有用户上次登陆保存的用户名和密码,如果有,就用cookie中的用户名和密码来直接登陆。如果没有就转到登陆页面login.jsp。
然后,当用户登陆的时候,系统需要检查用户是否有选择下次访问自动登陆的checkbox,如果有选择,系统就需要将这次登陆的用户名和密码保存到用户浏览器的cookie中,以便下次访问的时候能自动登陆。
具体登陆过程:
1. 查看登陆的用户名是否存在
2. 查看登陆的用户是否现在已经是在线状态
3. 查看登陆的用户是否是注销状态
4. 查看密码是否正确
5. 判断这次登陆是否和上次登陆是否在同一天内,如果不是
需要给这次登陆加登陆应该能获取的积分数,并需要保存获取积分的记录,判断当前积分等级。
6.将会员的isonline设成在线状态,可以查看latestDate上次登录时间,保存当前时间,在下线的时候更新latestDate,需要把上次登陆的时间保存到memberinfo的另外一个实例变量中。还需要设定会员的当前级别
具体action的功能描述:
checkAutoLoginAction:
当用户访问index.jsp页面的时候,就会转到这个action,这个action需要做的事情是,从request里面取到所有的cookie,然后查看有没有名字是loginname、password的cookie,如果有,就把value取出来放到session范围内,然后转到loginAction去登陆。
loginAction:
获取loginname、password、autoLogin,然后调用业务逻辑方法login进行登陆,如果登陆成功,把login方法返回的memberinfo对象放到session范围内,然后检测autoLogin的值是否为true,如果是,还需要把loginname、passoword作为两个cookie写到浏览器中,转到afterLoginAction(客户端重定向).如果登陆失败,转到login.jsp,重新登陆
afterLoginAction:
当登陆成功以后会转到这个action,这个action主要是查询两样数据,一个是当前会员的新短信的数量,另外一个是查询积分前10的会员。查到以后,将他们放到request范围内转到member/activity_member.jsp进行显示
退出:用户登录时需要设置在线状态为在线,下线时需要设置状 态为下线,写logout.action完成退出功能,如果用户是自 动登录则需要把cookie清除。当用户使用关闭浏览器等非 正常下线操作时,如何设置下线状态?可通过加session监 听,在session销毁时做操作。
1.1.2.3 忘记密码
当会员忘记密码的时候,可以访问password_misssing.jsp,输入会员的帐号、密码提示问题、密码提示答案进行提交,系统对这些信息进行判断,如果正确,则产生一个新的密码返回,并且在页面上显示,并将数据库中的密码修改成新密码。如果不正确,则提示用户。
实现业务逻辑方法findNewPassword,首先根据用户名查询memberinfo对象,如果返回是null,就抛出异常。如果不为null,则判断密码提示问题和密码提示答案是否一致,如果是,产生一个新密码返回,如果不一致,抛出异常
1. 输入用户提示问题和提示答案
2. 业务逻辑层判断提示是否正确,如果不正确,提示用户输入有误;如果正确:
a) 在业务逻辑层,使用产生随机数的类,产生6位的随机数返回给用户(alert),同时将该随机数MD5加密作为用户登录密码保存到数据库中。
b) 在业务逻辑层,使用产生随机数的类,产生6位的随机数返回给用户(发送到用户注册时提供的邮箱中),同时将该随机数MD5加密作为用户登录密码保存到数据库中。
c) 在业务逻辑层,使用产生随机数的类,产生6位的随机数返回给用户(发送到用户注册时提供的手机号中),同时将该随机数MD5加密作为用户登录密码保存到数据库中。

1.1.2.4 创建个人空间
如何上传图片:1.使用html标签上传图片的标签<input type=’file’ name=’icon’> 在form中需要进行相关属性的设置<form action=”” method=”post” enctype="multipart/form-data"/>其中method和enctype属性必须按照给定的形式设定。
2.在action中接收这个图片的类型是File类型
3.在createSpaceAction中,拿到File对象,获取输入流,取到客户端上传上来的文件内容,并通过输出流写到服务器端的本地文件中。
然后,创建一个memberspace对象,指定icon即头像路径,也就是我们刚才保存文件的路径,将这个对象设定到memberinfo对象中,调用业务逻辑方法modifyMemberinfo,就可以给这个会员创建一个个人空间

1.1.2.5 修改个人信息
会员在modify.jsp页面上输入要修改的信息,点击提交,则需要将修改的信息保存到数据库,并且还需要将session范围内的memberinfo对象里面的属性值与数据库中的值同步
1.1.2.6 查看个人空间
当点击某个会员的昵称,交给spaceAction处理,在这个action中判断这个会员是否已经是创建个人空间,如果是,则把这个会员的memberinfo对象放到request范围内,然后转到space.jsp进行显示,如果还没有创建,则转到nospace.jsp提示用户
1.1.2.7 好友速配
1. 随机匹配一个好友,在mathFriend.jsp上点击<<速配一名好友>>,系统将随机从数据库中查找一名会员,并且在页面上进行显示
2. 按要求进行检索,在matchFriend.jsp上选择相应的条件,点击<<开始检索>>,系统将从数据库中查找条件符合的所有会员,并且在页面上进行显示
1.1.2.8 好友名单
显示所有好友:查询friendrecord表,把当前会员的好友查询出来,并且显示。
删除好友:根据id进行删除friendrecord表中对应的记录。
1.1.2.9 黑名单
将会员加入黑名单(也就是在blackrecord表中插入一条记录),如果加入黑名单的会员已经在当前会员的好友名单中,需要先删除这条好友名单.
显示黑名单:查询blackrecord表,把当前会员的黑名单查询出来显示

1.1.2.10 新建短信
需要判断接收者是否存在,如果存在,则在Messagerecord表中插入一条数据,并且提示用户成功,如果不存在提示用户接收方不存在。
1.1.2.11 已接收短信
显示当前会员接收的所有短信(包括新短信和已读短信),并且可以删除某条短信,和查看某条短信的详细信息
1.1.2.12 已发送短信
显示当前会员发送的所有短信(已经删除的除外),并且可以删除某条短信


讨论:1. LoginFilter:实现延迟登陆,即登陆后才能访问
/member/*和/messenger/*
可以通过session中保存的用户信息,判断用户是否登录
2. EncodingFilter:把编码过滤成UTF-8
3. listener:实现统计网站访问量功能, CountListener:创建session将访问量加1



--删除表语句
drop table memberspace;
drop table memberinfo;
drop table graderecord;
drop table pointrecord;
drop table pointaction;
drop table messagerecord;
drop table provinces;


--创建等级表
create table graderecord(
id number primary key,
minpoint number not null,
maxpoint number not null,
gradename varchar2(20) not null,
iconpath varchar2(50) not null
);

--创建会员表
create table memberinfo (
id number primary key,
nickname varchar2(20) not null,
password varchar2(50) not null,
gender varchar2(1) not null,
age number not null,
email varchar2(100) not null,
provincecity varchar2(10),
address varchar2(200),
phone varchar2(50),
passwordquestion varchar2(200),
passwordanswer varchar2(200),
recommender varchar2(20),
point number default 0,
registerdate date,
latestdate date,
status number default 0,
isonline number default 0,
gradeid number,
constraint info_grade foreign key(gradeid) references graderecord(id)
);

--创建好友表
create table friendrecord(
id number primary key,
selfname varchar2(20) not null,
friendname varchar2(20) not null
);

--创建黑名单表
create table blackrecord(
id number primary key,
selfname varchar2(20) not null,
blackname varchar2(20) not null
);

--创建个人空间表
create table memberspace(
id number primary key,
opinion varchar2(200),
runtime varchar2(20),
runplace varchar2(20),
runstar varchar2(50),
runhabit varchar2(50),
cellphone varchar2(50),
icon varchar2(200),
memberid number,
constraint space_info foreign key(memberid) references memberinfo(id)
);

--创建积分动作表
create table pointaction(
id number primary key,
actionname varchar2(20),
point number not null,
description varchar2(200)
);

--创建积分记录表
create table pointrecord(
id number primary key,
nickname varchar2(20) not null,
receivedate date not null,
pointactionid number ,
constraint record_action foreign key(pointactionid) references pointaction(id)
);

--创建短消息列表
create table messagerecord(
id number primary key,
sender varchar2(20) not null,
receiver varchar2(20) not null,
senddate date not null,
title varchar2(100) not null,
content varchar2(300) not null,
senderstatus number default 0,
receiverstatus number default 0,
status number default 0
);


--建造序列
drop sequence SEQ_COMMON;
create sequence SEQ_COMMON increment by 1 start with 1;


--插入积分动作数据
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(1,'REGISTER',50,N'注册会员');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(2,'RECOMMEND',20,N'推荐会员');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(3,'LOGIN',3,N'登录');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(4,'LOGINDESKHELPER',3,N'登录桌面助手');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(5,'CREATEPERSONALSPACE',25,N'创建个人空间');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(6,'SENDSTICK',25,N'发帖');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(7,'REPLYSTICK',25,N'回帖');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(8,'GOODSTICK',30,N'精华贴');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(9,'SUPERGOODSTICK',60,N'超级精华贴');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(10,'BBSMANAGER',200,N'成为版主');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(11,'REPLYSTICK',5,N'每10个回复帖子楼主+5');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(12,'EDM',10,N'成为版主');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(13,'JOINRUNNING',500,N'参加都市跑活动');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(14,'WINRUNNING1',5000,N'都市跑活动得名次');
INSERT INTO PointAction
(id,ActionName,Point,Description) Values(15,'WINRUNNING2',4000,N'都市跑活动得名次');
commit;

--插入等级记录数据
INSERT INTO GradeRecord VALUES(1,0,300,'业余爱好者','/images/face1.gif');
INSERT INTO GradeRecord VALUES(2,300,700,'跑步小将','/images/face2.gif');
INSERT INTO GradeRecord VALUES(3,700,1200,'跑步健将','/images/face3.gif');
INSERT INTO GradeRecord VALUES(4,1200,1800,'专业运动员','/images/face4.gif');
INSERT INTO GradeRecord VALUES(5,1800,2500,'顶级运动员','/images/face5.gif');
commit;
...全文
679 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
什么都不能 2017-07-22
  • 打赏
  • 举报
回复
呵呵达
a2048 2017-07-21
  • 打赏
  • 举报
回复
楼主你想要达到什么目的?
zhujinbing 2017-07-21
  • 打赏
  • 举报
回复
LZ是想干嘛
  • 打赏
  • 举报
回复
qq_39521094 2017-07-15
  • 打赏
  • 举报
回复
楼主,你好,能不能看看源代码?
李德胜1995 2017-06-29
  • 打赏
  • 举报
回复
「已注销」 2017-06-29
  • 打赏
  • 举报
回复
楼主是昆山杰普软件培训出来的???
点滴寸土 2017-06-26
  • 打赏
  • 举报
回复

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧