201771030117-祁甜 实验二 我的项目—《西北师范大学学生疫情上报系统》项目报告

项目 内容
课程班级博客连接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
这个做业要求连接 http://www.javashuo.com/article/p-meyvhbuv-mp.html
个人课程学习目标 学会简单的我的软件项目开发
这个做业在哪些方面帮助我实现学习目标 运用了PSP完成了一个简单的系统开发
项目Github的仓库连接地址 https://github.com/Gu19901212/NewSystem

任务一 陈述学生疫情每日上报子系统使用体验

  因为疫情须要学校要求咱们于天天十点之前填报本身当天的疫情信息,可是第一天的时候遇到了和大多数人都同样的问题就是人数太多致使系统崩溃,可是后来的时候有意识的错峰填报就没有出现过此类问题了。还有一个就是刚刚开始填报的时候须要天天都填写各种信息很是麻烦,这个问题后来也解决了。总的来讲使用体验很好。html

任务二 总结详细阅读《构建之法》第1-2章、结合第2章2.3节所述PSP流程,开发一款你本身心目中的西北师范大学学生疫情每日填报系统

我选择的是第二类开发要求:java

1. 系统可采集学生疫情有效信息;git

2. 系统支持用户在线使用;github

3. 每日只可填报一次,提交后没法修改,每日十点疫情信息填报截止;数据库

4. 各学院指定负责人登陆系统,可查看本学院学生填报的汇总数据,可点击查看学生联系方式、班主任联系方式,学院负责人核实本院全部学生数据后,将数据提交给学校防控办;编程

5. 学校防控办指定负责人登陆《西北师范大学疫情防控信息统计》子系统,可浏览全部学生填报汇总数据清单,经过【导出】可获取疫情数据的EXCEL文件。eclipse

任务三 完成任务2项目开发,将项目源码的完整工程文件提交到本人注册Github帐号的项目仓库中

本项目Github项目仓库https://github.com/Gu19901212/NewSystem模块化

1、需求分析

一、背景函数

  2019年12月末,中国武汉发生新型冠状病毒(2019-nCoV) 感染的肺炎疫情,为遏制疫情蔓延,有效切断病毒传播途径,在中央政府指导下,各级政府部分采起了一系列防控措施: 2020年1 月23 日10时起对武汉“封城”,全国 31个省市也相继实施了严格的防控措施;全国各省市向武汉和湖北派遣医疗队参与救治工做;在全国范围内调配口罩、防御服、药品等急需的医疗资源支援武汉;指导和督促全国范围内拥有医疗物资生产资质的企业尽快恢复生产能力;定向拨付专项财政资金用于疾病防控;从其余省份调集物资保障武汉市民平常生活。工具

  值得一提的是,中国互联网企业在这次疫情防控中发挥了社会治理方面的重要做用。以腾讯为例,围绕应对疫情管控需求开发了十一款产品。其中疫情在线问诊功能,对于减小发热病人之间的相互交叉感染具备重要的做用,患者在家经过互联网向在线医生问诊,减小了病毒传播或感染的风险;谣言粉碎对于公众采起理性态度看待疫情的发展具备重要意义。滴滴出行还在武汉专门组建车队,服务于医护人员的通勤,这在实施交通管制的武汉具备重要做用。此外,还有新型肺炎确诊患者同行程查询工具,用户只须要输入本身所乘坐交通工具的时间和班次,就能够确认是否与被确诊感染者同行,提早作好自我隔离和就诊工做。在疫情防控中,中国互联网企业不只发展壮大,在承担社会责任方面也愈来愈成熟。

  突如其来的疫情咱们没法返回学校,这在必定程度上减小了疫情的传播,可是也给学校的防疫工做带来了难度。学校没法及时了解学生的健康情况,因此开发了学生疫情上报系统,便于学校及时掌握学生的疫情信息。

二、需求分析

(1)学校须要及时掌握学生的疫情信息,在线填报比较方便;

(2)每个人须要完成的工做不一样,系统能够将每一个人要完成的分开。

2、系统功能

3、设计实现

主要的类包括:

(1)BaseDao.java:数据库操做基础类,利用泛型和反射机制来抽象数据库基本的增删该查操做;

(2)CollegeadminServlet.java:各学院负责人查看本学院学生信息;

(3)LoginServlet.java:控制不一样身份的人登陆;

(4)SchoolOfficeServlet.java:学校防疫办获取各学院已经提交的学生信息;

(5)StudentServlet.java:学院负责人查看本学院的疫情信息并提交给学校防疫办;

(6)yiqingServlet.java:学生填报疫情信息以及控制条件。

isEffectiveDate(Date nowTime, Date startTime, Date endTime)函数:控制学生在天天十点之前填报疫情状况,若是在十点之前返回true,不然返回false。

4、测试运行

系统在eclipse中的运行图:

若是登陆身份错误的话会拒绝该用户登陆系统并给出相应提示,一样的密码等错误也会给出相应提示。

一、学生登陆系统

学生填报疫情状况界面:

点击提交按钮后页面提示“提交成功”

当重复提交提交时会提示“你今天已经提交过了,不可重复提交!”

当超过十点提交时会提示“请于天天十点填写!”

二、学院负责人登陆系统

查看本院的学填报状况:

点击提交按钮后会将本院学生填报状况提交给学校防控办,页面提示“success”

查看本院学生的基本信息:

其余学院负责人于此相同

三、学校防控办登陆系统

查看全校已经提交的学院的学生疫情信息,因为只有计算机学院和设计学院的学院负责人向上提交了,因此只能看到计算机学院和设计学院的信息:

5、关键代码

/*判断时间是否在天天十点之前*/
	    //从系统获取当前时间
	    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    	String now =df.format(new Date());	
    	
    	//从系统获取是哪一天
    	SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd ");
    	String start =df2.format(new Date());
    	
    	//从系统获取是哪一天
    	SimpleDateFormat df3 = new SimpleDateFormat("yyyy-MM-dd ");
    	String end =df3.format(new Date());
		String format = "yyyy-MM-dd HH:mm";
        Date nowTime = new SimpleDateFormat(format).parse(now);
        Date startTime = new SimpleDateFormat(format).parse(start+"00:00");
        Date endTime = new SimpleDateFormat(format).parse(end+"10:00");
        System.out.println(isEffectiveDate(nowTime, startTime, endTime));
        if(isEffectiveDate(nowTime, startTime, endTime)){
        	if(studentDao.add(student)){
    			msg = "提交成功";
    		}
        }
        else {
        	    msg="请于天天十点填写!";
        }
		studentDao.closeConnection();
		resp.getWriter().write(msg);
	}
    	
     /**
     * 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
     * @param nowTime 当前时间
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
        if (nowTime.getTime() == startTime.getTime()
                || nowTime.getTime() == endTime.getTime()) {
            return true;
        }
        
        Calendar date = Calendar.getInstance();
        date.setTime(nowTime);

        Calendar begin = Calendar.getInstance();
        begin.setTime(startTime);

        Calendar end = Calendar.getInstance();
        end.setTime(endTime);

        if (date.after(begin) && date.before(end)) {
            return true;
        } else {
            return false;
        }
    }
}

6、存在的问题

  系统的大部分功能都已实现,可是【导出】EXCEL文件没有实现,另外我遇到了一个问题,在学生填报疫情信息的时候须要填报姓名等信息,但其余信息均可以存到数据库中,只有姓名字段没法存入,我试了好多方法都没有解决。

如图所示当学生进行疫情填报的时候没法将姓名属性存入数据库

在yiqingServlet.java中

String name = new String(req.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");

能够获取到JSP页面传过来的name值可是没法存入数据库,其余字段均可以存入。

这个问题如今已经解决:在存储疫情信息的表中老是存不进去第一个属性,因此我设置了一个容许为null的属性,当填报疫情的时候不用填这个属性,默认为null。这样的话姓名属性就能够存入数据库中了,可是具体缘由如今还不太清楚

7、总结

本系统经过如下方法来实现软件设计的“模块化”原则:

(1)制定PSP,严格按照PSP进行每一步的工做;

(2)将数据库的基本操做去不封装在BaseDao.java类中,利用泛型和反射机制来抽象数据库基本的增删该查操做;

(3)每一个身份的人须要完成的工做不同,因此从登录开始就将身份不一样的人分开进行下一步的编程。

(4)将各个功能分开编程,好比验证码生成、学生功能、学院负责人功能等。

8、PSP展现

PSP2.1 任务内容 计划共完成须要的时间(min) 实际完成须要的时间
Planning 计划 30 25
Estimate 估计这个任务须要多少时间,并规划大体工做步骤 30 30
Development 开发 1735 2340
Analysis 需求分析(包括学习新技术) 90 120
Design Spec 生成设计文档 30 20
Design Review 设计复审(和同事审核设计文档) 0 0
Coding Standard 代码规范(为目前的开发制定合适的规范) 20 15
Design 具体设计 30 25
Coding 具体编码 1200 1800
Code Review 代码复审 30 20
Test 测试(自我测试,修改代码,提交修改) 60 90
Reporting 报告 180 165
Test Report 测试报告 30 30
Size Measurement 计算工做量 5 5
Postmortem&Process Improvement Plan 过后总结并提出过程改进计划 60 50

在估计时间和实际用的时间中,我在具体编程用的时间最多也差异最大,由于个人编程能力比较弱,这是因为平时练习很少,下去我会努力提高本身的编程能力。

9、经验

  在以往的学习中虽然接触过比较简单的系统开发但大多都是和同窗一块儿完成的,刚刚开始看见这个做业的时候感受很难,可是仍是硬着头皮作下去了。作着作着就会发现,当你解决一个问题的时候颇有成就感,因此要对本身有信心。在以往的学习中都是一上来就开始编程,就会出现不少问题好比需求不明确需求,对功能理解有误差等,此次采用了PSP,在编程之间作了不少准备工做,就会很大程度上避免这些问题的出现。虽然此次的系统存在一些问题,但我会继续进行改进,争取完成指望的功能。

相关文章
相关标签/搜索