201771030123-王爽 实验二 软件工程个人项目——《西北师范大学学生疫情上报系统》项目报告

项目 内容
课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
这个作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12416880.html
我的课程学习目标 (1)掌握软件项目个人开发流程。
(2)掌握Github发布软件项目的操作方法。
这个作业在哪些方面帮助我实现学习目标 按照计划的PSP熟悉个人软件项目的流程
项目的Github仓库链接 https://github.com/JzyWs/wangS.git

任务2:结合PSP流程进行个人项目开发

项目开发背景:

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

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

   为有效配合防控机构有关疫情信息的采集、统计与排查,我校开发了教职工/学生疫情上报系统,该系统由教职工疫情每日上报、学生疫情每日上报、二级部门疫情每日汇总表、疫情防控填报统计四个子系统组成。实现对我校各类人员基本情况、所在区域及活动轨迹及健康状况的信息收集。师生通过我校企业微信服务大厅访问该系统进行远程信息填报。

项目开发要求:

第一类开发要求:
有一个数据文件,保存了100天 2000 个教职工/学生的所有防疫信息,请设计一个命令行程序, 支持查询某人在某一天的疫情情况, 查询某种数据的周/月的疫情统计情况,并用柱状图显示统计结果。

1:需求分析

  • 非功能性需求
    现在由于新冠状病毒的疫情,各个城市的学校都一致延迟开始时间,但是虽然延迟时间,但学校也希望大家能早日返校,所以在此之前学校也要求我们每天都填写疫情上报表。在所有人都填写了之后,希望能根据学校的要求清晰的查看学生的情况,所以现在可以模拟一个小疫情汇总表,通过100天的2000个人的信息进行操作,得到按各种要求制作的柱状图。
  • 功能性需求
    • 查询某人在某天的疫情情况
    • 查询某种数据的周/月的疫情统计情况,并用柱状图显示结果

2:功能设计

与项目需求分析所要达到的功能有异,我所做的项目能够实现的功能如下:
- 能够按学号查询某个学生的100天的疫情情况,并用柱状图表示。
- 能够查询某天的2000个学生的疫情情况,并用柱状图显示。

3:设计实现

  • 两个文件:test2、test3,两个文件里分别有一个主类:Barchart
    - (说明:由于我在处理读取到的日期数据没法有障碍,并且尝试了很多办法还是没能解决,在后续报告中会展示出来问题所在。所以分开两个文件实现上述功能设计的要求。test2中实现第二个功能,使用文件test.xls。test3中实现第一个功能,使用文件test1.xls)
    • 使用到jxl.jar——用于读取Excel文件中的数据。

      • Workbook book = Workbook.getWorkbook(new File("D: est1.xls"));——在读取Excel中重要的语句
      • String name =sheet.getCell(x, y).getContents().trim();——用于读取Excel文件中第y行、第x列的数据
    • 使用到gnujaxp.jar、jcommon.jar、jfreechart.jar——用于制作柱状图。

      • JFreeChart chart = ChartFactory.createBarChart3D();——用于构造柱形图,填写柱形图上的参数内容
      • CategoryPlot plot=chart.getCategoryPlot();——用于获取图表区域对象。
3.1:设计具体思路
首先数据准备,需要编写小程序来随机产生2000姓名及性别和其他信息,将数据存于Excel文件中(注意:保存的Excel文件后缀名为.xls),这样数据就准备好了。接下来就开始进行实验,将数据按行读取,在读的过程中就判断各项内容,如“是否出现疑似症状情况”内容为“是”,设置临时变量count1自增1。这样再遍历完整个文件之后就完成了各项内容的统计,将统计的几个临时变量传给Dateset中作为数据,接下来就可实现这一天的2000个人的疫情统计柱状图。
其次,跟上述思想相似,一开始输入需要查询的学生的学号,通过在遍历文件的过程中将输入的变量与读取的学号列进行匹配,如果相等就输出信息,并且同时统计各项内容数据,方法同上。这样就可在命令行窗口看到该学生100天的疫情情况,也可以看到这100天内的情况统计柱状图。

4:运行测试

  • 主要类如下:

运行test2中的BarChart可实现统计2000个学生某一天的疫情情况,测试结果如下:


首先,可以看到在控制台窗口可以看到有各个统计项目的具体数据,其次,用java的图形用户界面有由这些数据组成的柱状图。

运行test3中的BarChart可实现查询某个学生100天的疫情情况并绘制柱状图,测试结果如下:


可以看到通过命令行的形式输入学号就可得到该学生在100天内的疫情情况及柱状图。

5:主要代码

/*
该主要代码是用于从Excel中边读数据边进行统计得到柱状图所需要的数据的过程
*/
private static CategoryDataset getDataSet() throws ParseException
	{
	int count1=0;
        int count2=0;
        int count3=0;
        int count4=0;
        Scanner sc = new Scanner(System.in);
        try {
			Workbook book = Workbook.getWorkbook(new File("D:\test1.xls"));
			Sheet sheet =book.getSheet(0);
			int rows =sheet.getRows();
	        int cols =sheet.getColumns();
	        System.out.println("请输入学号:");
    		String Id = sc.nextLine();
    		for(int i=1;i<rows;i++)
    		{
    			String id = sheet.getCell(0, i).getContents().trim();
    			if(id.equals(Id))
    			{
    				String name =sheet.getCell(1, i).getContents().trim();
		        	String sex =sheet.getCell(2, i).getContents().trim();
		        	String date =sheet.getCell(3, i).getContents().trim();
		        	String a1 =sheet.getCell(4, i).getContents();
		            String a2 =sheet.getCell(5, i).getContents();
		            String a3 =sheet.getCell(6, i).getContents();
		            String a4 =sheet.getCell(7, i).getContents();
		            System.out.println(id+"   "+name+"    "+sex+"  "+date+"    "+a1+"  "+a2+"   "+a3+"   "+a4);
		            if(a1.equals("是"))
		        		count1++;
		        	if(a2.equals("是"))
		        		count2++;
		        	if(a3.equals("是"))
		        		count3++;
		        	if(a4.equals("是"))
		        		count4++;
    			}
    		}
	        
	        
		} catch (BiffException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(count1, "是否在武汉", "是否在武汉");
        dataset.addValue(count2, "是否湖北(不含武汉)", "是否湖北(不含武汉)");
        dataset.addValue(count3, "是否有疫情疑似症状", "是否有疫情疑似症状");
        dataset.addValue(count4, "是否已确认被感染", "是否已确认被感染");
        return dataset;
	}

6:遇到的问题

在实验过程中我我遇到的问题有以下几个,有的得到了解决,有的还未得到解决。

1:读取Excel文件

在这里,大家都知道这是用于读取Excel文件的,但是我一开始没有注意到读取的文件类型应该是test.xls,而我们常用的Excel保存时默认后缀是test.xlsx,由于我一开始没有注意,所以导致读取文件失败。后面在网上查询后知道jxl在操作Excel时需要读取的是.xls文件,这很大一部分也是自己的粗心所造成的,以后会更加注意一些细节问题。

2:数据类型的转换

这三个问题均是在读取了Excel文件之后会出现我用来判断是否相等的变量不匹配,一开始以为是数据类型不同,要同为String类型才能比较,所以用了强制类型转换,将两种类型转换,无论是哪一种向另一种转换都行不通,哪怕语法没有错误没有报错但是还是没有结果。通过在网上查询、请教同学之后第一和第二个问题我已经得到解决,第一个问题是在读取那一行的数据时需要这样String id = sheet.getCell(0, i).getContents().trim();后面的.trim()是将这个数据转换成String类型的,这样之后id与输入的Id就可进行比较了;第二个问题是因为我需要判断的内容“是”,一开始我是将“是”这个char类型转换成String类型,或者反过来。这样虽然不会报错,但是没有得到我想要的结果,之后查询过后知道,判断这两个是否相等不能用“==”来判断,需要用a1.equals("是")这样的语句来判断。这两个问题都已解决,但是第三个问题现在还没有解决,无论类型转换还是各种方法都试过了,还是不能解决,所以导致实验的功能没有实现按周/月来绘制柱状图。在后续的学习中还需要去完善这个项目并且完善自己的知识体系!

7:实验总结

在这次实验中由于学习了PSP流程,并且运用PSP流程去严格执行里面的流程实现软件项目,觉得是一次全新的体验,更加了解到了学习软件工程这门课的重要性和一个项目开发的计划和预估有多重要,PSP做好了会让人更加明确整个项目的流程和具体思路,总之PSP真的让我学会了更加规范的去进行软件开发。其次,在这次实验中还收获了用java语言读取Excel文件和绘制柱状图的方法!但是遗憾的是,没能在有限的时间内更加完整的实现项目需要达到的功能。在以后的学习中会更加努力,希望以后会越来越好!

8:展示PSP

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

9:上传项目到Github

原文地址:https://www.cnblogs.com/JZYWS/p/12511836.html