图6.7 用户信息修改
登录用户可以随时查看自己的上传信息,用户上传信息查看:
图6.8 上传信息查看界面
登录用户可以上传自己喜欢的电影,以达到资源共享的目的,用户上传界面:
图6.9用户上传影片
登录用户可以下载自己喜欢的电影,用户下载电影:
图6.10用户下载影片
登录用户进入自己喜欢的电影详细介绍中,用户下载电影:
图6.11 查看下载电影的详细介绍
登录用户下载了电影并保存,用户下载电影:
图6.12下载电影并保存
用户查看到自己喜欢的电影不想下载且网速很好的话就可以在线观看电影,
图6.13用户在线观看影片
用户可以搜索自己喜欢的电影,可以进行模糊查询:
图6.14用户搜索影片
用户写影评,用户可以查看别人电影的评论,以便下载好的电影资源。用户可以根据自己喜好对某个影片发表评论,以便管理员对电影资源的管理:
图6.15用户进行评论
6.5 后台管理
后台管理是每个web工程的重点,后台管理包括了对数据库各个表和存储过程的维护,能够及时管理前台提交的数据。
资源的管理,用于管理员及时的查看及管理前台页面登录用户上传的电影,防止非法资源的加入,并且可以进行删除操作,对非法资源的删除。还可以进行刷新,让影片时时更新。还可以进行新建文件夹,可以重命名资源名称。
图6.16管理员资源的管理
资源的审核,用于管理员及时的查看及管理前台页面登录用户上传电影进行及时审核,防止非法资源的加入,并且可以全选,对所有合法资源进行统一审核。如果资源不合法,可以删除选中的资源:
图6.17管理员资源的审核
没有资源需要审核的页面:
图6.18 资源审核
可以查看管理员自己的电影上传信息:
图6.19 管理员上传信息查看
可以查看管理员自己的个人信息和修改个人信息:
图6.20 管理员个人信息查看及修改
图6.21管理员密码信息的修改
用户/权限管理:用于管理员修改用户的权限和查看用户信息并可以删除用户信息
图6.22管理员对用户权限的修改
可以查看所有登陆用户的详细信息,对这些数据进行维护
图6.23管理员查看用户信息
数据统计:包括资源,访问人数,下载次数统计;并且每个都进行直方图统计和圆饼图的统计:
图6.24数据统计的直方图
图6.25数据统计的圆饼图
图6.26数据统计的说明
评论的管理,用于管理员及时的查看及管理前台页面登录用户的发表的评论,防止非法评论的加入,并且可以进行删除操作,对非法评论的删除。
图6.27管理员进行评论管理
6.6 未注册用户
未注册用户可以搜索电影,下载电影,在线观看电影同登录用户一样。
第7章 系统测试与部署
7.1 系统部署
系统内部测试基本完成之后就直接打包到tomcat17]下并发布系统。系统可以直接用Myclepse6.6发布即可。首先在MyEclipse下进行服务器配置,如下图所示:
图7.1 Tomcat6.5 部署
配置了服务器之后就把系统发布到Tomcat[17]上
图7.1 mms项目发布
7.2 系统测试(System Testing)
系统测试[7]是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,其目的是通过与系统的需求相比较,发现所开发的系统与用户需求不符或矛盾的地方,从而提出更加完善的方案.。它的任务是尽可能彻底的检查出程序中的错误,提高软件系统的可靠性,其目的是检验系统"做得怎样?"。这阶段又可分为三个步骤:单元测试,是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图〕组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。.确认测试,确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。.验收测试,验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。实施验收测试的常用策略有三种,它们分别是: 正式验收、非正式验收或 Alpha 测试、 Beta 测试。
系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。
系统测试的对象不仅仅包括需要测试的产品系统的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。因此,必须将系统中的软件与各种依赖的资源结合起来,在系统实际运行环境下来进行测试。
本系统测试是在编码阶段进行了大量的测试,而且是在网络环境下开发,整个系统是在边开发边测试中进行的,开发完成后更换运行机器进行测试。下面仅列出一些在测试时遇到的问题及解决办法。
总结
在这次系统开发过程中,遭受过无数异常的袭击,许多个设计上的困扰,但最终还是圆满完成了用户需求。同时升级,优化了许多模块,并新增了一些功能,比如与该系统相结合的信息平台。在这次开发过程中我深刻认识到了耐心、细心、规范与坚持的重要性。比如说在遇到BUG时,就需要花很多时间来调试程序,而且经常是从数据库到用户接口再到用户界面几个层次多个组件之间同时进行单步调试,这需要很大的耐心。而调试之后,往往发现出错的只是一些小地方,比如说长文件名不能识别,数组基数为1,空指针异常等等,这些让我深刻认识到耐心与细心的重要性。同时规范也是非常重要的。我第一次编写的代码基本是面向过程的,代码风格混乱,命名无规则,注释没有,模块,类之间混乱,等等这些都很大程度上影响了开发进度,后来查阅一些资料,使用辅助开发工具,将程序全部规范好,甚至将整个系统重写了好几次,最终才达到现在这个水平。另外坚持是最重要的。其实现在回顾起来,这个系统并不算大,也不复杂,因为现在整个系统构架已经非常清晰,各个层,接口功能都已实现,并很好地以一定规范接合在一起,形成一个健壮,稳定的系统。
参考文献
[1] 沈鑫剡.计算机网络[M]清华大学出版社 2008-06-01
[2] 施威铭研究室著.WINDOWS SERVER 2003系统管理宝典[M]中国铁道出版社 2004-01-01
[3] [美]微软公司编著。iis5.0使用参考手册——iis 6.0新增功能详解科学出版社2003-06-01
[4] bertrand meyer著.面向对象软件构造 [M]清华大学出版社1999
[5] (美)Paul R.Reed Jr.使用Visual Basic 和UML开发应用程序[M]北京科海电子出版社 清华大学出版社 2002-06-01
[6] 任胜波 邢琳.软件工程[M] 北京邮电大学出版社 2006-05
[7] 刘先锋,羊四清,许又泉等.数据库系统原理与应用[M] 武汉大学出版社 2008-07
[8] 斯琴巴图;张利峰;胡其吐.SQL技术与网络数据库开发详解[M] 清华大学出版社 2008-12-11
[9] Bruce Eckel著.陈吴鹏、饶若楠译.Java编程思想[M].北京机械工业出版社.2007-2.
[10] 朱福喜.Java语言程序设计. 清华大学出版社出版[M]. 2006-8
[11] 廖义奎.JAVA WEB开发之Struts编程基础与实例精讲[M].北京:中国电力出版社.2006-1.
[12] 章立民研究室.SQlServer2005 数据库开发实战[M].机械工业出版社.2007-1.
[13] 李刚.整合Struts+Hibernate+Spring应用开发详解[M].北京清华大学出版社.2007-11 .
[14] Frank M.Carrano,Walter Savitch著.严蔚敏等译.数据结构与抽象Java语言版[M].北京:清华大学出版社.2004-11.
[15] Steven John Metsker .Design Patterns Java Workbook 机械工业出版社[M] .2006-3-23
[16] Cay S.Horstmann,Gary Cornell.JAVA2核心技术 . 机械工业出版社出版[M].2009-1
[17] The Apache SoftwareFoundation. Apche 开源工具包[DB/OL] . http://www.apache.org/http://www.apache.org/ .2008-08-16/2010-6-01
致 谢
本次毕业设计,感谢我的指导老师何海浪老师以及我们答辩小组的同学,以及现在的项目实习同事。他们严谨的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。使我巩固了以前所学的书本知识,结合实际开发工作,加深了我对软件规范化开发的理解,对我今后的工作将大有裨益。在此,对他致以最诚挚的感谢和最真诚的祝福!
另外感谢通信专业的各位老师对我的教育和培养。还要感谢着四年以来和我一起学习的同学们,正是由于你们的无论是生活还是学习上的帮助和支持,我才能克服一个一个的困难和疑惑。
这次毕业设计不仅是我大学的终点,也是我进入社会开始人生新的设计的起点。在此再次对我莫大帮助的老师和同学表示感谢!感谢所有帮助和爱护我的人!
附录I程序主要源代码
1. 数据库连接的配置文件
userName=sa
password=maotingguo
driverName=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc\:sqlserver\://localhost\:1433;databaseName\=MMS
2. 数据库连接的代码
package com.icss.mms.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 数据库连接
* @author WangHui
*/
public class DBUtils {
private static Connection createConnnection() {
Connection conn = null;
String driverName = PropertiesReader.getDriverName();
String url = PropertiesReader.getUrl();
String userName = PropertiesReader.getUserName();
String password = PropertiesReader.getPassword();
try {
Class.forName(driverName);
conn=DriverManager.getConnection(url,userName,password);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
private DBUtils() {
}
public static Connection getConnection() {
return createConnnection();
}
public static void closeConnnection(Connection conn) {
close(null,null,conn);
}
public static void close(Statement stm ,ResultSet set ,Connection conn) {
if(stm != null){
try {
stm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(set!=null){
try{
set.close();
} catch(SQLException e){
e.printStackTrace();
}
}
if (conn != null) {
try {
if (!conn.isClosed()) {
conn.close();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
3. 对数据库进行增删改查操作
package com.icss.mms.dao;
/**
* sql 包
*/
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
/**
* util 包
*/
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 自定义包
*/
import com.icss.mms.exception.PasswordInvalidException;
import com.icss.mms.exception.UserNameHasExistException;
import com.icss.mms.exception.UsernameIsNotExistException;
import com.icss.mms.util.DBUtils;
import com.icss.mms.vo.UserDTO;
/**
* 对用户信息实行增删改查操作
* @author WangHui
*/
public class UserDAO {
private static final int SIZE =10;
/**
* 构造函数
*/
public UserDAO() {
}
/**
* 查询前10 的用户名和积分
* @return
*/
public static List<UserDTO> queryAll() {
List<UserDTO> userList = new ArrayList<UserDTO>();
Connection conn = DBUtils.getConnection();
String sql="select top 10 user_name, user_score from t_user where role_id not in(select role_id from t_user where role_id < '5') order by user_score desc";
PreparedStatement pstm = null;
ResultSet set = null;
try {
pstm=conn.prepareStatement(sql);
set=pstm.executeQuery();
while(set.next()){
UserDTO user= new UserDTO();
user.setUserName(set.getString(1));
user.setUserScore(set.getInt(2));
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeConnnection(conn);
}
return userList;
}
/**
* 修改密码
* @param user
* @param userid
* @return void
*/
public static void updatepassword(UserDTO user,int userid){
Connection conn = DBUtils.getConnection();
String sql = "update t_user set user_password = ? where user_id = ?";
PreparedStatement pstm = null;
try {
pstm = conn.prepareStatement(sql);
pstm.setString(1,user.getUserPassword());
pstm.setInt(2,userid);
pstm.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
DBUtils.closeConnnection(conn);
}
}
/**
* 修改用户全部信息
* @param user
* @param userid
*/
public static void updateuserInfo(UserDTO user,int userid){
Connection conn = DBUtils.getConnection();
String sql="update t_user
set real_name= ?,birthplace_id= ?,job_id= ?,user_email= ?,user_password = ? where user_id = ?";
PreparedStatement pstm = null;
try {
pstm = conn.prepareStatement(sql);
pstm.setString(1, user.getRealName());
pstm.setInt(2, user.getBirthPlace().getBirthPlaceId());
pstm.setInt(3, user.getJob().getJobId());
pstm.setString(4, user.getUserEmail());
pstm.setString(5, user.getUserPassword());
pstm.setInt(6, userid);
pstm.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
DBUtils.closeConnnection(conn);
}
}
/**
* 修改用户信息
* @param user
* @param userid
*/
public static void updateuser(UserDTO user,int userid){
Connection conn = DBUtils.getConnection();
String sql = "update t_user
set real_name= ?,birthplace_id= ?,job_id= ?,user_email= ? where user_id = ?";
PreparedStatement pstm = null;
try {
pstm = conn.prepareStatement(sql);
pstm.setString(1, user.getRealName());
pstm.setInt(2, user.getBirthPlace().getBirthPlaceId());
pstm.setInt(3, user.getJob().getJobId());
pstm.setString(4, user.getUserEmail());
pstm.setInt(5, userid);
pstm.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
DBUtils.closeConnnection(conn);
}
}
/**
* 通过ID查询单个用户信息
* @param id
* @return user
*/
public static UserDTO queryUserDTOById(int id) {
UserDTO user = null;
String sql = "select * from t_user where user_id = ?";
Connection conn = DBUtils.getConnection();
PreparedStatement pstm = null;
ResultSet set = null;
try {
pstm = conn.prepareStatement(sql);
pstm.setInt(1, id);
set = pstm.executeQuery();
if (set.next()) {
user = new UserDTO();
user.setUserID(set.getInt("user_id"));
user.setUserName(set.getString("user_name"));
user.setRealName(set.getString("real_name")); user.setBirthPlace(BrithPlaceDAO.queryBirthPlaceDTOById(set
.getInt("birthplace_id"))); user.setJob(JobDAO.queryJobDTOById(set.getInt("job_id"))); user.setRole(RoleDAO.queryRoleDTOById(set.getInt("role_id")));
user.setUserPassword(set.getString("user_password"));
user.setUserEmail(set.getString("user_email"));
user.setRegisterTime(set.getTimestamp("reg_date"));
user.setLastLogin(set.getTimestamp("last_login"));
user.setUserScore(set.getInt("user_score"));
user.setUserState(set.getInt("user_state"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtils.closeConnnection(conn);
}
网络多媒体资源管理信息系统的开发(三)由毕业论文网(www.huoyuandh.com)会员上传。