JAVA语言课程设计报告hpu08信管BBS.doc

上传人:文库蛋蛋多 文档编号:2387007 上传时间:2023-02-17 格式:DOC 页数:25 大小:422KB
返回 下载 相关 举报
JAVA语言课程设计报告hpu08信管BBS.doc_第1页
第1页 / 共25页
JAVA语言课程设计报告hpu08信管BBS.doc_第2页
第2页 / 共25页
JAVA语言课程设计报告hpu08信管BBS.doc_第3页
第3页 / 共25页
JAVA语言课程设计报告hpu08信管BBS.doc_第4页
第4页 / 共25页
JAVA语言课程设计报告hpu08信管BBS.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《JAVA语言课程设计报告hpu08信管BBS.doc》由会员分享,可在线阅读,更多相关《JAVA语言课程设计报告hpu08信管BBS.doc(25页珍藏版)》请在三一办公上搜索。

1、JAVA语言课程设计报告题 目:设 计 者: 专业班级: 学 号:指导教师: 2011年 11 月 28 日河南理工大学计算机学院1、系统需求分析1.1系统名称:hpu-08-信管BBS1.2系统介绍: 本bbs系统,主要有以下几个部分:用户注册、用户登录、浏览帖子、发表新帖、回复帖子。(1) 非论坛用户即普通游客,只能浏览帖子、没有权限对帖子进行回复、或者发表新帖。(2) 论坛用户拥有,发表新帖以及回复帖子的特权。(3) 帖子的浏览实现了分页浏览、整个论坛按主题分为多个模块儿,用户可以根据感兴趣的主题浏览各个模块儿帖子。1.3开发背景大约是从1991年开始,国内开始了第一个BBS站。经过长时

2、间的发展,直到1995年,随着计算机及其外设的大幅降价,BBS才逐渐被人们所认识。1996年更是以惊人的速度发展起来。国内的BBS站,按其性质划分,可以分为2种:一种是商业BBS站,如新华龙讯网;另一种是业余BBS站,如天堂资讯站。由于使用商业BBS站要交纳一笔费用,而商业站所能提供的服务与业余站相比,并没有什么优势,所以其用户数量不多。多数业余BBS站的站长,基于个人关系,每天都互相交换电子邮件,渐渐地形成了一个全国性的电子邮件网络China FidoNet(中国惠多网)。于是,各地的用户都可以通过本地的业余BBS站与远在异地的网友互通信息。这种跨地域电子邮件交流正是商业站无法与业余站相抗衡

3、的根本因素。由于业余BBS站拥有这种优势,所以使用者都更乐意加入。这里“业余”2字,并不是代表这种类型的BBS站的服务和技术水平是业余的,而是指这类BBS站的性质。一般BBS站都是由志愿者开发的。他们付出的不仅是金钱,更多的是精力。其目的是为了推动中国计算机网络的健康发展,提高广大计算机用户的应用水平国内的BBS站,大多数还是大型综合性BBS站。随着计算机的普及,特别是宽带的普及,BBS的活动将会进一步高涨。但是,随之而来对专注于领域方面的BBS将会慢慢增加需求。尽管BBS站台的数量在不断增长,但BBS的发展过程,也出现了一些问题。由于国内使用的BBS架站软件,都是从国外引进的,因此没有必要的

4、中文说明。虽然一些热心的站长翻译了一些资料,但是仅靠这些是远远不够的。另外,有些站台的设立是相互抄袭,所以在结构上难免有雷同之处。1.4. 系统面向的用户群体 本系统为hpu-08-信管所开发。互联网正在融入我们的生活,网络提供给我们的不只是一个获取信息的来源,而且还是一个可以相互交流的空间,网上论坛正是一种供人们进行交流的网络空间, 影响和改变着我们的生活。系统的建成无疑会为广大读者和管理者提供极大的帮助。本套论坛的优点在于它具有强大的可扩展性和可维护性,非常适合网民创建自己的中小型BBS论坛!1.5开发环境 MyEclipse9.0+MySQL5.1+Tomcat7.0.22系统总体设计2

5、.1 系统功能结构图登录页面、注册页面帖子浏览页面Java讨论区工作讨论区大杂烩浏览帖子回复帖子分页浏览浏览帖子回复帖子分页浏览浏览帖子回复帖子分页浏览2.2系统数据流程图3 系统详细设计3.1 数据库实体E-R图设计(1)用户实体E-R图T_userActiveIdUsernamePasswordEmailPicCreatedateCode(2)论坛模块儿表T_boardIdBoardnameStateBoarddesc(3)帖子表T_postClicknumberVreatedateIdTitleContentUidBidVipstateer(3)帖子回复表T_repostVreateda

6、teIdTitleContentUidstateer(4)多图之间的E-R图T_postT_boardT_userT_repost发表回复1n1n3.2数据库表的设计数据库名:mybbs(1)用户表(t_user)(2)论坛模块儿表(t_board)(3)帖子表(t_post) (4)帖子回复表(t_repost)3.3.详细设计(1)实体类:Java是纯面向对象的语言,所有的实体都抽象为类,该系统所包含的实体类有:User.java,Board.java,Post.java,Repost.java。重要代码:User.java:public class User private int id

7、;private String username;private String password;private String email;private String pic;private String createdate;private int active;private String code;public int getId() return id;public void setId(int id) this.id = id;public String getUsername() return username;public void setUsername(String use

8、rname) this.username = username;public String getPassword() return password;public void setPassword(String password) this.password = password;public String getEmail() return email;public void setEmail(String email) this.email = email;public String getPic() return pic;public void setPic(String pic) t

9、his.pic = pic;public String getCreatedate() return createdate;public void setCreatedate(String createdate) this.createdate = createdate;public int getActive() return active;public void setActive(int active) this.active = active;public String getCode() return code;public void setCode(String code) thi

10、s.code = code; (2) 主界面、论坛首页 系统用户登录页、帖子浏览页、回复帖子、发表新帖、(3)数据库与MyEclipse的连接以及相关操作public class DBHelp public static String DRIVER;public static String URL;public static String DB_NAME;public static String DB_PWD;private static BasicDataSource ds = new BasicDataSource();static/静态块Properties properties = n

11、ew Properties();try properties.load(DBHelp.class.getClassLoader().getResourceAsStream(dbconfig.properties);DRIVER = properties.getProperty(driver);URL = properties.getProperty(url);DB_NAME = properties.getProperty(dbname);DB_PWD = properties.getProperty(dbpwd);ds.setDriverClassName(DRIVER);ds.setUrl

12、(URL);ds.setUsername(DB_NAME);ds.setPassword(DB_PWD);ds.setInitialSize(10);ds.setMaxActive(20);ds.setMinIdle(10);ds.setMaxWait(5000);System.out.println(数据库配置文件读取完毕!); catch (IOException e1) e1.printStackTrace();/* * 获取数据库连接 * return */public Connection getConnection() Connection conn = null;try conn

13、 = ds.getConnection(); catch (SQLException e) e.printStackTrace();return conn;public T queryForObject(String sql,RowMapper rm,Object.args)Connection conn = getConnection();PreparedStatement stat = null;ResultSet rs = null;T obj = null;try stat = conn.prepareStatement(sql);for (int i = 0; i args.leng

14、th; i+) stat.setObject(i+1, argsi);rs = stat.executeQuery();if(rs.next() /本质上运行的是实现类中的mapperRow()方法obj = rm.mapperRow(rs);System.out.println(SQL: + sql); catch (SQLException e) e.printStackTrace(); finally close(rs,stat,conn);return obj;public List queryForList(String sql,RowMapper rm,Object.args) C

15、onnection conn = getConnection();PreparedStatement stat = null;ResultSet rs = null;List list = new ArrayList();try stat = conn.prepareStatement(sql);for (int i = 0; i args.length; i+) stat.setObject(i+1, argsi);rs = stat.executeQuery();while(rs.next() /本质上运行的是实现类中的mapperRow()方法T obj = rm.mapperRow(r

16、s);list.add(obj);System.out.println(SQL: + sql); catch (SQLException e) e.printStackTrace(); finally close(rs,stat,conn);return list;public long queryForCount(String sql,Object. args) Connection conn = getConnection();PreparedStatement stat = null;ResultSet rs = null;long num = 0;try stat = conn.pre

17、pareStatement(sql);for (int i = 0; i args.length; i+) stat.setObject(i+1, argsi);rs = stat.executeQuery();if(rs.next() num = rs.getLong(1);System.out.println(SQL: + sql); catch (SQLException e) e.printStackTrace(); finally close(rs,stat,conn);return num;/* * 用于执行insert update delete语句 * param sql *

18、param args * return */public int executeSQL(String sql,Object. args) Connection conn = null;PreparedStatement stat = null;int rows = 0;try conn = getConnection();stat = conn.prepareStatement(sql);for (int i = 0; i args.length; i+) stat.setObject(i+1, argsi);rows = stat.executeUpdate();System.out.pri

19、ntln(SQL: + sql); catch (SQLException e) e.printStackTrace(); finally close(stat,conn);return rows;/* * 关闭数据库连接 * param rs * param stat * param conn */public void close(ResultSet rs,PreparedStatement stat,Connection conn) try if(rs != null) rs.close(); catch (SQLException e) e.printStackTrace(); fin

20、ally try if(stat != null) stat.close(); catch (SQLException e) e.printStackTrace(); finally try if(conn != null) conn.close(); catch (SQLException e) e.printStackTrace();/* * 关闭数据库连接 * param stat * param conn */public void close(PreparedStatement stat,Connection conn) try if(stat != null) stat.close

21、(); catch (SQLException e) e.printStackTrace(); finally try if(conn != null) conn.close(); catch (SQLException e) e.printStackTrace();4软件测试 设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。软件人员使用白盒测试方法,主要想对程序模块进行如下的检查;对程序模块的所有独立的执行路径至少测试一次;对所有的逻辑判定,取“真”与取“假”的两种情况都至少测试一次;在

22、循环的边界和运行界限内执行循环体;测试内部数据结构的有效性等。功能和性能指标满足软件要求和标准的情况下,测试结束5 系统总结经过一个多星期的努力,已经基本完成了hpu-08-信管BBS系统的开发和设计.完成了用户模块,帖子模块的开发,并基本实现了前期所制定的功能.本系统在不断的设计更改过程中,逐渐的成熟。在编写的最后阶段中,参考了一些设计模式,在逻辑代码和数据库连接DAO中抽象出了若干接口,并对其进行了对象的依赖注入,大大的减少了模块之间的耦合,使系统具有很高的灵活性和可维护性。6系统设计心得体会通过这次的设计, 加深了对jsp、servlet、以及网站框架搭建,以及面向对象思想的一些理解.对

23、于软件工程方面的设计思想也有了更深一步的理解,只有在不断的实践于学习中,才会得到最丰厚的回报。在本次项目中设计中,Java在原来的基础上有了更深的了解和掌握,能够熟练的对程序进行添加和改写。也能把Java和数据库进行连接。此外还在老师讲解的基础上学会了举一反三,能够根据自己的需求适当的添加一些相关的代码。其次对开发环境myeclipse在原有的基础上有了很深的了解。此外,在开发过程中,也得到了一些教训,必须对每句代码知道是什么意思,做到认真仔细。还需要不断地尝试新的内容。在不懂得地方要多查多看多问。参考文献:1 冯燕奎, 赵德奎. JSP实用案例教程M 清华大学出版社, 2004, 5: 70

24、-1002 王家华 软件工程M东北大学出版社2001年3月303页3 王宜贵 软件工程M 北京:机械工业出版社,2002:20-794 张洪斌 java2高级程序设计M中科多媒体出版社 2001年11月 85-905 Jim Arlow UML2.0 and the Unified ProcessM机械工业出版社 2006年6月 30-406 孙鑫编著Java Web开发详解M电子工业出版社,2006189-2747 林上杰,林康司编著JSP2.0技术手册M电子工业出版社,20043-68 萨师煊,王珊.数据库系统概论(第三版)M.北京:高等教育出版社,1998.9 蔡剑,景楠.Java We

25、b应用开发:J2EE和TomcatM.北京:清华大学出版社,2004.附录:程序清单PostDao.java:public class PostDao private DBHelp db = new DBHelp();public int save(Post post) String sql = INSERT INTO t_post(title,content,createdate,uid,bid,clicknum,vip,state) VALUES(?,?,?,?,?,?,?,?);return db.executeSQL(sql, post.getTitle(),post.getConte

26、nt(),post.getCreatedate(),post.getUid(),post.getBid(),post.getClicknum(),post.getVip(),post.getState();public long getCountByBid(int bid) String sql = SELECT COUNT(*) FROM t_post AS p WHERE bid = ? ;return db.queryForCount(sql, bid);public Page findByBid(int bid,int currPage,int pageSize) Page page

27、= new Page(getCountByBid(bid), currPage,pageSize);StringBuilder sb = new StringBuilder();sb.append(SELECT p.id,title,content,p.createdate,uid,bid,clicknum,vip,state,u.id as userid,username,PASSWORD,email,pic,u.createdate as usercreatedate, u.active,u.code,(SELECT COUNT(*) FROM t_repost WHERE pid = p

28、.id) AS repostnum );sb.append(FROM t_post AS p );sb.append(LEFT JOIN t_user AS u );sb.append(ON p.uid = u.id );sb.append(WHERE bid = ? order by p.id desc limit ?,?);List list = db.queryForList(sb.toString(), new PostRowMapper(), bid,page.getStartIndex(),page.getPageSize();page.setPageList(list);retu

29、rn page;public Post findById(int id) StringBuilder sql = new StringBuilder();sql.append(SELECT p.id,title,content,p.createdate,uid,bid,clicknum,vip,state,u.id AS userid,username,PASSWORD,email,pic,u.createdate AS usercreatedate, u.active,u.code,(SELECT COUNT(*) FROM t_repost WHERE pid = p.id) AS rep

30、ostnum );sql.append(FROM t_post AS p );sql.append(LEFT JOIN t_user AS u );sql.append(ON p.uid = u.id );sql.append(WHERE p.id = ? );return db.queryForObject(sql.toString(), new PostRowMapper(), id);private class PostRowMapper implements RowMapper public Post mapperRow(ResultSet rs) throws SQLExceptio

31、n Post post = new Post();post.setBid(rs.getInt(bid);post.setClicknum(rs.getInt(clicknum);post.setContent(rs.getString(content);post.setCreatedate(rs.getString(createdate);post.setId(rs.getInt(id);post.setState(rs.getInt(state);post.setTitle(rs.getString(title);post.setUid(rs.getInt(uid);post.setVip(

32、rs.getInt(vip);post.setRepostnum(rs.getInt(repostnum);User user = new User();user.setActive(rs.getInt(active);user.setCode(rs.getString(code);user.setCreatedate(rs.getString(usercreatedate);user.setEmail(rs.getString(email);user.setId(rs.getInt(userid);user.setPassword(rs.getString(password);user.se

33、tPic(rs.getString(pic);user.setUsername(rs.getString(username);post.setUser(user);return post;public int update(Post post) String sql = update t_post set clicknum = ? where id = ?;return db.executeSQL(sql, post.getClicknum(),post.getId();RepostDao.java:public class RePostDao private DBHelp db = new

34、DBHelp();/* * 保存回帖 * param repost * return */public int save(RePost repost) String sql = INSERT INTO t_repost(title,content,createdate,uid,state,pid) VALUES(?,?,?,?,?,?);return db.executeSQL(sql, repost.getTitle(),repost.getContent(),repost.getCreatedate(),repost.getUid(),repost.getState(),repost.ge

35、tPid();/* * 根据主帖ID查找对应的回帖列表 * param pid * return */public List findByPid(int pid) StringBuilder sql = new StringBuilder();sql.append(SELECT r.id,title,content,r.createdate,uid,state,pid,u.id AS userid,username,PASSWORD,email,pic,u.createdate AS usercreatedate,active,CODE );sql.append(FROM t_repost A

36、S r );sql.append(LEFT JOIN t_user AS u );sql.append(ON r.uid = u.id );sql.append(WHERE r.pid = ?);return db.queryForList(sql.toString(), new RePostMapper(), pid);private class RePostMapper implements RowMapper public RePost mapperRow(ResultSet rs) throws SQLException RePost r = new RePost();r.setId(

37、rs.getInt(id);r.setContent(rs.getString(content);r.setCreatedate(rs.getString(createdate);r.setPid(rs.getInt(pid);r.setState(rs.getInt(state);r.setTitle(rs.getString(title);r.setUid(rs.getInt(uid);User user = new User();user.setActive(rs.getInt(active);user.setCode(rs.getString(code);user.setCreatedate(rs.getString(usercreatedate);user.setEmail(rs.getString(email);user.setId(rs.getInt(userid);user.setPassword(rs.getString(password);user.setPic(rs.getString(pic);user.setUsername(rs.getString(username);r.setUser(user);return r;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号