物联网创想秀软件组比赛总结

  比赛在不知不觉中落下帷幕,以下就来总结这次比赛经历、反思其中暴露出来的问题。

一、首先说一下整体架构问题。

  1.   设计论坛系统的目标有两个,一个是初级功能的实现,二是尽可能实现非功能性需求。论坛系统之所以称之为论坛系统,首先,其初级功能势必要过硬(发贴,删帖,评论,回复等),具有良好的可交互性。尽于此却是不够的,非功能性需求一定程度上决定着你的论坛是否出彩出新。如何在有限的时间里,把握好这二者之间的关系是值得考虑的。当然,不仅仅局限于要求上提到的那些功能性,非功能性需求,自己新颖的想法付诸于实践也很可能加分。
  2.   说一下系统实现的架构思路。整体上采取“先搭框架,后填充”的版式。先创建一些jsp或html用以显示相应功能的内容,再创建相应的包、在其中创建对应的servlet用以实现相应的功能。考虑到论坛中帖子的发表、删除、修改、查看等势必要频繁调用数据库中的数据,我们在这里创建一个opendatabase的jsp用以打开数据库链接,创建Connection Statement Resultset等对象。以此,可以避免后续冗余的代码。

二、 下面是分部功能实现中遇到的问题及反思。

  1. 此块说一说我主要写的帖子部分。首先,是发帖模块的servlet
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		request.setCharacterEncoding("UTF-8");
    		response.setCharacterEncoding("UTF-8");
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		// Mysql 的驱动
    		// 先定义变量,后使用和关闭
    		Connection conn = null;// 数据库连接
    		Statement stm = null;// 数据库表达式
    		ResultSet rs = null;// 结果集
    		String sql;
    
    		// 2. 获取数据库的连接
    		try {
    			conn = java.sql.DriverManager.getConnection(
    			"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8","root", "123456");
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		// root是用户名,密码为空
    		// 3. 获取表达式
    		try {
    			stm = conn.createStatement();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		PrintWriter out = response.getWriter();
    		
    		
    		String name = request.getParameter("name");
    		String email = request.getParameter("email");
    		String subject = request.getParameter("subject");
    		String content = request.getParameter("content");
    		int year, month, day, hour, minute, second;
    		String time;
    		GregorianCalendar calendar;
    		calendar = new GregorianCalendar();
    		year = calendar.get(Calendar.YEAR);
    		month = calendar.get(Calendar.MONTH) + 1;
    		day = calendar.get(Calendar.DAY_OF_MONTH);
    		hour = calendar.get(Calendar.HOUR_OF_DAY);
    		minute = calendar.get(Calendar.MINUTE);
    		second = calendar.get(Calendar.SECOND);
    		time = year + "年" + month + "月" + day + "日" + hour + ":" + minute
    				+ ":" + second;
    		/*name = convert(name);
    		subject = convert(subject);
    		content = convert(content);
    		content = Replace(content);*/
    		HttpSession session=request.getSession();//创建一个session实例
    		
    		String username = session.getAttribute("username").toString();
    		sql = "insert into discuss(name,email,subject,content,time,username,id,great)values('"
    				+ name
    				+ "','"
    				+ email
    				+ "','"
    				+ subject
    				+ "','"
    				+ content
    				+ "','" + time + "','" + username + "',"+ null +","+'0'+")"; 
    		try {
    			stm.executeUpdate(sql);
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} //插入数据库中
    		response.sendRedirect("index.jsp");
    		out.flush(); 
    		out.close();
    	}
    
    可以看到,自己去写的时候并没有想到用已经include 的opendatabase的jsp,而是又写了一遍打开数据库的部分,极其难看。其次,是如果没有成功插入的处理方法没有考虑,让它跳转到一个专门显示错误,具有报错信息的(比如)fail.jsp可能会更好一些。发帖部分还是用form表单传值,学一下用ajax异步传值就能把各块分开,使用户获得更好的体验。
  2.   接下来是帖子的显示页面questionAnswer.jsp,这部分样式设计分布感觉还是勉强可以接受,模糊查询那一块的自动补齐还可以是做的更科学,比如数据源的扩大,不只是写死的一个数组,而是可以调一下数据库,都能有所提高。
  3. 查看个人发帖的这一部分,就感觉设计的不是那么走心,样式没想到又特别好的,于是沿用了之前questionAnswer.jsp的这一块版式,不灵动,如果个人帖子发的少了,还会有大片的空缺。物联网创想秀软件组比赛总结_第1张图片
  4. 除上述之外,还可以设计一些小功能,不求一点不落但求做什么像什么。比如增加收藏帖子功能,按照点赞数加精品贴等等,都是可以纳入实践的范畴之内。

三、总结展望

     这次比赛收获了很多,同时也暴露了很多不足与问题所在。必须承认,我不是一个很OK的队长,在功能所需时间的分配上还是有精进的地方,一些小功能的设计的思路也没有完全打开,队员泄气的时候要更加鼓励队员,团队的力量是无穷的,永远胜过单干的蛮力。这次结果不尽人意的时候就应当适时作出反思,查漏补缺,不断完善自己,争取下次比赛创佳绩吧!

   

你可能感兴趣的:(比赛反思)